+
import qualified Cardano.Binary as CBOR
import Control.Monad (when)
import Control.Monad.Trans.Class
import qualified Data.Set as Set
import Data.Sharing (FromSharedCBOR, Interns, Share)
-
import Data.SOP.Strict (NP (..))
+
import Data.SOP.Strict (K (..), NP (..), fn, (:.:) (Comp))
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Cardano.Slotting.Slot as Slot
import qualified Ouroboros.Consensus.Block.Abstract as Consensus
import qualified Ouroboros.Consensus.Byron.Ledger.Block as Byron
+
import qualified Ouroboros.Consensus.Byron.Ledger.Ledger as Byron
import qualified Ouroboros.Consensus.Cardano as Consensus
import qualified Ouroboros.Consensus.Cardano.Block as Consensus
import qualified Ouroboros.Consensus.Cardano.CanHardFork as Consensus
import qualified Ouroboros.Consensus.HardFork.Combinator as Consensus
import qualified Ouroboros.Consensus.HardFork.Combinator.AcrossEras as HFC
import qualified Ouroboros.Consensus.HardFork.Combinator.Basics as HFC
+
import qualified Ouroboros.Consensus.HardFork.Combinator.Serialisation.Common as HFC
import qualified Ouroboros.Consensus.Ledger.Abstract as Ledger
import Ouroboros.Consensus.Ledger.Basics (LedgerResult (lrEvents), lrResult)
import qualified Ouroboros.Consensus.Ledger.Extended as Ledger
(Consensus.CardanoEras Consensus.StandardCrypto))
+
encodeLedgerState :: LedgerState -> CBOR.Encoding
+
encodeLedgerState (LedgerState (HFC.HardForkLedgerState st)) =
+
(byron :* shelley :* allegra :* mary :* alonzo :* babbage :* Nil)
+
byron = fn (K . Byron.encodeByronLedgerState)
+
shelley = fn (K . Shelley.encodeShelleyLedgerState)
+
allegra = fn (K . Shelley.encodeShelleyLedgerState)
+
mary = fn (K . Shelley.encodeShelleyLedgerState)
+
alonzo = fn (K . Shelley.encodeShelleyLedgerState)
+
babbage = fn (K . Shelley.encodeShelleyLedgerState)
+
decodeLedgerState :: forall s. CBOR.Decoder s LedgerState
+
LedgerState . HFC.HardForkLedgerState
+
<$> HFC.decodeTelescope (byron :* shelley :* allegra :* mary :* alonzo :* babbage :* Nil)
+
byron = Comp Byron.decodeByronLedgerState
+
shelley = Comp Shelley.decodeShelleyLedgerState
+
allegra = Comp Shelley.decodeShelleyLedgerState
+
mary = Comp Shelley.decodeShelleyLedgerState
+
alonzo = Comp Shelley.decodeShelleyLedgerState
+
babbage = Comp Shelley.decodeShelleyLedgerState
type LedgerStateEvents = (LedgerState, [LedgerEvent])