Horizon: Una API REST para Stellar

Ernesto Garcia N
Blockchain Academy Mexico
6 min readJun 18, 2020

--

¡Bienvenido a un nuevo artículo de Code and Hacks! La colección de artículos, vídeos y sesiones en vivo que estamos creando con el objetivo de fortalecer la conversación sobre el proyecto Stellar, así como crear una comunidad interesada aprender y trabajar dentro de esta red.

En el artículo de hoy aprenderemos a usar el API de Horizon, que es una interfaz para conectarte con la infraestructura de nodos de la red, y con la que podrás acceder al poder de Stellar. Así que ponte cómodo y comencemos.

Recordemos que Stellar es un plataforma que desde el 2014 conecta bancos, sistemas de pago y personas. A su vez, se integra para mover dinero de manera rápida, confiable y sin costo. Las transacciones de esta plataforma pueden realizarse en menos de cinco segundos y sin apoyo de terceros.

Un vistazo al horizonte

El desarrollo de software implica, más allá de la lógica y la implementación, el desarrollo de mecanismos para interactuar con sus funcionalidades, lo cual, por los siglos de los siglos, nos ha obligado a desarrollar para usuarios finales, que requiere de una interfaz con la que puedan comunicarse.

Sean humanos o máquinas las que estén en el lugar del usuario final, una interfaz es necesaria, y, ¿no es acaso obvio?, en realidad, como desarrolladores utilizamos interfaces en todo momento. A pesar de que no siempre se trate de interfaces gráficas, solemos interactuar a través de comandos, utilizando URLs o exponiendo endpoints para los servicios que desarrollamos.

A pesar de parecer obvio, algo en lo que, en mi opinión, han fallado otros proyectos de Blockchain, es poner claridad en la forma en la que nos comunicamos con sus funcionalidades.

Y eso, es precisamente la razón por la cual suelo escuchar preguntas de desarrolladores nuevos en el tema, o de entusiastas de la tecnología, que son más o menos de ésta índole:

  • Pero, ¿cómo uso blockchain?, ¿dónde lo instalo?
  • ¿Con qué lenguaje programas el blockchain?
  • Y entonces, ¿cómo haces un blockchain?

Las preguntas no son incorrectas, sólo requieren de contexto, y ese contexto es difícil de explicar cuando el procedimiento es, -en lo general-, descargar el software de un nodo, correrlo, soportar la gran cantidad de información que tiene, y empezar a hablarle en el dialecto que sea que te permita entenderlo.

Bajo ese contexto, surge la pregunta, ¿podemos tener un lenguaje semi-universal para comunicarnos con la infraestructura?.

Spoiler alert: Oh yeah baby.

Horizon al rescate

El equipo de la Stellar Development Foundation se encarga, no sólo de proveer, si no de mantener, actualizar y adaptar para uso general, el servicio Horizon, el cual es una API REST, que expone un conjunto de rutas (o endpoints) a los cuáles puedes realizar peticiones HTTP, y obtener datos de la red Stellar.

Horizon es el bifrost entre Stellar Core, que es el software con el que puedes correr un nodo de Stellar, y las aplicaciones que integran la tecnología detrás. Es como el puente que conecta ambos mundos, de forma sencilla, y utilizando prácticas masomenos estándar para la comunidad.

Bifrost (el puente depelícula de Thor)

Con Horizon puedes crear cuentas, enviar transacciones, revisar el estatus de distintas cuentas, y suscribirte a eventos específicos o streams de datos.

Cabe destacar que, Horizon tiene conexión a la red principal, tanto como a la testnet, así que es perfecto para que puedas hacer tus primeras pruebas.

De lo general a lo particular

Siendo horizon un elemento intermedio entre Stellar Core y tu aplicación, y teniendo un funcionamiento relativamente estándar, esto abre la puerta para que se puedan crear herramientas particulares para cada lenguaje de programación, con los cuales se vuelve todavía más fácil interactuar con la red.

Existe una lista de SDKs que son oficialmente mantenidos por la SDF, pero también hay proyectos open source mantenidos por la comunidad, y que tienen el objetivo de proveer herramientas de dominio particular para interactuar con Horizon.

Las oficiales de la Stellar Development Foundation son:

Mientras que las que son mantenidas por miembros de la comunidad son:

Todas ellas puedes utilizarlas en tus proyectos propios para integrar fácilmente tu aplicación con Horizon.

Referencia del API y Stellar Laboratory

Anteriormente hablamos de las herramientas de Stellar en nuestro artículo pasado. No obstante, ahora es buen momento para retomarlo, dado que será la herramienta de uso común para trabajar con el API.

A través del laboratory puedes realizar pruebas de los endpoints, utilizando la red principal y la testnet, aquí puedes crear una cuenta, fondearla con el friendbot e interactuar con dicha cuenta, entre otras cosas

Por otro lado, si necesitas referencia específica de los parámetros, métodos y los formatos de retorno de Horizon, puedes revisar el API Reference aquí.

Interactuando con Horizon

Para fines demostrativos, vamos a realizar una interacción básica, creando una cuenta con el Laboratory y obtener sus datos utilizando directamente cURL, para no entrar en el uso de ningún SDK específico.

Para crear tu par de llaves, sólo es necesario generarlas en Laboratory haciendo click en generate pair. Recuerda, si vas a usar estas llaves de forma seria, es obligatorio que ocultes las llaves definitivamente, las utilizadas aquí son para fines educativos:

Después, haremos un request al friendbot para recibir XLM en la testnet, con los que podemos operar posteriormente. Yo lo hice desde mi navegador, pero puedes hacerlo desde la terminal o el laboratory.

Finalmente, hacemos un request al endpoint de /account, que sigue la siguiente especificación, la cual puedes encontrar acá:

Formamos nuestro request utilizando la testnet (https://horizon-testnet.stellar.org):

Y listo, aquí tienes la información resultante:

Ahora que ya sabes usar de forma general el API de Horizon, te invito a que explores los distintos endpoints que ofrece, y que los pruebes en el Laboratory, además, puedes intentar hacer algún proyecto personal con la información que provee.

En conclusión, el API de Horizon es un puente excelente entre tu aplicación y la red de Stellar, que facilita hacer pruebas y conectarte para realizar todas las operaciones posibles de la red, para aprovechar todo su potencial. Es sólo cuestión de creatividad para que puedas convertir esto en conocimiento accionable.

¡Te invito a que lo hagas!

-E

--

--

Ernesto Garcia N
Blockchain Academy Mexico

Ethereum Developer @OpenZeppelin | Intern twice @Google | Blockchain Development Teacher @blockdemy and @platzi