Saltar al contenido principal

Resumen

Este tutorial explica cómo una aplicación puede aprovechar la arquitectura CDP para crear pipelines de metadatos rápidos y livianos del Stellar Ledger utilizando unos pocos paquetes selectos del repositorio de Stellar Go github.com/stellar/go-stellar-sdk, conocidos colectivamente como el SDK de 'Ingestión':

Los paquetes del SDK de Ingestión

  • Paquete utilitario github.com/stellar/go-stellar-sdk/amount para convertir precios de operaciones de transacciones en la red a cadena de texto
  • Paquete utilitario github.com/stellar/go-stellar-sdk/historyarchive github.com/stellar/go-stellar-sdk/support/datastore github.com/stellar/go-stellar-sdk/support/storage con wrappers convenientes para acceder a archivos históricos y evitar aspectos HTTP de bajo nivel
  • github.com/stellar/go-stellar-sdk/ingest proporciona funcionalidad de análisis sobre los metadatos del ledger en red, convierte al modelo más centrado en el desarrollador LedgerTransaction
  • github.com/stellar/go-stellar-sdk/network ofrece configuraciones preconfiguradas convenientes para las redes Testnet y Mainnet
  • github.com/stellar/go-stellar-sdk/xdr una vinculación completa en Golang al modelo de datos de la red Stellar

Configuración del proyecto de Ingestión

Requisitos del proyecto

Para usar este ejemplo de tubería CDP para datos de transacciones en vivo de la red Stellar, necesitarás:

  • Una estación de trabajo de desarrollador con el runtime del lenguaje de programación Go instalado
  • Un IDE para editar código Go, VSCode es bueno si se necesita uno
  • Una carpeta de proyecto Go nueva e inicializada, vacía. mkdir pipeline; cd pipeline; go mod init example/pipeline
  • Alguna familiaridad con el modelo de metadatos del Ledger Stellar. Se define en un formato IDL expresado en código XDR.
  • Docker
  • Cuenta de Google Cloud Platform:

Nuestra aplicación de ejemplo solo está interesada en un pequeño subconjunto del modelo de datos general de la red relacionado con las transferencias de activos desencadenadas por la operación de Pago y define su propio modelo de datos derivado como el objetivo del ejercicio:

::AppPayment
Timestamp: uint
BuyerAccountId: string
SellerAccountId: string
AssetCode: string
Amount: string
}

La aplicación de ejemplo realizará ambas tuberías del CDP. Se requieren un mínimo de dos tuberías para una arquitectura CDP de extremo a extremo completa.

Tubería de exportación de metadatos del Ledger

Esta pipeline debe iniciarse primero, es responsable de exportar metadatos del Stellar Ledger como archivos a un CDP Datastore.

Determinar el Datastore

El Datastore en CDP es una interfaz, que permite múltiples implementaciones que representan diferentes capas de almacenamiento físico que se pueden 'conectar' para exportar y consumir tuberías. Stellar proporciona el [Datastore de GCS] como la primera implementación de Datastore, y este ejemplo elige usar esta implementación existente.

Habrá contribuciones de código abierto para implementaciones en otras capas de almacenamiento de las que elegir a medida que CDP crezca. Si no encuentras una implementación para una capa de almacenamiento que deseas usar, también es posible desarrollar tu propia implementación de Datastore, lo cual está fuera del alcance de este ejemplo, ya que implica un ejercicio de aprendizaje separado que llegará pronto.

Exportando metadatos de la red al Datastore

Usa Galexie, un nuevo programa de línea de comandos CDP para exportar metadatos de red a datastores.

  • Sigue los pasos de configuración de Galexie en la Guía del usuario de Galexie, para configurar detalles específicos del bucket de GCS y la red objetivo.

  • Sigue las instrucciones de ejecución de Galexie con Docker para iniciar la exportación.

    • Para la exportación única de un rango histórico limitado de ledgers, usa append --start <from_ledger> --end <to_ledger>
    • Para una exportación continua de los ledgers anteriores y todos los nuevos ledgers generados en la red, usa append --start <from_ledger>.

Tubería de consumidores de metadatos del Ledger

Una tubería de consumidores recupera archivos del bucket de GCS y los usa como el origen de los metadatos del Ledger en una tubería de procesamiento de datos. Puede haber muchas tuberías de consumidores separadas accediendo a la misma Datastore al mismo tiempo. Cada tubería de consumidores típicamente desempeñará tres funciones distintas de procesadores de flujo:

Adaptador de entrada

La 'fuente de origen' de los metadatos del ledger en una tubería. Este procesador recupera archivos LedgerCloseMeta del GCS Datastore, extrae el LedgerCloseMeta para cada Ledger y lo publica en la pipeline de mensajería.

El SDK de Go proporciona la función auxiliar para consumidores ApplyLedgerMetadata para la recuperación automatizada, eficiente y en búfer de archivos desde el datastore remoto; el código de la aplicación puede aprovechar esto para adquirir datos puros de LedgerCloseMeta desde una función callback.

Transformador

Se suscribe en la tubería para recibir LedgerCloseMeta. Utiliza el paquete Go SDK github.com/stellar/go-stellar-sdk/xdr para analizar el modelo de metadatos del ledger para operaciones de pago y convertirlos en nuevas instancias del modelo de datos de la aplicación AppPayment. Publica AppPayment en la tubería.

Adaptador de salida

Actúa como la terminación de la tubería, se suscribe para recibir ApplicationPayment y publica los datos fuera de la tubería y a un almacén de datos externo, un Socket Publicador de ZeroMQ, que es esencialmente un intermediario de mensajes.

Resumen

Consulta la Aplicación de Ejemplo de Tubería de Ingestión para un ejemplo completo de código de consumidor, que demuestra una tubería de streaming en vivo contra la red Stellar, procesando los metadatos de cada nuevo ledger a medida que se cierra en la red.