La rama main
de advertencia ahora está rastreando V2 . Esta nueva versión es una revisión completa de la tubería de procesamiento, múltiples cambios de ruptura. Si está buscando V1 , puede cambiar a la rama de soporte a largo plazo llamada lts/v1
Tenemos herramientas para "explorar" la cadena de bloques Cardano, que son útiles cuando sabes lo que estás buscando. Argumentamos que hay un caso de uso diferente y complementario que es "observar" la cadena de bloques y reaccionar a patrones de eventos particulares.
Oura es una implementación nativa de óxido de una tubería que se conecta a la punta de un nodo Cardano a través de una combinación del miniprotocolo de OuroBoros (utilizando un zócalo UNIX o portador TCP), filtra los eventos que coinciden con un patrón particular y luego envían un Carga útil sucinta y autónoma a observadores enchufables llamados "sumideros".
Consulte nuestra documentación para obtener información detallada sobre cómo comenzar a trabajar con Oura .
El nombre de la herramienta está inspirado en el comando tail
disponible en sistemas similares a Unix que se utiliza para mostrar el extremo de la cola de un archivo de texto o datos con tuberías. El nombre del protocolo de consenso de Cardano, Ouroboros , es una referencia al símbolo antiguo que representa una serpiente o dragón que come su propia cola, lo que significa "comer cola". "Oura" es la antigua palabra griega para "cola".
En esta grabación terminal, podemos ver unos pocos minutos de salida viva desde un nodo Testnet conectado al sumidero del terminal.
ver asciicast completo
La biblioteca Pallas realiza todo el trabajo pesado requerido para comunicarse con el nodo Cardano, que proporciona una implementación del multiplexor de Ouroboros y algunas de las máquinas de estado mini-protocolo requeridas (Chainsync y Localstate en particular).
La tubería de datos es implementada por la biblioteca de la junta que proporciona un marco para la creación de aplicaciones organizadas por eventos. Bajo esta abstracción, cada componente de la tubería (también conocido como: etapa ) se ejecuta en su propio hilo y se comunica con otras etapas enviando mensajes (muy similar al patrón del actor ).
Puede ejecutar oura watch <socket>
para imprimir datos TX en el terminal desde la punta de un nodo local o remoto. Puede ser útil como una herramienta de depuración para los desarrolladores o si solo tiene curiosidad por ver lo que está sucediendo en la red (por ejemplo, ver Airdrops a medida que suceden o los oráculos que publican nueva información).
Similar a la conocida herramienta DB-Sync proporcionada por IOHK, OUDA se puede usar como un demonio para seguir un nodo y generar los datos en una tecnología de almacenamiento de datos diferente más adecuada para su caso de uso final. La principal diferencia con DB-Sync es que Oura fue diseñado para una fácil integración con tuberías de transmisión de datos en lugar de bases de datos relacionales.
Dada su pequeña huella de memoria / CPU, Oura se puede implementar de lado a lado con su nodo Cardano incluso en entornos con recursos limitados, como Raspberry PI.
Oura que se ejecuta en modo daemon
se puede configurar para usar filtros personalizados para identificar patrones de transacción particulares y activar acciones cada vez que encuentre una coincidencia. Por ejemplo: envíe un correo electrónico cuando aparezca una combinación de política / activo en particular en una transacción; Llame a una función AWS Lambda cuando una billetera delegue a un grupo en particular; Envíe un http-llame a un webhook cada vez que aparece una clave de metadatos en la carga útil TX;
Si las características disponibles de liderazgo no satisfacen su caso de uso particular, Oura se puede utilizar una biblioteca en su proyecto de óxido para configurar tuberías hechas a medida. Cada componente (fuentes, filtros, sumideros, etc.) en Oura tiene como objetivo ser autónomo y reutilizable. Por ejemplo, se pueden construir filtros y sumideros personalizados mientras reutilizan las fuentes existentes.
Oura es en su esencia solo una tubería para procesar eventos. Cada etapa de la tubería cumple un papel diferente:
Etapas de origen: están a cargo de extraer datos de la cadena de bloques y mapear los bloques sin procesar en eventos más pequeños y más granulares. Luego, cada evento se envía a través del puerto de salida de la etapa para su posterior procesamiento.
Etapas de filtro: reciba eventos individuales de la etapa fuente y aplique algún tipo de transformación a cada uno. Las transformaciones aplicadas dependerán del caso de uso particular, pero generalmente girarán en torno a seleccionar eventos relevantes y enriquecerlos con información adicional.
Etapas de sumidero: reciba los eventos finales de la etapa de filtro y envía la carga útil a algún sistema externo, base de datos o servicio para su posterior procesamiento.
Tipos de datos
Bloques de CBOR
CBOR TXS
Modelo de Oura V1 (para compatibilidad con retroceso)
TXS analizado (objetos estructurados con todos los datos TX)
JSON genérico (cualquier tipo de valores JSON)
Fuentes
sincronización de cadena desde el nodo local
Cadena sincronización + fetch de bloque desde el nodo de relé remoto
Cubo S3 con datos de bloque
Tema de Kafka con datos de bloque
Fregaderos
Tema de kafka
Índice de elasticsearch / flujo de datos
Archivos de registro giratorios con compresión
Redis Streams
AWS SQS Queue
AWS Lambda Llamada
Objetos de AWS S3
Pubsub GCP
Función de nube GCP
Azure hundidos
Webhook (publicación HTTP)
Terminal (solo apéndice, en forma de cola)
Filtros
Bloque de análisis / tx cbor
Dividir el bloque en TXS
Seleccione TXS mediante reglas coincidentes (dirección, metadatos, políticas, etc.)
Enriquecer los datos de TX con entradas relacionadas
Código mecanografiado personalizado (usa Deno)
Complemento WASM personalizado
Buffer de reversión con acciones de compensación
Otro
Cursor de cadena con estado para recuperarse de los reinicios
Etapa de búfer para sostener bloques hasta que alcancen una cierta profundidad
Métricas de tuberías para rastrear el progreso y el rendimiento
Oura lee eventos de bloques / transacciones acuñado. El soporte para consultar el MEMPOOL aún no se ha implementado.
Todas las contribuciones son bienvenidas, pero lea la guía contribuyente del proyecto antes de comenzar a codificar.
Este proyecto tiene licencia bajo la licencia Apache-2.0. Consulte el archivo de licencia para obtener más detalles.