Aviso A Filial main
agora está rastreando V2 . Esta nova versão é uma revisão completa do pipeline de processamento, várias mudanças de ruptura. Se você está procurando por V1 , pode mudar para a filial de suporte de longo prazo denominada lts/v1
Temos ferramentas para "explorar" o Cardano Blockchain, que são úteis quando você sabe o que está procurando. Argumentamos que há um caso de uso diferente e complementar, que é "observar" a blockchain e reagir a padrões de eventos específicos.
O OURA é uma implementação nativa de ferrugem de um pipeline que se conecta à ponta de um nó Cardano através de uma combinação do mini-protocolo Ouroboros (usando um soquete UNIX ou portador TCP), filtra os eventos que correspondem a um padrão específico e depois envia um Carga útil sucinta e independente para observadores traváveis chamados "pia".
Verifique nossa documentação para obter informações detalhadas sobre como começar a trabalhar com o OURA .
O nome da ferramenta é inspirado no comando tail
disponível em sistemas do tipo Unix, que são usados para exibir a extremidade traseira de um arquivo de texto ou dados canalizados. O nome do protocolo de consenso de Cardano, Ouroboros , é uma referência ao símbolo antigo que descreve uma serpente ou dragão comendo sua própria cauda, o que significa "comer cauda". "Oura" é a palavra grega antiga para "Tail".
Nesta gravação do terminal, vemos alguns minutos de saída ao vivo de um nó TestNet conectado ao coletor do terminal.
Assista ASCIICAST COMPLETO
Todo o levantamento pesado necessário para se comunicar com o nó Cardano é feito pela Biblioteca Pallas, que fornece uma implementação do multiplexador OuroBoros e alguns dos mini-protocolos exigidos (ChainSync e Localstate em particular).
O pipeline de dados é implementado pela biblioteca de juntas, que fornece uma estrutura para a construção de aplicativos encenados e orientados a eventos. Sob essa abstração, cada componente do pipeline (também conhecido como: estágio ) é executado em seu próprio thread e se comunica com outros estágios enviando mensagens (muito semelhante ao padrão do ator ).
Você pode executar oura watch <socket>
para imprimir dados TX no terminal a partir da ponta de um nó local ou remoto. Pode ser útil como uma ferramenta de depuração para os desenvolvedores ou se você está curioso para ver o que está acontecendo na rede (por exemplo, ver o AirDrops enquanto eles acontecem ou oráculos publicando novas informações).
Semelhante à conhecida ferramenta DB-sync fornecida pelo IOHK, a OURA pode ser usada como um daemon para seguir um nó e produzir os dados em uma tecnologia de armazenamento de dados diferente mais adequada para o seu caso de uso final. A principal diferença com o DB-Sync é que o OURA foi projetado para fácil integração com pipelines de transmissão de dados em vez de bancos de dados relacionais.
Dada sua pequena pegada de memória / CPU, a OURA pode ser implantada lado a lado com seu nó Cardano, mesmo em ambientes com restrição de recursos, como o Raspberry Pis.
O OURA em execução no modo daemon
pode ser configurado para usar filtros personalizados para identificar padrões de transação específicos e acionar ações sempre que encontrar uma correspondência. Por exemplo: Envie um email quando uma combinação de política / ativo específica aparecer em uma transação; Chame uma função da AWS Lambda quando uma carteira delega para um pool específico; Envie um HTTP-CALL para um webhook cada vez que uma chave de metadados aparece na carga útil do TX;
Se os recursos prontos para uso disponível não satisfazem seu caso de uso específico, o OURA poderá ser usado uma biblioteca em seu projeto de ferrugem para configurar pipelines personalizados. Cada componente (fontes, filtros, afundamentos, etc.) em OUS visa ser independente e reutilizável. Por exemplo, filtros e pias personalizados podem ser construídos ao reutilizar as fontes existentes.
Nossa está em sua essência apenas um oleoduto para o processamento de eventos. Cada estágio do oleoduto cumpre um papel diferente:
Estágios de origem: são responsáveis por extrair dados da blockchain e mapear os blocos brutos em eventos menores e mais granulares. Cada evento é então enviado através da porta de saída do estágio para processamento adicional.
Etapas de filtro: receba eventos individuais do estágio de origem e aplique algum tipo de transformação a cada um. As transformações aplicadas dependerão do caso de uso específico, mas geralmente giram em torno da seleção de eventos relevantes e enriquecendo -os com informações extras.
Etapas de coleta: receba os eventos finais do estágio de filtro e envia a carga útil para algum sistema, banco de dados ou serviço externo para processamento adicional.
Tipos de dados
CBOR BLOCOS
CBor TXS
Modelo V1 OURA (para compatibilidade com versões anteriores)
TXS analisado (objetos estruturados com todos os dados TX)
JSON genérico (qualquer tipo de valores JSON)
Fontes
síncão de cadeia do nó local
Chain-Sync + Block-Fetch do nó de relé remoto
S3 Bucket com dados de bloco
Tópico Kafka com dados de bloco
Pia
Tópico Kafka
Elasticsearch Index / Data Stream
Arquivos de log girando com compactação
Redis Streams
Fila do AWS SQS
AWS Lambda Call
AWS S3 Objetos
GCP Pubsub
Função da nuvem do GCP
Azure afunda
Webhook (post http)
Terminal (somente de anexo, semelhante a uma cauda)
Filtros
Parse Block / TX CBOR
Bloco dividido em TXS
Selecione TXS ao corresponder regras (endereço, metadados, políticas, etc)
Enriqueça dados TX com entradas relacionadas
Código TypeScript personalizado (usa deno)
Plugin WASM personalizado
Buffer de reversão com ações de compensação
Outro
Cursor da cadeia de estado para se recuperar de reinicializações
estágio de buffer para manter blocos até atingirem uma certa profundidade
métricas de pipeline para acompanhar o progresso e o desempenho
Nossa lê eventos de blocos / transações cunhados. O suporte à consulta do Mempool ainda não foi implementado.
Todas as contribuições são bem -vindas, mas leia o guia contribuinte do projeto antes de começar a codificar.
Este projeto está licenciado sob a licença Apache-2.0. Consulte o arquivo de licença para obter mais detalhes.