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 wiring of the recursive SNARK proof in the aggregate signature, and its integration in the end-to-end tests and its deployment in a test network. They continued work on refactoring the unsafe SNARK setup and refactoring the preparation of the prover input for the recursive SNARK aggregation primitives.

The team also completed the implementation of the monitoring for Cardano blocks and transactions in the protocol dashboard, the integration tests for the unknown signed entity type in the signer and aggregator, and the enhancements of the aggregator state machine to support the Blocked state. They continued work on the release of the 2626 distribution, the upgrade to Cardano 11.1, and the update of the DMQ node to 0.7.0.0.

Finally, the team fixed some flakiness in the Hydra CI, enhanced the versions bump script and implemented a GitHub workflow to automate the marking of stale issues and pull requests.

Low level overview

Features

  • Completed the issue Recursive SNARK aggregation primitives: Wire SNARK proof in aggregate signature #3141
  • Completed 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 Implement monitoring for Cardano Blocks and Transactions in Protocol dashboard #3157
  • Completed the issue Activate CardanoBlocksTransactions in Mithril networks #3160
  • Completed the issue Add integration tests for unknown signed entity type in signer and aggregator #3296
  • Completed the issue Flaky CI on hydra run of ci/hydra-build:x86_64-linux.mithril-common #3329
  • Completed the issue Enhance versions bump script #3334
  • Completed the issue Mark stale issues and PRs with GitHub workflow #3339
  • Completed the issue Certification stopped on ivc-snark-preview network #3351
  • 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 Enhance aggregator state machine to support Blocked state #3333
  • Worked on the issue How to reduce the IVC tests duration #3343
  • Worked on the issue Upgrade to Cardano 11.1 #3346
  • Worked on the issue Update DMQ node to 0.7.0.0 #3358

Performance & Tracing Update

· 5 min read
Michael Karg
Performance and Tracing Team Lead

High level summary

  • Benchmarking: -O2 build optimization benchmarks.
  • Development: Legacy iohk-monitoring tracing backend removed from cardano-node; RTView removed from cardano-tracer; trace-dispatcher maintenance and ongoing restructuring into Hermod packages.
  • Infrastructure: Genesis cache overhaul with full Protocol Version 11 overlay close to merging.
  • Tracing: ReCon framework and trace-resources moved to Hermod project; cardano-tracer timeseries HTTP API and Grafana datasource merged; ASCII operator spellings for cardano-recon-framework.

Low level overview

Benchmarking

The P&T team has performed benchmarks of a highly optimized build (-O2) vs. a build using standard optimization (-O1), the latter being the current default for our releases. The benchmarks demonstrated that under low to near-idle submission load, no significant gains in resource usage were achieved. Only under full saturation over extended periods of time was a ~17% reduction in Process CPU usage measured, whereas RAM usage was stable. However, in both cases, we observed small increases (3% - 6%) in block adoption times across the network. For the current Praos Node, we still recommend the default. When using another Consensus mode with a significantly higher idle baseline, it's worth noting there's a potential trade-off that can be made.

Development

Last month we reported that the removal of the legacy iohk-monitoring-based tracing backend from cardano-node was complete but awaiting final verification. That PR has now been merged (cardano-node PR#6580). The change eliminates approximately 11,000 lines of dead code across 15 modules and removes 9 transitive build dependencies, leaving trace-dispatcher as the sole tracing backend. With this out of the way, the remaining components of the new tracing system can be moved into the self-contained Hermod Tracing System project repository without coupling their release cycle to cardano-node. Please refer to the PR description for a detailed breakdown of now obsolete Node config keys.

Alongside that, RTView has been removed from cardano-tracer (cardano-node PR#6607). RTView was an experimental, opt-in browser dashboard hidden behind a build flag since version 0.2.4. Its functionality is now fully covered by the Grafana datasource and the timeseries server built into cardano-tracer, making the component redundant. The removal cleans up 35 source files and several build dependencies.

The P&T team has also completed a focused maintenance pass over trace-dispatcher (hermod-tracing PR#12). Additionally, work is underway to restructure trace-dispatcher into two distinct packages — hermod-tracing-api, carrying types and combinators, and hermod-tracing-core, carrying the full backend stack including EKG and Prometheus (hermod-tracing PR#16). This split will allow downstream packages that only need to instrument their own code to avoid pulling in the full backend stack as a dependency.

Infrastructure

The genesis cache overhaul for our performance workbench (the benchmarking automation framework) is completed and close to merging (cardano-node PR#6544). As reported last month, the new approach splits a genesis into two independently-cached halves — the heavy dataset (keys, UTxO entries, delegators, DReps) and the per-era protocol parameters — which are then reassembled on demand. This greatly widens the range of parameters a benchmarking profile can modify without causing a full cache miss. The PR additionally restores non-default Plutus cost models via the Alonzo genesis extraConfig field, and includes a full Protocol Version 11 overlay with the updated cost models and execution budgets that have been submitted as a governance action on mainnet.

Tracing

With the legacy tracing removal merged, the cardano-recon-framework and the trace-resources package have both been moved from cardano-node into the Hermod Tracing System project. The ReCon framework has been accommodated under hermod-tracing (cardano-node PR#6598, hermod-tracing PR#11); trace-resources — which provides cross-platform OS-level resource sampling (CPU, memory, network I/O, filesystem I/O, thread count) — has been renamed hermod-trace-resources (hermod-tracing PR#14), with its module namespace updated from Cardano.Logging.Resources.* to Hermod.Tracing.Resources.*. All logic, platform-specific C bindings, and tests are preserved unchanged.

The cardano-tracer timeseries HTTP API and its accompanying Grafana datasource, which we reported as being in testing last month, have now been merged (cardano-node PR#6562). The API provides PromQL-like queries over metrics timeseries stored by cardano-tracer, aligned closely with the Prometheus HTTP API schema so that existing Grafana integrations and community-built tooling can reuse familiar glue code. The Grafana datasource shipped alongside it replaces the now-removed RTView and includes a reference dashboard for operators to build from.

The cardano-recon-framework formula parsers now accept ASCII alternatives to their Unicode operators (hermod-tracing PR#15). Spellings such as \globally, \finally, && and => are now valid alongside the original Unicode forms, as are numeric indices in parentheses (e.g. \globallyN(2)). This makes authoring LTL properties more accessible in environments where Unicode input is inconvenient, and ships as part of v1.4.0.

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