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 refactoring of the non-recursive SNARK proof to remove the circuit verification key, upgraded the midnight-zk library to 2.3.3, enabled the Plutus-friendly hash for IVC proving, and refactored the error handling in the Midnight library. They also continued analyzing and optimizing the testing strategy for the STM SNARK modules.

The team also continued implementing aggregator CLI commands for configuration parameters and creating a runbook for on-chain configuration parameters. They completed the simplification of the SignersRegistrationRetriever trait and continued work on shipping the Mithril signer node binary in the Cardano node bundle, the 2628 distribution release, the upgrade to Cardano node v.11.1, and the update of the DMQ node to 0.7.0.0.

Finally, the team completed the repository transfer to the Intersect MBO organization and continued preparing the documentation website for Docusaurus v4.

Low level overview

Features

  • Completed the issue Refactor the non-recursive SNARK proof to not carry the circuit verification key #3380
  • Completed the issue Upgrade midnight-zk to 2.3.3 #3375
  • Completed the issue Enable plutus friendly hash for IVC proving #3307
  • Completed the issue Refactor error handling from Midnight library #3382
  • Worked on the issue Implement aggregator CLI commands for configuration parameters #3392
  • Worked on the issue Analyze and optimize the testing strategy of the STM SNARK modules #3405

Protocol maintenance

  • Worked on the issue Transfer repository to IntersectMBO organization #3276
  • Completed the issue Simplify the SignersRegistrationRetriever trait #3410
  • Completed the issue Prepare documentation website to docusaurus v4 #3411
  • Worked on the issue Ship Mithril signer node binary in Cardano node bundle in GitHub #3011
  • Worked on the issue Release 2628 distribution #3271
  • Worked on the issue Upgrade to Cardano 11.1 #3346
  • Worked on the issue Update DMQ node to 0.7.0.0 #3358
  • Worked on the issue Create runbook for on-chain configuration parameters #3399
  • Worked on the issue Update documentation website to docusaurus stable version 3.10.2 #3413
  • Worked on the issue Update documentation website to tailwind v4 #3414

Mithril Team Update

· 3 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview

This week, the Mithril team completed the modularity enhancement of the SNARK recursive circuit with gadgets. They continued work on refactoring the non-recursive SNARK proof to avoid carrying the circuit verification key, analyzing and optimizing the testing strategy for the STM SNARK modules, and upgrading the midnight-zk library to 2.3.3.

The team also enhanced the aggregator state machine to support the Blocked state and continued implementing the aggregator CLI commands for decentralized configuration parameters. Additionally, they continued shipping the Mithril signer node binary in the Cardano node bundle, working on the release of the 2628 distribution, upgrading to Cardano 11.1, and updating the DMQ node to 0.7.0.0.

Finally, the team completed the Rust upgrade to version 1.97, fixed the Mithril install script failing on the unstable version, and captured the end-to-end execution logs as artifacts.

Low level overview

Features

  • Completed the issue Refactor SNARK recursive circuit - Modularity enhancement with gadgets #3131
  • Worked on the issue Refactor the non-recursive SNARK proof to not carry the circuit verification key #3380
  • Worked on the issue Implement aggregator CLI commands for configuration parameters #3392
  • Worked on the issue Analyze and optimize the testing strategy of the STM SNARK modules #3405
  • Worked on the issue Upgrade midnight-zk to 2.3.3 #3375

Protocol maintenance

  • Completed the issue Upgrade Rust to version 1.97 #3387
  • Completed the issue Enhance aggregator state machine to support Blocked state #3333
  • Completed the issue Mithril install script fails for unstable version #3386
  • Completed the issue Capture e2e execution logs in artifacts #3362
  • Completed the issue Remove docker-build: in make files #3406
  • Worked on the issue Ship Mithril signer node binary in Cardano node bundle in GitHub #3011
  • Worked on the issue Release 2628 distribution #3271
  • Worked on the issue Upgrade to Cardano 11.1 #3346
  • Worked on the issue Update DMQ node to 0.7.0.0 #3358

Consensus Team Update

· 3 min read
Damian Nadales
Consensus Team Lead

High level summary

  • Leios prototype and design (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Continued to harden the Leios testnet with a round of prototype fixes across consensus and the node (#2113, #6614), and cut two prototype releases carrying this work, prototype-2026w27a (#978) and prototype-2026w28 (#986).
    • Fixed two bugs found while running the testnet. The node no longer applies uncertified endorser blocks from the immutable database on startup, and the LeiosNotify pipelining depth was increased (#2114). A startup crash caused by a race condition on a node's first run was also resolved (#2115, fixing ouroboros-leios#983).
    • Added a voting dashboard to make Leios easier to observe, showing how endorser blocks are voted on and certified (ouroboros-leios#985).
    • Reviewed a change to how the node certifies and applies endorser blocks that is expected to roughly double the certification rate and raise throughput (#2105).
    • Drafted prose for the Leios high-level design document, describing how the pieces of the protocol fit together (commit 13e3908), and started negotiating the interface between Consensus and Ledger for Leios with the Ledger team (ouroboros-leios#977).
  • Node diversity and conformance (Treasury Funding Initiative 17: Maintenance and Support):
    • Took part in node diversity meetings on conformance testing with the Amaru team and others, including working through a conformance hurdle specific to the preview network.
    • Discussed how to specify the mempool and transaction submission precisely enough that other node implementations can follow the same rules.
  • UTXO-HD snapshot tooling (Treasury Funding Initiative 10: LSM including UTXO-HD):
    • Improved the snapshot-converter tool's --help and --version output, making it clearer how to convert ledger snapshots between the in-memory and on-disk (LSM) formats (#2098).
    • Added a temporary workaround so snapshot-converter reads the bloom-filter salt directly from exported files, until a proper fix lands on the LSM-trees side (#2097, pending lsm-tree#855).
  • Documentation (Treasury Funding Initiative 17: Maintenance and Support):
    • Added a reference document describing the metrics and tracing available for observing Ouroboros Genesis (#2103).

Hydra Team Update

· 4 min read
Noon van der Silk
Software Engineering Lead

High-level Summary

The user-friendly hydra-node configuration file has been merged, letting operators run a head from a single YAML file and diff configs against peers at a glance. The rest of the period was mostly hardening: deposit and recovery chain observations are now scoped to the head that produced them (closing a long-standing cross-head contamination issue), the Blockfrost backend retries on HTTP errors instead of crashing and no longer chokes on some inline datums, and the event store's rotation logic got two fixes - a race between VACUUM and streaming client history, and a deadlock in the network layer's outbound message queue that could silently halt broadcasting.

What did the team achieve?

  • Merged the user-friendly hydra-node configuration file: nodes can now be configured via YAML, making it easy to spot differences between peers' setups #2581, #2296
  • Scoped deposit and recover chain observations to the current head: Open/Closed states only record OnDepositTx events for their own headId and Idle silently drops the rest, while recovery of a deposit from a previous head keeps working in every state, including mid-fanout and while a new head is running #2743, #2606
  • Made the Blockfrost chain backend more resilient: HTTP errors are now retried instead of crashing the node #2729, #2477, and a follow-up fixed inline datum decoding that could throw on some UTxOs #2754, #2751
  • Fixed a race between the event log's VACUUM-based rotation and the API server streaming client history over the same SQLite connection, which could take a node down on reconnect #2755
  • Fixed a deadlock in the network layer's PersistentQueue: a false Eq result in popPersistentQueue could leave the broadcast queue stuck at capacity with no log output; it now pops unconditionally by index and emits PersistentQueueFull / PersistentQueueLoadFailed for visibility, and a failed file delete no longer crashes the network component #2742
  • Event log rotation now archives the outgoing database to a numbered old-state/hydra-<logId>.db file instead of deleting it, restoring the old file-based persistence's pre-rotation backup behaviour #2748, #2747
  • Added a fuel verification key option to hydra-tui so the funds tab can show both the head's ada and a separate fuel UTxO #2731
  • Moved the spec back into the hydra repo, dropping the separate flake input #2733

What's next?

  • Merge some in-progress performance work: computing accumulator commitments via the rust-accumulator FFI instead of off-chain PlutusTx, batching etcd broadcasts onto shared connections, and raising the per-snapshot transaction cap - early results show sustained throughput roughly doubling on a 1k-UTxO head #2752
  • Make hydra-chain-observer version-aware by detecting script hashes, so a single process can watch heads from any historical Hydra version instead of running one per version #2740
  • Enforce --deposit-period consistency across head nodes by embedding it in the on-chain OpenDatum #2734
  • Accept PaymentExtendedKey (HD wallet keys) #2583
  • Work on the updated version of the spec (typst+Agda)

Ledger Team Update

· 5 min read
Alexey Kuleshevich
Ledger Team Software Engineer

High level summary

This update covers a longer stretch than usual because there was no report since 2026-05-27: the whole Ledger team was first at the ZuriHac conference and then had an in-person team meetup, so the last several weeks were lighter on routine reporting but no less productive. A good chunk of the work below is the continuation of storylines from earlier updates, alongside a few new fronts.

On the performance side the state-annotated transaction (StAnnTx) work reached back to the older eras. Integration of the memoized values held in StAnnTx had previously been done for Babbage onward, and this cycle it was extended to Alonzo, which needed special handling, along with a small follow-up removing an unnecessary EncCBOR instance for AlonzoStAnnTx. We also finished the long-running effort to remove the legacy Coders machinery: the final piece for protocol version 12 and up (dropping the Summands usage) landed, Coders was removed from the testlibs and tests, and StakePoolParams was switched from CBORGroup-derived encoding to manual EncCBOR/DecCBOR instances in preparation for dynamic CBOR list lengths.

A notable new front is Leios support beginning to land in the ledger. The LeiosCert type, defined in the new cardano-crypto-leios package on the cardano-base repository, was added as an optional field to DijkstraBlockBody, and the Dijkstra CDDL for header_body was updated to reflect what the Leios prototype should be producing. We also introduced a new cardano-protocol package to house protocol-level code. On the ledger rules themselves there was a round of structural cleanup: a new ENTITIES rule (with an equivalent subrule) was introduced between LEDGER and CERTS to handle withdrawals and direct deposits, the era prefix was dropped from rule names, and the Rewarding script purpose was renamed to the more accurate Withdrawing.

The Dijkstra era work continued on several smaller fronts, including requiring top-level guards in the top-level transaction body, adjusting the Conway transaction_witness_set CDDL rule to use non-empty lists for the relevant fields. Conformance testing for Dijkstra advanced to its third installment, this time adding SpecTranslate instances for Dijkstra types and ExecSpecRule instances for the LEDGER and NEWEPOCH rules. Two user-visible bugs were fixed: injected extraConfig cost models were being ignored for PlutusV1/V3 because of an argument-ordering issue in overrideCostModels, and TxInfo translation could fail spuriously in LegacyMode. We also added ToJSON/FromJSON instances for EraScript and native scripts.

On the tooling and infrastructure side the generate-cbor CLI tool added last cycle was moved into cardano-ledger-api, refactor of the singleton-key namespaces (committee and constitution) for Canonical Ledger State, new Conway UTxO and Script generators were added, and CI was updated to allow automated agents to invoke the /update-changelogs skill. The dependency stack was moved forward with updates to cardano-crypto-class-2.5, the haskellNix flake input, and the usual GitHub Actions bumps.

Low level summary

Features

  • PR-5837 - Remove unnecessary re-exports from Shelley Rules
  • PR-5859 - Remove era prefix from rule names
  • PR-5748 - Refactor namespaces with singleton keys
  • PR-5867 - Prevent TxInfo translation failure for LegacyMode
  • PR-5866 - Rename Rewarding to Withdrawing
  • PR-5845 - Add ToJSON/FromJSON instances for EraScript
  • PR-5860 - Stop using Summands from Coders for PV12+
  • PR-5857 - Further StAnnTx integration
  • PR-5872 - Add LeiosCert to DijkstraBlockBody
  • PR-5897 - Remove unnecessary EncCBOR instance for AlonzoStAnnTx
  • PR-5899 - Fix injected extraConfig cost models being ignored for PlutusV1/V3
  • PR-5878 - Entities and Subentities Rules
  • PR-5889 - Fix Dijkstra CDDL for Leios changes to header_body
  • PR-5887 - Create cardano-protocol package
  • PR-5903 - Require top-level guards in top-level transaction body
  • PR-5908 - Use non-empty list for fields without duplicate enforcement in Conway transaction_witness_set cddl rule
  • PR-5890 - Replace CBORGroup-derived EncCBOR/DecCBOR for StakePoolParams with manual instances

Testing

  • PR-5844 - Prepare conformance for Dijkstra 3
  • PR-5868 - Add Test.Cardano.Ledger.Conway.Gen.{UTxO,Script} modules.
  • PR-5883 - Add isPotentialFutureMember ImpTest

Infrastructure and releasing

  • PR-5864 - Move generate-cbor to cardano-ledger-api
  • PR-5870 - Update to cardano-crypto-class-2.5
  • PR-5876 - Bump actions/checkout from 6 to 7 in the actions group
  • PR-5877 - Allow agents to invoke /update-changelogs
  • PR-5865 - Remove Coders from testlibs and tests
  • PR-5884 - Bump actions/cache from 5 to 6 in the actions group
  • PR-5894 - Update haskellNix flake input