Skip to main content

Plutus Core Team Update

· 3 min read
Ziyang Liu
Software Engineering Lead

High level summary

In the past weeks the Plutus team has added new built-in functions, improved Value support in the ledger API, broadened the conformance test suite, and continued working on Plutus V4 script context and Plutus V4 language features like casing on Data.

Two built-ins from recent CIPs have landed: multiIndexArray (CIP-0156), which reads several elements of an array in one call, and policies (CIP-0168), which returns the currency symbols in a Value. Both are gated behind a future protocol version and not yet costed, so they cannot be used on-chain until Dijkstra.

The conformance test suite now ships .flat files alongside the textual test cases, making it much easier to consume for implementations that do not parse the textual format. The asData pattern synonyms now use built-in list casing. The Value built-in type has been added to the metatheory as postulates, along with a fix to decEq that removed a normalization blowup consuming over 128GB of memory when checking certificates.

We've merged the Plutus V4 script context definition (though it is subject to change), and recently discussed its Data encoding during a Plutus Working Group meeting. You can find the meeting notes here. Implementers of alternative node clients, UPLC interpreters, and compilers targeting UPLC are encouraged to review the notes and contribute to the discussion.

Key Pull Requests Merged

Notable Pull Requests In Progress

Consensus Team Update

· 2 min read
Damian Nadales
Consensus Team Lead

High level summary

  • Leios prototype and testnet (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Cut a new prototype release, prototype-2026w29, carrying this fortnight's work across the node and the Leios repository (#6621, #996).
    • Landed the change that lets the node certify and announce endorser blocks inside the forging loop, so it no longer misses chances to certify. This is expected to raise the certification rate and throughput (#2105).
    • Added CallTrace instrumentation to the Forge thread, making it easier to trace and profile block production in the prototype (#2126).
    • Taught the LeiosNotify mini protocol to accept but ignore the proper MsgLeiosBlockAnnouncement message, a step towards the full block-announcement flow (#2142, integrated into the node in #6624).
    • Enriched typed-protocols to give more precise back pressure for pipelined mini protocols, motivated by the new LeiosNotify protocol (#93).
    • Improved testnet stability by stopping the node from mangling some Dijkstra blocks, a quick workaround while a ledger issue is fixed (#2140, for cardano-ledger#5937).
    • Updated the prototype dashboards and added a graph of recent endorser-block events, making the testnet easier to observe (#990, #992).
  • Mempool design for Leios (Treasury Funding Initiative 4: Ouroboros Leios Implementation):
    • Wrote up Mempool design considerations for Leios (#997).
    • Took part in discussions on how the Mempool should work: its current requirements, a "high-throughput mempool", and a "tiered-pricing mempool" in which transactions that pay more can queue ahead of normal-paying ones when they do not conflict.
  • Storage and snapshots (Treasury Funding Initiative 10: LSM including UTXO-HD):
    • Set the node's default snapshot policy to match Mithril's snapshot policy, so the two stay aligned (#2149).
    • Added a new LSMExportPath configuration option, letting operators control where LSM data is exported (#6629).

Ledger Team Update

· 4 min read
Alexey Kuleshevich
Ledger Team Software Engineer

High level summary

Leios support in the ledger continued to take shape this cycle. Building on the block body work from the previous updates, a Leios.BlockHeader was added along with an EraBlockHeader instance for Praos that consensus needs for its 11.1 integration, which together move the block header behind a common era-parametric abstraction. On the leios-prototype branch we also backported the addition of a LeiosKey (a BLS12381 public key together with a possession proof) to StakePoolParams and StakePoolState, with the Dijkstra CDDL updated to carry the Leios key as an optional field in the pool registration certificate.

A good deal of governance and rules work landed as well. Following the introduction of the ENTITIES rule in the previous cycle, we implemented CIP-181 by removing the DRep-delegation requirement for reward withdrawals, which dropped the corresponding predicate failures from the entities and sub-entities rules. On the Plutus cost model side we followed up on the earlier argument-ordering bug fix with a more permanent safeguard: a new CostModelsUpdate newtype now wraps the update argument so the old and new cost models can no longer be swapped by accident, and the symmetric Semigroup/Monoid instances for CostModels that made that mistake possible were removed. We also adjusted the consumed/produced interface and fixed getProducedValue for the Dijkstra era, added an AccountBalanceExact constructor to AccountBalanceInterval, and switched the minor protocol version to Word32. We also fixed NoThunks instances in the Alonzo and Conway genesis types.

Several changes continued the ongoing push toward more era-parametric, abstract interfaces. SnapShots was made era parametric, and ToJSON/FromJSON instances were added for EraTxAuxData, extending the JSON serialisation coverage started last cycle for scripts. On the Canonical Ledger State front, export and import modules were introduced for handling canonical state, giving a first pass at reading and writing it through the CLS interface. On the testing side the Conway conformance tests were updated to protocol version 11 and tests were added for the newly introduced top-level guard requirement.

On the tooling and infrastructure side, the hackage index-state was bumped to pick up the latest cuddle release, which now validates that CBOR maps contain no duplicate keys per RFC 8949 and required a couple of generators to be adjusted accordingly, and the usual GitHub Actions bumps were applied.

Low level summary

Features

  • PR-5905 - Introduce CostModelsUpdate
  • PR-5853 - Add ToJSON/FromJSON instances for EraTxAuxData
  • PR-5869 - Add export/import modules for canonical ledger state
  • PR-5915 - Add EraBlockHeader instance for Praos
  • PR-5918 - Fix getProducedValue for Dijkstra
  • PR-5916 - Remove DRep requirement for reward withdrawals
  • PR-5919 - Adjust consumed and produced interface
  • PR-5935 - Switch minor protocol version to Word32
  • PR-5940 - [Backport] Add LeiosKey to StakePoolParams in leios-prototype branch
  • PR-5927 - Add Leios.BlockHeader
  • PR-5933 - Add AccountBalanceExact constructor to AccountBalanceInterval
  • PR-5944 - Make SnapShots era parametric
  • PR-5926 - Fix/allow thunks in Alonzo/Conway geneses

Testing

  • PR-5900 - Update Conway conformance tests to PV 11
  • PR-5914 - Add tests for RequiredTopLevelGuards

Infrastructure and releasing

  • PR-5917 - Bump slackapi/slack-github-action from 3.0.3 to 3.0.4 in the actions group
  • PR-5928 - Update hackage index-state version to get latest cuddle release
  • PR-5934 - Bump slackapi/slack-github-action from 3.0.4 to 4.0.0 in the actions group

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