Artículo de Blog

Introduciendo Horizon 1.0

Autor

Adolfo Builes

Fecha de publicación

Horizonte

API

Horizon, la API de Stellar de código abierto, ha recorrido un largo camino desde su inicio en 2015. A lo largo de 24 versiones menores y docenas de lanzamientos de parches, hemos agregado constantemente características, mejorado la estabilidad y aumentado la eficiencia. Hoy, sin embargo, marca un nuevo hito en el desarrollo de Horizon: hoy estamos introduciendo Horizon 1.0, la primera mayor versión de Horizon.

Es un gran día, así que pensamos que era un buen momento para retroceder y hacer balance de dónde viene Horizon y hacia dónde va. ¿Qué es Horizon de todos modos? ¿Qué hace que esta sea una versión mayor? ¿Por qué debería importarte? Sigue leyendo para obtener respuestas.

¿Qué es Horizon?

Horizon es un servidor de API HTTP que facilita a las personas interactuar con la red de Stellar sin tener que preocuparse por los detalles de bajo nivel. Expone múltiples puntos finales que están optimizados para permitirte hacer cosas como:

  • Enviar una transacción a la red
  • Leer información sobre el estado actual del libro mayor (como el saldo de una cuenta)
  • Explorar datos históricos (como las transacciones que una cuenta ha enviado a la red)

Si fuéramos a tomar una foto del universo Stellar, se vería así:


Horizon se sitúa entre un producto o servicio construido sobre Stellar (billetera, emisor de activos, proveedor de pagos) y un nodo de Stellar Core.

Ese nodo de Stellar Core es parte de una red peer-to-peer: se coordina con otros nodos para validar transacciones y mantener el estado actual del libro mayor. Sin embargo, no está optimizado para interacciones de desarrolladores, especialmente para consultas. Las consultas no optimizadas pueden realmente ralentizar un nodo, lo que, en el peor de los casos, podría llevarlo a perder el rastro del consenso.

Horizon, por otro lado, está diseñado para permitir a los desarrolladores enviar transacciones y consumir datos de la red de manera eficiente. Toma datos XDR de Stellar-Core y los decodifica a JSON, lo cual es mucho más fácil de manejar. Los SDKs de Stellar suelen estar configurados para sondear los puntos finales de Horizon, por lo que los proyectos que se construyen sobre Stellar no están constantemente haciendo preguntas a Stellar-Core. Eso significa que Stellar-Core puede concentrarse en el arduo trabajo del consenso y la ratificación del libro mayor. Horizon, mientras tanto, puede concentrarse en proporcionar respuestas que son eficientes y ergonómicas.

Enviar una transacción a la red a través de Horizon es en realidad bastante sencillo: envías la transacción a Horizon y este la proxy a un nodo de Stellar Core.

Facilitar la lectura del estado actual del libro mayor o explorar datos históricos requiere más orquestación, y ahí es donde Horizon ofrece el mayor valor a sus usuarios. A través de un proceso que llamamos ingestión, Horizon toma datos del libro mayor y los normaliza para que sea más fácil acceder y consumir.

¿Qué hace que esta sea una versión mayor?

En agosto, introdujimos un nuevo sistema para manejar la ingestión, y publicamos una entrada de blog explicando el razonamiento detrás de su creación. “Tiene algunas grandes ventajas sobre el antiguo sistema de ingestión”, escribimos en esa entrada, “es más consistente y amigable para los desarrolladores, permite configuración por parte del usuario, y no sobrecarga a Stellar-Core—y eventualmente planeamos pasarnos completamente a él.”

El nuevo sistema de ingestión es una gran salida del antiguo, y después de meses de refinamiento y pruebas en carretera—primero detrás de una bandera de característica, luego en lanzamientos alfa y beta—está listo para el despliegue en producción. Con Horizon 1.0, apagamos el antiguo sistema de ingestión y encendemos el nuevo.

El nuevo sistema de ingestión introduce algunos cambios importantes, lo que es parte de por qué esto es una versión mayor. Puedes encontrar la lista completa aquí. También hace que Horizon sea mucho más ágil. Aquí está el porqué:

Con el antiguo sistema de ingestión, Horizon sabía sobre el pasado, pero no sobre el presente. Cuando le preguntabas a Horizon sobre transacciones históricas (pagos, intercambios), podía encontrar respuestas en su propia base de datos. Si, sin embargo, querías saber algo sobre el estado actual del libro mayor (el saldo de una cuenta, ofertas abiertas), Horizon no sabía: tenía que consultar la base de datos de Stellar-Core. El nuevo sistema de ingestión le da a Horizon acceso a una copia completa del estado del libro mayor construida usando archivos de historia y luego actualizada dinámicamente, lo que significa que ahora puede ver el presente así como el pasado. Como resultado, es más capaz, más eficiente y menos dependiente de Stellar-Core

¿Por qué debería importarte?

Cambiar las entrañas de Horizon significa que puede hacer más sin molestar a Stellar-Core. Como resultado, las consultas son más rápidas y los datos son más consistentes. Esas dos ventajas se cubren extensamente en nuestra entrada de blog anterior, así que realmente no entraremos en ellas aquí. La versión corta: los errores internos del servidor 500 son cosa del pasado, y la búsqueda de rutas es hasta 10 veces más rápida. Además, para los despliegues de clústeres de producción, todas las instancias ahora pueden ingerir simultáneamente, mejorando la fiabilidad a través de la redundancia, y mejorando la eficiencia al distribuir el trabajo de ingestión a través del clúster completo.

El nuevo sistema de ingestión también nos permite hacer más con Horizon, y esta versión incluye algunos puntos finales nuevos que aprovechan ese hecho.

Por ejemplo: en el pasado, era imposible usar Horizon para listar todas las cuentas con una línea de confianza hacia un activo dado. Para muchos emisores de activos eso era un problema real: en el curso de la contabilidad ordinaria, pagos de dividendos o seguimiento de KYC, necesitaban saber cómo identificar direcciones relevantes, y no había una forma fácil de hacerlo.

En Horizon 1.0, el punto final /accounts incluye un nuevo parámetro de consulta ?asset que lista todas las cuentas con una línea de confianza hacia un activo especificado.

La solicitud https://horizon.stellar.org/accounts?asset=NODE:GA7G44QLBUFKR36BWZN3ZC2IOFE4YAVU7DUOTFUKDDVMHG6VFA4SX4AJ devuelve todas las cuentas con una línea de confianza hacia el activo identificado por el código NODE, emitido por la cuenta GA7G44QLBUFKR36BWZN3ZC2IOFE4YAVU7DUOTFUKDDVMHG6VFA4SX4AJ.

Otro ejemplo: en el pasado, era imposible usar Horizon para listar todas las cuentas que una clave pública dada puede firmar. Eso dificulta las cosas si tienes varias cuentas multi-firma: un negocio con varias carteras calientes y una cartera fría tenía que llevar un registro manual de cada dirección, y no había una forma definitiva de asegurarse de que no pasaran por alto una.

Ahora, el punto final /accounts acepta un parámetro de consulta ?signer que lista todas las cuentas que una dirección dada puede firmar.

La solicitud https://horizon.stellar.org/accounts?signer=GD325AAA7IFJ6AW5G6PP5R36VL5NZFJOMJWKPK52RTECVJMODOTE2LX2 devuelve todas las cuentas con GD325AAA7IFJ6AW5G6PP5R36VL5NZFJOMJWKPK52RTECVJMODOTE2LX2 como firmante.

Finalmente, el nuevo punto final /offerste permite encontrar todas las ofertas en la red, y filtrar resultados por vendedor, activo de venta o activo de compra. Si quieres ver pares específicos para un activo dado, o quieres tomar ofertas de una cuenta particular, este es para ti. Puedes usarlo para averiguar qué cuentas están operando en un mercado dado, por ejemplo, o integrarlo en una estrategia de trading que mantiene los bucles cerrados de activos correctamente valorados.

Los ejemplos anteriores dan una vista previa de las cosas que ahora son posibles gracias al nuevo sistema de ingestión. En lanzamientos posteriores, planeamos mejorar los puntos finales existentes y desbloquear más posibilidades para hacer que Horizon te sirva aún mejor.

Avanzando

Planeamos cambiar nuestras instancias públicas de Horizon a 1.0 el 2 de marzo de 2020. Puedes seguir esa actualización y suscribirte a notificaciones en nuestra página de estado. Si estás ejecutando tu propio Horizon, puedes encontrar todos los detalles sobre cómo migrar en nuestra guía de pruebas. Por favor, asegúrate de echar un vistazo a las notas de la versión para información sobre cambios importantes, y para actualizar tu SDK para que sea compatible con la nueva versión.

Trabajar en esta reescritura fue nuestra prioridad número uno durante los últimos meses. Ahora que finalmente está disponible, vamos a continuar mejorando y añadiendo características a Horizon, y a usar el nuevo sistema de ingestión para explorar nuevas soluciones a todo tipo de problemas. Por ejemplo:

Actualmente, Horizon ingiere toda la actividad en la red. Si eres un emisor de activos, eso puede ser excesivo: puede que solo te interese la actividad de tu activo, y puede que no quieras la carga de todos esos datos extra. Estamos empezando a trabajar en una arquitectura de plugins para que puedas ejecutar Horizon manteniendo solo las cosas que son relevantes para ti.

Hasta ahora Horizon ha estado en una fase inestable 0.x por lo que se permitían cambios importantes entre versiones. Sin embargo, pasar a 1.0 y un esquema de depreciación más maduro ha sido muy necesario. A partir de ahora, nos adheriremos a la versión semántica, dándote una mejor manera de mantenerte al tanto de los cambios venideros.

Por último, pero no menos importante, queremos tomar un momento para agradecer a todos los que estuvieron involucrados en este lanzamiento; no podríamos haberlo hecho sin ustedes.