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 recursive circuit, the preparation of the prover input implementation in the STM library, the off-circuit verification tests for the recursive SNARK circuit prototype, and the replacement of the temporary certificate circuit with the STM circuit. They also continued work on circuit key caching for the SNARK circuit in the STM library, the recursive SNARK aggregation primitives prover input, the preparation of the SNARK-friendly genesis certificate implementation, and the non-recursive certificate circuit benchmarks.

The team continued work on shipping the Mithril signer node binary in the Cardano node bundle, robust support for unknown and in-progress signed entity types, enforcement of the DMQ message ID format, and enhancements to immutable file synchronization for the Cardano database.

Finally, the team completed enforcement of Mithril crate versions in downstream Mithril crates and enhanced the protocol security page on the website.

Low level overview

Features

  • Completed the issue Prepare the refactoring of the recursive circuit #3126
  • Completed the issue Prepare implementation of the prover input in STM #3137
  • Completed the issue Add off-circuit verification tests for recursive SNARK circuit prototype #3193
  • Completed the issue Replace temporary certificate circuit with STM circuit #3195
  • Worked on the issue Circuit keys caching for SNARK circuit in STM #3043
  • 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 Prepare SNARK-friendly genesis certificate implementation #3262
  • Worked on the issue Add non-recursive certificate circuit benchmarks #3274

Protocol maintenance

  • Completed the issue Enforce Mithril crates versions in downstream Mithril crates #3245
  • Worked on the issue Ship Mithril signer node binary in Cardano node bundle in GitHub #3011
  • Worked on the issue Enhance synchronization of immutable files of Cardano database #3243
  • Worked on the issue Enforcement of DMQ message id format #3251
  • Worked on the issue Enhance protocol security page on website #2703
  • Worked on the issue Robust support for unknown and in progress signed entity types #3172

Consensus Team Update

· 2 min read
Damian Nadales
Consensus Team Lead

High level summary

  • Leios prototype development (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Landed the first voting capability in the Leios prototype: nodes now diffuse votes over a dedicated mini-protocol and a voting thread casts votes on completed endorser-block closures. This is the foundation for committee-based endorsement and is exercised by new threadnet property tests (#1963).
    • Ongoing: reworking the prototype branch ("Leios prototype remake") to target the same ouroboros-consensus-3.0.1.0 release that ships in cardano-node 11.0.1, so downstream consumers building against that node release can pick up Leios without a separate consensus branch (#2041).
    • Ongoing: adding late-join support, so a node that joins the network after an endorser block was produced can still resolve the resulting certified blocks (#2040).
    • Ongoing: replacing the placeholder voting from #1963 with stake-based committee selection and real BLS signatures, so votes are individually validated before being relayed (#2039).
    • Ongoing: performance work on the in-memory Leios database to remove contention and laziness issues that were causing nodes to time out under load (#2032).
  • LedgerDB cleanup (Treasury Funding Initiative 10: LSM including UTXO-HD):
    • Retired the V1 LedgerDB implementation and the LMDB backing store. V2 has been the default for some time; removing V1 deletes a large amount of now-unreachable code, drops the LMDB dependency, and simplifies the LedgerDB API (for example, snapshots no longer block the caller, and the tryFlush no-op is gone) (#2030). This paves the way for adding more tables to the ledger state, enabling them to be stored on disk.

Hydra Team Update

· 2 min read
Noon van der Silk
Software Engineering Lead

High-level Summary

This week the team shipped hydra-node 2.1.0 - a significant release that brings improved deposit security, the new SQLite-backed event store, a ~7% reduction in snapshot confirmation latency, and compatibility with cardano-node protocol version 12+. We encourage all operators to upgrade. Alongside the release, work continues on two long-standing items: partial fanout and a user-friendly configuration file for hydra-node to replace the current sprawl of command-line flags.

What did the team achieve?

  • Released hydra-node 2.1.0, which includes improved deposit security, the SQLite-backed event store, a ~7% reduction in snapshot confirmation latency, and compatibility with cardano-node protocol version 12+ release 2.1.0
  • Upgraded to cardano-api 11.1 / cardano-node 11.0.1 to support protocol version 12+ #2607
  • Switched from a lazy to a strict Map to reduce memory pressure during transaction processing #2599

What's next?

  • Continue work on partial fanout — choosing the UTxO set to fan out and final code review #2593, #2324, #2573
  • Reduce disk usage in hydra-node #2601, #2600
  • Investigate a node observing/persisting deposit events from unrelated Heads #2606
  • User-friendly hydra-node configuration via config file #2581
  • Accept PaymentExtendedKey (HD wallet keys) #2583

Ledger Team Update

· 6 min read
Alexey Kuleshevich
Ledger Team Software Engineer

High level summary

  • CIP-118 - Nested Transactions:

    Over the past two weeks the Ledger team has continued to push the Dijkstra era forward on multiple fronts. The CDDL specification of block was updated to match CIP-0176 - Non-segregated Block Body Serialization, a dedicated block_body was added and an EncCBORGroup instance for DijkstraBlockBody was added to unblock downstream integration in Consensus. Serialization for DijkstraTx was fixed up as well. We also followed up on the Plutus context performance work introduced in the previous update by integrating StAnnTx (the state annotated transaction representation that memoizes the Plutus parts of validation) into the LEDGER, UTXOW, UTXO and MEMPOOL rules across every era. With this integration the performance benefits of the earlier memoization work are now realized end to end. Further work in this area will let us rip the benefits of this optimization upon block construction as well, not just during initial validation. On top of that, several guards were added to the Plutus V1-V3 context translation so that any of the new Dijkstra features that those older language versions cannot represent (subtransactions, direct deposits, balance intervals, etc.) cause translation to fail explicitly rather than silently producing a wrong context. We also did preparation work for running conformance tests in Dijkstra and started reorganizing the test hierarchy around a new class-based ImpSpec approach that enforces a common set of tests across all eras.

  • LedgerHD

    The streaming infrastructure for injecting large amounts of data from genesis files, which was started in the previous cycle, has been completed. It now covers stake pools and the remaining state needed for the testing and benchmarking work that targets reading data in constant memory from disk and paves the way for further direct injection into on-disk ledger state.

  • CIP-165 - Canonical Ledger State:

    The expansion of the Canonical Ledger State continued with two more namespaces being added under the new namespace-based query interface, entities/dreps/v0 and entities/stake_pools/vrf_key_hashes/v0.

  • Maintenance

    We've expanded examples and added golden tests for all of the migrated queries from Consensus to Ledger done last cycle. Furthermore we did the same for transaction examples. All of this effort not only will let us remove golden tests unrelated to the Consensus component from the ouroboros-consensus repository, but also improve their quality.

    In addition to features we published the changelog for the recent cardano-node-11.0 release, made ZeroTreasuryWithdrawals a permanent governance check for every era starting with Conway, instead of not having it in the bootstrap phase. We switched ChainData and Attributes to use ByteArray instead of ByteString to avoid pinned-memory fragmentation. A few NoThunks instances were tightened up where consensus needs them for storing on disk and relaxed where the values are already forced to normal form. Finally, we fixed a cuddle failure on Plutus Constr data and a bug in its definition in the CDDL spec discovered by our new generator-based tooling.

Low level summary

Features

  • PR-5787 - Remove redundant import
  • PR-5785 - Relax header protocol version for testnets
  • PR-5786 - Changelog for cardano-node-11.0
  • PR-5733 - Dijkstra era CDDL for block, add block_body
  • PR-5789 - Integrate StAnnTx in rules across all eras
  • PR-5777 - Full support of data injection from genesis files using streaming
  • PR-5793 - Change DijkstraTx decoder to support variable length encoding
  • PR-5669 - Fail PlutusV1-V3 translation for non-empty subTransactionsTxBody
  • PR-5797 - Make ZeroTreasuryWithdrawals a permanent check in gov state transation rule
  • PR-5700 - Add entities/dreps/v0 namespace
  • PR-5808 - Relax NoThunks instance for BlockTransitionError
  • PR-5781 - Fail Plutus V1-V3 translation with guards
  • PR-5813 - Implement EncCBORGroup instance for DijkstraBlockBody
  • PR-5812 - Switch ChainData and Attributes to use ByteArray
  • PR-5811 - Fix TranslateErainstance for DijkstraEra CertState
  • PR-5743 - Add entities/stake_pools/vrf_key_hashes/v0 namespace
  • PR-5823 - Add NoThunks instances for ChainTransitionError and ChainPredicateFailure
  • PR-5816 - Import Rules as qualified
  • PR-5799 - Add example transaction golden test for each era

Testing

  • PR-5778 - Add golden tests for queryConstitution
  • PR-5761 - Expand upon transaction examples by adding missing fields.
  • PR-5794 - Add golden tests for the rest of the query result types
  • PR-5801 - Fix failing cuddle test for Plutus data Constr.
  • PR-5775 - Preparation for conformance testing in Dijkstra
  • PR-5803 - Start to re-organize test hierarchy: ImpSpec
  • PR-5826 - Fix trace construction in TestChain

Infrastructure and releasing

  • PR-5790 - Bump slackapi/slack-github-action from 3.0.2 to 3.0.3 in the actions group
  • PR-5796 - Disable doctest to unblock master
  • PR-5806 - Bump cuddle to 1.7.0.0
  • PR-5817 - Bump urllib3 from 2.6.3 to 2.7.0 in /doc
  • PR-5822 - Remove weird hyperlinked space between badges
  • PR-5758 - Refactor testing in GitHub CI

Mithril Team Update

· 3 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview

This week, the Mithril team completed the trusted setup validation for the SNARK circuit in the STM library, the implementation of standard Schnorr signatures in the STM library, the implementation of the SNARK-friendly protocol message, the in-circuit and off-circuit verification tests for the recursive SNARK circuit prototype, the preparation of the recursive circuit refactoring, and the preparation of the prover input implementation in the STM library.

The team also prepared the ledger state certification proof of concept and continued work on enforcing the DMQ message ID format.

Finally, they completed the upgrade to Cardano node v.11.0, the update of all GitHub runners to Ubuntu 24.04, and continued work on robust support for unknown and in-progress signed entity types.

Low level overview

Features

  • Completed the issue Trusted setup validation for SNARK circuit in STM #2944
  • Completed the issue Implement support for Schnorr signatures in STM #3136
  • Completed the issue Implement SNARK-friendly protocol message #3146
  • Completed the issue Add in-circuit verification tests for recursive SNARK circuit prototype #3192
  • Completed the issue Prepare Ledger State certification PoC #3242
  • Worked on the issue Prepare the refactoring of the recursive circuit #3126
  • Worked on the issue Prepare implementation of the prover input in STM #3137
  • Worked on the issue Add off-circuit verification tests for recursive SNARK circuit prototype #3193
  • Worked on the issue Enforcement of DMQ message id format #3251

Protocol maintenance

  • Completed the issue Upgrade to Cardano 11.0 #3257
  • Completed the issue Update all GitHub runners to Ubuntu 24.04 #3246
  • Completed the issue Rust doc.rs built targets breaking-change #3212
  • Worked on the issue Robust support for unknown and in progress signed entity types #3172
  • Worked on the issue Enforce Mithril crates versions in downstream Mithril crates #3245