Mejorando el desarrollo con un aprovisionamiento de datos racionalizado y soporte de código abierto
El Equipo de Ingeniería de la Fundación Cardano se ha encargado recientemente de desarrollar una herramienta de aprovisionamiento de datos basada en Java llamada Ledger Sync, que da acceso a los datos de la blockchain Cardano. Ledger Sync pretende alcanzar el mismo nivel de exhaustividad de datos que Cardano DB Sync-también conocido como db-sync-al tiempo que proporciona una opción en un lenguaje de programación bien establecido entre diversas empresas, así como dentro de una amplia base de usuarios. En línea con los esfuerzos de la Fundación por fomentar la madurez del código abierto de Cardano, el entorno se publicará bajo una licencia de código abierto para dotar a los desarrolladores y socios de una herramienta adicional para la indexación de cadenas, aumentando la diversidad del ecosistema de desarrolladores de Cardano.
La Fundación ha optado por publicar el repositorio bajo la licencia Apache 2.0, que permite el uso del entorno en aplicaciones comerciales y no comerciales, así como en otras herramientas de código abierto. La licencia también ofrece seguridad jurídica en forma de derechos de patente para las herramientas construidas sobre o con él, además de para los cambios en el propio entorno que sea necesario señalar, pero no necesariamente una divulgación pública. Este acuerdo garantiza una accesibilidad y seguridad jurídica óptimas tanto para las empresas como para otros desarrolladores y miembros de la comunidad.
Blockchain como estructura de datos
Muchos sistemas basados en blockchain se enfrentan a un reto común: los datos no pueden recuperarse de forma eficiente mediante un acceso aleatorio debido a la organización del almacenamiento en el formato de una lista enlazada. Por ejemplo, para acceder a las transacciones almacenadas en el bloque número 200 de Cardano, una aplicación tendría que iterar sobre los 199 primeros bloques antes de llegar al bloque que contiene la información deseada. Si una red blockchain se expande continuamente, este enfoque se vuelve inviable. Cardano, por ejemplo, tiene actualmente más de 9,5 millones de bloques acuñados en mainnet.
El hecho de que cierta información no se almacene explícitamente en la blockchain presenta no obstante otro desafío. Debido al modelo de contabilidad basado en EUTxO de Cardano, esto se aplica incluso al saldo actual o histórico de una wallet. Para conocer los productos de transacción no gastados (UTxOs) en una wallet, sería necesario rastrear todos los UTxOs que han entrado y salido de la wallet, y luego agregarlos para determinar el saldo final.
Hasta aproximadamente principios de 2022, db-sync había sido la única opción disponible para que los creadores del ecosistema accedieran a los datos de la blockchain Cardano de forma eficiente. No obstante, para llegar a la punta de la cadena, db-sync también requiere el procesamiento de una inmensa cantidad de datos durante la sincronización inicial. Esto hace inviable ejecutar db-sync para todos los proyectos. Además, en muchos casos los proyectos no necesitan todos los datos que ofrece db-sync, una realidad que llevó al desarrollo de los llamados indexadores de cadena con alcance, que permiten a los usuarios especificar con precisión qué datos deben indexarse y estar disponibles para una determinada aplicación. Proyectos como Kupo, Scrolls, Oura y Carp proporcionan a la comunidad diferentes formas de hacerlo.
Además de estos requisitos más técnicos, las empresas también suelen tener necesidades relacionadas con la fiabilidad de estos servicios de suministro de datos. Por lo general, estos requisitos no están relacionados con la implementación real en código fuente, sino con la forma en que funciona dicho sistema. La Fundación Cardano desarrolló Ledger Sync para abordar precisamente ese tipo de requisitos empresariales. Aunque por un lado comparte algunas similitudes con db-sync, ciertas elecciones de diseño hacen que se adapte mejor a las arquitecturas distribuidas, ya que permiten configuraciones de alta disponibilidad. De hecho, el nuevo [explorador] de la Fundación (Cardano Blockchain Explorer) ya ha puesto en uso Ledger Sync como su canal de datos subyacente.
Si los proyectos requieren datos muy específicos de la blockchain Cardano pero pueden renunciar a características como la alta disponibilidad incorporada y la descarga de la consolidación de datos, los indexadores de cadenas modulares como yaci-store, scrolls y Kupo presentan opciones adecuadas. Ledger Sync, por otro lado, equipa a los proyectos con una opción fiable para una capa de datos basada en Java sobre Cardano, especialmente cuando los proyectos necesitan un acceso fiable a los datos relacionados con el blockchain basado en un entorno construido en un lenguaje de programación de fácil acceso.
El diseño inicial de Ledger Sync pretendía alcanzar tres objetivos:
-
- Implementar los miniprotocolos de red en Java para que los datos de la red sean accesibles de forma nativa en el lenguaje de programación Java sin dependencias de otros entornos.
- Desacoplar los pasos de rastreo puro y consolidación de datos para permitir arquitecturas de escalabilidad horizontal, lo que significa que partes del cómputo pueden descargarse en múltiples instancias, como contenedores o servidores, con la consiguiente evaluación del impacto negativo heredado de transferir datos a través de una red en lugar de mantenerlos localmente en un único servidor.
- Implementar una versión independiente del nodo del cálculo de tesorería, reservas y recompensas, que la Fundación ya ha puesto en marcha recientemente (open sourced).
La implementación original que se puso en marcha con la versión beta del explorador de la Fundación cubría los dos primeros puntos. El equipo de ingeniería de la Fundación está trabajando actualmente en el tercer punto como parte de otro proyecto de código abierto.
Viaje al repositorio de Ledger Sync
El equipo alcanzó una serie de aprendizajes durante la primera fase de desarrollo, todos ellos ya abordados en la versión que ahora se publica bajo licencia de código abierto.
Empezamos a desarrollar los miniprotocolos de red en Java desde cero porque, en el momento en que comenzó el proyecto, la conocida biblioteca Yaci no estaba disponible todavía en un estado que considerásemos utilizable. No obstante, sustituimos la anterior implementación de miniprotocolos de red por Yaci en la versión actual para ayudar a impulsar la adopción de este proyecto comunitario. El cambio significa que solo hay que mantener una pila tecnológica Java y estar al día de cualquier cambio en el protocolo.
Para coordinar las tareas entre los distintos servicios -como desacoplar el rastreo del procesamiento posterior y la consolidación de datos-, el equipo utilizó inicialmente Redis y Apache Kafka, una plataforma de datos en flujo de código abierto ampliamente conocida. Aunque este enfoque resulta eficaz y tanto Kafka como Redis ofrecen componentes robustos en una arquitectura distribuida, los despliegues son bastante costosos y pueden llegar a ser engorrosos, especialmente para configuraciones a menor escala. Con la última versión, el equipo ha sustituido la necesidad de Kafka y la ha hecho opcional. Aunque Ledger Sync funciona sin Kafka, los desarrolladores pueden utilizar un mecanismo de eventos in-app puesto a su disposición por Yaci Store y optar por publicar datos en bloque en varias plataformas de mensajería, como Kafka y RabbitMQ, para luego consumirlos desde otra aplicación.
También comenzamos inicialmente con el mismo esquema de base de datos utilizado por db-sync. Este enfoque resultó útil mientras desarrollábamos el explorador de la Fundación en paralelo, ya que permitió que el backend del explorador utilizara datos reales para las pruebas. No obstante, también dio lugar a retos de diseño para Ledger Sync, ya que nos desviamos del enfoque Domain Driven Design y no creamos un esquema construido a medida para la primera versión de Ledger Sync. Aunque el esquema de base de datos de db-sync cumple su propósito, no es compatible con la arquitectura elegida ni con el objetivo de paralelización durante el procesamiento de datos de Ledger Sync. Por lo tanto, actualmente estamos trabajando en el diseño de un nuevo esquema que sustituya al actual.
Además, la mayoría de las adiciones recientes al código fuente incluyen el soporte de la era Conway en Yaci. Esta actualización permite a Ledger Sync, así como al resto de herramientas basadas en Java, trabajar con la última versión del ledger y del miniprotocolo de red.
El equipo de ingeniería de la Fundación también inició una corriente de trabajo para implementar el procesamiento paralelo de bloques múltiples, además de transacciones en bloques individuales durante el proceso de sincronización inicial. Paralelizar estos cálculos no es sencillo, ya que es necesario tener en cuenta las dependencias entre UTxOs, lo que disminuye el rendimiento obtenido de la paralelización. Además, los esfuerzos de desarrollo en curso incluyen ofrecer planos para alojar Ledger Sync en varios escenarios de despliegue, como en configuraciones basadas en Kubernetes o simplemente a través de docker-compose.
El camino por recorrer
Además de sus características técnicas, Ledger Sync viene con un compromiso de la Fundación Cardano para ofrecer un mantenimiento continuo, además de la operación del repositorio como un proyecto de código abierto. Aparte del entorno como biblioteca y herramienta en sí, este esfuerzo tiene como objetivo trabajar con grupos de la comunidad, buscando definir un estándar y una posible implementación de referencia para API de datos descentralizadas en las que Ledger Sync pueda utilizarse como capa de datos subyacente.
Ofrecer una API de datos alojada que garantice una alta disponibilidad, precisión y corrección con un modelo de soporte profesional es un objetivo adicional. Garantizar esto respondería a las necesidades de las organizaciones y empresas, facilitándoles la implementación sin problemas de soluciones blockchain y fomentando así una mayor adopción empresarial. Tal empresa, no obstante, requiere alineación y colaboración con los proyectos existentes. Solo así será posible aprovechar toda la capacidad del ecosistema Cardano ya existente y, al mismo tiempo, garantizar un enfoque que respalde la diversidad de los modelos empresariales emergentes.
La Fundación Cardano anima a todo el mundo a probar Ledger Sync y a colaborar con nuestro equipo a través de Discord o presentando una solicitud de función o un informe de error en el repositorio de Ledger Sync. Esperamos sus comentarios y contribuciones.
Traducción al español de “Accessing Cardano Blockchain Data with Ledger Sync”, escrito por Sebastian Bode, Director de Ingeniería, en noviembre 09 de 2023.
Notas del traductor
- Corchetes del traductor.
- Asuma que todo enlace apunta a un contenido en idioma inglés.
- Indica que el enlace apunta a un contenido en idioma español.