Roadmap
Ledger predicate: StakeKeyNotRegisteredDELEG
### Abstract
Compute child_tips on a snapshot
### Abstract
Ledger predicate: StakeKeyHasNonZeroAccountBalanceDELEG
### Abstract
Ledger predicate: RefundIncorrectDELEG
### Abstract
Ledger predicate: StakeKeyNotRegisteredDELEG
### Abstract
Ledger predicate: StakeKeyRegisteredDELEG
### Abstract
Ledger predicate: WithdrawalsNotInRewardsCERTS
### Abstract
Ledger predicate: ValidationTagMismatch
### Abstract
Ledger Predicate: MaxTxSizeUTxO
### Abstract
Ledger predicate: ValueNotConservedUTxO
### Abstract
Ledger Predicate: FeeTooSmallUTxO
### Abstract
Ledger Predicate: ConwayWdrlNotDelegatedToDRep
### Abstract
Ledger predicate: ConwayTxRefScriptsSizeTooBig
### Abstract
Ledger predicate: ConwayTreasuryValueMismatch
### Abstract
Ledger predicate: BodyRefScriptsSizeTooBig
### Abstract
feat: custom/short-epoch testnet bootstrap & run support
Draft — enables bootstrapping and running amaru against custom, short-epoch testnets (e.g. generated db-synthesizer / Antithesis chains) without Koios/Mithril and without a built-in network profile. Surfaced while building lambdasistemi's amaru-bootstrap harness on top of current main.
Identify and close existing ledger coverage gaps
### Abstract
Properly compute the handshake negotiation result
### Abstract
Use amaru as a backend for Dolos
### Abstract
Scale the pipelining depth
### Abstract
Fully process an AssertOperationalCertificateError
### Abstract
Make sure that secrets are erased from memory
### Abstract
Test Amaru serialization
### Abstract
Demo the node as a relay including transaction submission
### Abstract
Explore Improved Data Models for Block Validation
### Abstract
Instrument the consensus stages
### Abstract
Consider memory + cpu execution units when computing the available mempool capacity
### Abstract
Do not revalidate transactions that are already in the Mempool
### Abstract
Support chained transactions in the mempool
### Abstract
Avoid fetching all governance votes in memory
### Abstract
Optimize the download of transactions in the txsubmission protocol across several peers
### Abstract
Relocate Phase 2 Types to the Kernel
### Abstract
chore: review FIXMEs and TODOs
Some of them have been turned into issues.
Unbind accounts of unregistered pools
### Abstract
Add a way to configure the GlobalParameters via env vars
### Abstract
Amaru doesn't interrupt on SIGINT while catching-up
### What revision are you using?
Improve or remove the noisy `AMARU_LOG` fallback message
### Abstract
Complete implementation of `ExtraneousScriptWitnesses` ledger rule
### What revision are you using?
Automate the creation of amaru snapshots
### Abstract
Package & distribute Amaru on every release
### Abstract
Enforce CHANGELOG in CI
### Abstract
Complete the DRep voting stake
### Abstract
Intern account stake credentials
### Abstract
pure-stage functional test (sometimes) failing
### What revision are you using?
Add an public bootstrap peer option to help onboarding
### Abstract
Perform integrity/sanity check of the ledger & chain db
### Abstract
Use amaru as a backend for yaci-store
### Abstract
Use amaru as a backend for Oura
### Abstract
Store the stake pool deposit
### Abstract
Compute rewards asynchronously
### Abstract
Update CONTRIBUTING.md to comply with Amaru workshops decision on June 4th 2026
Signed-off-by: Damien <161828179+Dam-CZ@users.noreply.github.com>
Epoch Transition Benchmark
### Abstract
Granular Ledger Benchmarks
### Abstract
Global Ledger Benchmarks
### Abstract
chainsync stalls after crash recovery — node finds intersect but never requests next block
## Summary
Clean up FetchBlocks2 interim API
### Abstract
Add a top-level README pointer to the Docker workflow
### Abstract
Improve stale ledger lock-file error handling and recovery UX
### Abstract
Enable the TraceBuffer in production
### Abstract
Garbage collect contramapped stages
### Abstract
Use a separate column family for `BEST_CHAIN_PREFIX`
### Abstract
Monitor RocksDB metrics
### Abstract
Add extra metrics: support gLiveView.sh
### Abstract
Add simulation tests for various network issues
### Abstract
implement initiatorOnlyMode=false on outgoing connections
### Abstract
Amaru's computed `active_stake` (total delegated stake across all pools) diverges from the on-chain value starting at the snapshot used for earned epoch 619 rewards
### What revision are you using?
Reach ledger predicate parity with the Haskell node
### Abstract
Properly handle in/out/duplex peers
### Abstract
Promote downstream connections to initiator mode on incoming connections (warm -> hot peer transition)
### Abstract
fix amaru-sim test termination
### Abstract
Cardano Node Diversity platform
### Abstract
Update the animations for the simulation
### Abstract
Add ledger checks to the simulation
### Abstract
Add the txsubmission protocol to the simulation
### Abstract
Migrate Phase Two Types to Kernel
Fixes #796.
feat: improved monitoring basic
Make sure `monitoring/basic` reflect latest state:
Value (mostly) preserved validations
This PR introduces a new failure `ValueNotPreserved`. However, the implementation is known to be non-conforming. This is because our context does not provide account or pool state. We need account state to check the true deposit, instead of just assuming/trusting the certificate. We need the pool state to check if a pool is being "re-registered", so we don't charge them for an already registered pool.
feat: gliveview docker helper
Amaru team wants to make sure that well-known cardano tools can work seamlessly with amaru. This is also a way to ensure amaru expose community accepted standard (e.g. metrics).
chore: address clippy comments
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
Fix script integrity hash mismatch preprod
This was due to the non-ratification of a protocol parameter change, for which the first ratification round was wrongly skipped.
feat: get rid of protocol v9
Amaru doesn't bootstrap from genesis but from well known snapshots. Now that snapshots can be more reliably be created it's been decided to drop v9 support and provide fresher snapshots (current ones are more than a year old).
chore: general bootstrap improvements
Based on feedback from @KtorZ , improves recent bootstrap changes.
Fix epoch transition effective happening
### Problem
feat: add traces and metrics for the mempool
This PR adds traces and metrics for the most important events on a mempool.
Introduce more fixtures
This PR is just migrating some more existing unit tests to fixtures; claude-written, human-directed.
feat: bootstrap adjustments
This PR:
feat: transaction id display
This PR makes the transaction id `Display` instance display the full id and adds a helper to only display a truncated ids in potentially large lists of ids.
fix ledger rollback_to when target==ledger_tip
My previous fix in #756 was faulty, it only worked correctly when rolling back to `immutable_tip()`. Now I extended a testcase to check that this behaviour stays fixed.
feat: leaner bootstrap and snapshots creation
This is a focused attempt at making it easy to create new snapshots.
fix: terminate the adopt_chain stage if invariants are broken
This PR makes sure that we terminate the node in case we broke some invariants in the `adopt_chain` stage.
work towards dynamic peer selection
This PR adds some needed infrastructure for dynamic peer selection and also adds an EDR to fixate some design points in the consensus layer.
feat(bootstrap): report progress during long-running stages
fixes #773
fix: order the proposals
This PR fixes an issue found when syncing the `preview` network, where proposals were not returned in the correct order.
Remove VolatileCache
The `VolatileCache` was a premature optimization. As we are expanding to support more state, we will create nicer abstractions that apply to all the necessary objects.
fix: Redeemer map behavior to match Haskell impl
Added remove before insert on script_table in all 6 branches of `ScriptPurpose::builder`. `BTreeMap::insert` keeps the existing key when an Ord-equal key is inserted, only replacing the value. This meant duplicate redeemers (same tag+index, different ExUnits) would silently retain the first redeemer's ExUnits — diverging from Haskell's Map.fromList which keeps the last duplicate. The remove-before-insert pattern ensures the new key (with correct ExUnits) fully replaces the old one.
feat: implement missing mempool logic + tx-submission checks
This PR implements the minimum missing logic for the mempool:
fix: transaction rollback
This PR fixes #836 by:
fix: consume utxo inputs in the current block and volatile state
This PR fixes the search for consumed inputs by looking at the consumed inputs inside the current block validation state and the rest of the volatile db.
test: check tx submission in simulation
Keeping this branch around for now.
Additional CI fixes & cleanup
- :round_pushpin: **fix: do not use separate caches for bench and coverage** We are limited to ~10GB cache on github; with these two extras, we go beyond the limit and Github automatically evicts other more useful caches. So for this two, we'll simply default back to linux cache.
feat: add new metrics
Add new metrics. Goal is to reach `cardano_node` parity. We ignore metrics related to: * peer selection * block forging * `cardano_node` / haskell internals related
fix: machete must run if code changed too
Always machete :D Unused deps appear when code doesn't use them anymore.
fix: include the era tag in the transactions serialization
The serialization of transactions was missing the era tag. I did not notice that before because I was only testing `amaru` with `amaru` :-)
fix: get the tx_id from the transaction body
The main fix of this PR is the retrieval of the transaction id used in the mempool and tx submission protocol from the transaction body and not from the hashing of the full transaction CBOR.
Reference Script Size & Minimum Fee Calculations
Introduce more missing predicates, this time around reference script size limits. I acknowledge there is duplicate work here, where we iterate to find the script sizes twice; once at the block level before we call phase one validation per transaction, and once during phase one validation. I decided that this is an acceptable situation, since it is not a particularly expensive, and it is much simpler to reason about than threading the calculation through from either phase one back to the block level, or vice versa.
Min Fee Calculation
This PR is stacked on top of #820 because we depend on the total reference script size for the fee calculation. Opening as a separate PR to help make reviews simpler.
fix: validate downloaded but still unvalidated blocks in fetch_blocks
This PR fixes the case where the `fetch_block` stage might have downloaded blocks that were not yet validated before. Without it, we could have an inconsistent state on restart.
fix: avoid writing to CI cache by default, make it explicit.
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit
fix: use 'cargo run' for generating and validating trace schemas + revert sccache
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit
fix: only use responder connections to fetch blocks
This PR makes sure that we don't try to fetch blocks from a peer when we are the responder of a connection. It also cleans-up the previous `Blocks/FetchBlocks` messages which were not used with the introduction of `Blocks2/FetchBlocks2`.
Recklessly killing bees and penguins
Empty commit to test out new cache and cleaned up CI. Does nothing, burn CPU cycles in the cloud.
Ledger Test Harness & Some Initial Fixtures
This PR is the first step to resolving #797. I am introducing a prototype of the ledger test harness and the shape of the test fixtures. While the rust code is open for review (particularly in terms of how we want to decode the JSON fixtures), the most important discussion I want to have is around the test fixtures and whether or not they meet the requirements of #797.
test: update the animation for the execution of a simulation
This PR updates the animation of a trace produced by the simulation:
CI cleanups: bump CI action versions, use ubuntu-24.04, remove buildjet runners, switch to sccache
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit
Remove Examples and MemoryStore
This PR closes #795, finally removing the `MemoryStore`, by *also* removing the examples. They are misleading, implying that using Amaru in nodejs is "simple", even though the `MemoryStore` is broken and shouldn't have been used.
Reduce dependencies on MemoryStore
It is not entirely straightforward to remove it entirely, since RocksDB cannot compile to WASM, and we need some storage solution for the nodejs examples we provide.
ci: don't connect to upstream peers for snapshot tests
This disable upstream peer connections for the cardano-node used in the end-to-end snapshot tests:
fix: preserve tx_id after round-trip
The transaction id is currently not preserved after a CBOR round-trip of a transaction. This creates issues with the mempool and the txsubmission protocol which rely on transaction ids to be identical across node implementations.
Introduce some basic fixtures
This PR introduces some basic ledger fixtures, introducing basic coverage for some of the metadata and input related predicates. Introducing these fixtures helps us confirm that this schema makes sense, the harness is correct, etc.
fix: don't fail rollback inside the volatile ledger
We can't currently rollback the ledger to a previous volatile state.
ScriptIntegrityMismatch
This PR introduces everyone's favorite predicate, `ScriptIntegrityMismatch`!
Validity Interval Validations
This PR introduces two new predicates checking the validity interval. Conformance suite currently has no tests that cover this, so I introduced unit tests to cover each basic case.
Publish on brew
Add bench capacities
Add a new `bench` subcommands allowing to provide metrics about current hosts. Those should be relevant to `amaru` e.g.
Allow to browse static JSON
`amaru` can output JSON traces. Allow to open them and display details.
Allow to browse metrics
OpenTelemetry offers metrics primitives. Create a new screen allowing to see at a glimpse the most important ones exposed by amaru. It should leverage ratatui primitives to display metrics.
Visualise current network connections state
Showing the state of incoming/outgoing (or initiator/responder as mini protocols' terminology has it) would be useful to troubleshoot a node's state. In particular, we'll need to be able to trigger disconnections of "faulty" nodes so while we'll obviously trace that, visualising the links from/to a node would be nice.
Publish on crates.io
Will allow use of https://github.com/cargo-bins/cargo-binstall
Add static querying capacities
`amaru` should offer static querying capacities e.g. access db details
Allow to search DReps by ids
Add VIM keybindings for navigation
Make sure VIM like keybindings are added on top of regular keybindings for navigation between various panels.
Add a main screen showing off instances details
Could take inspiration from https://github.com/blinklabs-io/nview
Publish on crates
This is currently blocked by amaru not being published on crates
Introduce indexing
Searching entities by most key requires full scan. Introduce a local index mechanism to speed things up.
Allow to be used as a library
Make sure `amaru-doctor` can be used as a library in `amaru` directly.
Allow to browse resource deltas between two epochs
Doc cleanup
Updated documentation across the board, and updated the Readme. The current current docs can be found [here](https://docs.rs/amaru-uplc/latest/amaru_uplc/).
fix: align cost model key lists with Haskell ParamName enum order
This PR updates the cost model logic to support the upcoming v11 changes.
Various fixes
Implement case on constant
This PR implements case on constant.
Conformance test fixes
This PR fixes the updated conformance tests that were a result of cost model changes and Haskell logic divergences.
Conformance CI Changes
Make sure that both the text and flat conformance test both always run, even if suite one fails
Implements Value builtins and Value type
This implements [CIP-153](https://cips.cardano.org/cip/CIP-153) which adds the Value constant and the following builtins: - InsertCoin - LookupCoin - UnionValue - ValueContains
Convert textual tests to flat
The conformance suite we pull from [IntersectMBO/plutus](https://github.com/IntersectMBO/plutus) uses text-encoded programs. In practice, these decoders are only used for tests; on-chain scripts are encoded as flat bytes. Therefore, it is possible to have a fully green conformance suite and introduce subtle bugs in the flat decoder implementations. This PR migrates the fixtures from the textual format to flat-encoded programs, and provides fixtures as JSON instead of raw bytes, to make it easier to work with them.
Implements bls12 MultiScalarMul
This implements [CIP-133](https://cips.cardano.org/cip/CIP-133) which adds the builtins `bls12_381_G1_multiScalarMul` and `bls12_381_G2_multiScalarMul`
Update conformance tests
This updates the conformance test with the latest suite. This PR is intended to get the updated conformance tests in and then get the tests to pass in subsequent pull requests.
V1/V2 cost models missing support for new Plutus builtins backported by Cardano protocol v11 (van Rossem)
## Context
fix budget when traversing value structures
fix: pad contingency registry_script.hash to 28 bytes
One-character JSON fix in `journal/2026/metadata.json`.
Add CAG off-ramp address to journal metadata
The journal `metadata.json` currently lists only scope_owners and the five treasury script anchors. Designated off-ramp / vendor-coordination addresses (per CAG MSA §1.7) live only in off-chain email and in per-tx on-chain rationale references[].
swap_order: relax cancel policy from AllOf to AtLeast(2, owners)
As discussed in the Discord channel.