Ledger Team Update
High level summary
Most of this cycle went into Leios and the block header abstraction that supports it. The EraBlockHeader interface was reshaped into a separate type class per protocol that can be specified on a per-era basis, which required a dedicated BbodySignal type and a redefined BBODY rule for Babbage, where the TPraos to Praos switch happened. Related to this, the block header now uses a more lax VersionInfo in place of ProtVer for Dijkstra and no longer relies on a self-reported version when constructing headers. On Leios itself we now select the Leios committee at the epoch boundary, expire BLS keys after KES expiry, check the BLS proof of possession in Dijkstra's POOL rule, added a lens for the announcement block header reference on LeiosEraBlockHeader, and added Dijkstra forecasting for Leios on the prototype branch. We also began laying groundwork for Peras by adding its protocol parameters, while keeping Peras certificates out of the Dijkstra block body for now.
Work on the Plutus V4 context and sub-transactions continued, with the PlutusV4 context implemented for the GuardingPurpose and the sub-transaction index now available in the Plutus context. On the Dijkstra era itself we added a DijkstraEraTx type class with a hashTx function, fixed a superclass constraint in DijkstraEraPParams, added reference-input cost protocol parameters (ppRefInputsCostPerMultiAssetPolicyL and ppRefInputsCostPerDatumByteL) starting at Dijkstra, and fixed conservation of value for phase-2-invalid transactions. Elsewhere we introduced a distinct type for the pool distribution used for governance, fixed VRF reuse when re-registering a pool, and removed some unnecessary memory overhead in native scripts.
On the testing side we continued filling in predicate-failure coverage for the sub-rules and related rules (MEMPOOL, SUBGOV, SUBLEDGER), enabled tests in CertSpec, added a BBODY ImpSpec, added regression tests for conformance, LeiosCert serialization tests, and more withdrawal tests. For infrastructure and releasing we updated the Allegra changelog, bumped the CHaP index-state, and dropped cardano-crypto-leios as a source-repository-package from the cabal project.
Low level summary
Features
- PR-6054 - Use a distinct type for the pool distribution used for governance
- PR-6062 - Fix VRF reuse when re-registering pool
- PR-6052 - Select the Leios committee at the epoch boundary
- PR-6047 - Expire BLS keys after KES expiry
- PR-6089 - Fix superclass constraint in DijkstraEraPParams
- PR-6077 - Fix conservation of value for phase2- invalid transactions
- PR-6099 - Add
DijkstraEraTxtypeclass withhashTxfunction - PR-6088 - BlockHeader cross era interface
- PR-6084 - Use more lax
VersionInfoin place ofProtVerin BlockHeader for Dijkstra - PR-6101 - Add
ebReferencesAnnouncementBlockHeaderLtoLeiosEraBlockHeader - PR-6067 - Add Peras protocol parameters
- PR-6068 - PlutusV4 context for
GuardingPurpose - PR-6117 - Do not use self-reported version when constructing block headers
- PR-6064 - [Leios Prototype] Add Dijkstra forecasting for Leios
- PR-6110 - Add
ppRefInputsCostPerMultiAssetPolicyLandppRefInputsCostPerDatumByteLprotocol parameters starting atDijkstraEra - PR-6085 - Check BLS proof of possession in Dijkstra's POOL rule
- PR-6121 - Sub Tx index in plutus context
- PR-6122 - Remove unnecessary memory overhead in NativeScripts
Testing
- PR-6082 - Add regression tests for conformance
- PR-6091 - Add
LeiosCertserialization tests - PR-6095 - MEMPOOL predicate failures
- PR-6083 - SUBGOV predicate failures
- PR-6115 - Enable tests in
CertSpec - PR-6116 - BBODY Impspec
- PR-6111 - Additional withdrawal tests
- PR-6112 - SUBLEDGER predicate-failure tests



