Ledger Team Update
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
getProducedValuefor Dijkstra - PR-5916 - Remove DRep requirement for reward withdrawals
- PR-5919 - Adjust
consumedandproducedinterface - 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
AccountBalanceExactconstructor toAccountBalanceInterval - PR-5944 - Make
SnapShotsera parametric - PR-5926 - Fix/allow thunks in Alonzo/Conway geneses
