Project

Amaru

An alternative Rust node client for the Cardano blockchain. Aimed as an entrypoint for client applications initially, it aspires to become a full block-producing node running side-by-side the Haskell nodes to further increase the decentralisation of the platform while fostering its rich open source ecosystem.

Goal

Build a new fully interoperable block-producing Cardano node.

One of the core objectives is to achieve a full block-producing Cardano node which can run side-by-side the existing Haskell nodes in a fully interoperable manner. The project is ambitious and spans over many areas such as networking, cryptography or language theory. It is developed from several parts each covering a different aspect of the node and its surrounding ecosystem.

Besides, Amaru is also geared towards developer experience and aims at providing easy to grasp interfaces using widely spread technologies such as gRPC while maintaining compatibility with the strong ecosystem of middlewares, such as Ogmios or Oura, that constitutes the backbone of Cardano services.

Maintainers
Journey

An incremental roadmap in 4-phases.

Client node

A node capable of synchronizing the chain from a (remote) trusted peer, and serve the data to client applications through an API query layer.

Such a node is most useful for decentralised applications building on the blockchain. It doesn't however take part in the consensus nor help to propagate blocks on the network.

A full relay node as an entrypoint to the network is still required at this point.


Workshop at Buidler Fest

Organize workshop(s) during the Buidler Fest second day to gather builders feedback and insights about what they would expect from an alternative node.


Read more

Chain-Synchronization PoC

Perform basic chain-synchronization of the latest Cardano era through Dolos to demonstrate the capabilities of the base Rust primitives.


Read more

(Partial) validator

Apply a subset of the ledger rules to partially validate transactions sent through the node in an attempt to provide better user feedback, and in the longer run, prepare the ground for a relay node.


Read more

Relay node

A node capable of validating (at least partially) blocks seen on the network and propagate them by taking part in the p2p gossiping between nodes. It can also seemingly follow the chain from multiple peers by performing adequate chain selection.

Such node doesn't yet take part in the consensus and cannot produce blocks. It can however fully replace any relay and is, from the perspective of any external observer, a Cardano relay node.


First Steps

A simple pipeline showcasing an Amaru node fetching blocks from the network, validating their header (VRF & KES) and forwarding them to an in-memory ledger performing UTxO management and phase-2 validations.

demo

Hybrid Testnet

While a relay node isn't capable of producing blocks on its own, it should perfectly blend in a hybrid testnet comprises of classic Haskell nodes acting as block producers and Amaru relay nodes.

If you are a stake pool operator on Cardano, we welcome you to reach out and help us launch this into orbit.


Read more

Full node

A node that can produce blocks and take part to the consensus. It can monitor the leader schedule, manage a mempool, forge blocks and follow protocol updates (hard-forks).

A full node is not however capable of validating the historical chain. Instead, it always bootstrap from a snapshot constructed from an archive node.


Archive node

A node that can validate any historical part of the chain, including the Byron era of Cardano. Its purpose is to produce ledger and blockchain snapshot usable by full nodes.

At this point, it is unclear whether we want to build this, for the current Haskell nodes already fullfil that role and there's at this point no clear benefits in building an alternative.


Getting started

Explore and contribute.