AVERTISSEMENT main
BRANCH est maintenant le suivi v2 . Cette nouvelle version est une refonte complète du pipeline de traitement, plusieurs modifications de rupture. Si vous recherchez V1 , vous pouvez passer à la branche de support à long terme nommée lts/v1
Nous avons des outils pour "explorer" la blockchain Cardano, qui est utile lorsque vous savez ce que vous recherchez. Nous soutenons qu'il existe un cas d'utilisation différent et complémentaire qui est d'observer la blockchain et de réagir à des modèles d'événements particuliers.
Oura est une implémentation native de la rouille d'un pipeline qui se connecte à la pointe d'un nœud Cardano via une combinaison du mini-protocole d'Oroboros (en utilisant un socket Unix ou un porteur TCP), filtre les événements qui correspondent à un modèle particulier puis soumet un charge utile succincte et autonome aux observateurs enfichables appelés "lavabos".
Consultez notre documentation pour des informations détaillées sur la façon de commencer à travailler avec Oura .
Le nom de l'outil est inspiré de la commande tail
disponible dans des systèmes de type UNIX qui est utilisé pour afficher l'extrémité de la queue d'un fichier texte ou de données tuyaux. Le nom du protocole de consensus de Cardano, Ouroboros , est une référence à l'ancien symbole représentant un serpent ou un dragon mangeant sa propre queue, ce qui signifie «manger de la queue». "Oura" est le mot grec ancien pour "queue".
Dans cet enregistrement terminal, nous pouvons voir quelques minutes de sortie en direct d'un nœud testnet connecté à l'évier de terminal.
Regarder Asciicast complet
Tout le levage de lourds nécessaires pour communiquer avec le nœud Cardano est effectué par la bibliothèque Pallas, qui fournit une implémentation du multiplexeur Ouroboros et de quelques-uns des mini-machines d'État requises (Chainsync et localState en particulier).
Le pipeline de données est mis en œuvre par la bibliothèque de joints qui fournit un cadre pour la construction d'applications en cours de mise en scène. Dans cette abstraction, chaque composant du pipeline (AKA: Stage ) s'exécute dans son propre fil et communique avec d'autres étapes en envoyant des messages (très similaires au modèle d'acteur ).
Vous pouvez exécuter oura watch <socket>
pour imprimer des données TX dans le terminal à partir de la pointe d'un nœud local ou distant. Il peut être utile comme un outil de débogage pour les développeurs ou si vous êtes juste curieux de voir ce qui se passe dans le réseau (par exemple, pour voir AirDrops tel qu'ils se produisent ou les oracles publiant de nouvelles informations).
Semblable à l'outil DB-Sync bien connu fourni par IOHK, Oura peut être utilisé comme démon pour suivre un nœud et produire les données dans une technologie de stockage de données différente plus adaptée à votre cas d'utilisation finale. La principale différence avec DB-Sync est que Oura a été conçue pour une intégration facile avec des pipelines de diffusion de données au lieu des bases de données relationnelles.
Compte tenu de sa petite empreinte mémoire / processeur, Oura peut être déployé côte à côte avec votre nœud Cardano même dans des environnements liés aux ressources, tels que Raspberry Pis.
Oura fonctionnant en mode daemon
peut être configuré pour utiliser des filtres personnalisés pour identifier des modèles de transaction particuliers et déclencher des actions chaque fois qu'il trouve une correspondance. Par exemple: envoyer un e-mail lorsqu'une combinaison de stratégie / actif particulière apparaît dans une transaction; Appelez une fonction AWS LAMBDA lorsqu'un portefeuille délève à une piscine particulière; Envoyez un appel HTTP à un webhook chaque fois qu'une clé de métadonnées apparaît dans la charge utile TX;
Si les fonctionnalités disponibles disponibles ne satisfont pas à votre cas d'utilisation particulier, Oura peut être utilisé une bibliothèque dans votre projet de rouille pour configurer des pipelines sur mesure. Chaque composant (sources, filtres, puits, etc.) dans Oura vise à être autonome et réutilisable. Par exemple, des filtres et des éviers personnalisés peuvent être construits lors de la réutilisation des sources existantes.
Oura est dans son essence juste un pipeline pour le traitement des événements. Chaque étape du pipeline remplit un rôle différent:
Étapes de la source: sont chargés de retirer les données de la blockchain et de cartographier les blocs bruts en événements plus petits et plus granulaires. Chaque événement est ensuite envoyé via le port de sortie de l'étape pour un traitement ultérieur.
Étapes de filtre: recevez des événements individuels de l'étape source et appliquez une sorte de transformation à chacun. Les transformations appliquées dépendront du cas d'utilisation particulier, mais ils tournent généralement autour de la sélection des événements pertinents et de l'enrichissement des informations supplémentaires.
Étapes du puits: recevez les événements finaux de l'étape du filtre et soumet la charge utile à un système, une base de données ou un service externe pour un traitement ultérieur.
Types de données
Blocs CBOR
Cbor txs
Oura V1 Model (pour la compatibilité arrière)
TXS analysé (objets structurés avec toutes les données TX)
JSON générique (tout type de valeurs JSON)
Sources
Synchronisation de la chaîne du nœud local
chaîne-sync + bloc de blocs du nœud de relais distant
Seau S3 avec données de bloc
Sujet kafka avec des données de bloc
Couler
Sujet kafka
Elasticsearch Index / Data Stream
Fichiers journaux rotatifs avec compression
Redis streams
File d'attente AWS SQS
Appel aws lambda
Objets AWS S3
GCP Pubsub
Fonction de cloud GCP
Puits azur
WebHook (HTTP Post)
Terminal (append uniquement, semblable à la queue)
Filtres
Parse Block / TX CBOR
Bloc divisé en TXS
Sélectionnez TXS par des règles de correspondance (adresse, métadonnées, politiques, etc.)
Enrichir les données TX avec des entrées connexes
Code de type personnalisé (utilise Deno)
Plugin WasM personnalisé
Tampon de recul avec des actions de compensation
Autre
curseur de la chaîne avec état de récupération des redémarrages
étape de tampon pour tenir des blocs jusqu'à ce qu'ils atteignent une certaine profondeur
Pipeline Metrics pour suivre les progrès et les performances
Oura lit les événements à partir de blocs / transactions créés. La prise en charge de la question de l'interrogation du mempool n'est pas encore mise en œuvre.
Toutes les contributions sont les bienvenues, mais veuillez lire le guide de contribution du projet avant de commencer à coder.
Ce projet est concédé sous licence Apache-2.0. Veuillez consulter le fichier de licence pour plus de détails.