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 the creation of the SNARK proof with the circuit in the recursive SNARK aggregation primitives, the addition of the missing ancillary data for the IVC aggregate signature creation, and the update of the Midnight ZK library audit status for SNARK. They continued work on wiring the SNARK proof in the aggregate signature, refactoring the preparation of the prover input, and refactoring the SNARK setups.

The team also completed the activation of the recursive SNARK prover in a dev network. They continued work on implementing the recursive SNARK proof generation and verification in the end-to-end tests and on reducing the IVC tests duration. They continued work on the integration tests for the unknown signed entity type in the signer and aggregator, the enhancement of the support for discontinued signed entity types in the aggregator, and the upgrade to Cardano 11.1.

Finally, the team completed the upgrade to Pallas 1.1.0 and the enhancement of the versions bump script.

Low level overview

Features

  • Completed the issue Update Midnight ZK library audit status for SNARK #3122
  • Completed the issue Recursive SNARK aggregation primitives: Create SNARK proof with circuit #3139
  • Completed the issue Activate recursive SNARK prover in dev network #3143
  • Completed the issue Add missing ancillary data for IVC aggregate signature creation #3341
  • Worked on the issue Recursive SNARK aggregation primitives: Wire SNARK proof in aggregate signature #3141
  • Worked on the issue Implement recursive SNARK proof generation and verification in end-to-end tests #3142
  • Worked on the issue Refactor unsafe SNARK setup #3300
  • Worked on the issue Recursive SNARK aggregation primitives: Refactor preparation of prover input #3319

Protocol maintenance

  • Completed the issue Upgrade to Pallas 1.1.0 #3297
  • Completed the issue Enhance support for discontinued signed entity types in aggregator #3332
  • Completed the issue Move slow tests to slow tier #3337
  • Worked on the issue Ship Mithril signer node binary in Cardano node bundle in GitHub #3011
  • Worked on the issue Release 2626 distribution #3271
  • Worked on the issue Add integration tests for unknown signed entity type in signer and aggregator #3296
  • Worked on the issue Enhance versions bump script #3334
  • Worked on the issue How to reduce the IVC tests duration #3343
  • Worked on the issue Upgrade to Cardano 11.1 #3346

Network Team Update

· 4 min read
Marcin Szamotulski
Network Team Lead

Overview of sprints 115 and 116.

Summary

Leios

Work on a Monte Carlo simulation of TCP CUBIC congestion — producing CDFs of payload transfer time accounting for slow start, congestion avoidance, and packet losses — is ongoing. The TxSubmission V2 design without a central decision thread remains under review.

Ouroboros-Network

The long-standing cardano-ping reimplementation using ouroboros-network was merged. Building on that, pingClient was exposed as a standalone API, and a new ping endpoint for validating SRV records and registration certificates is in review. A performance optimisation was merged: KnownPeers.setCurrentTime and EstablishedPeers.setCurrentTime — called on every governor loop iteration — now short-circuit in the common case, avoiding a full record rebuild and invariant check. NodeToClientV_24 for the ValidateTx local-state query and ledger-peer usage labelling remain in review.

DMQ-Node

The connecting the DMQ kernel to cardano-node was merged which restructures how dmq-node connects to cardano-node. Several correctness fixes accompanied it: identifying the correct ledger era for local state queries (fixing a crash on era transitions due to a hardcoded Conway era query) and fixing big-ledger-peer query results (slot was erroneously set to maxBound). Integration for the forthcoming Node release 11.1 is underway.

Leios

PR / IssueStatus
Produce CDF of time to transmit a datum over TCPin progress
TxSubmission V2 without a decision threadin review

Ouroboros-Network

PR / IssueStatusNotes
Add ping API for registration certificate validationin review
network-mux:test — code stylein review
Expose pingClientmerged
Efficient common case for setCurrentTimemerged
Allow QuickCheck 2.18in review
cardano ping implemented with ouroboros-networkmerged
Add NodeToClientV_24 for ValidateTx queryin review
cardano-diffusion: label ledger peer usagein reviewcontribution by dancewithheart

DMQ-Node

PR / IssueStatus
Integration for Node release 11.1in progress
Fix big ledger peer query resultsmerged
Fixed various issuesmerged
Identify the correct ledger era for local state queriesmerged
node kernel cleanupmerged
Updated ouroboros-network versionmerged

IOSim

PR / IssueStatus
export labelTChan and labelTChanIOin review

Hydra Team Update

· 4 min read
Noon van der Silk
Software Engineering Lead

High-level Summary

We've published the 2.2.0 release! It bundles up the partial fanout work and the hydra-tui revamp from the last couple of updates, together with a much richer benchmark suite (real-world TPS metrics, a Mixed UTxO generator, and a new matrix sub-command that sweeps cluster sizes and UTxO shapes, published to a scenario benchmarks page). On top of that we unified the on-chain membership checks around the BLS accumulator, which shrinks the snapshot-signing tuple and removes a pile of now redundant hashing, and started optimising snapshot processing so script-heavy heads don't pay to re-evaluate Plutus they've already validated.

What did the team achieve?

  • Released 2.2.0, packaging partial fanout, the hydra-tui revamp, and the new benchmarking work, with the changelog and network config updated accordingly
  • Unified the membership checks: the three separate UTxO hash fields (utxoHash, alphaUTxOHash, omegaUTxOHash) collapse into a single accumulatorHash derived from the BLS accumulator, shrinking the snapshot signing tuple from 7 fields to 4, and full fanout now verifies outputs via a KZG membership proof (the same path as partial fanout) rather than a hash comparison #2619
  • Started a snapshot-side throughput optimisation: transactions already validated on receipt are now re-applied via reapplyTx, skipping redundant Plutus script evaluation on the hot path, with a fallback to full application when a commit or decommit changes the active UTxO #2717
  • Extended PR benchmarking: a "TPS" count (both waiting for TxValid and firing as fast as possible then counting confirmed-snapshot txns) #2635, and a benchmark comparison comment showing the PR-vs-master difference #2721
  • Added a head-state visualisation tool for inspecting single states and diagnosing multi-party scenarios #2719
  • Added a mustNotMintOrBurn guard to the Increment and Decrement validator transitions, consistent with all the other head transitions #2718, #2697
  • Further validator fixes: CloseInitial now constrains the accumulator commitment, and the HeadStatus schema and Haskell types agree on Final #2712
  • Removed leftover CollectCom/Abort handling missed in the original "directly open head" work #2709
  • Switched to makeIsDataIndexed instead of unstableMakeIsData for stable on-chain constructor indices #2724, #2713
  • TUI fixes: the increment dialog no longer re-queries L1 UTxO state every time (it reuses the cached value and lets you refresh if you want) #2726, plus more small fixes #2710 and a fix for flakey TUI tests #2708
  • Merged a handful of simple fixes across smaller issues #2715
  • Added deposit and recover transition tests and tidied up some others #2711
  • CI and tooling: more nix caching by building derivations with -Werror to match nix flake check #2720, added etcd to the exes shell so smoke tests can run a system etcd #2722, and skipped the preprod-with-mithril path while it's offline #2723

What's next?

  • Add a test that probes how large a UTxO set we can actually (partially) fan out #2616
  • Continue the still-open node-observing-unrelated-Heads deposit issue #2606
  • Finish the user-friendly hydra-node configuration file #2581
  • Accept PaymentExtendedKey (HD wallet keys) #2583

Mithril Team Update

· 3 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview

This week, the Mithril team completed the prover input preparation and SNARK proof verification for the recursive SNARK aggregation primitives and adapted the certificate chain to support recursive SNARKs. They continued work on creating the SNARK proof with the circuit, wiring the SNARK proof in the aggregate signature, refactoring the preparation of the prover input, adding the missing ancillary data for the IVC aggregate signature creation, and updating the Midnight ZK library audit status for SNARK.

Additionally, they completed the optimization of the end-to-end tests for SNARK, updated the ledger state snapshot selection in artifacts, upgraded to Pallas 1.1.0, and enhanced support for discontinued signed entity types in the aggregator.

Finally, the team continued work on shipping the Mithril signer node binary in the Cardano node bundle, the release of the 2625 distribution, and the fix for the aggregator switch in the explorer.

Low level overview

Features

  • Completed the issue Recursive SNARK aggregation primitives: Prepare prover input #3138
  • Completed the issue Recursive SNARK aggregation primitives: Verify SNARK proof #3140
  • Completed the issue Adapt certificate chain to support recursive SNARK #3147
  • Worked on the issue Recursive SNARK aggregation primitives: Create SNARK proof with circuit #3139
  • Worked on the issue Recursive SNARK aggregation primitives: Wire SNARK proof in aggregate signature #3141
  • Worked on the issue Recursive SNARK aggregation primitives: Refactor preparation of prover input #3319
  • Worked on the issue Add missing ancillary data for IVC aggregate signature creation #3341
  • Worked on the issue Update Midnight ZK library audit status for SNARK #3122

Protocol maintenance

  • Completed the issue Optimize e2e tests for SNARK #3151
  • Completed the issue Update ledger state snapshot selection in artifacts #3298
  • Completed the issue Switch of aggregator does not work in explorer #3328
  • Worked on the issue Ship Mithril signer node binary in Cardano node bundle in GitHub #3011
  • Worked on the issue Release 2625 distribution #3271
  • Worked on the issue Upgrade to Pallas 1.1.0 #3297
  • Worked on the issue Enhance support for discontinued signed entity types in aggregator #3332
  • Worked on the issue Move slow tests to slow tier #3337

Consensus Team Update

· 2 min read
Damian Nadales
Consensus Team Lead

High level summary

  • Mithril integration (Treasury Funding Initiative 8: Mithril):
    • A node running on an on-disk backend can now also write a snapshot in the portable in-memory format when given an export path. Mithril signers need a single agreed format to sign, and this lets them get it straight from the node instead of running a separate conversion tool. This is the first part of #1574; the export format is not fully complete yet, as it still needs some fixes on the LSM-trees side (#2053).
    • Added a snapshot policy for Mithril that makes the timing of ledger-state snapshots predictable, using cadence values agreed with the Mithril team. Predictable snapshots let signers agree on the same state to sign (#2063).
  • Maintenance and tooling (Treasury Funding Initiative 17: Maintenance and Support):
    • db-analyser can now start an analysis from a snapshot at a chosen slot. Given --analyse-from, it picks the newest snapshot at or before that slot and replays only the blocks needed to reach it, instead of always replaying from genesis (#2061).
    • Fixed a rare corner case where a snapshot taken at the same slot as the immutable database tip, on an epoch boundary block, triggered an error. The node now discards the snapshot in that situation (#2070).
  • Documentation (Treasury Funding Initiative 17: Maintenance and Support):
    • Full-text search is now available on the consensus documentation website. The search index is built into the site as static files, so it needs no external service (#2059).