Skip to main content

Ledger Team Update

· 4 min read
Alexey Kuleshevich
Ledger Team Software Engineer

High level summary​

We continued to focus on Leios this cycle, with the endorser block moving from a data definition to something the ledger can actually validate and apply. The EB and EBLEDGERS rules were implemented, a Leios certificate validation API was exposed from the ledger API, and endorser block application arrived through applyEndorserBlock. Endorser block references were made era-parametric, so they are no longer pinned to a single era. On the pool side, updates that only touch BLS keys no longer require owner witnesses, closing a gap that would have forced unnecessary signatures on key rotation.

Dijkstra gained a distinct mempool transaction representation, separating what the mempool carries from the transaction type used elsewhere. Plutus V4 scripts are now evaluated against the actual V4 API rather than borrowing the previous version's. The state-annotated transaction now also carries reference script size and execution units, so the rules no longer recompute them on every use.

The reference input cost parameter for multi-assets was renamed and retyped, moving from a per-policy to a per-byte cost. Per-policy pricing could not be made fair, since a single policy may carry arbitrarily many asset names, whereas the binary overhead of a multi-asset is straightforward to compute directly.

Testing concentrated on conformance and on the new endorser block machinery. Conformance now tracks which tests are expected to fail, so a disabled test that starts passing is no longer silently ignored, and the tests that already passed were re-enabled. A property test for top-level transaction info was added, comparing the aggregated result against a reference implementation built field by field across the nested transactions of a batch.

Low level summary​

Features​

  • PR-6216 - Leios certificate validation API
  • PR-6215 - Add EB and EBLEDGERS
  • PR-6248 - Add DijkstraApplyBlock with applyEndorserBlock
  • PR-6241 - Make EbReferences era parametric
  • PR-6217 - Do not require owners to witness updates for BLS keys
  • PR-6257 - Introduce BlockEnv for ApplyBlock
  • PR-6260 - Follow-up to #6257: export mkDijkstraBlockEnv, remove mkBbodyEnv
  • PR-6222 - Add MempoolTx
  • PR-6235 - Remove certsTx from SubCertsEnv
  • PR-6255 - Use Plutus v4 API for Plutus v4
  • PR-6244 - Enhanced memoization in StAnnTx
  • PR-6263 - Rename ppRefInputsCostPerMultiAssetByte
  • PR-6251 - Expose PParams from Conway and Dijkstra API

Testing​

  • PR-6237 - Add TopTxInfo property test which compares to reference implementations
  • PR-5984 - Check that disabled tests fail in conformance
  • PR-6240 - Ensure EbSpec test doesn't fail spuriously because of too small txout
  • PR-6256 - Update formal ledger specification

Infrastructure and releasing​

  • PR-6253 - Bump up changelogs and versions after a release
  • PR-6258 - Add Changelog for 11.1 and 11.2

Mithril Team Update

· 2 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview​

This week, the Mithril team stabilized the certificate chain cache in the client library and CLI, and reduced the size of the signature messages to fit within the limit of the DMQ node in testing-preview.

The team kept working on the activation of the snark feature by default, the prototype of the orchestrator of the setup command, and the migration of the existing immutable archives to the deterministic format. They also started working on the discovery of the facts of the Cardano node for the setup command, and on the prototype of the certification adaptation in the Dijkstra era.

Finally, they upgraded Rust to version 1.100, and worked on the upgrade to Cardano node 11.2 and on the update of the guild-operators scripts to use the on-chain protocol configuration.

Low level overview​

Features​

  • Completed the issue Stabilize the certificate chain cache in the client library and CLI #3658
  • Worked on the issue Activate snark feature by default #3573
  • Worked on the issue Prototype the orchestrator of the mithril-setup command #3642
  • Worked on the issue Define the migration of the existing immutable archives to the deterministic format #3653
  • Worked on the issue Discover the facts of the Cardano node for the setup command #3677
  • Worked on the issue Prototype the certification adaptation in the Dijkstra era (before Leios) #3687

Protocol maintenance​

  • Completed the issue Keep the signature messages below the maximum size accepted by the DMQ node in testing-preview #3667
  • Completed the issue Upgrade Rust to version 1.100 #3685
  • Worked on the issue Upgrade to Cardano 11.2 #3585
  • Worked on the issue Update the guild-operators scripts to use the on-chain protocol configuration #3661

Mithril Team Update

· 3 min read
Jean-Philippe Raynaud
Mithril Tech Lead

High level overview​

This week, the Mithril team resolved the SNARK verification key collisions deterministically in the key registration, measured the download time of a mainnet Cardano database with IPFS on dev-mainnet, and implemented a ratio for IPFS downloads in the client. They also filled the fake protocol configuration reader from a JSON hex-encoded marker configuration.

The team kept working on the activation of the snark feature by default, the prototype of the orchestrator of the setup command, the migration of the existing immutable archives to the deterministic format, and the stabilization of the certificate chain cache in the client library and CLI.

Finally, they replaced the retired macos-14 runner in the CI workflows, and worked on the upgrade to Cardano node 11.2 and on the size of the signature messages sent to the DMQ node.

Low level overview​

Features​

  • Completed the issue Resolve SNARK verification key collisions deterministically in the key registration #3591
  • Completed the issue Measure the download time of a mainnet Cardano database with IPFS on dev-mainnet #3608
  • Completed the issue Implement a ratio for IPFS downloads in the client #3641
  • Completed the issue Fill the fake protocol configuration reader from a JSON hex encoded marker configuration #3670
  • Worked on the issue Activate snark feature by default #3573
  • Worked on the issue Prototype the orchestrator of the mithril-setup command #3642
  • Worked on the issue Define the migration of the existing immutable archives to the deterministic format #3653
  • Worked on the issue Stabilize the certificate chain cache in the client library and CLI #3658

Protocol maintenance​

  • Completed the issue Rename DeprecatedCommand to RemovedCommand in the client CLI #3626
  • Completed the issue Replace the retired macos-14 runner in the CI workflows #3645
  • Completed the issue Upgrade the websites JavaScript dependencies to fix security vulnerabilities #3669
  • Worked on the issue Upgrade to Cardano 11.2 #3585
  • Worked on the issue Update the guild-operators scripts to use the on-chain protocol configuration #3661
  • Worked on the issue Keep the signature messages below the maximum size accepted by the DMQ node in testing-preview #3667

Plutus Core Team Update

· 2 min read
Ziyang Liu
Software Engineering Lead

High level summary​

The Plutus team has continued work on the Dijkstra builtins and conformance testing. In particular we've finalized the cost models of the keepPolicies and dropPolicies builtins (CIP-0168). We've also added 65 conformance cases for the new Value builtins, and specified these builtins and multiIndexArray in the Plutus Core specification.

On the metatheory front, a new tool generates Agda typechecking tests from the conformance suite. We've also added the new builtins to the metatheory as postulates, and added support for casing on Data to the certifier's case-reduce pass.

Other than these, we've fixed the PIR and UPLC constant folding passes so they no longer fold builtin applications with impure arguments, which could incorrectly discard computations that fail. We've also fixed compilation of Plutus V4 context types and aligned the lookupCoin and valueContains memory models with the existing cost-model parameters.

Work in progress includes implementing arrays and bytestrings in the metatheory, fixing certification of the case-of-case pass, and further CEK machine optimizations.

Key Pull Requests Merged​

Pull Requests In Progress​

Consensus Team Update

· 3 min read
Damian Nadales
Consensus Team Lead

High level summary​

  • Leios implementation on main (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • In the Dijkstra era, block producers now forge endorser blocks from the transactions that do not fit in the ranking block, and write them to the LeiosDB (#2377, #2442).
    • The ChainDB now opens the LeiosDB and drives its garbage collection (#2431). The LeiosDB no longer de-duplicates transactions, which makes its schema simpler (#2370).
    • Chain selection now checks the Leios certificate of a block when the block arrives. It waits to select the block until the node has the certified endorser block (#2439, #2433).
    • The node now relays Leios votes. It checks each vote once and disconnects from a peer that sends an invalid vote (#2430).
    • The Leios decoders now reject oversized hashes and endorser blocks. This ports the fix for audit finding LEI-004 from the prototype (#2440, #2458).
    • The LeiosDB benchmark now measures latency under load instead of throughput (#2422).
  • Leios prototype (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Released rc-2026w43. The LeiosDB writes endorser blocks faster, and block producers forge certifying blocks in milliseconds instead of up to 0.9 s (#2449, #2451).
    • Released rc-2026w44 with adaptive endorsements. If endorser blocks do not get enough votes, block producers forge smaller ones, so throughput goes down step by step instead of falling back to Praos levels (#2475, ouroboros-leios#1152).
    • The node now traces the time and cost to validate an endorser block, for our performance models (#2443).
  • Maintenance and support (Treasury Funding Initiative 17: Maintenance and Support):
    • Released ouroboros-consensus 5.3.0.0 (#2470). It lowers memory use when the node writes ledger snapshots (#2467, #2468). The forging traces no longer count the mempool snapshot time as block forging time (#2471).
    • cardano-node no longer reports a false configuration difference for the default LSM database path (cardano-node#6742).