Warning main
Branch verfolgt jetzt V2 . Diese neue Version ist eine vollständige Überholung der Verarbeitungspipeline, mehrere Bruchänderungen. Wenn Sie nach V1 suchen, können Sie zur langfristigen Support-Zweig mit dem Namen lts/v1
wechseln
Wir haben Tools, um die Cardano -Blockchain zu "erkunden", die nützlich sind, wenn Sie wissen, wonach Sie suchen. Wir argumentieren, dass es einen anderen, komplementären Anwendungsfall gibt, der die Blockchain "beobachten" und auf bestimmte Ereignismuster reagiert.
Oura ist eine Rost-native Implementierung einer Pipeline, die über eine Kombination aus Ouroboros- Mini-Protokoll (unter Verwendung eines Unix-Sockets oder TCP-Trägers) mit der Spitze eines Cardano-Knotens verbunden ist, filter Prägnante, in sich geschlossene Nutzlast für steckbare Beobachter, die als "Sinks" bezeichnet werden.
Weitere Informationen zur Arbeit mit Oura finden Sie in unserer Dokumentation.
Der Name des Tools ist inspiriert von dem tail
in Unix-ähnlichen Systemen, mit dem das Heck-Ende einer Textdatei oder die Rohrdaten angezeigt wird. Cardanos Konsensprotokollname Ouroboros ist ein Hinweis auf das alte Symbol, das eine Schlange oder einen Drachen darstellt, das seinen eigenen Schwanz isst, was "Schwanz essen" bedeutet. "Oura" ist das alte griechische Wort für "Schwanz".
In dieser Terminalaufzeichnung sehen wir einige Minuten Live -Ausgabe von einem Testnet -Knoten, der an die Terminalsenke angeschlossen ist.
Beobachten Sie volle Asciicast
Das gesamte schwere Heben, das für die Kommunikation mit dem Cardano-Knoten erforderlich ist, erfolgt von der Pallas-Bibliothek, die eine Implementierung des Ouroboros-Multiplexers und einige der erforderlichen Mini-Protokoll-Staatsmaschine (insbesondere Chainsync und Lokalstate) bietet.
Die Datenpipeline wird von der Dichtungsbibliothek implementiert, die ein Framework zum Erstellen von inszenierten, ereignisgesteuerten Anwendungen bietet. Unter dieser Abstraktion läuft jede Komponente der Pipeline (auch bekannt als Bühne ) in ihrem eigenen Thread und kommuniziert mit anderen Phasen, indem sie Nachrichten senden (sehr ähnlich dem Schauspielermuster ).
Sie können oura watch <socket>
ausführen, um TX -Daten aus der Spitze eines lokalen oder Remote -Knotens in das Terminal zu drucken. Es kann als Debugging -Tool für Entwickler nützlich sein oder wenn Sie nur neugierig sind, was im Netzwerk vor sich geht (z. B. um Airdrops beim Schließen zu sehen oder neue Informationen zu veröffentlichen).
Ähnlich wie mit dem von IOHK bereitgestellten DB-Sync-Tool kann Oura als Daemon verwendet werden, um einem Knoten zu folgen und die Daten in eine andere Datenspeicher-Technologie auszugeben, die für Ihren endgültigen Anwendungsfall besser geeignet ist. Der Hauptunterschied bei DB-Sync besteht darin, dass Oura für eine einfache Integration in Datenbanken anstelle von relationalen Datenbanken ausgelegt wurde.
Aufgrund seines kleinen Speichers / CPU-Fußabdrucks kann Oura nebeneinander mit Ihrem Cardano-Knoten auch in ressourcenbezogenen Umgebungen wie Raspberry PIs eingesetzt werden.
Oura im daemon
-Modus kann so konfiguriert werden, dass benutzerdefinierte Filter bestimmte Transaktionsmuster bestimmen und Aktionen auslösen, wenn es eine Übereinstimmung findet. Zum Beispiel: Senden Sie eine E -Mail, wenn eine bestimmte Richtlinie / Vermögenskombination in einer Transaktion angezeigt wird. Rufen Sie eine AWS -Lambda -Funktion auf, wenn eine Brieftasche in einen bestimmten Pool delegiert. Senden Sie jedes Mal, wenn ein Metadatenschlüssel in der TX-Nutzlast angezeigt wird, einen HTTP-Call an einen Webhook.
Wenn die verfügbaren Out-of-the-Box-Funktionen Ihren speziellen Anwendungsfall nicht erfüllen, kann Oura eine Bibliothek in Ihrem Rust-Projekt verwendet werden, um maßgeschneiderte Pipelines einzustellen. Jede Komponente (Quellen, Filter, Senke usw.) in Oura zielt darauf ab, in sich geschlossen und wiederverwendbar zu sein. Beispielsweise können benutzerdefinierte Filter und Waschbecken erstellt werden, während die vorhandenen Quellen wiederverwendet werden.
Oura ist im Wesentlichen nur eine Pipeline für die Verarbeitung von Ereignissen. Jede Stufe der Pipeline erfüllt eine andere Rolle:
Quellstufen: sind für das Ziehen von Daten aus der Blockchain und das Zuordnen der Rohblöcke in kleinere, körnigere Ereignisse verantwortlich. Jedes Ereignis wird dann zur weiteren Verarbeitung über den Ausgangsanschluss der Bühne gesendet.
Filterstufen: Empfangen Sie einzelne Ereignisse aus der Quellphase und wenden Sie eine Art Transformation auf jeden an. Die angewandten Transformationen hängen vom jeweiligen Anwendungsfall ab, drehen sich jedoch normalerweise darauf, relevante Ereignisse auszuwählen und sie mit zusätzlichen Informationen zu bereichern.
Sink Phase: Erhalten Sie die endgültigen Ereignisse von der Filterphase und leisten Sie die Nutzlast für eine weitere Verarbeitung an ein externes System, eine Datenbank oder einen Dienst.
Datentypen
CBOR -Blöcke
CBOR TXS
Oura V1-Modell (für die Rückwärtskompatibilität)
Parsend TXS (strukturierte Objekte mit allen TX -Daten)
Generisches JSON (jede Art von JSON -Werten)
Quellen
Kettensynchronisation vom lokalen Knoten
Kettensynchronisationskette vom Remote-Relaisknoten
S3 -Eimer mit Blockdaten
Kafka -Thema mit Blockdaten
Waschbecken
Kafka -Thema
Elasticsearch Index / Datenstrom
Drehen Sie Protokolldateien mit Komprimierung
Redis -Streams
AWS SQS Queue
AWS Lambda Call
AWS S3 -Objekte
GCP PubSub
GCP Cloud -Funktion
Azure sinkt
Webhook (HTTP -Post)
Terminal (nur anhängen, schwanzartig)
Filter
Block / TX CBOR analysieren
Block in TXS geteilt
Wählen Sie TXS aus, indem Sie Regeln abgleichen (Adresse, Metadaten, Richtlinien usw.)
Bereiche TX -Daten mit zugehörigen Eingaben angeben
Benutzerdefinierter TypeScript -Code (verwendet DENO)
Benutzerdefinierte WASM -Plugin
Rollback -Puffer mit Ausgleichsaktionen
Andere
Zustandsfür Kettencursor, um sich von Neustarts zu erholen
Pufferstufe, um Blöcke zu halten, bis sie eine bestimmte Tiefe erreichen
Pipeline -Metriken, um den Fortschritt und die Leistung zu verfolgen
Oura liest Ereignisse aus geprägten Blöcken / Transaktionen. Die Unterstützung für die Abfrage des Mempools wird noch nicht implementiert.
Alle Beiträge sind willkommen, aber bitte lesen Sie den beitragenden Leitfaden des Projekts, bevor Sie mit dem Code beginnen.
Dieses Projekt ist unter der Lizenz Apache-2.0 lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.