Skip to main content

· 5 min read
Alexey Kuleshevich

High level summary

Currently there are a few important high level tasks that Ledger team is focused on:

  • Continue working on defining Ledger validation rules for CIP-118 - Nested Transactions:

    One of the major milestones in the last month was actually getting the CIP merged, which means we were able to solidify the design as well as identify a few new and very important use cases that Nested Transactions will bring to the table.

    On the implementation side we've had some very nice progress with full definition of binary format and Haskell representation of a Dijkstra era transaction and its sub-transactions. We've also defined the full Ledger rules structure for Nested Transaction, albeit mostly with placeholder logic for now. Implementation for the logic in those rules is one of the main focus points for the upcoming weeks.

  • Started working on the first phase of CIP-159 - Account Address Enhancement

    This is a very much anticipated CIP, because it will finally allow micropayments in ADA, once released with the Dijkstra era. We have so far defined one of the new fields in the transaction and performed some of the necessary code changes in preparation for this work.

  • Improvements on how CDDL specification is defined and how conformance testing against it is performed.

    We had incredible progress on improving how CDDL is defined. We've performed major refactoring of cuddle, which is the tool that we use for defining CDDL specification. We have designed a very nice interface for writing those definitions that drastically reduces duplication from era to era, thus improving safety of new definitions. Removal of a few bugs in the CDDL specification was a good testament to this effort. Moreover, we added the ability to supply custom value generators, which will allow us to test aspects of CDDL specification that were previously impossible to test due to the limited nature of CDDL expressiveness.

    Furthermore, we just released a new tool antigen, which we are in process of integrating into cuddle, which once complete will let us write negative property tests for Ledger decoders. It might not sound like much, but it will in fact protect us from a whole class of deserialization bugs, such as one that happened on mainnet two months ago.

Besides those major points above, since the last update, Ledger team:

Low level summary

Features

  • PR-5458 - Added Dijkstra UTXO rule and collateral Ptr check
  • PR-5439 - Add Peras certificate to the block body
  • PR-5456 - CDDL with typeclasses: conway
  • PR-5467 - Add optional previous epoch Nonce to BHeaderView
  • PR-5471 - CDDL with typeclasses: Dijkstra
  • PR-5478 - CDDL: Switch to using HuddleSpec everywhere
  • PR-5475 - Change all List to NonEmpty in predicate failures
  • PR-5476 - Add Peras Certificate validation
  • PR-5472 - Update to cuddle 1.1
  • PR-5484 - Fix MultiAsset cddl definition in dijkstra
  • PR-5483 - CDDL: Add HuddleRule1 typeclass for set functions
  • PR-5480 - Skip isValid flag in transaction (de)/serialization
  • PR-5479 - Change all error Sets to NonEmptySets in predicate failures
  • PR-5490 - Dijkstra subtx produced and consumed
  • PR-5464 - Switch minFeeA to CoinPerByte and rename minFee parameters
  • PR-5461 - Swap Mempool/Ledger predicate failures in Dijkstra
  • PR-5485 - CDDL typeclasses with implicit naming
  • PR-5496 - Rename policy_hash to guardrails_script_hash
  • PR-5491 - Nested transactions rules
  • PR-5493 - Change all error Maps to NonEmptyMaps in predicate failures
  • PR-5507 - Rename atadPlutus and atadrPlutus
  • PR-5499 - Switch PoolMetadata.pmHash to ByteArray
  • PR-5518 - CDDL: Remove header_body discrepancy
  • PR-5517 - MemoBytes avoid space leaks
  • PR-5506 - Prevent sub-tx-ids to be spent in the same tx.
  • PR-5519 - Change Version from Word64 to Word32.
  • PR-5523 - Add more constraints on ApplyTxError
  • PR-5524 - Add direct-deposits field to transaction body
  • PR-5522 - Implement events and failures in rules running nested transactions
  • PR-5526 - SUBPOOL rule implementation
  • PR-5512 - Move DelegateeNotRegisteredDELEG from DELEGS to DELEG in Shelley

Testing

  • PR-5459 - Add reverse delegations assertion
  • PR-5468 - Arbitrary instance for DijkstraBlockBody
  • PR-5424 - Add CBOR golden tests
  • PR-5404 - Implement block-submitting Imp functions
  • PR-5392 - Translate all tests from AlonzoBBODY to Imp test
  • PR-5466 - Add Imp tests to cover more cases of active/inactive committee
  • PR-5473 - Update formal-ledger-specification and enable tests
  • PR-5521 - Add Imp test to check that SPO votes are validated against tx witnesses

Infrastructure and releasing

  • PR-5469 - Bump urllib3 from 2.5.0 to 2.6.0 in /doc
  • PR-5495 - Upgrade from ghc 9.12.1 to 9.12.2 nix builds
  • PR-5509 - Bump urllib3 from 2.6.0 to 2.6.3 in /doc
  • PR-5504 - Remove ruby cddl

· 2 min read
Jean-Philippe Raynaud

High level overview

This year, the Mithril team continues to prioritize protocol decentralization through the DMQ network, broader protocol adoption, and the introduction of succinct proofs by evolving the STM library with SNARKs.

This week, they focused on implementing the SNARK-friendly STM library, kept developing the non-recursive SNARK circuit MVP within it, and started working on the pre-aggregation SNARK primitives. They also kept working on the prototype of the recursive SNARK circuit.

Additionally, the team prepared for the deployment of the DMQ network by finalizing its infrastructure and node implementation.

Finally, they worked on documenting a proposal to make Mithril and DMQ opt-out features of Cardano, and continued updating the protocol security page.

Low level overview

Features

  • Completed the issue DMQ testing with SPOs on preview #2833
  • Completed the issue Use Midnight ZK backends for Jubjub and Poseidon in STM #2888
  • Completed the issue Update the Midnight library dependency in circuit prototype #2910
  • Worked on the issue Document recursive SNARK solution #2767
  • Worked on the issue Update protocol parameters to SNARK friendly values #2813
  • Worked on the issue Release 2603 distribution #2830
  • Worked on the issue Implement SNARK-friendly changes in STM library #2795
  • Worked on the issue Implement SNARK pre-aggregation primitives in STM library #2792
  • Worked on the issue Create new signed entity type for Cardano Blocks and Transactions #2905
  • Worked on the issue Import Blocks and Transactions in new store for Cardano Blocks and Transactions #2907
  • Worked on the issue Proposals for Mithril/DMQ as optout feature of Cardano #2831

Protocol maintenance

  • Worked on the issue Enhance protocol security page on website #2703

· 2 min read
Ziyang Liu

High level summary

The Plutus team has finished implementing and costing the Value primitives, as well as completing all other development required for the upcoming intra-era hard fork.

We've recently published a blog post recapping the recent UPLC 2025 event: https://www.iog.io/news/uplc-2025-conference-recap

In collaboration with Koz Ross from MLabs, we've implemented optimized byteStringToInteger and integerToByteString primitives. Both primitives will now take linear time instead of quadratic time. These improvements leverage the ghc-bignum library, which was made possible by dropping support for GHC 8.

In parallel, we continue to make progress across several other areas, including the initial work on Plutus V4, ongoing discussions around formally verifying the UPLC inliner in collaboration with Professor Philip Wadler, further optimization of UPLC runtime performance, and continued improvements to the usability of Plinth.

Low level summary

Key Pull Requests Merged

Issues and Pull Requests In Progress

  • Formally verifying the UPLC inliner
  • Adding a new Array constructor for UPLC, which can be accessed in Plutus V4
  • End-to-end testing for intra-era Hard Fork features

· 3 min read
Jean-Philippe Raynaud

High level overview

The Mithril team focused on implementing the SNARK-friendly STM library and began developing the non-recursive SNARK circuit MVP within it. They completed the preparation phase of the SNARK circuit by assessing infrastructure costs, the audit status of the Midnight ZK library, and detecting an under-constrained circuit. They also kept working on the prototype of the recursive SNARK circuit.

Additionally, the team completed the DMQ infrastructure implementation and prepared for its deployment. They prepared a new guide for setting up an aggregator and published two development blog posts about the upcoming DMQ testing program with SPOs and the multiple aggregators testing program.

Finally, they switched to Blockfrost API to fetch the SPO tickers and names in the aggregator, and fixed issues in the CI related to disk space in runners.

Low level overview

Features

  • Published a dev blog post DMQ testing program with SPOs
  • Published a dev blog post Multiple aggregators testing program
  • Completed the issue Add a new guide on how to setup a follower aggregator #2815
  • Completed the issue Evaluate SNARK infrastructure for production/testing #2860
  • Completed the issue Simplify code of STM library #2794
  • Completed the issue Support test mode for the Halo2 circuit #2798
  • Completed the issue Detect an under constrained Halo2 circuit #2801
  • Completed the issue Assess constraints on Halo2 circuit verification #2799
  • Completed the issue Add AVK chaining verification to the recursive IVC circuit #2861
  • Completed the issue Midnight ZK library audit status #2802
  • Completed the issue Change hash function for support in Plutus #2766
  • Worked on the issue DMQ testing with SPOs on preview #2833
  • Worked on the issue Document recursive SNARK solution #2767
  • Worked on the issue Update protocol parameters to SNARK friendly values #2813
  • Worked on the issue Release 2603 distribution #2830
  • Worked on the issue Implement SNARK-friendly changes in STM library #2795
  • Worked on the issue Use Midnight ZK backends for Jubjub and Poseidon in STM #2888
  • Worked on the issue Update the Midnight library dependency in circuit prototype #2910

Protocol maintenance

  • Completed the issue Enhance signer/signature registration metrics in aggregator #2855
  • Completed the issue No more available disk space on GitHub runners #2906
  • Completed the issue Nightly tests does not fetch latest main artifacts #2879
  • Completed the issue Replace SPO ticker API in aggregator #2878
  • Worked on the issue Enhance protocol security page on website #2703

· 4 min read
Michael Karg

High level summary

  • Benchmarking: 10.6 benchmarks confirming heap size fix; First LSM-trees benchmarks.
  • Infrastructure: New typesetting tool for reporting pipeline.
  • Tracing: Increased robustness of the PrometheusSimple metrics backend; previous quality-of-life improvements released.
  • Leios: Linear temporal logic based trace verifier demo for Leios.

Low level overview

Benchmarking

The underlying cause for increase in RAM usage on Node 10.6.0 has been indentified and addressed. While heap size increase is still present outside of our benchmarking environment, its extent there is negligible. We've re-run cluster benchmarks to confirm the fix is successful.

Additionally, we've performed and analyzed benchmarks on several LSM-trees integration branches. This feature has as of now not been released in some Node version, so it is not yet fully configurable. The benchmarks have to be understood as a very early performance assessment. We've performed benchmarks for both in-memory and on-disk backing stores. Especially for the on-disk benchmarks, we could observe RAM usage decreasing clearly, with only small increases in CPU usage. While there is some extra cost to block adoption, cluster diffusion metrics still remain almost identical to the in-memory benchmarks - mostly due to header pipelining. As we didn't artificially constrain memory, the benchmarks are illustrative of LSM-trees behaviour when there's no pressure from the garbage collector: Given that, will on-disk LSM-trees use caching / buffering efficiently, or will it perform redundant disk I/O? The answer is - the former.

Infrastructure

For convenient creation of reporting documents, we're integrating a new typesetting tool: The brilliant, open-source Typst project promises fully typesettable and scriptable documents, while maintaining a syntax that is (almost) as easy to grasp as Markdown. Typst extensions even render our gnuplots inline - and fast. Easily scriptable styling enables us to deliver an often requested feature: Colorizing individual result metrics based on how risky (or beneficial) a deviation from the baseline is deemed to be. Up to now, our reporting pipeline depended on Emacs Org mode and a medium-sized LaTeX distro as part of the Performance Workbench; we might be able to drop these heavy dependencies in favor of something more modern soon.

Tracing

The Node's internal PrometheusSimple backend to expose metrics has received several robustness improvements. All those aim to mitigate factors in the host environment which can contribute to the backend becoming unreachable. It will now reap dangling socket connections more eagerly, preventing false positives in DoS protection. Furthermore, there now is a restart/retry wrapper in place, should the backend fail unexpectedly. All start and stop events are traced in the logs, exposing a potential error cause. Merged in cardano-node PR#6396.

The previous batch of quality-of-life improvements in cardano-node PR#6377 has also been merged and released. It includes Prometheus HTTP service discovery for cardano-tracer, more robust recovering and tracing of forwarding connection interruptions as well as stability improvements for engineers implementing tracers.

Leios

Our conformance testing framework which evaluates linear temporal logic propositions against trace output has matured. It has seen some performance and usability improvements, for instance a helpful human-readable output as to what minimal sequence of traces caused some proposition to be false - and the ability to consume traces from an arbitrary number of nodes instead of only one. We've already created several propositions targeting the well-behavedness of the block forging loop; diffusion related propositions for Praos and eventually Leios are logical next steps.

Even though this framework was built with Node Diversity in mind, we could showcase it at this month's Leios event, and demonstrate what it could deliver for this project as well - and we were very satisfied with the reception it got.

Performance & Tracing wishes you Happy Holidays...

...and a Joyful New Year!