Skip to main content

Mithril Team Update

· 3 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview

This week, the Mithril team completed caching of circuit keys for the SNARK circuit in the STM library and removed the helpers module for the SNARK recursive circuit. They continued work on the type consistency and naming alignment refactoring of the SNARK recursive circuit, the prover input of the recursive SNARK aggregation primitives, and the implementation of the SNARK-friendly genesis certificate.

The team also completed enhancements to support the genesis verification key in the explorer. They continued work on shipping the Mithril signer node binary in the Cardano node bundle, enforcing the DMQ message ID format, prototyping the Cardano node ledger state certification, and removing Mithril node support in mithril-devnet.

Finally, the team worked on optimizing the end-to-end tests for SNARK and fixing flakiness in the CI.

Low level overview

Features

  • Completed the issue Circuit keys caching for SNARK circuit in STM #3043
  • Completed the issue Refactor SNARK recursive circuit - Remove helpers module #3132
  • Worked on the issue Refactor SNARK recursive circuit - Type consistency #3128
  • Worked on the issue Refactor SNARK recursive circuit - Naming alignment #3130
  • Worked on the issue Recursive SNARK aggregation primitives: Prepare prover input #3138
  • Worked on the issue Implement SNARK-friendly genesis certificate #3145
  • Worked on the issue Prototype Cardano node ledger state certification #3269

Protocol maintenance

  • Completed the issue Enhance support of genesis verification key in explorer #3270
  • Worked on the issue Ship Mithril signer node binary in Cardano node bundle in GitHub #3011
  • Worked on the issue Optimize e2e tests for SNARK #3151
  • Worked on the issue Enforcement of DMQ message id format #3251
  • Worked on the issue fails_with_empty_signatures flakes in CI due to concurrent SRS temp file collision #3292
  • Worked on the issue Remove Mithril nodes support in mithril-devnet #3295
  • Worked on the issue Update DMQ node to 0.5.0.0 #3302

Consensus Team Update

· 3 min read
Damian Nadales
Consensus Team Lead

High level summary

The Leios monthly demo and review took place on 2026-05-27. Several of the items below were presented or discussed during that meeting.

  • Leios prototype development (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Started migrating the prototype to the Dijkstra era of the Cardano node, which enables Stake Pool Operator key registration and brings the prototype in line with the audited BLS cryptography.
    • Working on EB application and mempool partitioning (#2047).
    • Working on wiring the mempool transaction-load events into the throughput dashboard (ouroboros-leios#929).
  • Leios fetch and network design (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Continued investigating multi-peer Endorser Block fetch strategies. The current proposal is a single large request to a high-latency peer (for example Europe to Australia), capped at roughly 30 MB in flight per EB, with neighbourhood diffusion taking over once the data arrives. Simulation results show this approach meets the 7 to 14 second budget. Slow-loris impact is still being assessed.
    • Refined the safety argument for linear Leios and flagged that the Rust simulator currently assumes peer reliability, which is not a safe assumption on mainnet.
    • Proposed EB precursors (proto-EBs) as a way to raise confidence without raising the voting time threshold.
    • Concluded that erasure coding is unlikely to pay off at this stage, given the estimated 60 ms latency cost and added complexity.
    • Working on the Mininet LeiosFetch logic test bed and the linear Leios tuner (ouroboros-leios#880, ouroboros-leios#891).
    • Committee selection scheme change was merged into the Leios SIP, cutting the certificate size from around 8 KB to 200 B.
  • Mempool design for Leios (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Started a discussion on mempool goals for the Leios protocol. Revalidating entire transaction sequences against multiple ledger states is wasteful, and certifying an Endorser Block produces a new ledger state that can render the basic mempool state irrelevant. Designs under consideration include two distinct mempools and a Directed Acyclic Graph for the ledger.
  • LSM-trees and UTxO-HD (Treasury Funding Initiative 10: LSM including UTXO-HD):
    • Updated the LSM-trees package dependencies (#2021).
    • Working on the UTxO-HD redesign (#2049).
    • Working on adding LSM snapshot export when an export path is configured (#2053).
  • Ledger-HD (Treasury Funding Initiative 11: Ledger-HD):
    • Working on an example PR that moves InstantStake onto the redesigned UTxO-HD, demonstrating the pattern that the remaining Ledger-HD datasets will follow (#2055).
  • Maintenance and tooling (Treasury Funding Initiative 17: Maintenance and Support):
    • Working on predictable ledger state snapshots in cardano-node (cardano-node#6526).
    • Working on enabling search on the consensus documentation site (#2059).

Performance & Tracing Update

· 5 min read
Michael Karg
Performance and Tracing Team Lead

High level summary

  • Benchmarking: Release benchmarks for 11.0.1; Feature benchmarks for: TxSubmissionLogicV2; Compiler version.
  • Development: Removal of legacy tracing completed - not yet merged.
  • Infrastructure: Genesis caching and post-processing completed - not yet merged.
  • Tracing: cardano-tracer HTTP API for metrics timeseries queries and Grafana datasource - not yet merged.
  • Leios: Leios/Mempool benchmarks using tx-centrifuge.
  • Node Diversity: Formal trace schema definition merged; Conformance framework to be presented at Porto workshop.

Low level overview

Benchmarking

We've performed, analysed and published relase benchmarks for Node version 11.0.1 - the release shows no performance regressions compared to 10.7.1. These benchmarks ran under Protocol Version 11, and were required to ensure there's no performance risk in using this version.

Furthermore, we've run feature benchmarks for a new incarnation of v2 of the tx submission logic. The new logic is an optimization and aims, among other things, to reduce redundancy in tx diffusion. While the feature is experimental, the benchmarks provided valuable measurements and data for the network team to move it forward.

Additionally, we've re-run benchmarks using the GHC9.12 compiler version on the new 11.0.1 baseline; since 10.6.2, there have been many changes in Ledger which impact generated code and compiler optimizations. While there's no fundamental performance blocker to use this more recent compiler on our code base, there are still a few unknowns. The data is currently still under review and discussion.

Development

With the upcoming 11.1 release, the legacy tracing system 'iohk-monitoring-framework' will finally be removed from the Node. The change extensive, as it involves large differences in project dependencies, in code, in configuration and in test suites. Old and new tracing system have been part of the Node build side-by-side for roughly two years now, with the new tracing system gaining wider adoption the last half year. Removing the need to stay backwards compatible with the legacy system within the same build unblocks several planned features for the new system, as well as finally moving it out into its own self-contained Hermod Tracing System project repository.

While the implemention is complete, the PR cardano-node PR#6580 is currently still in draft state, awaiting full verification and testing.

Infrastructure

The modularization of our automation's genesis cache is completed. In addition to quickly stitching together a custom genesis with a huge amount of injected staking data, it allows for all protocol-relevant fields of genesis to be freshly generated by cardano-cli - and not taken from the cache. This means, the post-processing has now been reduced to a minimum; that improves confidence in the benchmarking profiles insofar as it eliminates testing of workbench changes still being correctly patched onto potentially very long-lived cache entries on a variety of hosts.

Moreover, this change includes a proper profile overlay for Protocol Version 11, which includes changes to Plutus cost models and execution budgets that have already been submitted as a gov action on Mainnet. The (quite extensive) PR is currently in draft state and under testing: cardano-node PR#6544.

Tracing

The new version of cardano-tracer will come with an (opt-in via config) HTTP REST API to query metrics timeseries directly. As cardano-tracer can now store metrics of all connected Nodes, it's able to evaulate PromQL-like queries directly. This can be used as an alternative to having Prometheus scrape all of those processes. With the new release, we made the (previously experimental) API as much aligned to what users are accustomed to from Prometheus, so that it has reached reasonable stability.

Moreover, we built - from scratch - a Grafana datasource using that API. This datasource contains a dashboard to replace the deprecated 'RTView' component of cardano-tracer, and is intended to serve as a reference for the community to define their own dashboards and queries according to their monitoring needs.

This PR, too, is fairly extensive, and also contains several improvements and fixes of the underlying cardano-timeseries-io package: cardano-node PR#6562, currently in testing phase.

Leios

We've created, and performed, full cluster benchmarks for Leios - using our new high-pressure submission tool tx-centrifuge. The point of interest of these benchmarks was observing Mempool behaviour, under various levels of fragmentation, and various configurations as to its capacity. These benchmarks are meant close a gap to the Leios simulations providing evidence, by measuring concrete timings of a concrete Mempool implementation. The benchmarks have shown that a standard Mempool tuned to Praos will likely throttle maximum throughput for Leios. With this benchmark at hand, and Mempool identified as a potential bottleneck, the necessary adjustments or optimizations can always be confirmed and backed up by evidence.

Node Diversity

The comprehensive formal schema definition of the Node's existing trace messages has been merged (cardano-node PR#6527). This encodes the syntax and semantics of all the observable events that the Haskell Node implementation provides. Thus, it can serve as a reference to what diverse clients may implement - to gain comparability in protocol conformance, network performance, and the reuse of existing tooling relying on those observables.

That being said, the cardano-recon-framework is one such example. We've continuosly improved our Linear Temporal Logic based trace verifier for system behaviour; we've set several interesting properties that can be checked continuously from Node logs. One of our team will attend the Node Diversity workshop in Porto beginning of June, and contribute a presentation and a demo of this framework.

Network Team Update

· 4 min read
Marcin Szamotulski
Network Team Lead

Overview of sprint 114.

Summary

Leios

The TxSubmission v2 demo was merged, providing an end-to-end demonstration of TxSubmission V2. A benchmark study of incremental vs. non-incremental CBOR block decoding shows that decoding blocks incrementally yields modest improvements for standard Praos blocks, and larger gains for multi-megabyte blocks — directly relevant to Leios where block sizes may grow substantially. Cardano-base was bumped to include support for Leios voting. A simple TCP congestion-window model was added to the Leios Rust simulator (sim-rs), porting the model from the Haskell simulator; mini-protocol multiplexing remains a gap to be addressed. An alternative TxSubmission V2 design without a central decision thread is under review, superseding the earlier exploration.

Ouroboros-Network

bracketFetchClient and bracketKeepAlive were decoupled by splitting FetchClientRegistry into KeepAliveRegistry and FetchClientRegistry — a prerequisite for DMQ-Node integration. Contra-tracer was upgraded to 0.2.1, unblocking the removal of iohk-monitoring-framework from cardano-node 11.1. The peer-selection governance target was renamed from selectEnvTargets to selectGovTargets. Various tracing and API improvements were merged as part of ongoing DMQ-Node integration work. A new protocol version NodeToClientV_24 for the ValidateTx local-state-query is under review.

DMQ-Node

Version 0.5.0.0 was released. The announcyness metric for peer selection was merged: it scores peers by how often they are first to announce a valid signature, with scores kept for one hour matching the churn rate. SigId validation was improved: CBOR encoding was corrected to use Hash Blake2b_256 for the sigId field, and SigExpired failures are now restricted to the ZeroSetSnapshot case. An ouroboros-network integration update is in review. Work on connecting the DMQ kernel to cardano-node continues, blocked on pr#58.

IO-Sim and TypedProtocols

io-sim and typed-protocols repositories were moved to IntersectMBO organisation on GitHub.

Leios

PR / IssueStatus
TxSubmission V2 without a decision threadin review
Block decoder: incremental vs. non-incremental benchmarkin review
Bump cardano-base for Leios votingmerged
TxSubmission v2 demomerged
simple TCP model for sim-rsmerged

Ouroboros-Network

PR / IssueStatusNotes
Add NodeToClientV_24 for ValidateTx queryin review
cardano-diffusion: label ledger peer usagein reviewcontribution by dancewithheart
Various changesmerged
Renamed selectEnvTargets to selectGovTargetsmergedcontribution by dancewithheart
Upgrade to contra-tracer 0.2.1mergedcontribution by f-f
Decouple bracketFetchClient and bracketKeepAlivemerged
cardano ping implemented with ouroboros-networkblocked

DMQ-Node

PR / IssueStatus
node kernel cleanupin progress
Updated ouroboros-network versionin review
dmq-node-0.5.0.0 pre-releasemerged
SigId validationmerged
Drop support for x86_64-darwinmerged
announcyness metric for peer selectionmerged

IOSim

PR / IssueStatus
Repo moved to IntersectMBOmerged

Typed Protocols

PR / IssueStatus
Repo moved to IntersectMBOmerged

Ledger Team Update

· 4 min read
Alexey Kuleshevich
Ledger Team Software Engineer

High level summary

The most visible result of the past two weeks is that the Plutus context performance arc has reached its first real payoff. Two cycles ago we memoized the Plutus related parts of transaction validation, last cycle we threaded the state-annotated transaction StAnnTx through the LEDGER, UTXOW, UTXO and MEMPOOL rules across every era, and this cycle the rules actually start consuming the precomputed information stored in StAnnTx instead of recomputing it. In parallel we kicked off a sizeable effort to remove the legacy Coders machinery from the codebase: several call sites have been switched off Coders, a new SparseKeyed alternative has been introduced, and decodeSparseKeyed was extended to cover additional types. This is part of a broader cleanup that is expected to continue for several more cycles.

On the Dijkstra era CDDL front the work begun with the new block_body definition continued: we introduced a dedicated transaction_mempool rule so that the transaction decoder used in the mempool can be distinguished from the one used inside the block body, tightened the chain_code specification to 32 bytes, and landed a thorough pass of fixes to the Dijkstra CddlSpec so that all of the CDDL tests pass. We also pushed forward the second installment of conformance testing preparation for Dijkstra, this time adding an era type parameter to SpecTranslate and SpecTransM, instantiating it for the Conway modules, and updating the formal-ledger-specifications dependency accordingly.

The namespace work for the canonical ledger state initiative also continued, with a new entities/accounts/v0 namespace and a refactor of gov/proposals/v0 that preserves the proposals order, which is required to reconstruct ledger state faithfully.

On the benchmarking and tooling side we added two new criterion microbenchmarks for the TICK and NEWEPOCH rules, which we expect to be a tremendously useful tool for analysing epoch transition performance. Vector-map benchmarks were also fixed and we switched some hot paths to unsafe vector indexing where bounds checking is redundant. A new generate-cbor CLI tool was added, which makes it possible to generate CBOR for any rule in any era from the command line and should be useful both for our own debugging and for downstream consumers, such as serialization libraries and alternative node implementotions. The test reorganization started last cycle continued with the CddlSpec hierarchy being inverted to give cleaner test output and the predicate failure CBOR roundtrip tests being folded into the per-era ImpSpec set, which also brought in missing tests for the BBODY, MEMPOOL and Dijkstra-specific rules. Finally on the infrastructure side, the doctesting setup that was temporarily disabled in the last cycle has been properly refactored to use cabal repl --with-repl=doctest instead of cabal-doctest, and the index-state was bumped to pull in cardano-base 0.1.4.

Low level summary

Features

  • PR-5807 - Stop using Coders in some places
  • PR-5815 - Switch to unsafe vector indexing
  • PR-5804 - Use precomputed data from state-annotated transactions
  • PR-5834 - Coder's SparseKeyed alternative
  • PR-5843 - Add transaction_mempool
  • PR-5846 - Update Dijkstra chain_code
  • PR-5738 - Refactor gov/proposals/v0 namespace to include the proposals order
  • PR-5699 - Add entities/accounts/v0 namespace
  • PR-5847 - decodeSparseKeyed for more types

Testing

  • PR-5810 - Add examplePParams[Update] to EraTest for goldens.
  • PR-5814 - Add TICK and NEWEPOCH benchmarks
  • PR-5841 - Invert CddlSpec hierarchy
  • PR-5830 - Prepare conformance for Dijkstra 2
  • PR-5851 - Organize predicate failure CBOR roundtrip tests
  • PR-5779 - Fix various issues in Dijkstra CddlSpec to make all the tests pass

Infrastructure and releasing