Acropolis is a project to create a kit of modular parts, written in Rust, which allows flexible construction of clients, services and APIs for the Cardano ecosystem.
This project has moved out of the experimental phase and is being implemented according to a set of deliverables documented in the Treasury Fund Milestones.
The Acropolis Cardano Node is a rust implementation that seeks parity with the Haskell implementation and is intended to be a full block producing node on mainnet. Please see the overview document that describes the phases of development, descriptions, expected use cases, and runtime environments expected of each of the deliverables.
Acropolis is based on the Caryatid framework, which in turn uses a message bus such as RabbitMQ to communicate between micro-services.
graph TB
subgraph Process A
Module1(Module 1)
Module2(Module 2)
Caryatid1(Caryatid Framework)
Module1 <--> Caryatid1
Module2 <--> Caryatid1
end
subgraph Process B
Module3(Module 3)
Caryatid2(Caryatid Framework)
Module3 <--> Caryatid2
end
RabbitMQ([RabbitMQ Message Bus])
style RabbitMQ fill:#eff
Caryatid1 <--> RabbitMQ
Caryatid2 <--> RabbitMQ
- Upstream Chain Fetcher - implementation of the Node-to-Node (N2N) client-side (initiator) protocol, allowing chain synchronisation and block fetching
- Mithril Snapshot Fetcher - Fetches a chain snapshot from Mithril and replays all the blocks in it
- Genesis Bootstrapper - reads the Genesis file for a chain and generates initial UTXOs
- Block Unpacker - unpacks received blocks into individual transactions
- Tx Unpacker - parses transactions and generates UTXO changes
- UTXO State - watches UTXO changes and maintains a basic in-memory UTXO state
- SPO State - matches SPO registrations and retirements
- DRep State - tracks DRep registrations
- Governance State - tracks Governance Actions and voting
- Stake Delta Filter - filters out stake address changes and handles stake pointer references
- Epochs State - track fees blocks minted and epochs history
- Accounts State - stake and reward accounts tracker
- Assets State - tracks native asset supply, metadata, transactions, and addresses
There is currently only one process, for testing:
- Omnibus - includes all the above modules for testing, by default using the internal message bus only
Everything is locally contained or is a crate dependency. To build the node,
make build
The following will run the omnibus process.
make run