{-# 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.SubCert ( SUBCERT, DijkstraSubCertPredFailure (..), DijkstraSubCertEvent (..), ) where import Cardano.Ledger.BaseTypes ( ShelleyBase, ) import Cardano.Ledger.Binary ( DecCBOR (..), EncCBOR (..), ) import Cardano.Ledger.Binary.Coders import Cardano.Ledger.Conway.Core import Cardano.Ledger.Conway.Governance (ConwayEraGov) import qualified Cardano.Ledger.Conway.Rules as Conway import Cardano.Ledger.Conway.State import Cardano.Ledger.Dijkstra.Era ( DijkstraEra, SUBCERT, SUBDELEG, SUBGOVCERT, SUBPOOL, ) import Cardano.Ledger.Dijkstra.Rules.GovCert (DijkstraGovCertPredFailure) import Cardano.Ledger.Dijkstra.Rules.SubDeleg (DijkstraSubDelegPredFailure) import Cardano.Ledger.Dijkstra.Rules.SubGovCert (DijkstraSubGovCertPredFailure) import Cardano.Ledger.Dijkstra.Rules.SubPool (DijkstraSubPoolEvent, DijkstraSubPoolPredFailure) import Cardano.Ledger.Dijkstra.TxCert import qualified Cardano.Ledger.Shelley.Rules as Shelley import Control.DeepSeq (NFData) import Control.State.Transition.Extended import Data.Void (absurd) import GHC.Generics (Generic) import Lens.Micro data DijkstraSubCertPredFailure era = SubDelegFailure (PredicateFailure (EraRule "SUBDELEG" era)) | SubPoolFailure (PredicateFailure (EraRule "SUBPOOL" era)) | SubGovCertFailure (PredicateFailure (EraRule "SUBGOVCERT" era)) deriving ((forall x. DijkstraSubCertPredFailure era -> Rep (DijkstraSubCertPredFailure era) x) -> (forall x. Rep (DijkstraSubCertPredFailure era) x -> DijkstraSubCertPredFailure era) -> Generic (DijkstraSubCertPredFailure era) forall x. Rep (DijkstraSubCertPredFailure era) x -> DijkstraSubCertPredFailure era forall x. DijkstraSubCertPredFailure era -> Rep (DijkstraSubCertPredFailure era) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall era x. Rep (DijkstraSubCertPredFailure era) x -> DijkstraSubCertPredFailure era forall era x. DijkstraSubCertPredFailure era -> Rep (DijkstraSubCertPredFailure era) x $cfrom :: forall era x. DijkstraSubCertPredFailure era -> Rep (DijkstraSubCertPredFailure era) x from :: forall x. DijkstraSubCertPredFailure era -> Rep (DijkstraSubCertPredFailure era) x $cto :: forall era x. Rep (DijkstraSubCertPredFailure era) x -> DijkstraSubCertPredFailure era to :: forall x. Rep (DijkstraSubCertPredFailure era) x -> DijkstraSubCertPredFailure era Generic) deriving stock instance ( Eq (PredicateFailure (EraRule "SUBDELEG" era)) , Eq (PredicateFailure (EraRule "SUBPOOL" era)) , Eq (PredicateFailure (EraRule "SUBGOVCERT" era)) ) => Eq (DijkstraSubCertPredFailure era) deriving stock instance ( Show (PredicateFailure (EraRule "SUBDELEG" era)) , Show (PredicateFailure (EraRule "SUBPOOL" era)) , Show (PredicateFailure (EraRule "SUBGOVCERT" era)) ) => Show (DijkstraSubCertPredFailure era) instance ( NFData (PredicateFailure (EraRule "SUBDELEG" era)) , NFData (PredicateFailure (EraRule "SUBPOOL" era)) , NFData (PredicateFailure (EraRule "SUBGOVCERT" era)) ) => NFData (DijkstraSubCertPredFailure era) instance ( Era era , EncCBOR (PredicateFailure (EraRule "SUBDELEG" era)) , EncCBOR (PredicateFailure (EraRule "SUBPOOL" era)) , EncCBOR (PredicateFailure (EraRule "SUBGOVCERT" era)) ) => EncCBOR (DijkstraSubCertPredFailure era) where encCBOR :: DijkstraSubCertPredFailure era -> Encoding encCBOR = Encode Open (DijkstraSubCertPredFailure era) -> Encoding forall (w :: Wrapped) t. Encode w t -> Encoding encode (Encode Open (DijkstraSubCertPredFailure era) -> Encoding) -> (DijkstraSubCertPredFailure era -> Encode Open (DijkstraSubCertPredFailure era)) -> DijkstraSubCertPredFailure era -> Encoding forall b c a. (b -> c) -> (a -> b) -> a -> c . \case SubDelegFailure PredicateFailure (EraRule "SUBDELEG" era) x -> (PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era) -> Word -> Encode Open (PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era SubDelegFailure @era) Word 1 Encode Open (PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBDELEG" era)) -> Encode Open (DijkstraSubCertPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> PredicateFailure (EraRule "SUBDELEG" era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBDELEG" era)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To PredicateFailure (EraRule "SUBDELEG" era) x SubPoolFailure PredicateFailure (EraRule "SUBPOOL" era) x -> (PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era) -> Word -> Encode Open (PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era SubPoolFailure @era) Word 2 Encode Open (PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBPOOL" era)) -> Encode Open (DijkstraSubCertPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> PredicateFailure (EraRule "SUBPOOL" era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBPOOL" era)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To PredicateFailure (EraRule "SUBPOOL" era) x SubGovCertFailure PredicateFailure (EraRule "SUBGOVCERT" era) x -> (PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era) -> Word -> Encode Open (PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era) forall t. t -> Word -> Encode Open t Sum (forall era. PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era SubGovCertFailure @era) Word 3 Encode Open (PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBGOVCERT" era)) -> Encode Open (DijkstraSubCertPredFailure era) forall (w :: Wrapped) a t (r :: Density). Encode w (a -> t) -> Encode (Closed r) a -> Encode w t !> PredicateFailure (EraRule "SUBGOVCERT" era) -> Encode (Closed Dense) (PredicateFailure (EraRule "SUBGOVCERT" era)) forall t. EncCBOR t => t -> Encode (Closed Dense) t To PredicateFailure (EraRule "SUBGOVCERT" era) x instance ( Era era , DecCBOR (PredicateFailure (EraRule "SUBDELEG" era)) , DecCBOR (PredicateFailure (EraRule "SUBPOOL" era)) , DecCBOR (PredicateFailure (EraRule "SUBGOVCERT" era)) ) => DecCBOR (DijkstraSubCertPredFailure era) where decCBOR :: forall s. Decoder s (DijkstraSubCertPredFailure era) decCBOR = Decode (Closed Dense) (DijkstraSubCertPredFailure era) -> Decoder s (DijkstraSubCertPredFailure era) forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t decode (Decode (Closed Dense) (DijkstraSubCertPredFailure era) -> Decoder s (DijkstraSubCertPredFailure era)) -> Decode (Closed Dense) (DijkstraSubCertPredFailure era) -> Decoder s (DijkstraSubCertPredFailure era) forall a b. (a -> b) -> a -> b $ Text -> (Word -> Decode Open (DijkstraSubCertPredFailure era)) -> Decode (Closed Dense) (DijkstraSubCertPredFailure era) forall t. Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t Summands Text "DijkstraSubCertPredFailure" ((Word -> Decode Open (DijkstraSubCertPredFailure era)) -> Decode (Closed Dense) (DijkstraSubCertPredFailure era)) -> (Word -> Decode Open (DijkstraSubCertPredFailure era)) -> Decode (Closed Dense) (DijkstraSubCertPredFailure era) forall a b. (a -> b) -> a -> b $ \case Word 1 -> (PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era) -> Decode Open (PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era) forall t. t -> Decode Open t SumD PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era forall era. PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era SubDelegFailure Decode Open (PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era) -> Decode (Closed (ZonkAny 0)) (PredicateFailure (EraRule "SUBDELEG" era)) -> Decode Open (DijkstraSubCertPredFailure 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 "SUBDELEG" era)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word 2 -> (PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era) -> Decode Open (PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era) forall t. t -> Decode Open t SumD PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era forall era. PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era SubPoolFailure Decode Open (PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era) -> Decode (Closed (ZonkAny 1)) (PredicateFailure (EraRule "SUBPOOL" era)) -> Decode Open (DijkstraSubCertPredFailure 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 "SUBPOOL" era)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word 3 -> (PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era) -> Decode Open (PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era) forall t. t -> Decode Open t SumD PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era forall era. PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era SubGovCertFailure Decode Open (PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era) -> Decode (Closed (ZonkAny 2)) (PredicateFailure (EraRule "SUBGOVCERT" era)) -> Decode Open (DijkstraSubCertPredFailure 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 "SUBGOVCERT" era)) forall t (w :: Wrapped). DecCBOR t => Decode w t From Word n -> Word -> Decode Open (DijkstraSubCertPredFailure era) forall (w :: Wrapped) t. Word -> Decode w t Invalid Word n type instance EraRuleFailure "SUBCERT" DijkstraEra = DijkstraSubCertPredFailure DijkstraEra type instance EraRuleEvent "SUBCERT" DijkstraEra = DijkstraSubCertEvent DijkstraEra instance InjectRuleFailure "SUBCERT" DijkstraSubCertPredFailure DijkstraEra instance InjectRuleFailure "SUBCERT" DijkstraSubDelegPredFailure DijkstraEra where injectFailure :: DijkstraSubDelegPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra injectFailure = PredicateFailure (EraRule "SUBDELEG" DijkstraEra) -> DijkstraSubCertPredFailure DijkstraEra DijkstraSubDelegPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra forall era. PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era SubDelegFailure instance InjectRuleFailure "SUBCERT" DijkstraSubPoolPredFailure DijkstraEra where injectFailure :: DijkstraSubPoolPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra injectFailure = PredicateFailure (EraRule "SUBPOOL" DijkstraEra) -> DijkstraSubCertPredFailure DijkstraEra DijkstraSubPoolPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra forall era. PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era SubPoolFailure instance InjectRuleFailure "SUBCERT" DijkstraSubGovCertPredFailure DijkstraEra where injectFailure :: DijkstraSubGovCertPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra injectFailure = PredicateFailure (EraRule "SUBGOVCERT" DijkstraEra) -> DijkstraSubCertPredFailure DijkstraEra DijkstraSubGovCertPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra forall era. PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era SubGovCertFailure instance InjectRuleFailure "SUBCERT" Conway.ConwayCertPredFailure DijkstraEra where injectFailure :: ConwayCertPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra injectFailure = ConwayCertPredFailure DijkstraEra -> EraRuleFailure "SUBCERT" DijkstraEra ConwayCertPredFailure DijkstraEra -> DijkstraSubCertPredFailure DijkstraEra forall era. (InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era, PredicateFailure (EraRule "DELEG" era) ~ ConwayDelegPredFailure era, InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era, PredicateFailure (EraRule "POOL" era) ~ ShelleyPoolPredFailure era, InjectRuleFailure "SUBGOVCERT" DijkstraGovCertPredFailure era, PredicateFailure (EraRule "GOVCERT" era) ~ DijkstraGovCertPredFailure era) => ConwayCertPredFailure era -> DijkstraSubCertPredFailure era conwayToDijkstraSubCertPredFailure instance InjectRuleEvent "SUBCERT" DijkstraSubCertEvent DijkstraEra newtype DijkstraSubCertEvent era = SubPoolEvent (Event (EraRule "SUBPOOL" era)) deriving ((forall x. DijkstraSubCertEvent era -> Rep (DijkstraSubCertEvent era) x) -> (forall x. Rep (DijkstraSubCertEvent era) x -> DijkstraSubCertEvent era) -> Generic (DijkstraSubCertEvent era) forall x. Rep (DijkstraSubCertEvent era) x -> DijkstraSubCertEvent era forall x. DijkstraSubCertEvent era -> Rep (DijkstraSubCertEvent era) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall era x. Rep (DijkstraSubCertEvent era) x -> DijkstraSubCertEvent era forall era x. DijkstraSubCertEvent era -> Rep (DijkstraSubCertEvent era) x $cfrom :: forall era x. DijkstraSubCertEvent era -> Rep (DijkstraSubCertEvent era) x from :: forall x. DijkstraSubCertEvent era -> Rep (DijkstraSubCertEvent era) x $cto :: forall era x. Rep (DijkstraSubCertEvent era) x -> DijkstraSubCertEvent era to :: forall x. Rep (DijkstraSubCertEvent era) x -> DijkstraSubCertEvent era Generic) deriving instance Eq (Event (EraRule "SUBPOOL" era)) => Eq (DijkstraSubCertEvent era) instance NFData (Event (EraRule "SUBPOOL" era)) => NFData (DijkstraSubCertEvent era) instance ( ConwayEraGov era , ConwayEraCertState era , EraRule "SUBCERT" era ~ SUBCERT era , EraRule "SUBDELEG" era ~ SUBDELEG era , EraRule "SUBPOOL" era ~ SUBPOOL era , EraRule "SUBGOVCERT" era ~ SUBGOVCERT era , Embed (EraRule "SUBDELEG" era) (SUBCERT era) , Embed (EraRule "SUBPOOL" era) (SUBCERT era) , Embed (EraRule "SUBGOVCERT" era) (SUBCERT era) , TxCert era ~ DijkstraTxCert era ) => STS (SUBCERT era) where type State (SUBCERT era) = CertState era type Signal (SUBCERT era) = TxCert era type Environment (SUBCERT era) = Conway.CertEnv era type BaseM (SUBCERT era) = ShelleyBase type PredicateFailure (SUBCERT era) = DijkstraSubCertPredFailure era type Event (SUBCERT era) = DijkstraSubCertEvent era transitionRules :: [TransitionRule (SUBCERT era)] transitionRules = [forall era. (ConwayEraCertState era, EraRule "SUBCERT" era ~ SUBCERT era, EraRule "SUBDELEG" era ~ SUBDELEG era, EraRule "SUBPOOL" era ~ SUBPOOL era, EraRule "SUBGOVCERT" era ~ SUBGOVCERT era, Embed (EraRule "SUBDELEG" era) (SUBCERT era), Embed (EraRule "SUBPOOL" era) (SUBCERT era), Embed (EraRule "SUBGOVCERT" era) (SUBCERT era), TxCert era ~ DijkstraTxCert era) => TransitionRule (EraRule "SUBCERT" era) dijkstraSubCertTransition @era] dijkstraSubCertTransition :: forall era. ( ConwayEraCertState era , EraRule "SUBCERT" era ~ SUBCERT era , EraRule "SUBDELEG" era ~ SUBDELEG era , EraRule "SUBPOOL" era ~ SUBPOOL era , EraRule "SUBGOVCERT" era ~ SUBGOVCERT era , Embed (EraRule "SUBDELEG" era) (SUBCERT era) , Embed (EraRule "SUBPOOL" era) (SUBCERT era) , Embed (EraRule "SUBGOVCERT" era) (SUBCERT era) , TxCert era ~ DijkstraTxCert era ) => TransitionRule (EraRule "SUBCERT" era) dijkstraSubCertTransition :: forall era. (ConwayEraCertState era, EraRule "SUBCERT" era ~ SUBCERT era, EraRule "SUBDELEG" era ~ SUBDELEG era, EraRule "SUBPOOL" era ~ SUBPOOL era, EraRule "SUBGOVCERT" era ~ SUBGOVCERT era, Embed (EraRule "SUBDELEG" era) (SUBCERT era), Embed (EraRule "SUBPOOL" era) (SUBCERT era), Embed (EraRule "SUBGOVCERT" era) (SUBCERT era), TxCert era ~ DijkstraTxCert era) => TransitionRule (EraRule "SUBCERT" era) dijkstraSubCertTransition = do TRC (Conway.CertEnv pp currentEpoch committee committeeProposals, certState, c) <- Rule (SUBCERT era) 'Transition (RuleContext 'Transition (SUBCERT era)) F (Clause (SUBCERT era) 'Transition) (TRC (SUBCERT era)) forall sts (rtype :: RuleType). Rule sts rtype (RuleContext rtype sts) judgmentContext let certPState = CertState era State (SUBCERT era) certState CertState era -> Getting (PState era) (CertState era) (PState era) -> PState era forall s a. s -> Getting a s a -> a ^. Getting (PState era) (CertState era) (PState era) forall era. EraCertState era => Lens' (CertState era) (PState era) Lens' (CertState era) (PState era) certPStateL pools = PState era -> Map (KeyHash StakePool) StakePoolState forall era. PState era -> Map (KeyHash StakePool) StakePoolState psStakePools PState era certPState case c of DijkstraTxCertDeleg DijkstraDelegCert delegCert -> forall sub super (rtype :: RuleType). Embed sub super => RuleContext rtype sub -> Rule super rtype (State sub) trans @(EraRule "SUBDELEG" era) (RuleContext 'Transition (EraRule "SUBDELEG" era) -> Rule (SUBCERT era) 'Transition (State (EraRule "SUBDELEG" era))) -> RuleContext 'Transition (EraRule "SUBDELEG" era) -> Rule (SUBCERT era) 'Transition (State (EraRule "SUBDELEG" era)) forall a b. (a -> b) -> a -> b $ (Environment (SUBDELEG era), State (SUBDELEG era), Signal (SUBDELEG era)) -> TRC (SUBDELEG era) forall sts. (Environment sts, State sts, Signal sts) -> TRC sts TRC (PParams era -> Map (KeyHash StakePool) StakePoolState -> ConwayDelegEnv era forall era. PParams era -> Map (KeyHash StakePool) StakePoolState -> ConwayDelegEnv era Conway.ConwayDelegEnv PParams era pp Map (KeyHash StakePool) StakePoolState pools, State (SUBDELEG era) State (SUBCERT era) certState, DijkstraDelegCert -> ConwayDelegCert dijkstraToConwayDelegCert DijkstraDelegCert delegCert) DijkstraTxCertPool PoolCert poolCert -> do newPState <- forall sub super (rtype :: RuleType). Embed sub super => RuleContext rtype sub -> Rule super rtype (State sub) trans @(EraRule "SUBPOOL" era) (RuleContext 'Transition (EraRule "SUBPOOL" era) -> Rule (SUBCERT era) 'Transition (State (EraRule "SUBPOOL" era))) -> RuleContext 'Transition (EraRule "SUBPOOL" era) -> Rule (SUBCERT era) 'Transition (State (EraRule "SUBPOOL" era)) forall a b. (a -> b) -> a -> b $ (Environment (SUBPOOL era), State (SUBPOOL era), Signal (SUBPOOL era)) -> TRC (SUBPOOL era) forall sts. (Environment sts, State sts, Signal sts) -> TRC sts TRC (EpochNo -> PParams era -> PoolEnv era forall era. EpochNo -> PParams era -> PoolEnv era Shelley.PoolEnv EpochNo currentEpoch PParams era pp, PState era State (SUBPOOL era) certPState, PoolCert Signal (SUBPOOL era) poolCert) pure $ certState & certPStateL .~ newPState DijkstraTxCertGov ConwayGovCert govCert -> do forall sub super (rtype :: RuleType). Embed sub super => RuleContext rtype sub -> Rule super rtype (State sub) trans @(EraRule "SUBGOVCERT" era) (RuleContext 'Transition (EraRule "SUBGOVCERT" era) -> Rule (SUBCERT era) 'Transition (State (EraRule "SUBGOVCERT" era))) -> RuleContext 'Transition (EraRule "SUBGOVCERT" era) -> Rule (SUBCERT era) 'Transition (State (EraRule "SUBGOVCERT" era)) forall a b. (a -> b) -> a -> b $ (Environment (SUBGOVCERT era), State (SUBGOVCERT era), Signal (SUBGOVCERT era)) -> TRC (SUBGOVCERT era) forall sts. (Environment sts, State sts, Signal sts) -> TRC sts TRC (PParams era -> EpochNo -> StrictMaybe (Committee era) -> Map (GovPurposeId 'CommitteePurpose) (GovActionState era) -> ConwayGovCertEnv era forall era. PParams era -> EpochNo -> StrictMaybe (Committee era) -> Map (GovPurposeId 'CommitteePurpose) (GovActionState era) -> ConwayGovCertEnv era Conway.ConwayGovCertEnv PParams era pp EpochNo currentEpoch StrictMaybe (Committee era) committee Map (GovPurposeId 'CommitteePurpose) (GovActionState era) committeeProposals, State (SUBGOVCERT era) State (SUBCERT era) certState, ConwayGovCert Signal (SUBGOVCERT era) govCert) instance ( STS (SUBDELEG era) , PredicateFailure (EraRule "SUBDELEG" era) ~ DijkstraSubDelegPredFailure era ) => Embed (SUBDELEG era) (SUBCERT era) where wrapFailed :: PredicateFailure (SUBDELEG era) -> PredicateFailure (SUBCERT era) wrapFailed = PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era PredicateFailure (SUBDELEG era) -> PredicateFailure (SUBCERT era) forall era. PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era SubDelegFailure wrapEvent :: Event (SUBDELEG era) -> Event (SUBCERT era) wrapEvent = Void -> DijkstraSubCertEvent era Event (SUBDELEG era) -> Event (SUBCERT era) forall a. Void -> a absurd instance ( STS (SUBPOOL era) , PredicateFailure (EraRule "SUBPOOL" era) ~ DijkstraSubPoolPredFailure era , Event (EraRule "SUBPOOL" era) ~ DijkstraSubPoolEvent era ) => Embed (SUBPOOL era) (SUBCERT era) where wrapFailed :: PredicateFailure (SUBPOOL era) -> PredicateFailure (SUBCERT era) wrapFailed = PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era PredicateFailure (SUBPOOL era) -> PredicateFailure (SUBCERT era) forall era. PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era SubPoolFailure wrapEvent :: Event (SUBPOOL era) -> Event (SUBCERT era) wrapEvent = Event (EraRule "SUBPOOL" era) -> DijkstraSubCertEvent era Event (SUBPOOL era) -> Event (SUBCERT era) forall era. Event (EraRule "SUBPOOL" era) -> DijkstraSubCertEvent era SubPoolEvent instance ( Era era , STS (SUBGOVCERT era) , PredicateFailure (EraRule "SUBGOVCERT" era) ~ DijkstraSubGovCertPredFailure era ) => Embed (SUBGOVCERT era) (SUBCERT era) where wrapFailed :: PredicateFailure (SUBGOVCERT era) -> PredicateFailure (SUBCERT era) wrapFailed = PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era PredicateFailure (SUBGOVCERT era) -> PredicateFailure (SUBCERT era) forall era. PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era SubGovCertFailure wrapEvent :: Event (SUBGOVCERT era) -> Event (SUBCERT era) wrapEvent = Void -> DijkstraSubCertEvent era Event (SUBGOVCERT era) -> Event (SUBCERT era) forall a. Void -> a absurd conwayToDijkstraSubCertPredFailure :: forall era. ( InjectRuleFailure "SUBDELEG" Conway.ConwayDelegPredFailure era , PredicateFailure (EraRule "DELEG" era) ~ Conway.ConwayDelegPredFailure era , InjectRuleFailure "SUBPOOL" Shelley.ShelleyPoolPredFailure era , PredicateFailure (EraRule "POOL" era) ~ Shelley.ShelleyPoolPredFailure era , InjectRuleFailure "SUBGOVCERT" DijkstraGovCertPredFailure era , PredicateFailure (EraRule "GOVCERT" era) ~ DijkstraGovCertPredFailure era ) => Conway.ConwayCertPredFailure era -> DijkstraSubCertPredFailure era conwayToDijkstraSubCertPredFailure :: forall era. (InjectRuleFailure "SUBDELEG" ConwayDelegPredFailure era, PredicateFailure (EraRule "DELEG" era) ~ ConwayDelegPredFailure era, InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era, PredicateFailure (EraRule "POOL" era) ~ ShelleyPoolPredFailure era, InjectRuleFailure "SUBGOVCERT" DijkstraGovCertPredFailure era, PredicateFailure (EraRule "GOVCERT" era) ~ DijkstraGovCertPredFailure era) => ConwayCertPredFailure era -> DijkstraSubCertPredFailure era conwayToDijkstraSubCertPredFailure = \case Conway.DelegFailure PredicateFailure (EraRule "DELEG" era) f -> PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era forall era. PredicateFailure (EraRule "SUBDELEG" era) -> DijkstraSubCertPredFailure era SubDelegFailure (forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure @"SUBDELEG" PredicateFailure (EraRule "DELEG" era) ConwayDelegPredFailure era f) Conway.PoolFailure PredicateFailure (EraRule "POOL" era) f -> PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era forall era. PredicateFailure (EraRule "SUBPOOL" era) -> DijkstraSubCertPredFailure era SubPoolFailure (forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure @"SUBPOOL" PredicateFailure (EraRule "POOL" era) ShelleyPoolPredFailure era f) Conway.GovCertFailure PredicateFailure (EraRule "GOVCERT" era) f -> PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era forall era. PredicateFailure (EraRule "SUBGOVCERT" era) -> DijkstraSubCertPredFailure era SubGovCertFailure (forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure @"SUBGOVCERT" PredicateFailure (EraRule "GOVCERT" era) DijkstraGovCertPredFailure era f)