{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE EmptyDataDeriving #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Dijkstra.Rules.SubLedger ( DijkstraSUBLEDGER, DijkstraSubLedgerPredFailure (..), DijkstraSubLedgerEvent (..), SubLedgerEnv (..), ) where import Cardano.Ledger.Alonzo.Plutus.Context (EraPlutusContext) import Cardano.Ledger.Alonzo.Rules (AlonzoUtxowPredFailure) import Cardano.Ledger.Alonzo.UTxO (AlonzoEraUTxO, AlonzoScriptsNeeded) import Cardano.Ledger.Babbage.Rules (BabbageUtxowPredFailure) import Cardano.Ledger.BaseTypes import Cardano.Ledger.Binary ( DecCBOR (..), EncCBOR (..), ) import Cardano.Ledger.Binary.Coders import Cardano.Ledger.Coin (Coin) import Cardano.Ledger.Conway.Core import Cardano.Ledger.Conway.Governance import Cardano.Ledger.Conway.Rules ( ConwayCertsPredFailure, ConwayDelegPredFailure, ConwayGovCertPredFailure, ConwayGovEvent, ConwayGovPredFailure, ConwayLedgerPredFailure (..), GovEnv (..), GovSignal (..), gsCertificates, gsProposalProcedures, gsVotingProcedures, validateTreasuryValue, validateWithdrawalsDelegated, ) import Cardano.Ledger.Conway.State import Cardano.Ledger.Dijkstra.Era ( DijkstraEra, DijkstraSUBCERT, DijkstraSUBCERTS, DijkstraSUBDELEG, DijkstraSUBGOV, DijkstraSUBGOVCERT, DijkstraSUBLEDGER, DijkstraSUBPOOL, DijkstraSUBUTXO, DijkstraSUBUTXOW, ) import Cardano.Ledger.Dijkstra.Rules.Gov (DijkstraGovPredFailure (..)) import Cardano.Ledger.Dijkstra.Rules.SubCerts (DijkstraSubCertsPredFailure (..), SubCertsEnv (..)) import Cardano.Ledger.Dijkstra.Rules.SubDeleg (DijkstraSubDelegPredFailure) import Cardano.Ledger.Dijkstra.Rules.SubGov (DijkstraSubGovEvent, DijkstraSubGovPredFailure (..)) import Cardano.Ledger.Dijkstra.Rules.SubGovCert (DijkstraSubGovCertPredFailure) import Cardano.Ledger.Dijkstra.Rules.SubPool (DijkstraSubPoolEvent, DijkstraSubPoolPredFailure) import Cardano.Ledger.Dijkstra.Rules.SubUtxow (DijkstraSubUtxowPredFailure (..), SubUtxowEnv (..)) import Cardano.Ledger.Dijkstra.Rules.Utxow (DijkstraUtxowPredFailure (..)) import Cardano.Ledger.Dijkstra.TxCert import Cardano.Ledger.Rules.ValidationMode (runTest) import Cardano.Ledger.Shelley.LedgerState import Cardano.Ledger.Shelley.Rules ( PoolEvent, ShelleyPoolPredFailure, ShelleyUtxowPredFailure, epochFromSlot, ) import Control.DeepSeq (NFData) import Control.State.Transition.Extended ( BaseM, Embed (..), Environment, Event, PredicateFailure, STS, Signal, State, TRC (TRC), TransitionRule, judgmentContext, liftSTS, trans, transitionRules, ) import Data.List.NonEmpty (NonEmpty) import qualified Data.Sequence.Strict as StrictSeq import GHC.Generics (Generic) import Lens.Micro import NoThunks.Class (NoThunks (..)) data SubLedgerEnv era = SubLedgerEnv { forall era. SubLedgerEnv era -> SlotNo sleSlotNo :: SlotNo , forall era. SubLedgerEnv era -> Maybe EpochNo sleEpochNo :: Maybe EpochNo , forall era. SubLedgerEnv era -> TxIx sleTxIx :: TxIx , forall era. SubLedgerEnv era -> PParams era slePParams :: PParams era , forall era. SubLedgerEnv era -> ChainAccountState sleAccount :: ChainAccountState , forall era. SubLedgerEnv era -> ScriptsProvided era sleScriptsProvided :: ScriptsProvided era } data DijkstraSubLedgerPredFailure era = SubUtxowFailure (PredicateFailure (EraRule "SUBUTXOW" era)) | SubCertsFailure (PredicateFailure (EraRule "SUBCERTS" era)) | SubGovFailure (PredicateFailure (EraRule "SUBGOV" era)) | SubWdrlNotDelegatedToDRep (NonEmpty (KeyHash Staking)) | SubTreasuryValueMismatch (Mismatch RelEQ Coin) deriving ((forall x. DijkstraSubLedgerPredFailure era -> Rep (DijkstraSubLedgerPredFailure era) x) -> (forall x. Rep (DijkstraSubLedgerPredFailure era) x -> DijkstraSubLedgerPredFailure era) -> Generic (DijkstraSubLedgerPredFailure era) forall x. Rep (DijkstraSubLedgerPredFailure era) x -> DijkstraSubLedgerPredFailure era forall x. DijkstraSubLedgerPredFailure era -> Rep (DijkstraSubLedgerPredFailure era) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall era x. Rep (DijkstraSubLedgerPredFailure era) x -> DijkstraSubLedgerPredFailure era forall era x. DijkstraSubLedgerPredFailure era -> Rep (DijkstraSubLedgerPredFailure era) x $cfrom :: forall era x. DijkstraSubLedgerPredFailure era -> Rep (DijkstraSubLedgerPredFailure era) x from :: forall x. DijkstraSubLedgerPredFailure era -> Rep (DijkstraSubLedgerPredFailure era) x $cto :: forall era x. Rep (DijkstraSubLedgerPredFailure era) x -> DijkstraSubLedgerPredFailure era to :: forall x. Rep (DijkstraSubLedgerPredFailure era) x -> DijkstraSubLedgerPredFailure era Generic) deriving stock instance ( Eq (PredicateFailure (EraRule "SUBGOV" era)) , Eq (PredicateFailure (EraRule "SUBCERTS" era)) , Eq (PredicateFailure (EraRule "SUBUTXOW" era)) ) => Eq (DijkstraSubLedgerPredFailure era) deriving stock instance ( Show (PredicateFailure (EraRule "SUBGOV" era)) , Show (PredicateFailure (EraRule "SUBCERTS" era)) , Show (PredicateFailure (EraRule "SUBUTXOW" era)) ) => Show (DijkstraSubLedgerPredFailure era) instance ( NoThunks (PredicateFailure (EraRule "SUBGOV" era)) , NoThunks (PredicateFailure (EraRule "SUBCERTS" era)) , NoThunks (PredicateFailure (EraRule "SUBUTXOW" era)) ) => NoThunks (DijkstraSubLedgerPredFailure era) instance ( NFData (PredicateFailure (EraRule "SUBGOV" era)) , NFData (PredicateFailure (EraRule "SUBCERTS" era)) , NFData (PredicateFailure (EraRule "SUBUTXOW" era)) ) => NFData (DijkstraSubLedgerPredFailure era) type instance EraRuleFailure "SUBLEDGER" DijkstraEra = DijkstraSubLedgerPredFailure DijkstraEra type instance EraRuleEvent "SUBLEDGER" DijkstraEra = DijkstraSubLedgerEvent DijkstraEra instance InjectRuleFailure "SUBLEDGER" DijkstraSubLedgerPredFailure DijkstraEra instance InjectRuleFailure "SUBLEDGER" DijkstraSubGovPredFailure DijkstraEra where injectFailure :: DijkstraSubGovPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra injectFailure = PredicateFailure (EraRule "SUBGOV" DijkstraEra) -> DijkstraSubLedgerPredFailure DijkstraEra DijkstraSubGovPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra forall era. PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era SubGovFailure instance InjectRuleFailure "SUBLEDGER" DijkstraSubUtxowPredFailure DijkstraEra where injectFailure :: DijkstraSubUtxowPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra injectFailure = PredicateFailure (EraRule "SUBUTXOW" DijkstraEra) -> DijkstraSubLedgerPredFailure DijkstraEra DijkstraSubUtxowPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra forall era. PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era SubUtxowFailure instance InjectRuleFailure "SUBLEDGER" DijkstraSubCertsPredFailure DijkstraEra where injectFailure :: DijkstraSubCertsPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra injectFailure = PredicateFailure (EraRule "SUBCERTS" DijkstraEra) -> DijkstraSubLedgerPredFailure DijkstraEra DijkstraSubCertsPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra forall era. PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era SubCertsFailure instance InjectRuleFailure "SUBLEDGER" ConwayLedgerPredFailure DijkstraEra where injectFailure :: ConwayLedgerPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra injectFailure = ConwayLedgerPredFailure DijkstraEra -> EraRuleFailure "SUBLEDGER" DijkstraEra ConwayLedgerPredFailure DijkstraEra -> DijkstraSubLedgerPredFailure DijkstraEra forall era. (InjectRuleFailure "SUBUTXOW" DijkstraUtxowPredFailure era, PredicateFailure (EraRule "UTXOW" era) ~ DijkstraUtxowPredFailure era, InjectRuleFailure "SUBCERTS" ConwayCertsPredFailure era, PredicateFailure (EraRule "CERTS" era) ~ ConwayCertsPredFailure era, InjectRuleFailure "SUBGOV" DijkstraGovPredFailure era, PredicateFailure (EraRule "GOV" era) ~ DijkstraGovPredFailure era) => ConwayLedgerPredFailure era -> DijkstraSubLedgerPredFailure era conwayToDijkstraSubLedgerPredFailure data DijkstraSubLedgerEvent era = SubCertsEvent (Event (EraRule "SUBCERTS" era)) | SubGovEvent (Event (EraRule "SUBGOV" era)) | SubUtxowEvent (Event (EraRule "SUBUTXOW" era)) deriving ((forall x. DijkstraSubLedgerEvent era -> Rep (DijkstraSubLedgerEvent era) x) -> (forall x. Rep (DijkstraSubLedgerEvent era) x -> DijkstraSubLedgerEvent era) -> Generic (DijkstraSubLedgerEvent era) forall x. Rep (DijkstraSubLedgerEvent era) x -> DijkstraSubLedgerEvent era forall x. DijkstraSubLedgerEvent era -> Rep (DijkstraSubLedgerEvent era) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall era x. Rep (DijkstraSubLedgerEvent era) x -> DijkstraSubLedgerEvent era forall era x. DijkstraSubLedgerEvent era -> Rep (DijkstraSubLedgerEvent era) x $cfrom :: forall era x. DijkstraSubLedgerEvent era -> Rep (DijkstraSubLedgerEvent era) x from :: forall x. DijkstraSubLedgerEvent era -> Rep (DijkstraSubLedgerEvent era) x $cto :: forall era x. Rep (DijkstraSubLedgerEvent era) x -> DijkstraSubLedgerEvent era to :: forall x. Rep (DijkstraSubLedgerEvent era) x -> DijkstraSubLedgerEvent era Generic) deriving instance ( Eq (Event (EraRule "SUBCERTS" era)) , Eq (Event (EraRule "SUBGOV" era)) , Eq (Event (EraRule "SUBUTXOW" era)) ) => Eq (DijkstraSubLedgerEvent era) instance ( NFData (Event (EraRule "SUBCERTS" era)) , NFData (Event (EraRule "SUBGOV" era)) , NFData (Event (EraRule "SUBUTXOW" era)) ) => NFData (DijkstraSubLedgerEvent era) instance InjectRuleEvent "SUBLEDGER" DijkstraSubLedgerEvent DijkstraEra instance ( EraTx era , ConwayEraTxBody era , ConwayEraGov era , ConwayEraCertState era , EraRule "SUBLEDGER" era ~ DijkstraSUBLEDGER era , EraRule "SUBGOV" era ~ DijkstraSUBGOV era , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era , EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era , EraRule "SUBCERTS" era ~ DijkstraSUBCERTS era , EraRule "SUBCERT" era ~ DijkstraSUBCERT era , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era , EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era , Embed (EraRule "SUBGOV" era) (DijkstraSUBLEDGER era) , Embed (EraRule "SUBUTXOW" era) (DijkstraSUBLEDGER era) , Embed (EraRule "SUBCERTS" era) (DijkstraSUBCERTS era) , InjectRuleEvent "SUBPOOL" PoolEvent era , InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent era , InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era , InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure era , InjectRuleFailure "SUBGOVCERT" DijkstraSubGovCertPredFailure era , InjectRuleFailure "SUBGOVCERT" ConwayGovCertPredFailure era , InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era , InjectRuleFailure "SUBDELEG" DijkstraSubDelegPredFailure era , InjectRuleFailure "SUBLEDGER" ConwayLedgerPredFailure era , InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure era , TxCert era ~ DijkstraTxCert era ) => STS (DijkstraSUBLEDGER era) where type State (DijkstraSUBLEDGER era) = LedgerState era type Signal (DijkstraSUBLEDGER era) = Tx SubTx era type Environment (DijkstraSUBLEDGER era) = SubLedgerEnv era type BaseM (DijkstraSUBLEDGER era) = ShelleyBase type PredicateFailure (DijkstraSUBLEDGER era) = DijkstraSubLedgerPredFailure era type Event (DijkstraSUBLEDGER era) = DijkstraSubLedgerEvent era transitionRules :: [TransitionRule (DijkstraSUBLEDGER era)] transitionRules = [forall era. (EraTx era, ConwayEraTxBody era, ConwayEraGov era, ConwayEraCertState era, EraRule "SUBLEDGER" era ~ DijkstraSUBLEDGER era, EraRule "SUBGOV" era ~ DijkstraSUBGOV era, EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era, EraRule "SUBCERTS" era ~ DijkstraSUBCERTS era, EraRule "SUBCERT" era ~ DijkstraSUBCERT era, EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era, EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era, EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era, Embed (EraRule "SUBGOV" era) (DijkstraSUBLEDGER era), Embed (EraRule "SUBUTXOW" era) (DijkstraSUBLEDGER era), InjectRuleFailure "SUBLEDGER" ConwayLedgerPredFailure era, InjectRuleEvent "SUBPOOL" PoolEvent era, InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent era, InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era, InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure era, InjectRuleFailure "SUBGOVCERT" DijkstraSubGovCertPredFailure era, InjectRuleFailure "SUBGOVCERT" ConwayGovCertPredFailure era, InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era, InjectRuleFailure "SUBDELEG" DijkstraSubDelegPredFailure era, STS (EraRule "SUBLEDGER" era), TxCert era ~ DijkstraTxCert era) => TransitionRule (EraRule "SUBLEDGER" era) dijkstraSubLedgersTransition @era] dijkstraSubLedgersTransition :: forall era. ( EraTx era , ConwayEraTxBody era , ConwayEraGov era , ConwayEraCertState era , EraRule "SUBLEDGER" era ~ DijkstraSUBLEDGER era , EraRule "SUBGOV" era ~ DijkstraSUBGOV era , EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era , EraRule "SUBCERTS" era ~ DijkstraSUBCERTS era , EraRule "SUBCERT" era ~ DijkstraSUBCERT era , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era , EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era , Embed (EraRule "SUBGOV" era) (DijkstraSUBLEDGER era) , Embed (EraRule "SUBUTXOW" era) (DijkstraSUBLEDGER era) , InjectRuleFailure "SUBLEDGER" ConwayLedgerPredFailure era , InjectRuleEvent "SUBPOOL" PoolEvent era , InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent era , InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era , InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure era , InjectRuleFailure "SUBGOVCERT" DijkstraSubGovCertPredFailure era , InjectRuleFailure "SUBGOVCERT" ConwayGovCertPredFailure era , InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era , InjectRuleFailure "SUBDELEG" DijkstraSubDelegPredFailure era , STS (EraRule "SUBLEDGER" era) , TxCert era ~ DijkstraTxCert era ) => TransitionRule (EraRule "SUBLEDGER" era) dijkstraSubLedgersTransition :: forall era. (EraTx era, ConwayEraTxBody era, ConwayEraGov era, ConwayEraCertState era, EraRule "SUBLEDGER" era ~ DijkstraSUBLEDGER era, EraRule "SUBGOV" era ~ DijkstraSUBGOV era, EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era, EraRule "SUBCERTS" era ~ DijkstraSUBCERTS era, EraRule "SUBCERT" era ~ DijkstraSUBCERT era, EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era, EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era, EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era, Embed (EraRule "SUBGOV" era) (DijkstraSUBLEDGER era), Embed (EraRule "SUBUTXOW" era) (DijkstraSUBLEDGER era), InjectRuleFailure "SUBLEDGER" ConwayLedgerPredFailure era, InjectRuleEvent "SUBPOOL" PoolEvent era, InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent era, InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era, InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure era, InjectRuleFailure "SUBGOVCERT" DijkstraSubGovCertPredFailure era, InjectRuleFailure "SUBGOVCERT" ConwayGovCertPredFailure era, InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era, InjectRuleFailure "SUBDELEG" DijkstraSubDelegPredFailure era, STS (EraRule "SUBLEDGER" era), TxCert era ~ DijkstraTxCert era) => TransitionRule (EraRule "SUBLEDGER" era) dijkstraSubLedgersTransition = do TRC ( SubLedgerEnv slot mbCurEpochNo _ pp chainAccountState scriptsProvided , ledgerState@(LedgerState utxoState certState) , tx ) <- Rule (DijkstraSUBLEDGER era) 'Transition (RuleContext 'Transition (DijkstraSUBLEDGER era)) F (Clause (DijkstraSUBLEDGER era) 'Transition) (TRC (DijkstraSUBLEDGER era)) forall sts (rtype :: RuleType). Rule sts rtype (RuleContext rtype sts) judgmentContext curEpochNo <- maybe (liftSTS $ epochFromSlot slot) pure mbCurEpochNo let txBody = Tx SubTx era Signal (DijkstraSUBLEDGER era) tx Tx SubTx era -> Getting (TxBody SubTx era) (Tx SubTx era) (TxBody SubTx era) -> TxBody SubTx era forall s a. s -> Getting a s a -> a ^. Getting (TxBody SubTx era) (Tx SubTx era) (TxBody SubTx era) forall era (l :: TxLevel). EraTx era => Lens' (Tx l era) (TxBody l era) forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era) bodyTxL let govState = UTxOState era utxoState UTxOState era -> Getting (GovState era) (UTxOState era) (GovState era) -> GovState era forall s a. s -> Getting a s a -> a ^. Getting (GovState era) (UTxOState era) (GovState era) forall era (f :: * -> *). Functor f => (GovState era -> f (GovState era)) -> UTxOState era -> f (UTxOState era) utxosGovStateL let committee = GovState era govState GovState era -> Getting (StrictMaybe (Committee era)) (GovState era) (StrictMaybe (Committee era)) -> StrictMaybe (Committee era) forall s a. s -> Getting a s a -> a ^. Getting (StrictMaybe (Committee era)) (GovState era) (StrictMaybe (Committee era)) forall era. ConwayEraGov era => Lens' (GovState era) (StrictMaybe (Committee era)) Lens' (GovState era) (StrictMaybe (Committee era)) committeeGovStateL let proposals = GovState era govState GovState era -> Getting (Proposals era) (GovState era) (Proposals era) -> Proposals era forall s a. s -> Getting a s a -> a ^. Getting (Proposals era) (GovState era) (Proposals era) forall era. ConwayEraGov era => Lens' (GovState era) (Proposals era) Lens' (GovState era) (Proposals era) proposalsGovStateL accounts = CertState era certState CertState era -> Getting (Accounts era) (CertState era) (Accounts era) -> Accounts era forall s a. s -> Getting a s a -> a ^. (DState era -> Const (Accounts era) (DState era)) -> CertState era -> Const (Accounts era) (CertState era) forall era. EraCertState era => Lens' (CertState era) (DState era) Lens' (CertState era) (DState era) certDStateL ((DState era -> Const (Accounts era) (DState era)) -> CertState era -> Const (Accounts era) (CertState era)) -> ((Accounts era -> Const (Accounts era) (Accounts era)) -> DState era -> Const (Accounts era) (DState era)) -> Getting (Accounts era) (CertState era) (Accounts era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Accounts era -> Const (Accounts era) (Accounts era)) -> DState era -> Const (Accounts era) (DState era) forall era. Lens' (DState era) (Accounts era) forall (t :: * -> *) era. CanSetAccounts t => Lens' (t era) (Accounts era) accountsL runTest $ validateTreasuryValue txBody (chainAccountState ^. casTreasuryL) runTest $ validateWithdrawalsDelegated accounts tx certStateAfterSubCerts <- trans @(EraRule "SUBCERTS" era) $ TRC ( SubCertsEnv tx pp curEpochNo committee (proposalsWithPurpose grCommitteeL proposals) , certState , StrictSeq.fromStrict $ txBody ^. certsTxBodyL ) let govEnv = TxId -> EpochNo -> PParams era -> StrictMaybe ScriptHash -> CertState era -> StrictMaybe (Committee era) -> GovEnv era forall era. TxId -> EpochNo -> PParams era -> StrictMaybe ScriptHash -> CertState era -> StrictMaybe (Committee era) -> GovEnv era GovEnv (TxBody SubTx era -> TxId forall era (l :: TxLevel). EraTxBody era => TxBody l era -> TxId txIdTxBody TxBody SubTx era txBody) EpochNo curEpochNo PParams era pp (GovState era govState GovState era -> Getting (StrictMaybe ScriptHash) (GovState era) (StrictMaybe ScriptHash) -> StrictMaybe ScriptHash forall s a. s -> Getting a s a -> a ^. (Constitution era -> Const (StrictMaybe ScriptHash) (Constitution era)) -> GovState era -> Const (StrictMaybe ScriptHash) (GovState era) forall era. ConwayEraGov era => Lens' (GovState era) (Constitution era) Lens' (GovState era) (Constitution era) constitutionGovStateL ((Constitution era -> Const (StrictMaybe ScriptHash) (Constitution era)) -> GovState era -> Const (StrictMaybe ScriptHash) (GovState era)) -> ((StrictMaybe ScriptHash -> Const (StrictMaybe ScriptHash) (StrictMaybe ScriptHash)) -> Constitution era -> Const (StrictMaybe ScriptHash) (Constitution era)) -> Getting (StrictMaybe ScriptHash) (GovState era) (StrictMaybe ScriptHash) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictMaybe ScriptHash -> Const (StrictMaybe ScriptHash) (StrictMaybe ScriptHash)) -> Constitution era -> Const (StrictMaybe ScriptHash) (Constitution era) forall era (f :: * -> *). Functor f => (StrictMaybe ScriptHash -> f (StrictMaybe ScriptHash)) -> Constitution era -> f (Constitution era) constitutionGuardrailsScriptHashL) CertState era certStateAfterSubCerts StrictMaybe (Committee era) committee let govSignal = GovSignal { gsVotingProcedures :: VotingProcedures era gsVotingProcedures = TxBody SubTx era txBody TxBody SubTx era -> Getting (VotingProcedures era) (TxBody SubTx era) (VotingProcedures era) -> VotingProcedures era forall s a. s -> Getting a s a -> a ^. Getting (VotingProcedures era) (TxBody SubTx era) (VotingProcedures era) forall era (l :: TxLevel). ConwayEraTxBody era => Lens' (TxBody l era) (VotingProcedures era) forall (l :: TxLevel). Lens' (TxBody l era) (VotingProcedures era) votingProceduresTxBodyL , gsProposalProcedures :: OSet (ProposalProcedure era) gsProposalProcedures = TxBody SubTx era txBody TxBody SubTx era -> Getting (OSet (ProposalProcedure era)) (TxBody SubTx era) (OSet (ProposalProcedure era)) -> OSet (ProposalProcedure era) forall s a. s -> Getting a s a -> a ^. Getting (OSet (ProposalProcedure era)) (TxBody SubTx era) (OSet (ProposalProcedure era)) forall era (l :: TxLevel). ConwayEraTxBody era => Lens' (TxBody l era) (OSet (ProposalProcedure era)) forall (l :: TxLevel). Lens' (TxBody l era) (OSet (ProposalProcedure era)) proposalProceduresTxBodyL , gsCertificates :: StrictSeq (TxCert era) gsCertificates = TxBody SubTx era txBody TxBody SubTx era -> Getting (StrictSeq (DijkstraTxCert era)) (TxBody SubTx era) (StrictSeq (DijkstraTxCert era)) -> StrictSeq (DijkstraTxCert era) forall s a. s -> Getting a s a -> a ^. (StrictSeq (TxCert era) -> Const (StrictSeq (DijkstraTxCert era)) (StrictSeq (TxCert era))) -> TxBody SubTx era -> Const (StrictSeq (DijkstraTxCert era)) (TxBody SubTx era) Getting (StrictSeq (DijkstraTxCert era)) (TxBody SubTx era) (StrictSeq (DijkstraTxCert era)) forall era (l :: TxLevel). EraTxBody era => Lens' (TxBody l era) (StrictSeq (TxCert era)) forall (l :: TxLevel). Lens' (TxBody l era) (StrictSeq (TxCert era)) certsTxBodyL } proposalsState <- trans @(EraRule "SUBGOV" era) $ TRC ( govEnv , proposals , govSignal ) utxoStateAfterSubUtxow <- trans @(EraRule "SUBUTXOW" era) $ TRC ( SubUtxowEnv slot pp certState scriptsProvided , utxoState , tx ) pure $ ledgerState & lsUTxOStateL .~ utxoStateAfterSubUtxow & lsUTxOStateL . utxosGovStateL . proposalsGovStateL .~ proposalsState & lsCertStateL .~ certStateAfterSubCerts instance ( ConwayEraGov era , ConwayEraCertState era , ConwayEraPParams era , ConwayEraTxCert era , EraRule "SUBGOV" era ~ DijkstraSUBGOV era , InjectRuleEvent "SUBGOV" DijkstraSubGovEvent era , InjectRuleEvent "SUBGOV" ConwayGovEvent era , InjectRuleFailure "SUBGOV" DijkstraSubGovPredFailure era , InjectRuleFailure "SUBGOV" ConwayGovPredFailure era ) => Embed (DijkstraSUBGOV era) (DijkstraSUBLEDGER era) where wrapFailed :: PredicateFailure (DijkstraSUBGOV era) -> PredicateFailure (DijkstraSUBLEDGER era) wrapFailed = PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era PredicateFailure (DijkstraSUBGOV era) -> PredicateFailure (DijkstraSUBLEDGER era) forall era. PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era SubGovFailure wrapEvent :: Event (DijkstraSUBGOV era) -> Event (DijkstraSUBLEDGER era) wrapEvent = Event (EraRule "SUBGOV" era) -> DijkstraSubLedgerEvent era Event (DijkstraSUBGOV era) -> Event (DijkstraSUBLEDGER era) forall era. Event (EraRule "SUBGOV" era) -> DijkstraSubLedgerEvent era SubGovEvent instance ( AlonzoEraTx era , AlonzoEraUTxO era , ConwayEraGov era , ConwayEraCertState era , ConwayEraTxBody era , EraPlutusContext era , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era , EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era , InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure era , InjectRuleFailure "SUBUTXOW" ShelleyUtxowPredFailure era , InjectRuleFailure "SUBUTXOW" BabbageUtxowPredFailure era , ScriptsNeeded era ~ AlonzoScriptsNeeded era ) => Embed (DijkstraSUBUTXOW era) (DijkstraSUBLEDGER era) where wrapFailed :: PredicateFailure (DijkstraSUBUTXOW era) -> PredicateFailure (DijkstraSUBLEDGER era) wrapFailed = PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era PredicateFailure (DijkstraSUBUTXOW era) -> PredicateFailure (DijkstraSUBLEDGER era) forall era. PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era SubUtxowFailure wrapEvent :: Event (DijkstraSUBUTXOW era) -> Event (DijkstraSUBLEDGER era) wrapEvent = Event (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerEvent era Event (DijkstraSUBUTXOW era) -> Event (DijkstraSUBLEDGER era) forall era. Event (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerEvent era SubUtxowEvent instance ( ConwayEraGov era , ConwayEraPParams era , ConwayEraCertState era , EraRule "SUBCERTS" era ~ DijkstraSUBCERTS era , EraRule "SUBCERT" era ~ DijkstraSUBCERT era , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era , EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era , InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent era , InjectRuleEvent "SUBPOOL" PoolEvent era , InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure era , InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era , InjectRuleFailure "SUBGOVCERT" DijkstraSubGovCertPredFailure era , InjectRuleFailure "SUBGOVCERT" ConwayGovCertPredFailure era , InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era , InjectRuleFailure "SUBDELEG" DijkstraSubDelegPredFailure era , TxCert era ~ DijkstraTxCert era ) => Embed (DijkstraSUBCERTS era) (DijkstraSUBLEDGER era) where wrapFailed :: PredicateFailure (DijkstraSUBCERTS era) -> PredicateFailure (DijkstraSUBLEDGER era) wrapFailed = PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era PredicateFailure (DijkstraSUBCERTS era) -> PredicateFailure (DijkstraSUBLEDGER era) forall era. PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era SubCertsFailure wrapEvent :: Event (DijkstraSUBCERTS era) -> Event (DijkstraSUBLEDGER era) wrapEvent = Event (EraRule "SUBCERTS" era) -> DijkstraSubLedgerEvent era Event (DijkstraSUBCERTS era) -> Event (DijkstraSUBLEDGER era) forall era. Event (EraRule "SUBCERTS" era) -> DijkstraSubLedgerEvent era SubCertsEvent instance ( Era era , EncCBOR (PredicateFailure (EraRule "SUBUTXOW" era)) , EncCBOR (PredicateFailure (EraRule "SUBCERTS" era)) , EncCBOR (PredicateFailure (EraRule "SUBGOV" era)) ) => EncCBOR (DijkstraSubLedgerPredFailure era) where encCBOR :: DijkstraSubLedgerPredFailure era -> Encoding encCBOR = Encode Open (DijkstraSubLedgerPredFailure era) -> Encoding forall (w :: Wrapped) t. Encode w t -> Encoding encode (Encode Open (DijkstraSubLedgerPredFailure era) -> Encoding) -> (DijkstraSubLedgerPredFailure era -> Encode Open (DijkstraSubLedgerPredFailure era)) -> DijkstraSubLedgerPredFailure era -> Encoding forall b c a. (b -> c) -> (a -> b) -> a -> c . \case SubUtxowFailure PredicateFailure (EraRule "SUBUTXOW" era) x -> (PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era) -> Word -> Encode Open (PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era SubUtxowFailure @era) Word 1 Encode Open (PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBUTXOW" era)) -> Encode Open (DijkstraSubLedgerPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> PredicateFailure (EraRule "SUBUTXOW" era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBUTXOW" era)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To PredicateFailure (EraRule "SUBUTXOW" era) x SubCertsFailure PredicateFailure (EraRule "SUBCERTS" era) x -> (PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era) -> Word -> Encode Open (PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era SubCertsFailure @era) Word 2 Encode Open (PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBCERTS" era)) -> Encode Open (DijkstraSubLedgerPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> PredicateFailure (EraRule "SUBCERTS" era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBCERTS" era)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To PredicateFailure (EraRule "SUBCERTS" era) x SubGovFailure PredicateFailure (EraRule "SUBGOV" era) x -> (PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era) -> Word -> Encode Open (PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era SubGovFailure @era) Word 3 Encode Open (PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBGOV" era)) -> Encode Open (DijkstraSubLedgerPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> PredicateFailure (EraRule "SUBGOV" era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBGOV" era)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To PredicateFailure (EraRule "SUBGOV" era) x SubWdrlNotDelegatedToDRep NonEmpty (KeyHash Staking) x -> (NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era) -> Word -> Encode Open (NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era SubWdrlNotDelegatedToDRep @era) Word 4 Encode Open (NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era) -> Encode (Closed Dense) (NonEmpty (KeyHash Staking)) -> Encode Open (DijkstraSubLedgerPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> NonEmpty (KeyHash Staking) -> Encode (Closed Dense) (NonEmpty (KeyHash Staking)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To NonEmpty (KeyHash Staking) x SubTreasuryValueMismatch Mismatch RelEQ Coin mm -> (Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era) -> Word -> Encode Open (Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era SubTreasuryValueMismatch @era) Word 5 Encode Open (Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era) -> Encode (Closed Dense) (Mismatch RelEQ Coin) -> Encode Open (DijkstraSubLedgerPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> Mismatch RelEQ Coin -> Encode (Closed Dense) (Mismatch RelEQ Coin) forall t. EncCBOR t => t -> Encode (Closed Dense) t To Mismatch RelEQ Coin mm instance ( Era era , DecCBOR (PredicateFailure (EraRule "SUBUTXOW" era)) , DecCBOR (PredicateFailure (EraRule "SUBCERTS" era)) , DecCBOR (PredicateFailure (EraRule "SUBGOV" era)) ) => DecCBOR (DijkstraSubLedgerPredFailure era) where decCBOR :: forall s. Decoder s (DijkstraSubLedgerPredFailure era) decCBOR = Decode (Closed Dense) (DijkstraSubLedgerPredFailure era) -> Decoder s (DijkstraSubLedgerPredFailure era) forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t decode (Decode (Closed Dense) (DijkstraSubLedgerPredFailure era) -> Decoder s (DijkstraSubLedgerPredFailure era)) -> ((Word -> Decode Open (DijkstraSubLedgerPredFailure era)) -> Decode (Closed Dense) (DijkstraSubLedgerPredFailure era)) -> (Word -> Decode Open (DijkstraSubLedgerPredFailure era)) -> Decoder s (DijkstraSubLedgerPredFailure era) forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> (Word -> Decode Open (DijkstraSubLedgerPredFailure era)) -> Decode (Closed Dense) (DijkstraSubLedgerPredFailure era) forall t. Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t Summands Text "DijkstraSubLedgerPredFailure" ((Word -> Decode Open (DijkstraSubLedgerPredFailure era)) -> Decoder s (DijkstraSubLedgerPredFailure era)) -> (Word -> Decode Open (DijkstraSubLedgerPredFailure era)) -> Decoder s (DijkstraSubLedgerPredFailure era) forall a b. (a -> b) -> a -> b $ \case Word 1 -> (PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era) -> Decode Open (PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era) forall t. t -> Decode Open t SumD PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era forall era. PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era SubUtxowFailure Decode Open (PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era) -> Decode (Closed (ZonkAny 0)) (PredicateFailure (EraRule "SUBUTXOW" era)) -> Decode Open (DijkstraSubLedgerPredFailure era) forall a (w1 :: Wrapped) t (w :: Density). Typeable a => Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t <! Decode (Closed (ZonkAny 0)) (PredicateFailure (EraRule "SUBUTXOW" era)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word 2 -> (PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era) -> Decode Open (PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era) forall t. t -> Decode Open t SumD PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era forall era. PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era SubCertsFailure Decode Open (PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era) -> Decode (Closed (ZonkAny 1)) (PredicateFailure (EraRule "SUBCERTS" era)) -> Decode Open (DijkstraSubLedgerPredFailure era) forall a (w1 :: Wrapped) t (w :: Density). Typeable a => Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t <! Decode (Closed (ZonkAny 1)) (PredicateFailure (EraRule "SUBCERTS" era)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word 3 -> (PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era) -> Decode Open (PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era) forall t. t -> Decode Open t SumD PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era forall era. PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era SubGovFailure Decode Open (PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era) -> Decode (Closed (ZonkAny 2)) (PredicateFailure (EraRule "SUBGOV" era)) -> Decode Open (DijkstraSubLedgerPredFailure era) forall a (w1 :: Wrapped) t (w :: Density). Typeable a => Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t <! Decode (Closed (ZonkAny 2)) (PredicateFailure (EraRule "SUBGOV" era)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word 4 -> (NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era) -> Decode Open (NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era) forall t. t -> Decode Open t SumD NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era forall era. NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era SubWdrlNotDelegatedToDRep Decode Open (NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era) -> Decode (Closed (ZonkAny 3)) (NonEmpty (KeyHash Staking)) -> Decode Open (DijkstraSubLedgerPredFailure era) forall a (w1 :: Wrapped) t (w :: Density). Typeable a => Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t <! Decode (Closed (ZonkAny 3)) (NonEmpty (KeyHash Staking)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word 5 -> (Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era) -> Decode Open (Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era) forall t. t -> Decode Open t SumD Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era forall era. Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era SubTreasuryValueMismatch Decode Open (Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era) -> Decode (Closed (ZonkAny 4)) (Mismatch RelEQ Coin) -> Decode Open (DijkstraSubLedgerPredFailure era) forall a (w1 :: Wrapped) t (w :: Density). Typeable a => Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t <! Decode (Closed (ZonkAny 4)) (Mismatch RelEQ Coin) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word n -> Word -> Decode Open (DijkstraSubLedgerPredFailure era) forall (w :: Wrapped) t. Word -> Decode w t Invalid Word n conwayToDijkstraSubLedgerPredFailure :: forall era. ( InjectRuleFailure "SUBUTXOW" DijkstraUtxowPredFailure era , PredicateFailure (EraRule "UTXOW" era) ~ DijkstraUtxowPredFailure era , InjectRuleFailure "SUBCERTS" ConwayCertsPredFailure era , PredicateFailure (EraRule "CERTS" era) ~ ConwayCertsPredFailure era , InjectRuleFailure "SUBGOV" DijkstraGovPredFailure era , PredicateFailure (EraRule "GOV" era) ~ DijkstraGovPredFailure era ) => ConwayLedgerPredFailure era -> DijkstraSubLedgerPredFailure era conwayToDijkstraSubLedgerPredFailure :: forall era. (InjectRuleFailure "SUBUTXOW" DijkstraUtxowPredFailure era, PredicateFailure (EraRule "UTXOW" era) ~ DijkstraUtxowPredFailure era, InjectRuleFailure "SUBCERTS" ConwayCertsPredFailure era, PredicateFailure (EraRule "CERTS" era) ~ ConwayCertsPredFailure era, InjectRuleFailure "SUBGOV" DijkstraGovPredFailure era, PredicateFailure (EraRule "GOV" era) ~ DijkstraGovPredFailure era) => ConwayLedgerPredFailure era -> DijkstraSubLedgerPredFailure era conwayToDijkstraSubLedgerPredFailure = \case ConwayUtxowFailure PredicateFailure (EraRule "UTXOW" era) f -> PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era forall era. PredicateFailure (EraRule "SUBUTXOW" era) -> DijkstraSubLedgerPredFailure era SubUtxowFailure (forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure @"SUBUTXOW" PredicateFailure (EraRule "UTXOW" era) DijkstraUtxowPredFailure era f) ConwayCertsFailure PredicateFailure (EraRule "CERTS" era) f -> PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era forall era. PredicateFailure (EraRule "SUBCERTS" era) -> DijkstraSubLedgerPredFailure era SubCertsFailure (forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure @"SUBCERTS" PredicateFailure (EraRule "CERTS" era) ConwayCertsPredFailure era f) ConwayGovFailure PredicateFailure (EraRule "GOV" era) f -> PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era forall era. PredicateFailure (EraRule "SUBGOV" era) -> DijkstraSubLedgerPredFailure era SubGovFailure (forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure @"SUBGOV" PredicateFailure (EraRule "GOV" era) DijkstraGovPredFailure era f) ConwayWdrlNotDelegatedToDRep NonEmpty (KeyHash Staking) x -> NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era forall era. NonEmpty (KeyHash Staking) -> DijkstraSubLedgerPredFailure era SubWdrlNotDelegatedToDRep NonEmpty (KeyHash Staking) x ConwayTreasuryValueMismatch Mismatch RelEQ Coin x -> Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era forall era. Mismatch RelEQ Coin -> DijkstraSubLedgerPredFailure era SubTreasuryValueMismatch Mismatch RelEQ Coin x ConwayTxRefScriptsSizeTooBig Mismatch RelLTEQ Int _ -> String -> DijkstraSubLedgerPredFailure era forall a. HasCallStack => String -> a error String "Impossible: `ConwayTxRefScriptsSizeTooBig` for SUBLEDGER" ConwayMempoolFailure Text _ -> String -> DijkstraSubLedgerPredFailure era forall a. HasCallStack => String -> a error String "Impossible: `ConwayMempoolFailure` for SUBLEDGER" ConwayWithdrawalsMissingAccounts Withdrawals _ -> String -> DijkstraSubLedgerPredFailure era forall a. HasCallStack => String -> a error String "Impossible: `ConwayWithdrawalsMissingAccounts` for SUBLEDGER" ConwayIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin) _ -> String -> DijkstraSubLedgerPredFailure era forall a. HasCallStack => String -> a error String "Impossible: `ConwayIncompleteWithdrawals` for SUBLEDGER"