Skip to content

Commit a336bc4

Browse files
committed
Add encoder and decoder for LedgerState
1 parent 0891800 commit a336bc4

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Diff for: cardano-api/src/Cardano/Api.hs

+2
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,8 @@ module Cardano.Api (
540540
envSecurityParam,
541541
LedgerState(..),
542542
initialLedgerState,
543+
encodeLedgerState,
544+
decodeLedgerState,
543545
applyBlock,
544546
ValidationMode(..),
545547

Diff for: cardano-api/src/Cardano/Api/LedgerState.hs

+32-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ module Cardano.Api.LedgerState
2424
, LedgerStateMary
2525
, LedgerStateAlonzo
2626
)
27+
, encodeLedgerState
28+
, decodeLedgerState
2729
, initialLedgerState
2830
, applyBlock
2931
, ValidationMode(..)
@@ -52,6 +54,8 @@ module Cardano.Api.LedgerState
5254
)
5355
where
5456

57+
import qualified Codec.CBOR.Decoding as CBOR
58+
import qualified Codec.CBOR.Encoding as CBOR
5559
import Control.Exception
5660
import Control.Monad (when)
5761
import Control.Monad.Trans.Class
@@ -78,7 +82,7 @@ import qualified Data.Sequence as Seq
7882
import Data.Set (Set)
7983
import qualified Data.Set as Set
8084
import Data.Sharing (FromSharedCBOR, Interns, Share)
81-
import Data.SOP.Strict (NP (..))
85+
import Data.SOP.Strict (K (..), NP (..), fn, (:.:) (Comp))
8286
import Data.Text (Text)
8387
import qualified Data.Text as Text
8488
import qualified Data.Text.Encoding as Text
@@ -142,6 +146,7 @@ import Cardano.Slotting.Slot (WithOrigin (At, Origin))
142146
import qualified Cardano.Slotting.Slot as Slot
143147
import qualified Ouroboros.Consensus.Block.Abstract as Consensus
144148
import qualified Ouroboros.Consensus.Byron.Ledger.Block as Byron
149+
import qualified Ouroboros.Consensus.Byron.Ledger.Ledger as Byron
145150
import qualified Ouroboros.Consensus.Cardano as Consensus
146151
import qualified Ouroboros.Consensus.Cardano.Block as Consensus
147152
import qualified Ouroboros.Consensus.Cardano.CanHardFork as Consensus
@@ -150,6 +155,7 @@ import qualified Ouroboros.Consensus.Config as Consensus
150155
import qualified Ouroboros.Consensus.HardFork.Combinator as Consensus
151156
import qualified Ouroboros.Consensus.HardFork.Combinator.AcrossEras as HFC
152157
import qualified Ouroboros.Consensus.HardFork.Combinator.Basics as HFC
158+
import qualified Ouroboros.Consensus.HardFork.Combinator.Serialisation.Common as HFC
153159
import qualified Ouroboros.Consensus.Ledger.Abstract as Ledger
154160
import Ouroboros.Consensus.Ledger.Basics (LedgerResult (lrEvents), lrResult)
155161
import qualified Ouroboros.Consensus.Ledger.Extended as Ledger
@@ -866,6 +872,31 @@ newtype LedgerState = LedgerState
866872
(Consensus.CardanoEras Consensus.StandardCrypto))
867873
}
868874

875+
encodeLedgerState :: LedgerState -> CBOR.Encoding
876+
encodeLedgerState (LedgerState (HFC.HardForkLedgerState st)) =
877+
HFC.encodeTelescope
878+
(byron :* shelley :* allegra :* mary :* alonzo :* babbage :* Nil)
879+
st
880+
where
881+
byron = fn (K . Byron.encodeByronLedgerState)
882+
shelley = fn (K . Shelley.encodeShelleyLedgerState)
883+
allegra = fn (K . Shelley.encodeShelleyLedgerState)
884+
mary = fn (K . Shelley.encodeShelleyLedgerState)
885+
alonzo = fn (K . Shelley.encodeShelleyLedgerState)
886+
babbage = fn (K . Shelley.encodeShelleyLedgerState)
887+
888+
decodeLedgerState :: forall s. CBOR.Decoder s LedgerState
889+
decodeLedgerState =
890+
LedgerState . HFC.HardForkLedgerState
891+
<$> HFC.decodeTelescope (byron :* shelley :* allegra :* mary :* alonzo :* babbage :* Nil)
892+
where
893+
byron = Comp Byron.decodeByronLedgerState
894+
shelley = Comp Shelley.decodeShelleyLedgerState
895+
allegra = Comp Shelley.decodeShelleyLedgerState
896+
mary = Comp Shelley.decodeShelleyLedgerState
897+
alonzo = Comp Shelley.decodeShelleyLedgerState
898+
babbage = Comp Shelley.decodeShelleyLedgerState
899+
869900
type LedgerStateEvents = (LedgerState, [LedgerEvent])
870901

871902
toLedgerStateEvents ::

0 commit comments

Comments
 (0)