Skip to main content

Ledger Team Update

· 5 min read
Alexey Kuleshevich
Ledger Team Software Engineer

High level summary

This update covers a longer stretch than usual because there was no report since 2026-05-27: the whole Ledger team was first at the ZuriHac conference and then had an in-person team meetup, so the last several weeks were lighter on routine reporting but no less productive. A good chunk of the work below is the continuation of storylines from earlier updates, alongside a few new fronts.

On the performance side the state-annotated transaction (StAnnTx) work reached back to the older eras. Integration of the memoized values held in StAnnTx had previously been done for Babbage onward, and this cycle it was extended to Alonzo, which needed special handling, along with a small follow-up removing an unnecessary EncCBOR instance for AlonzoStAnnTx. We also finished the long-running effort to remove the legacy Coders machinery: the final piece for protocol version 12 and up (dropping the Summands usage) landed, Coders was removed from the testlibs and tests, and StakePoolParams was switched from CBORGroup-derived encoding to manual EncCBOR/DecCBOR instances in preparation for dynamic CBOR list lengths.

A notable new front is Leios support beginning to land in the ledger. The LeiosCert type, defined in the new cardano-crypto-leios package on the cardano-base repository, was added as an optional field to DijkstraBlockBody, and the Dijkstra CDDL for header_body was updated to reflect what the Leios prototype should be producing. We also introduced a new cardano-protocol package to house protocol-level code. On the ledger rules themselves there was a round of structural cleanup: a new ENTITIES rule (with an equivalent subrule) was introduced between LEDGER and CERTS to handle withdrawals and direct deposits, the era prefix was dropped from rule names, and the Rewarding script purpose was renamed to the more accurate Withdrawing.

The Dijkstra era work continued on several smaller fronts, including requiring top-level guards in the top-level transaction body, adjusting the Conway transaction_witness_set CDDL rule to use non-empty lists for the relevant fields. Conformance testing for Dijkstra advanced to its third installment, this time adding SpecTranslate instances for Dijkstra types and ExecSpecRule instances for the LEDGER and NEWEPOCH rules. Two user-visible bugs were fixed: injected extraConfig cost models were being ignored for PlutusV1/V3 because of an argument-ordering issue in overrideCostModels, and TxInfo translation could fail spuriously in LegacyMode. We also added ToJSON/FromJSON instances for EraScript and native scripts.

On the tooling and infrastructure side the generate-cbor CLI tool added last cycle was moved into cardano-ledger-api, refactor of the singleton-key namespaces (committee and constitution) for Canonical Ledger State, new Conway UTxO and Script generators were added, and CI was updated to allow automated agents to invoke the /update-changelogs skill. The dependency stack was moved forward with updates to cardano-crypto-class-2.5, the haskellNix flake input, and the usual GitHub Actions bumps.

Low level summary

Features

  • PR-5837 - Remove unnecessary re-exports from Shelley Rules
  • PR-5859 - Remove era prefix from rule names
  • PR-5748 - Refactor namespaces with singleton keys
  • PR-5867 - Prevent TxInfo translation failure for LegacyMode
  • PR-5866 - Rename Rewarding to Withdrawing
  • PR-5845 - Add ToJSON/FromJSON instances for EraScript
  • PR-5860 - Stop using Summands from Coders for PV12+
  • PR-5857 - Further StAnnTx integration
  • PR-5872 - Add LeiosCert to DijkstraBlockBody
  • PR-5897 - Remove unnecessary EncCBOR instance for AlonzoStAnnTx
  • PR-5899 - Fix injected extraConfig cost models being ignored for PlutusV1/V3
  • PR-5878 - Entities and Subentities Rules
  • PR-5889 - Fix Dijkstra CDDL for Leios changes to header_body
  • PR-5887 - Create cardano-protocol package
  • PR-5903 - Require top-level guards in top-level transaction body
  • PR-5908 - Use non-empty list for fields without duplicate enforcement in Conway transaction_witness_set cddl rule
  • PR-5890 - Replace CBORGroup-derived EncCBOR/DecCBOR for StakePoolParams with manual instances

Testing

  • PR-5844 - Prepare conformance for Dijkstra 3
  • PR-5868 - Add Test.Cardano.Ledger.Conway.Gen.{UTxO,Script} modules.
  • PR-5883 - Add isPotentialFutureMember ImpTest

Infrastructure and releasing

  • PR-5864 - Move generate-cbor to cardano-ledger-api
  • PR-5870 - Update to cardano-crypto-class-2.5
  • PR-5876 - Bump actions/checkout from 6 to 7 in the actions group
  • PR-5877 - Allow agents to invoke /update-changelogs
  • PR-5865 - Remove Coders from testlibs and tests
  • PR-5884 - Bump actions/cache from 5 to 6 in the actions group
  • PR-5894 - Update haskellNix flake input