Skip to content

Introduction

Motivation

We already have tools to “explore” the Cardano blockchain — great when you know what you’re looking for. Oura fills the complementary need: to “observe” the chain as it moves and react to particular event patterns.

Oura is a Rust-native pipeline. It connects to the tip of a Cardano node over the Ouroboros mini-protocols (via a unix socket or TCP), filters the events that match a pattern you define, and forwards a succinct, self-contained payload to pluggable observers called sinks — a terminal, a file, a message broker, a database, and more.

New to Oura?

Jump to the Quick Start to see live chain data in a couple of minutes, or read How it works for the pipeline model.

Etymology

The name of the tool is inspired by the tail command available in unix-like systems which is used to display the tail end of a text file or piped data. Cardano’s consensus protocol name, Ouroboros, is a reference to the ancient symbol depicting a serpent or dragon eating its own tail, which means “tail eating”. “Oura” is the ancient greek word for “tail”.

Under the Hood

The heavy lifting of talking to the Cardano node is handled by the Pallas library, which implements the Ouroboros multiplexer and the mini-protocol state machines Oura relies on (notably ChainSync and LocalState).

The data pipeline itself leans heavily on multi-threading and mpsc channels from Rust’s std::sync library, which keeps each stage independent and the footprint small.

Use Cases

CLI to Watch Live Transactions

You can run oura watch <socket> to print TX data into the terminal from the tip of a local or remote node. It can be useful as a debugging tool for developers or if you’re just curious to see what’s going on in the network (for example, to see airdrops as they happen or oracles posting new information).

As a Bridge to Other Persistence Mechanisms

Similar to the well-known db-sync tool provided by IOHK, Oura can be used as a daemon to follow a node and output the data into a different data storage technology more suited for your final use-case. The main difference with db-sync is that Oura was designed for easy integration with data-streaming pipelines instead of relational databases.

Given its small memory / cpu footprint, Oura can be deployed side-by-side with your Cardano node even in resource-constrained environments, such as Raspberry PIs.

As a Trigger of Custom Actions

Oura running in daemon mode can be configured to use custom filters to pinpoint particular transaction patterns and trigger actions whenever it finds a match. For example: send an email when a particular policy / asset combination appears in a transaction; call an AWS Lambda function when a wallet delegates to a particular pool; send a http-call to a webhook each time a metadata key appears in the TX payload;

As a Library for Custom Scenarios

If the available out-of-the-box features don’t satisfy your particular use-case, Oura can be used a library in your Rust project to set up tailor-made pipelines. Each component (sources, filters, sinks, etc) in Oura aims at being self-contained and reusable. For example, custom filters and sinks can be built while reusing the existing sources.

Examples

For ready-to-run configurations covering every source, filter and sink — plus end-to-end pipeline recipes — see the Examples section.

Windows support is experimental

On Windows, Oura currently supports only the Node-to-Node source over a TCP socket bearer.