txpipe/oura

The tail of Cardano

documentation for detailed information on how to start working with Oura



Introduction

We have tools to "explore" the Cardano blockchain, which are useful when you know what you're looking for. We argue that there's a different, complementary use-case which is to "observe" the blockchain and react to particular event patterns.

Oura is a rust-native implementation of a pipeline that connects to the tip of a Cardano node through a combination of Ouroboros mini-protocol (using either a unix socket or tcp bearer), filters the events that match a particular pattern and then submits a succint, self-contained payload to pluggable observers called "sinks".

Check our documentation for detailed information on how to start working with Oura.

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 procotol 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".

Terminal Output Demo

In this terminal recording we get to see a few mins of live output from a testnet node connected to the terminal sink.

watch full asciicast

Under the Hood

All the heavy lifting required to communicate with the Cardano node is done by the Pallas library, which provides an implementation of the Ouroboros multiplexer and a few of the required mini-protocol state-machines (ChainSync and LocalState in particular).

The data pipeline makes heavy use (maybe a bit too much) of multi-threading and mpsc channels provided by Rust's std::sync library.

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 whats 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 techonology 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 satisfiy your particular use-case, Oura can be used a library in your Rust project to setup 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.

How it Works

Oura is in its essence just a pipeline for proccessing events. Each stage of the pipeline fulfills a different roles:

  • Source Stages: are in charge of pulling data from the blockchain and mapping the raw blocks into smaller, more granular events. Each event is then sent through the output port of the stage for further processing.
  • Filter Stages: receive individual events from the source stage and apply some sort of transformation to each one. The transformations applied will depend on the particular use-case, but they usually revolve around selecting relevant events and enriching them with extra information.
  • Sink Stages: receive the final events from the filter stage and submits the payload to some external system, database or service for further processing.

Feature Status

  • Sources
    • chain-sync full-block (node-to-client)
    • chain-sync + block-fetch (node-to-node)
    • Parsing of Shelley-compatible blocks (Shelley, Allegra, Mary, Alonzo)
    • Parsing of Byron blocks
  • Sinks
    • Kafka topic
    • Elasticsearch index / data stream
    • Rotating log files with compression
    • Redis streams
    • AWS SQS queue
    • AWS Lambda call
    • AWS S3 objects
    • GCP Sinks
    • Azure Sinks
    • webhook (http post)
    • terminal (append-only, tail-like)
  • Events / Parsers
    • block events (start, end)
    • transaction events (inputs, outputs, assets)
    • metadata events (labels, content)
    • mint events (policy, asset, quantity)
    • pool registrations events
    • delegation events
    • CIP-25 metadata parser (image, files)
    • CIP-15 metadata parser
  • Filters
    • cherry pick by event type (block, tx, mint, cert, etc)
    • cherry pick by asset subject (policy, name, etc)
    • cherry pick by metadata keys
    • cherry pick by block property (size, tx count)
    • cherry pick by tx property (fee, has native script, has plutus script, etc)
    • cherry pick by utxo property (address, asset, amount range)
    • enrich events with policy info from external metadata service
    • enrich input tx info from Blockfrost API
    • enrich addresses descriptions using ADAHandle
  • Other
    • stateful chain cursor to recover from restarts
    • buffer stage to hold blocks until they reach a certain depth
    • pipeline metrics to track the progress and performance

Known Limitations

  • Oura only knows how to process blocks from the Shelley era. We are working on adding support for Byron in a future release. (available since v1.2)
  • Oura reads events from minted blocks / transactions. Support for querying the mempool is planned for a future release.
  • Oura will notify about chain rollbacks as a new event. The business logic for "undoing" the already processed events is a responsability of the consumer. We're working on adding support for a "buffer" filter stage which can hold blocks until they reach a configurable depth (number of confirmations). (rollback buffer available since v1.2)

Contributing

All contributions are welcome, but please read the contributing guide of the project before starting to code.

License

This project is licensed under the Apache-2.0 license. Please see the LICENSE file for more details.

Issues

Collection of the latest Issues

papacarp

papacarp

Comment Icon0

There seems to be some logic mismatch on the cursor use after a restart. Here is the failing scenario:

  1. daemon mode with webhook processing of events
  2. file based cursor usage
  3. webhook responds with 404 starting on block 7451768 after processing block 7451767 successfully. daemon continues to retry sending block 7451768.
  4. cursor is set to block 7451768.
  5. daemon is shut down and restarted
  6. daemon starts sending cursor + 1 block. thus skipping 7451768 completely

What should happen: cursor definition in logic needs to be clear. Is the cursor set to the last known COMPLETELY transferred block or is it set to the block that still needs to be sent. I suspect somewhere in the code there is a mismatch of assumptions on this point.

Here is a visual with my notes to help make it clear

I'm running rvcas/reward_withdrawls version

papacarp

papacarp

Comment Icon0

Withdrawals are not currently in transaction detail from oura. This makes it difficult to decode reward withdrawal transactions. The detail is in pallas

https://github.com/txpipe/pallas/blob/98f71289b5d2b533eff2f64098d0cf973386236d/pallas-primitives/src/babbage/model.rs#L246

I gave it a shot and got the withdrawals into the transaction model:

But got very stuck on how to implement to_transaction_record in map.rs

https://github.com/txpipe/oura/blob/9c6f40e5d9769630dae64163ddc6ee911f0bc6ae/src/mapper/map.rs#L341

If someone with more rust experience can give me a few pointers I'd be happy to generate a PR

Just to fully document the problem, a current reward withdrawal transaction looks like whats below. Note there is one transaction input and one transaction output but no details on the withdrawal implemented which is actually the second tx input used.

See adastat details for comparison: https://adastat.net/transactions/7df81c9c4f0a4fe3f529b922655edd49a03adcd3c04447ec1db9b29487126cf7

{"context": {"block_hash": "e53c43183c7b84df29599cbf504147474600bef984b4c187dd4d29c48b69cd74", "block_number": 7441052, "slot": 65065542, "timestamp": 1656631833, "tx_idx": 28, "tx_hash": "7df81c9c4f0a4fe3f529b922655edd49a03adcd3c04447ec1db9b29487126cf7", "input_idx": null, "output_idx": null, "output_address": null, "certificate_idx": null}, "transaction": {"hash": "7df81c9c4f0a4fe3f529b922655edd49a03adcd3c04447ec1db9b29487126cf7", "fee": 171573, "ttl": 65076323, "validity_interval_start": null, "network_id": null, "input_count": 1, "output_count": 1, "mint_count": 0, "total_output": 172145088, "metadata": null, "inputs": [{"tx_id": "71b1e1a4d7017686347409b7e2aee032f685b01f3e53e29203f7a5ec37ac3ca6", "index": 1}], "outputs": [{"address": "addr1qxpcnhkkxfm6k0wc4uw6ea5vrssa2cpzlzzmxkvrw3xgkq54tqc70w5pcr33lpcjwt80zqae4scfm0vqh635yxu57mrs6h6j67", "amount": 172145088, "assets": [], "datum_hash": null}], "mint": null, "vkey_witnesses": [{"vkey_hex": "c7bef693b2d6fc2062320c28117d554158f2f13356731d84ae2e54289ae36bab", "signature_hex": "e8c49f0436a2ab0f111b7079097dfa4103335133a549165a2f66d28f728cd03acca89096f63f4ad77a4088a6ea62b6c48ad42d3021c40b1fa39f1297c181e800"}, {"vkey_hex": "23517b50ae3b8d58fd3810b57626bd67ba1ebeeb54e84a43fc190fcde93b78eb", "signature_hex": "1367d1c9242951efb4d845a9d9a143a334020ffbe0fd6e42f86a58012c3dad6c9647ce033a9f8d571428571b4fb411fa0cd1966fcef8d5157649ef1f4dbe3003"}], "native_witnesses": [], "plutus_witnesses": [], "plutus_redeemers": [], "plutus_data": []}, "fingerprint": "65065542.tx.8000246389595429557441766942411168299", "variant": "Transaction", "timestamp": 1656631833000}
gitmachtl

gitmachtl

enhancement
Comment Icon2

Hi,

i always recompile oura to get rid of the line cropping on the terminal sink, because i need the whole output to process it further. So i always end up editing this line

https://github.com/txpipe/oura/blob/0f4c188601541c03aba7b25dfecd8bd81d6da0ed/src/sinks/terminal/format.rs#L347

to like: let flex_width = 50000;

so would it be possible to make the cut off value configurable via the daemon-config file? or even better a switch, to turn off the line cropping in total?

PegasusPool

PegasusPool

Comment Icon1

I was looking at the different types of records emitted by the source in model.rs and I was wondering if there is an event for when an account receives delegation reward after every epoch.

I can see that there is a MoveInstantaneousRewardsCert event but as far as I can tell this is only reward paid for catalyst voting as well as payout to catalyst winners.

My usecase: Trying to calculate the balance of an account (including unclaimed rewards)

scarmuega

scarmuega

documentation
Comment Icon4

Problem: Oura provides a way to connect to custom networks (aka, neither mainnet nor testnet), but it requires manual configuration of certain specific values under the [chain] section. This procedure lacks the corresponding documentation.

Scope: Add a new documentation page under the "Guides" section detailing the step by step instructions on how to connect Oura to a custom network.

gitmachtl

gitmachtl

good first issue
Comment Icon4

Currently the TX-Headline for each Transaction in a Block looks like this (Terminal): total_output: 573299381, fee: 1202055, hash: 3ace1cb9c563d29203efe7018159d238e76c10dfb58297836f5e544095a4d757, ttl: ...

Would it be possible to also include the TX-Size in bytes in here, similar to the body size in the BLOCK Header?

mark-stopka

mark-stopka

enhancement
Comment Icon0

Fetching transactions from mempool would be a great feature to have, these transactions should have a separate processing pipeline, as mempool is not a globally shared unlike the chain, it would be great if for mempool connections, several peers to get mempool transactions from would be possible...

mark-stopka

mark-stopka

enhancement
Comment Icon0

Cardano Rust Ouroboros Network is an attemp to write Ouroboros Networking protocols using Tokio Rust ecosystem, it would be nice to have a diversity of netwokring subsystems.

Cardano Rust Ouroboros Network is licenses under LGPL-3.0 License, but as it is a subsystem only, it should not cause any problems for Oura in general.

Progress of Tokio migration can be observed in the relevant GitHub project.

Tasks

scarmuega

scarmuega

enhancement
Comment Icon0

For example, when dealing with a block decoding issue, N2N will log the error (if enabled) and continue; while N2C will stop the state-machine and finally panic. Ideally, we stick to N2N way of handling errors.

Brought up in #37

cc @gitmachtl

Versions

Find the latest versions by id

v1.5.1 - Jul 04, 2022

v1.5.1 (2022-07-03)

Bug Fixes

  • Fix n2n babbage header parsing (#355)

v1.5.0 - Jul 03, 2022

v1.5.0 (2022-07-03)

Features

  • Implement Babbage compatibility (#351)
  • Add metadata hash to pool registration event (#336)
  • Add a nix flake (#335)
  • Retry whole chainsync operation when possible (#332)
  • Introduce Redis Streams sink (#253)

Bug Fixes

  • Decode block wrappers correctly (#353)
  • Add default values for retry policies (#352)
  • Accommodate partial features build (#333)
  • Allow integer values in magic args (#320)

Docs

  • Add guide on connecting to custom networks (#306)
  • Improve "data dictionary" section (#297)
  • Fix typo in daemon example (#294)

Code Refactoring

  • Unify retry mechanism across sinks (#302)

Chore

  • Fix lint warnings across the board (#310)
  • deps: Update Pallas to v0.11 (#350)
  • deps: Update aws-sdk to 0.12 (#311)
  • deps: bump clap from 3.1.17 to 3.1.18 (#293)
  • deps: bump tokio from 1.18.1 to 1.18.2 (#287)
  • deps: bump bech32 from 0.8.1 to 0.9.0 (#295)

v1.4.3 - Jun 08, 2022

v1.4.3 (2022-06-08)

Bug Fixes

  • Add missing details in tx record (#321)

Docs

  • Update changelog

v1.4.2 - Jun 05, 2022

v1.4.2 (2022-06-05)

Bug Fixes

  • Include EBB blocks in E2E tests (#315)
  • Add missing finalize option to N2C (#314)
  • Upgrade Pallas to fix tx hash mismatch (#312)

Continuous Integration

  • Add N2C E2E tests (#313)

v1.4.1 - May 10, 2022

v1.4.1 (2022-05-09)

Bug Fixes

  • Relax CIP15 requirements and log level (#290)

v1.4.0 - May 09, 2022

v1.4.0 (2022-05-09)

Features

  • Emit witness events (#262)
  • Introduce GCP PubSub sink (#237)
  • Add native scripts (#241)
  • Add custom terminal format for ADA Handle assets (#232)
  • Add option to include tx details in block events (#231)
  • CIP15: Add CIP-0015 parser (#124)

Doc

  • Add [source.finalize] doc and example (#258)

Bug Fixes

  • missing fields in NativeScript fingerprint (#246)
  • Ensure aws feature builds ok in isolation (#230)

Docs

  • Add automated changelog (#286)
  • Fix typo in CONTRIBUTING.md (#259)
  • Fix typo in README (#239)
  • Fixed typos (#226)

Continuous Integration

  • Fix github / kubectl / eks compatibility issue

Chore

  • Add min-depth to e2e tests (#272)
  • Fix linting issues (#244)
  • deps: bump log from 0.4.16 to 0.4.17 (#285)
  • deps: bump serde from 1.0.136 to 1.0.137 (#275)
  • deps: bump tokio from 1.18.0 to 1.18.1 (#278)
  • deps: bump openssl from 0.10.38 to 0.10.40 (#282)
  • deps: bump clap from 3.1.13 to 3.1.16 (#283)
  • deps: bump serde_json from 1.0.79 to 1.0.81 (#281)
  • deps: Update all aws sdk libs to 0.11 (#271)
  • deps: bump clap from 3.1.12 to 3.1.13 (#270)
  • deps: bump pallas from 0.9.0-alpha.0 to 0.9.0-alpha.1 (#269)
  • deps: bump tokio from 1.17.0 to 1.18.0 (#266)
  • deps: Remove unused TUI dependency (#268)
  • deps: bump clap from 3.1.11 to 3.1.12 (#261)
  • deps: bump config from 0.13.0 to 0.13.1 (#248)
  • deps: bump clap from 3.1.8 to 3.1.11 (#257)
  • deps: bump crossterm from 0.23.1 to 0.23.2 (#235)
  • deps: bump clap from 3.1.16 to 3.1.17 (#284)
  • deps: Update Pallas to version 0.8.0 (#242)
  • deps: bump config from 0.12.0 to 0.13.0 (#236)
  • deps: bump clap from 3.1.7 to 3.1.8 (#234)
  • deps: bump clap from 3.1.6 to 3.1.7 (#229)
  • deps: bump log from 0.4.14 to 0.4.16 (#217)

v1.3.2 - Apr 26, 2022

v1.3.2 (2022-04-26)

Bug Fixes

v1.3.1 - Apr 16, 2022

v1.3.1 (2022-04-16)

Bug Fixes

  • Update Pallas library to deal with metadatum label overflows

Chore

  • Fix lint warnings

v1.3.0 - Mar 25, 2022

v1.3.0 (2022-03-25)

Features

  • Add epoch and epoch slot values to Block record (#195)
  • Introduce AWS S3 sink (#221)
  • Graceful shutdown options (#216)
  • Add connection-retry logic with exponential backoff (#213)
  • CLI option to override configured cursor in daemon mode (#212)
  • Introduce AWS Lambda sink (#208)
  • Introduce AWS SQS Sink (#207)

Bug Fixes

  • Hotfix release by skipping arm64 container build
  • Implement missing S3 object naming conventions (#223)
  • Hide SQS sink under correct feature flag (#214)

Docs

  • Fix missing AWS sinks in mdbook index (#225)
  • Document AWS Sinks (#224)

Code Refactoring

  • Move sub-command definition to corresponding module (#209)

Continuous Integration

  • Add AWS e2e tests (#222)
  • Add more e2e tests (#219)
  • Introduce e2e testing workflow (#218)

Chore

  • deps: bump aws-sdk-sqs from 0.8.0 to 0.9.0 (#211)

v1.2.2 - Mar 16, 2022

v1.2.2 (2022-03-16)

Bug Fixes

  • Downgrade metadata key issues to warnings (#199)

Chore

  • deps: Update Pallas with fix for payload regression (#205)
  • deps: bump reqwest from 0.11.9 to 0.11.10 (#200)
  • deps: bump crossterm from 0.23.0 to 0.23.1 (#204)
  • deps: Upgrade Pallas to v0.7.0 (#198)
  • deps: bump clap from 3.1.5 to 3.1.6 (#188)
  • deps: Update pallas-primitives to v0.6.4 (#191)

v1.2.1 - Mar 08, 2022

v1.2.1 (2022-03-08)

Bug Fixes

  • Fix testnet well-known time parameters (#189)

Docs

  • Add examples of complex selection filters (#185)

Chore

  • Use v1.2 for testdrive examples (#182)
  • deps: Update pallas-primitives to v0.6.3 (#190)
  • deps: bump strum from 0.23.0 to 0.24.0 (#161)
  • deps: bump clap from 3.1.3 to 3.1.5 (#186)

v1.2.0 - Mar 01, 2022

v1.2.0 (2022-03-01)

Features

  • Crawl Byron's epoch boundary blocks (#169)
  • Introduce 'intersect' argument (#165)
  • Implement Prometheus metric exporter (#154)
  • Implement multi-era timestamp calculation (#155)
  • Implement rollback buffer (#149)
  • Introduce the 'Assert' sink (#140)
  • Handle Byron blocks (#138)
  • update the docs for the mapper config for the cbor change (#137)
  • Add option to include raw block cbor (#127)

Bug Fixes

  • Pin dockerfile to "buster" Debian and update testdrive envs (#181)
  • Downgrade all CIP-25 parser errors to warnings (#180)
  • Downgrade 721 metadata error to warning (#175)
  • Use magic from source in daemon bootstrap (#166)
  • Compute timestamp in Byron mappings (#156)
  • fingerprint: Passthrough events even on error (#142)

Docs

  • Document new features in v1.2 (#171)

Code Refactoring

  • Merge epoch boundary record with standard block (#172)

Build

  • deps: config-0.12.0 and fixes (#178)
  • deps: clap-3.1.3 and fixes (#179)

Continuous Integration

  • Remove i686 release targets (#129)
  • dependabot: Auto-update GH Action versions (#130)

Chore

  • Update Pallas to version 0.5.0-alpha.3 (#153)
  • Add cursor to testdrive examples (#139)
  • Update testdrive scripts to latest version
  • Update pallas-primitives to v0.5.3
  • Update Pallas primitives version (#168)
  • Update Pallas miniprotocols 0.5.1 (#167)
  • Upgrade to Pallas 0.5.0-alpha.1 (#148)
  • deps: Update pallas-primitives to v0.6.2 (#177)
  • deps: bump tokio from 1.16.1 to 1.17.0 (#151)
  • deps: bump serde_json from 1.0.78 to 1.0.79 (#141)
  • deps: bump strum_macros from 0.23.1 to 0.24.0 (#159)
  • deps: Update Pallas to v0.6 (includes minicbor 0.14) (#173)
  • deps: Update pallas-primitives to v0.6.1 (#174)
  • deps: bump clap from 3.0.13 to 3.0.14 (#121)
  • deps: bump file-rotate from 0.5.3 to 0.6.0 (#133)
  • deps: bump minicbor from 0.13.1 to 0.13.2 (#134)
  • deps: bump crossterm from 0.22.1 to 0.23.0 (#135)
  • deps: bump minicbor from 0.13.0 to 0.13.1 (#125)

v1.1.0 - Feb 06, 2022

v1.1.0 (2022-02-05)

Features

  • Introduce stateful cursor (#116)
  • Introduce 'stoud' + 'logs' sink (#77)
  • BlockRecord: include previous block hash (#120)
  • model: include tx_hash in TransactionRecord (#123)
  • watch: Add output throttle cli arg

Bug Fixes

  • EventWriter::standalone() inaccessible (#115)
  • Make bech32 encoding network-aware (#104)
  • Slot to timestamp mapping matches public explorers (#101)
  • dump build without 'logs' feature (#82)

Docs

  • Add documentation for new v1.1 features (#126)
  • Add contributing guide (#83)

Code Refactoring

  • Streamline access shared utilities (#108)

Continuous Integration

  • Start linting both code and some support files (#96)
  • Add testdrive for logs sink (#98)
  • style: Add EditorConfig and relevant GH Action (#91)

Chore

  • remove explicit of 'use serde_derive'
  • deps: Use Pallas 0.4.0 (#118)
  • deps: bump clap from 3.0.12 to 3.0.13 (#105)
  • deps: bump clap from 3.0.10 to 3.0.12 (#99)
  • deps: bump serde from 1.0.134 to 1.0.135 (#89)
  • deps: bump tui from 0.16.0 to 0.17.0 (#90)
  • deps: bump serde_json from 1.0.75 to 1.0.78 (#88)
  • deps: bump serde from 1.0.133 to 1.0.134
  • deps: bump serde from 1.0.135 to 1.0.136 (#102)
  • deps: bump clap from 3.0.9 to 3.0.10
  • deps: bump clap from 3.0.7 to 3.0.9

v1.0.2 - Jan 18, 2022

v1.0.2 (2022-01-17)

Bug Fixes

  • Use json-compatible structure for MoveInstantaneousRewardsCert (#71)
  • mapper: Panic on inter-stage channel error (#70)

Chore

  • deps: bump serde_json from 1.0.74 to 1.0.75

v1.0.1 - Jan 15, 2022

v1.0.1 (2022-01-15)

Bug Fixes

  • terminal: Avoid slicing utf-8 chars (#68)

Docs

  • Use v1 for docker example (#64)
  • Add missing entry to summary
  • webhook: Fix webhook testdrive config (#63)

v1.0.0 - Jan 13, 2022

v1.0.0 (2022-01-13)

Features

  • Add 'end' events for blocks and txs (#60)
  • Add slot, hash and number to block start event (#59)
  • Introduce "Webhook" sink (#51)
  • Add CIP-25 metadata parser (#49)
  • mapper: Refactor event-mapper code for easier extension (#47)

Bug Fixes

  • Log & continue on mapper errors (#53)

Docs

  • Add testdrive example for webhook setup (#55)
  • Add testdrive example for Elasticsearch setup (#54)
  • webhook: Add webhook sink configuration docs (#62)

Chore

  • Prep for v1 (#58)
  • Fix lint warnings
  • deps: bump reqwest from 0.11.8 to 0.11.9
  • deps: bump clap from 3.0.6 to 3.0.7
  • deps: bump clap from 3.0.5 to 3.0.6
  • deps: Update Pallas to version 3.9 (#44)
  • deps: Bump-up pallas v0.3.3 to v0.3.4

v0.3.10 - Jan 08, 2022

v0.3.10 (2022-01-08)

Features

  • watch: Show error logs in stdout by default (#41)

Chore

  • deps: Update Pallas to version 0.3.8 (#38)

v0.3.9 - Jan 07, 2022

v0.3.9 (2022-01-07)

Features

  • Map metadata as structured JSON (#29)
  • Pipeline back-pressure (#36)
  • Basic Windows support (#20)
  • cli: Add version number to help output

Bug Fixes

  • Typo in watch arg parsing
  • Move from value_t macro to ArgMatches::value_of_t
  • Update more code to new Clap API
  • Clap API update

Docs

  • Improve documentation across the board

Chore

  • deps: Update Pallas version and other patched dependencies
  • deps: bump clap from 2.34.0 to 3.0.5
  • deps: Update pallas to v0.3.5 (#30)
  • deps: bump serde_json from 1.0.73 to 1.0.74
  • deps: bump serde from 1.0.132 to 1.0.133
  • deps: bump minicbor from 0.12.0 to 0.12.1
  • deps: bump serde_json from 1.0.72 to 1.0.73 (#23)
  • deps: bump crossterm from 0.20.0 to 0.22.1 (#22)
  • deps: bump serde from 1.0.130 to 1.0.132 (#21)

BREAKING CHANGE

  • Metadata record presents new structure.
  • Level of granularity for metadata event is different, one record per label.
  • Configuration keys for the 'Selection' filter changed to reflect new metadata structure

v0.3.8 - Dec 31, 2021

v0.3.8 (2021-12-30)

Features

  • Add details to 'transaction' event (#24)
  • Introduce 'selection' filter (#18)
  • Introduce 'fingerprint' filter (#16)
  • Introduce 'filtering' stage (#14)
  • Add common data aggregations to events (#13)
  • node: Allow reading from arbitrary initial chain point (#10)
  • node: Output block hash as event data

Bug Fixes

  • node: Handle non-map metadata structures (#12)

Docs

  • Add fingerprint / selection filter docs
  • Improve 'watch' mode usage info
  • Move docker instructions to mdbook

Style

  • Fix whitespaces (#17)

Continuous Integration

  • Add 'testdrive' workflow
  • fix branch filter for validate workflow

Chore

  • Update README feature check list
  • Fix clippy / fmt warnings
  • Fix fmt / clippy warnings
  • Fix fmt / clippy warnings
  • deps: Bump-up pallas v0.3.3 to v0.3.4 (#19)

v0.3.7 - Dec 23, 2021

v0.3.7 (2021-12-23)

Features

  • elastic: Improve Elasticsearch sink implementation (#8)

Bug Fixes

  • Allow env override of nested configs

Chore

  • Fix fmt and clippy warnings

v0.3.6 - Dec 22, 2021

v0.3.6 (2021-12-21)

Features

  • Compute slot timestamp (#6)

Continuous Integration

  • Improve docker build speed (#7)

Chore

  • Tidy up CI workflows

v0.3.5 - Dec 18, 2021

v0.3.5 (2021-12-18)

Features

  • include event type tag in serde output
  • elastic: Add Elasticsearch MVP Sink (#5)

Bug Fixes

  • Add all features in the binary releases
  • use correct cfg feature syntax
  • valid entrypoint on Dockerfile

Docs

  • improve binary install example
  • add context field to data dictionary
  • fill data dictionary and installation info
  • point readme to mdbook
  • add draft documentation in mdbook format

v0.3.4 - Dec 15, 2021

v0.3.4 (2021-12-15)

Bug Fixes

  • n2c: remove v10 version constraint

v0.3.3 - Dec 15, 2021

v0.3.3 (2021-12-14)

Bug Fixes

  • use correct cursor on chainsync roll forward #2

v0.3.2 - Dec 14, 2021

v0.3.2 (2021-12-13)

Docs

  • add cardano to kafka example

Code Refactoring

  • migrate to new version of pallas-alonzo

v0.3.1 - Dec 11, 2021

v0.3.1 (2021-12-11)

Features

  • represent addresses in bech32 format
  • show rollback control event

Bug Fixes

  • remove local path dependencies

Chore

  • bump version patch
  • apply lint suggestions / formatting
  • remove unwraps and do a graceful exit
  • terminal: tidy up console output

v0.3.0 - Dec 10, 2021

v0.3.0 (2021-12-10)

Features

  • add certificate data mappings
  • sources: implement node-to-node soure using chainsync + blockfetch
  • terminal: improve output style

Docs

  • add cli instructions

Style

  • fix lint warnings

Chore

  • bump version minor
  • improve source folder structure
  • improve readme
  • explain extra dep on cargo

v0.2.0 - Dec 08, 2021

v0.2.0 (2021-12-08)

Features

  • compute and output tx hashes
  • daemon: implement basic daemon cli subcommand
  • kafka: add basic kafka sink implementation

Chore

  • fix missing openssl in release workflow
  • apply cargo fmt
  • fix missing openssl in release workflow
  • bump version for release
  • add missing info to cargo metadata
  • fix license year typo
  • fix lint issues
  • fix lint issues
  • improve args in log subcommand
  • add use-cases to readme
  • remove makefile
  • framework: define bootstrap traits for components

Information - Updated Sep 05, 2022

Stars: 169
Forks: 25
Issues: 27

Repositories & Extras

Reference implementation of the Stacks blockchain in Rust

Reference implementation of the Proof of Transfer (PoX) mining that anchors to Bitcoin security

Reference implementation of the Stacks blockchain in Rust

A Blockchain implementation in Rust

MIT (c) Doublify Technologies

A Blockchain implementation in Rust

Reference implementation of the Stacks blockchain in Rust

Reference implementation of the Proof of Transfer (PoX) mining that anchors to Bitcoin security

Reference implementation of the Stacks blockchain in Rust

rust-blockchain-example

Simple example for building a blockchain in Rust

rust-blockchain-example

Blockchain for Rust Developers

Suggested implementation for learning the basics of blockchain from the book

Blockchain for Rust Developers

rustchain - a blockchain example in Rust

This repo is purely an exploration of current ideas communicated in various

rustchain - a blockchain example in Rust

XELIS Blockchain

XELIS is a blockchain in Rust (powered by Tokio) using the account model with a unique P2p in TCP sending data in raw bytes format...

XELIS Blockchain

Simple blockchain in Rust

multiple-nodes (synchronize chain from other nodes chains)

Simple blockchain in Rust

Blockchain Example with Rust

Triển khai lại ý tưởng của (Learn Blockchains by Building One)[

Blockchain Example with Rust

WASM/Rust Proof of Work Blockchain served throught Node

You need Rust installed on your computer

WASM/Rust Proof of Work Blockchain served throught Node
Facebook Instagram Twitter GitHub Dribbble
Privacy