{-# 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 (
  DijkstraSUBCERT,
  DijkstraSubCertPredFailure (..),
) 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 Cardano.Ledger.Conway.Rules (
  CertEnv (..),
  ConwayDelegEnv (..),
  ConwayGovCertEnv (..),
 )
import Cardano.Ledger.Conway.State
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraSUBCERT,
  DijkstraSUBDELEG,
  DijkstraSUBGOVCERT,
  DijkstraSUBPOOL,
 )
import Cardano.Ledger.Dijkstra.Rules.SubDeleg (DijkstraSubDelegPredFailure)
import Cardano.Ledger.Dijkstra.Rules.SubGovCert (DijkstraSubGovCertPredFailure)
import Cardano.Ledger.Dijkstra.Rules.SubPool (DijkstraSubPoolPredFailure)
import Cardano.Ledger.Dijkstra.TxCert
import Cardano.Ledger.Shelley.Rules (PoolEnv (..))
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended
import Data.Void (Void, absurd)
import GHC.Generics (Generic)
import Lens.Micro
import NoThunks.Class (NoThunks (..))

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
  ( NoThunks (PredicateFailure (EraRule "SUBDELEG" era))
  , NoThunks (PredicateFailure (EraRule "SUBPOOL" era))
  , NoThunks (PredicateFailure (EraRule "SUBGOVCERT" era))
  ) =>
  NoThunks (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 = VoidEraRule "SUBCERT" 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
  ( ConwayEraGov era
  , ConwayEraCertState era
  , EraRule "SUBCERT" era ~ DijkstraSUBCERT era
  , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era
  , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era
  , EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era
  , Embed (EraRule "SUBDELEG" era) (DijkstraSUBCERT era)
  , Embed (EraRule "SUBPOOL" era) (DijkstraSUBCERT era)
  , Embed (EraRule "SUBGOVCERT" era) (DijkstraSUBCERT era)
  , TxCert era ~ DijkstraTxCert era
  ) =>
  STS (DijkstraSUBCERT era)
  where
  type State (DijkstraSUBCERT era) = CertState era
  type Signal (DijkstraSUBCERT era) = TxCert era
  type Environment (DijkstraSUBCERT era) = CertEnv era
  type BaseM (DijkstraSUBCERT era) = ShelleyBase
  type PredicateFailure (DijkstraSUBCERT era) = DijkstraSubCertPredFailure era
  type Event (DijkstraSUBCERT era) = Void

  transitionRules :: [TransitionRule (DijkstraSUBCERT era)]
transitionRules = [forall era.
(ConwayEraCertState era,
 EraRule "SUBCERT" era ~ DijkstraSUBCERT era,
 EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era,
 EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era,
 EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era,
 Embed (EraRule "SUBDELEG" era) (DijkstraSUBCERT era),
 Embed (EraRule "SUBPOOL" era) (DijkstraSUBCERT era),
 Embed (EraRule "SUBGOVCERT" era) (DijkstraSUBCERT era),
 TxCert era ~ DijkstraTxCert era) =>
TransitionRule (EraRule "SUBCERT" era)
dijkstraSubCertTransition @era]

dijkstraSubCertTransition ::
  forall era.
  ( ConwayEraCertState era
  , EraRule "SUBCERT" era ~ DijkstraSUBCERT era
  , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era
  , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era
  , EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era
  , Embed (EraRule "SUBDELEG" era) (DijkstraSUBCERT era)
  , Embed (EraRule "SUBPOOL" era) (DijkstraSUBCERT era)
  , Embed (EraRule "SUBGOVCERT" era) (DijkstraSUBCERT era)
  , TxCert era ~ DijkstraTxCert era
  ) =>
  TransitionRule (EraRule "SUBCERT" era)
dijkstraSubCertTransition :: forall era.
(ConwayEraCertState era,
 EraRule "SUBCERT" era ~ DijkstraSUBCERT era,
 EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era,
 EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era,
 EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era,
 Embed (EraRule "SUBDELEG" era) (DijkstraSUBCERT era),
 Embed (EraRule "SUBPOOL" era) (DijkstraSUBCERT era),
 Embed (EraRule "SUBGOVCERT" era) (DijkstraSUBCERT era),
 TxCert era ~ DijkstraTxCert era) =>
TransitionRule (EraRule "SUBCERT" era)
dijkstraSubCertTransition = do
  TRC (CertEnv pp currentEpoch committee committeeProposals, certState, c) <- Rule
  (DijkstraSUBCERT era)
  'Transition
  (RuleContext 'Transition (DijkstraSUBCERT era))
F (Clause (DijkstraSUBCERT era) 'Transition)
  (TRC (DijkstraSUBCERT era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  let
    certPState = CertState era
State (DijkstraSUBCERT 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
      (DijkstraSUBCERT era) 'Transition (State (EraRule "SUBDELEG" era)))
-> RuleContext 'Transition (EraRule "SUBDELEG" era)
-> Rule
     (DijkstraSUBCERT era) 'Transition (State (EraRule "SUBDELEG" era))
forall a b. (a -> b) -> a -> b
$
        (Environment (DijkstraSUBDELEG era), State (DijkstraSUBDELEG era),
 Signal (DijkstraSUBDELEG era))
-> TRC (DijkstraSUBDELEG 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
ConwayDelegEnv PParams era
pp Map (KeyHash StakePool) StakePoolState
pools, State (DijkstraSUBDELEG era)
State (DijkstraSUBCERT era)
certState, Signal (DijkstraSUBDELEG era)
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
      (DijkstraSUBCERT era) 'Transition (State (EraRule "SUBPOOL" era)))
-> RuleContext 'Transition (EraRule "SUBPOOL" era)
-> Rule
     (DijkstraSUBCERT era) 'Transition (State (EraRule "SUBPOOL" era))
forall a b. (a -> b) -> a -> b
$ (Environment (DijkstraSUBPOOL era), State (DijkstraSUBPOOL era),
 Signal (DijkstraSUBPOOL era))
-> TRC (DijkstraSUBPOOL era)
forall sts. (Environment sts, State sts, Signal sts) -> TRC sts
TRC (EpochNo -> PParams era -> PoolEnv era
forall era. EpochNo -> PParams era -> PoolEnv era
PoolEnv EpochNo
currentEpoch PParams era
pp, PState era
State (DijkstraSUBPOOL era)
certPState, PoolCert
Signal (DijkstraSUBPOOL 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
      (DijkstraSUBCERT era)
      'Transition
      (State (EraRule "SUBGOVCERT" era)))
-> RuleContext 'Transition (EraRule "SUBGOVCERT" era)
-> Rule
     (DijkstraSUBCERT era)
     'Transition
     (State (EraRule "SUBGOVCERT" era))
forall a b. (a -> b) -> a -> b
$
        (Environment (DijkstraSUBGOVCERT era),
 State (DijkstraSUBGOVCERT era), Signal (DijkstraSUBGOVCERT era))
-> TRC (DijkstraSUBGOVCERT 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
ConwayGovCertEnv PParams era
pp EpochNo
currentEpoch StrictMaybe (Committee era)
committee Map (GovPurposeId 'CommitteePurpose) (GovActionState era)
committeeProposals, State (DijkstraSUBGOVCERT era)
State (DijkstraSUBCERT era)
certState, ConwayGovCert
Signal (DijkstraSUBGOVCERT era)
govCert)

instance
  ( ConwayEraGov era
  , ConwayEraCertState era
  , EraRule "SUBCERT" era ~ DijkstraSUBCERT era
  , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era
  ) =>
  Embed (DijkstraSUBDELEG era) (DijkstraSUBCERT era)
  where
  wrapFailed :: PredicateFailure (DijkstraSUBDELEG era)
-> PredicateFailure (DijkstraSUBCERT era)
wrapFailed = PredicateFailure (EraRule "SUBDELEG" era)
-> DijkstraSubCertPredFailure era
PredicateFailure (DijkstraSUBDELEG era)
-> PredicateFailure (DijkstraSUBCERT era)
forall era.
PredicateFailure (EraRule "SUBDELEG" era)
-> DijkstraSubCertPredFailure era
SubDelegFailure
  wrapEvent :: Event (DijkstraSUBDELEG era) -> Event (DijkstraSUBCERT era)
wrapEvent = Void -> Void
Event (DijkstraSUBDELEG era) -> Event (DijkstraSUBCERT era)
forall a. Void -> a
absurd

instance
  ( ConwayEraGov era
  , EraRule "SUBCERT" era ~ DijkstraSUBCERT era
  , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era
  ) =>
  Embed (DijkstraSUBPOOL era) (DijkstraSUBCERT era)
  where
  wrapFailed :: PredicateFailure (DijkstraSUBPOOL era)
-> PredicateFailure (DijkstraSUBCERT era)
wrapFailed = PredicateFailure (EraRule "SUBPOOL" era)
-> DijkstraSubCertPredFailure era
PredicateFailure (DijkstraSUBPOOL era)
-> PredicateFailure (DijkstraSUBCERT era)
forall era.
PredicateFailure (EraRule "SUBPOOL" era)
-> DijkstraSubCertPredFailure era
SubPoolFailure
  wrapEvent :: Event (DijkstraSUBPOOL era) -> Event (DijkstraSUBCERT era)
wrapEvent = Void -> Void
Event (DijkstraSUBPOOL era) -> Event (DijkstraSUBCERT era)
forall a. Void -> a
absurd

instance
  ( ConwayEraGov era
  , ConwayEraCertState era
  , EraRule "SUBCERT" era ~ DijkstraSUBCERT era
  , EraRule "SUBGOVCERT" era ~ DijkstraSUBGOVCERT era
  ) =>
  Embed (DijkstraSUBGOVCERT era) (DijkstraSUBCERT era)
  where
  wrapFailed :: PredicateFailure (DijkstraSUBGOVCERT era)
-> PredicateFailure (DijkstraSUBCERT era)
wrapFailed = PredicateFailure (EraRule "SUBGOVCERT" era)
-> DijkstraSubCertPredFailure era
PredicateFailure (DijkstraSUBGOVCERT era)
-> PredicateFailure (DijkstraSUBCERT era)
forall era.
PredicateFailure (EraRule "SUBGOVCERT" era)
-> DijkstraSubCertPredFailure era
SubGovCertFailure
  wrapEvent :: Event (DijkstraSUBGOVCERT era) -> Event (DijkstraSUBCERT era)
wrapEvent = Void -> Void
Event (DijkstraSUBGOVCERT era) -> Event (DijkstraSUBCERT era)
forall a. Void -> a
absurd