Skip to main content

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

Plutus Core Team Update

· 2 min read
Ziyang Liu
Software Engineering Lead

High level summary

The Plutus team recently published a blog blog post about the improved uplc command-line tool.

Among other things, the tool can optimize Plutus scripts. Experiments on recent mainnet scripts indicate execution-cost savings of more than 10% on average. So, if you are not already using it, it is worth checking what you may be leaving on the table.

Feedback, bug reports, and ideas for further improvements are very welcome. Please share them by opening issues in the Plutus repository on GitHub.

Further improvements to UPLC optimization have been made in recent weeks and are now integrated into the uplc tool. These include a new --inline-unconditional-growth flag for tuning the aggressiveness of the inliner, Agda certifiers for several optimization passes, a new UPLC constant-folding pass, and a pass that hoists polymorphic builtins to reduce the use of force. Common subexpression elimination (CSE) has also been improved.

Low level summary

Key Pull Requests Merged

Network Team Update

· 6 min read
Marcin Szamotulski
Network Team Lead

Overview of sprints 110, 111, 112 and 113.

Summary

Leios

The mux egress prioritisation issue was resolved, delivering static priority-based scheduling for mini-protocols. Work on weighted fair queueing with token bucket support was concluded: it allows bursty protocols to send multiple SDUs back-to-back without starving other mini-protocols. However, right now we don't have evidence that the additional complexity is really needed to achive better performance. A TxSubmission V2 demo is being merged, and an alternative design without a central decision thread is being explored.

Ouroboros-Network

Tx-submission v2 now returns results from submitTxToMempool, a prerequisite for DMQ-Node integration. The long-standing ChurnMode refactoring was merged, together with a property-based tx integrity test for cardano-diffusion. Nodes now warn about misconfigured local socket permissions (an issue identified by Claude LLM). A fix for initial syncing targets is under review, which will reduce load on bootstrap relays during node startup by setting lower active-peer targets before the first churn cycle.

DMQ-Node

Versions 0.3.0.0 and 0.4.0.0 were released. The 0.4.0.0 release includes trace-dispatcher integration, Prometheus metrics, and CLI improvements. Work is ongoing on an announciness metric for peer selection — scoring peers by how often they are first to announce a valid signature — and on connecting the DMQ kernel to cardano-node.

Leios

PR / IssueStatusSprint
TxSubmissionV2 demoin review112
tx-submission v2: undecisionin progress112
network-mux: weighted fair queueing and token bucket for burst supportin progress111
Mux: single peer performance for Leiosin progress110
Mux egress prioritisationresolved110

Ouroboros-Network

PR / IssueStatusSprintNotes
tx-submission v2: return results in submitTxToMempoolmerged113
drop support for x86_64-darwinmerged113contribution by dermetfan
Local socket access right warningsmerged113
connection-manager: added a commentmerged113
Clarify LedgerPeersConsensusInterfacein review113
Fix initial syncing targetsin review113
Various small changesin review113
cardano-diffusion: tx integrity testmerged112
ChurnMode refactoredmerged112
Code refactoring (burst engine)merged112related to WFQ
Removed AcquireConnectionErrormerged111
Updated documentationmerged111
new tracing: fixed Stateful.TraceRecvMsgmerged110
LocalRootPeers - ToJSON instancemerged110
Fixed peerselection test failuremerged110
cardano ping implemented with ouroboros-networkblocked110

DMQ-Node

PR / IssueStatusSprint
announciness metric for peer selectionin progress113
node kernel cleanupin progress113
Prometheus prefixmerged111
Prometheus counters prefixmerged111
CLI improvementsmerged111
dmq-node-0.4.0.0merged111
trace-dispatcher integrationmerged110
dmq-node-0.3.0.0 releasemerged110

IOSim

PR / IssueStatusSprint
Remove withLiftSTmerged112
io-classes-1.10.1.0merged112
Add IOSimPOR QuickCheck monadic combinatorsmerged110

Typed Protocols

PR / IssueStatusSprint
support io-classes-1.10merged112

Contra Tracer

PR / IssueStatusSprint
Contra.Tracer extra APIsmerged110

SRE Team Update

· 4 min read
John Lotoski
Service Reliability Engineer

High level summary

The SRE team continues work on Cardano environment improvements and general maintenance.

Some notable recent changes, updates or improvements include:

  • Cardano-node 11.0.1 was released which supports the PV11 hard fork!

  • Preview network was upgraded to node 11.0.1 in preparation for the PV11 van Rossem hard fork.

  • A van Rossem PV11 cost model governance vote was cast on preprod.

  • A Leios testnet was stood up in cardano-playground with block producers, relays, dbsync, faucet, and custom alloy-based monitoring.

  • Cardano-parts and cardano-playground were updated with cardano-node 10.7.1, cardano-db-sync 13.7.0.4, mithril 2617.0, Linux kernel 6.18 with ZFS 2.4 for LSM compatibility, and EC2 metadata hardened to require IMDSv2.

  • x86_64-darwin support was dropped from a number of repos ahead of the planned nixpkgs deprecation.

Repository Work -- Merged

Cardano-haskell-packages

cardano-haskell-packages PR#1363:

  • Adds cardano-node-11.0.1 to CHaP

Cardano-monitoring

cardano-monitoring PR#7:

  • Adds a sandbox monitoring server with explicit OAuth allow list
  • Bumps org tags on resources
  • Sets http_tokens to required on EC2 resources for IMDSv2 enforcement

Cardano-node

cardano-node PR#6541:

  • Prepares cardano-node for PV11 as the default protocol version and the experimental hard fork gated to PV12; SRE contributed CI and iohkNix updates

cardano-node PR#6555:

  • Bumps iohkNix for the blst flake input narHash and lastModified update
  • Sets cardano-node cabal version to 11.0.1

Cardano-mainnet

cardano-mainnet PR#44:

  • Resizes most root EBS volumes from 300 GB to 600 GB across all boot, bscale, iog, and iogp machine groups to accommodate chain growth
  • Hardens EC2 metadata to require IMDSv2
  • Updates kernel to 6.18 with ZFS 2.4 overlay for LSM compatibility
  • See the PR description for additional details

Cardano-parts

cardano-parts PR#82:

  • Bumps cardano-node to 10.7.1, cardano-cli to 10.16.0.0, cardano-db-sync to 13.7.0.4, and mithril to 2617.0
  • Sets the default Linux kernel to 6.18 for cardano-node >= 10.7.0 LSM compatibility and updates ZFS to 2.4
  • Fixes the ZFS ARC max null check in the AMI module
  • Hardens EC2 metadata to require IMDSv2 (http_tokens = "required")
  • Adds extraJournalReceivers option to the Grafana Alloy nixosModule for additional Loki journal forwarding targets
  • Adds NODE_CONFIG_SKIP_COPY env var and CARDANO_NODE_SHELL_BIN support to the entrypoint
  • Adds leios environment support to the Justfile with start-node, stop-all, query-tip recipes
  • Adds nix-copy-to-machine and nix-store-pin recipes
  • Adds cardano-node binary override support via flakeModules/pkgs.nix
  • Fixes IPv6 AAAA DNS record creation to be conditional on VPC IPv6 availability
  • See the PR description for additional details

Cardano-playground

cardano-playground PR#57:

  • Adds Leios testnet environment with block producers, relays, dbsync, faucet, and custom alloy-based monitoring filtering for Leios-specific trace namespaces
  • Adds nushell scripts for pool delegation management, UTxO defragmentation, and bulk fund transfers
  • Adds low-threshold guardrails plutus script for playground governance testing
  • Converts mainnet1-rel-a-2 from LMDB to LSM storage backend
  • Consolidates dijkstra relay fleet by removing redundant relay nodes
  • Hardens EC2 metadata to require IMDSv2
  • Updates kernel to 6.18 with ZFS 2.4 overlay for LSM compatibility
  • Updates cardano-book for 10.7.1 release and pre-release configurations
  • See the PR description for additional details

Cardano-sandbox

cardano-sandbox:

  • Creates a new environment for testing major stack re-factors, migrations and other complex test difficult or risky to execute on other live environments.

Iohk-nix

iohk-nix PR#612:

  • Updates useLedgerAfterSlot values and peer-snapshot.json files for node 11.0.0

iohk-nix PR#613:

  • Sets ExperimentalHardFork to false for node 11.0.0 on networks not yet forked to PV11, ensuring compatibility with older node versions

iohk-nix PR#614:

  • Fixes blst flake input with correct lastModified and narHash and sets libblst to explicit version 0.3.15
  • Adds GHA validate flake lock CI for push and PR to catch flake input regressions

Repository Work In Progress -- PRs and Branches