Replace creation and verification of certs with Cardano.Crypto.Leios functions
The unit tests are not needed anymore
The unit tests are not needed anymore
Mark peras as unsupported. The machinery is interesting though and we should also make it negotiate leios support like this?
Port the mempool to the mk-free MempoolAcc representation: API, Impl/Common, Query, Capacity, then Update and Init. The mempool no longer threads a MapKind; it carries the accumulated UTxO values explicitly.
Make the LedgerTablesHandle contract mk-free and fold the InMemory backend's value ops into BlockSupportsUTxOHD. Drop mk from Storage's upstream dependencies and make the LedgerDB V2 (StateRef, LedgerSeq, Forker, snapshots, InMemory backend) mk-free throughout. Thread LedgerConfig through duplicateWithDiffs/forkerPush and route range reads through a dedicated EraRangeReader, surfacing an EraRangeReaderProvider from the V2 LedgerDB. ChainDB consumers are made mk-free, dropping the vestigial NoThunks/Bridge and CanUpgradeLedgerTables constraints.
Finish the mk-free sweep for lib:ouroboros-consensus: the Node entry points (ProtocolInfo, Run) and the MiniProtocol consumers (ChainSync client + InFutureCheck, LocalStateQuery server). Genesis Values now flow through ProtocolInfo: pInfoInitLedgerTables carries them and injectInitialExtLedgerState returns (state, values). With this, lib:ouroboros-consensus is fully green.
Update the diffusion layer (Node, NodeKernel, GSM) to the mk-free ledger/table surface. lib:ouroboros-consensus:diffusion is green.
Introduce the mk-free abstract table surface (BlockSupportsUTxOHD): the
ledger no longer carries a MapKind type parameter. LedgerState becomes a
plain Type, ApplyBlock is pure, and the dual ledger is made mk-free.
Consolidate the table vocabulary into Ledger.Basics, dropping StateKind and
the now-redundant Ledger/Tables.hs subtree (Tables/{Basics,Combinators,Kinds,
MapKind,Utils}). Haddocks describe the current mk-free API; dead readAll and
stale mk-era references are removed.
This is one atomic semantic change: the lib does not build until the whole
mk-free sweep lands.
Update the LSM V2 backend to the mk-free LedgerTablesHandle contract. lib:ouroboros-consensus:lsm is green. (The unused containers dependency was dropped from the lsm sublib in ouroboros-consensus.cabal as part of the abstract-surface commit.)
Make the HardFork combinator mk-free: the mk-free state functor and
era-translation types, mk-free extendToSlot, and the SingleEraUTxOHDBlock
split. forward is made config-free (IO pipelining deferred). Implement the
HardForkBlock BlockSupportsUTxOHD bodies plus tick/apply, and the NS type
surface in Ledger.hs, deleting the old canonical machinery.
Flip sweep across the combinator: Query, CommonProtocolParams, PeerSelection,
InitStorage, Forging, Mempool, Embed/{Unary,Nary,Binary}, Degenerate and
Serialisation. Embed/Nary returns the per-era genesis values.
Port the Shelley era (Ledger, Forge, Inspect, Mempool, Query, PeerSelection, SupportsProtocol, Serialisation, TPraos, ShelleyHFC) to the mk-free API. Add Ouroboros.Consensus.Shelley.Ledger.LedgerCallShim, which encapsulates the empty-UTxO NewEpochState invariant: every stored NES carries no UTxO, and the block/tick/tx apply wrappers take the UTxO values and the NES separately (NewEpochStateNoUTxOs). The UTxO-touching cardano-ledger entry points are fenced behind the shim via .hlint.yaml so they cannot be called directly; applyTx is the single era-dispatched exception routed through the shim.
Make the Cardano HFC mk-free: Block.hs (CardanoLedgerState + era pattern synonyms), CanHardFork (EraTranslation diff/values restructure), QueryHF (NS projection with an era-typed filter), and protocolInfoCardano genesis, which now produces the per-era genesis Values via the Nary embedding. The canonical /serialise machinery is stripped from Cardano.Ledger. There is deliberately no TxIn/TxOut instance for (HardForkBlock xs): tables are per-era only. With this, lib:ouroboros-consensus:cardano is green. TODO @js: CardanoTxOut and its IndexedMemPack codecs are retained only for the deferred snapshot-converter tool.
Update the Byron era (Ledger, Forge, Inspect, Mempool, Node, Serialisation, ByronHFC) to the mk-free ledger/table surface.
The fusion is a constant-factor change, not the elimination of the These intermediate it was described as. Map.union still produces a per-key These and the inner These is still built transiently for shared keys; what the fusion removes is one of the two outer Map.map passes over the post-union map, plus the wrap-then-remap of single-side currencies. Adjust the changelog and drop Note [Single-pass unionWith] accordingly; the merge structure is plain from the code. For IntersectMBO/plutus-private#2243.
Compare the typed unionWith (+) against the builtin unionValue path on CEK rather than against host-Haskell unionWith: a shared-source oracle cannot catch a bug that lands the same way on both sides. Inputs are restricted to the well-formed domain unsafeDataAsValue accepts, and results are compared up to key order and zero-sum entries. Bindings use plinthc instead of the compile splice. Also rephrase Note [Single-pass unionWith] and the checkBinRel docstring to describe the present structure without contrasting against history. For IntersectMBO/plutus-private#2243.