Skip to content

Commit 6e8c1f2

Browse files
committed
Add encoder and decoder for LedgerState
1 parent db396b1 commit 6e8c1f2

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
@@ -533,6 +533,8 @@ module Cardano.Api (
533533
envSecurityParam,
534534
LedgerState(..),
535535
initialLedgerState,
536+
encodeLedgerState,
537+
decodeLedgerState,
536538
applyBlock,
537539
ValidationMode(..),
538540

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

+32-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ module Cardano.Api.LedgerState
2222
, LedgerStateMary
2323
, LedgerStateAlonzo
2424
)
25+
, encodeLedgerState
26+
, decodeLedgerState
2527
, initialLedgerState
2628
, applyBlock
2729
, ValidationMode(..)
@@ -52,6 +54,8 @@ module Cardano.Api.LedgerState
5254

5355
import Prelude
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
@@ -140,6 +144,7 @@ import Cardano.Slotting.Slot (WithOrigin (At, Origin))
140144
import qualified Cardano.Slotting.Slot as Slot
141145
import qualified Ouroboros.Consensus.Block.Abstract as Consensus
142146
import qualified Ouroboros.Consensus.Byron.Ledger.Block as Byron
147+
import qualified Ouroboros.Consensus.Byron.Ledger.Ledger as Byron
143148
import qualified Ouroboros.Consensus.Cardano as Consensus
144149
import qualified Ouroboros.Consensus.Cardano.Block as Consensus
145150
import qualified Ouroboros.Consensus.Cardano.CanHardFork as Consensus
@@ -148,6 +153,7 @@ import qualified Ouroboros.Consensus.Config as Consensus
148153
import qualified Ouroboros.Consensus.HardFork.Combinator as Consensus
149154
import qualified Ouroboros.Consensus.HardFork.Combinator.AcrossEras as HFC
150155
import qualified Ouroboros.Consensus.HardFork.Combinator.Basics as HFC
156+
import qualified Ouroboros.Consensus.HardFork.Combinator.Serialisation.Common as HFC
151157
import qualified Ouroboros.Consensus.Ledger.Abstract as Ledger
152158
import Ouroboros.Consensus.Ledger.Basics (LedgerResult (lrEvents), lrResult)
153159
import qualified Ouroboros.Consensus.Ledger.Extended as Ledger
@@ -864,6 +870,31 @@ newtype LedgerState = LedgerState
864870
(Consensus.CardanoEras Consensus.StandardCrypto))
865871
}
866872

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

869900
toLedgerStateEvents ::

0 commit comments

Comments
 (0)