{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Rules.Bbody (
  DijkstraBBODY,
  DijkstraBbodyPredFailure (..),
  conwayToDijkstraBbodyPredFailure,
) where

import Cardano.Ledger.Allegra.Rules (AllegraUtxoPredFailure)
import Cardano.Ledger.Alonzo.PParams (AlonzoEraPParams, ppMaxBlockExUnitsL)
import Cardano.Ledger.Alonzo.Rules (
  AlonzoBbodyEvent (ShelleyInAlonzoEvent),
  AlonzoBbodyPredFailure,
  AlonzoUtxoPredFailure,
  AlonzoUtxosPredFailure,
  AlonzoUtxowPredFailure,
  validateExUnits,
 )
import Cardano.Ledger.Alonzo.Scripts (ExUnits (..))
import Cardano.Ledger.Alonzo.Tx (AlonzoEraTx)
import Cardano.Ledger.Alonzo.TxWits (AlonzoEraTxWits (..))
import Cardano.Ledger.Babbage.Core (BabbageEraTxBody)
import Cardano.Ledger.Babbage.Rules (BabbageUtxoPredFailure, BabbageUtxowPredFailure)
import Cardano.Ledger.BaseTypes (
  Mismatch (..),
  Nonce,
  Relation (..),
  ShelleyBase,
  StrictMaybe (..),
 )
import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..))
import Cardano.Ledger.Binary.Coders (Decode (..), Encode (..), decode, encode, (!>), (<!))
import Cardano.Ledger.Block (Block (..), EraBlockHeader (..))
import Cardano.Ledger.Conway.PParams (ConwayEraPParams (..))
import Cardano.Ledger.Conway.Rules (
  ConwayBbodyPredFailure,
  ConwayCertPredFailure,
  ConwayCertsPredFailure,
  ConwayDelegPredFailure,
  ConwayGovPredFailure,
  ConwayUtxosPredFailure,
  alonzoToConwayBbodyPredFailure,
  shelleyToConwayBbodyPredFailure,
 )
import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Core
import Cardano.Ledger.Dijkstra.BlockBody (
  DijkstraEraBlockBody (..),
  PerasCert,
  PerasKey (..),
  validatePerasCert,
 )
import Cardano.Ledger.Dijkstra.Era (
  DijkstraBBODY,
  DijkstraBbodySignal (..),
  DijkstraEra,
  DijkstraEraBlockHeader (..),
 )
import Cardano.Ledger.Dijkstra.Rules.Gov (DijkstraGovPredFailure)
import Cardano.Ledger.Dijkstra.Rules.GovCert (DijkstraGovCertPredFailure)
import Cardano.Ledger.Dijkstra.Rules.Ledger (DijkstraLedgerPredFailure)
import Cardano.Ledger.Dijkstra.Rules.Ledgers ()
import Cardano.Ledger.Dijkstra.Rules.Utxo (DijkstraUtxoPredFailure)
import Cardano.Ledger.Dijkstra.Rules.Utxow (DijkstraUtxowPredFailure)
import Cardano.Ledger.Shelley.API (incrBlocks)
import Cardano.Ledger.Shelley.LedgerState (LedgerState (..), utxoL)
import Cardano.Ledger.Shelley.Rules (
  BbodyEnv (..),
  ShelleyBbodyPredFailure,
  ShelleyBbodyState (..),
  ShelleyLedgersEnv (..),
  ShelleyLedgersPredFailure,
  ShelleyPoolPredFailure,
  ShelleyUtxoPredFailure,
  ShelleyUtxowPredFailure,
 )
import qualified Cardano.Ledger.Shelley.Rules as Shelley
import Cardano.Ledger.Slot (slotToEpochBoundary)
import Control.DeepSeq (NFData)
import Control.State.Transition
import Data.Sequence (Seq)
import Data.Sequence.Strict (fromStrict)
import GHC.Generics (Generic)
import Lens.Micro ((^.))
import NoThunks.Class (NoThunks (..))

data DijkstraBbodyPredFailure era
  = WrongBlockBodySizeBBODY (Mismatch RelEQ Int)
  | InvalidBodyHashBBODY (Mismatch RelEQ (Hash HASH EraIndependentBlockBody))
  | -- | LEDGERS rule subtransition Failures
    LedgersFailure (PredicateFailure (EraRule "LEDGERS" era))
  | TooManyExUnits (Mismatch RelLTEQ ExUnits)
  | BodyRefScriptsSizeTooBig (Mismatch RelLTEQ Int)
  | PerasCertValidationFailed PerasCert Nonce
  deriving ((forall x.
 DijkstraBbodyPredFailure era
 -> Rep (DijkstraBbodyPredFailure era) x)
-> (forall x.
    Rep (DijkstraBbodyPredFailure era) x
    -> DijkstraBbodyPredFailure era)
-> Generic (DijkstraBbodyPredFailure era)
forall x.
Rep (DijkstraBbodyPredFailure era) x
-> DijkstraBbodyPredFailure era
forall x.
DijkstraBbodyPredFailure era
-> Rep (DijkstraBbodyPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraBbodyPredFailure era) x
-> DijkstraBbodyPredFailure era
forall era x.
DijkstraBbodyPredFailure era
-> Rep (DijkstraBbodyPredFailure era) x
$cfrom :: forall era x.
DijkstraBbodyPredFailure era
-> Rep (DijkstraBbodyPredFailure era) x
from :: forall x.
DijkstraBbodyPredFailure era
-> Rep (DijkstraBbodyPredFailure era) x
$cto :: forall era x.
Rep (DijkstraBbodyPredFailure era) x
-> DijkstraBbodyPredFailure era
to :: forall x.
Rep (DijkstraBbodyPredFailure era) x
-> DijkstraBbodyPredFailure era
Generic)

instance NFData (PredicateFailure (EraRule "LEDGERS" era)) => NFData (DijkstraBbodyPredFailure era)

deriving instance
  (Era era, Show (PredicateFailure (EraRule "LEDGERS" era))) =>
  Show (DijkstraBbodyPredFailure era)

deriving instance
  (Era era, Eq (PredicateFailure (EraRule "LEDGERS" era))) =>
  Eq (DijkstraBbodyPredFailure era)

deriving anyclass instance
  (Era era, NoThunks (PredicateFailure (EraRule "LEDGERS" era))) =>
  NoThunks (DijkstraBbodyPredFailure era)

instance
  ( Era era
  , EncCBOR (PredicateFailure (EraRule "LEDGERS" era))
  ) =>
  EncCBOR (DijkstraBbodyPredFailure era)
  where
  encCBOR :: DijkstraBbodyPredFailure era -> Encoding
encCBOR =
    Encode Open (DijkstraBbodyPredFailure era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode Open (DijkstraBbodyPredFailure era) -> Encoding)
-> (DijkstraBbodyPredFailure era
    -> Encode Open (DijkstraBbodyPredFailure era))
-> DijkstraBbodyPredFailure era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      WrongBlockBodySizeBBODY Mismatch RelEQ Int
mm -> (Mismatch RelEQ Int -> DijkstraBbodyPredFailure era)
-> Word
-> Encode Open (Mismatch RelEQ Int -> DijkstraBbodyPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ Int -> DijkstraBbodyPredFailure era
forall era. Mismatch RelEQ Int -> DijkstraBbodyPredFailure era
WrongBlockBodySizeBBODY Word
0 Encode Open (Mismatch RelEQ Int -> DijkstraBbodyPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ Int)
-> Encode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ Int -> Encode (Closed Dense) (Mismatch RelEQ Int)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ Int
mm
      InvalidBodyHashBBODY Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
mm -> (Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
 -> DijkstraBbodyPredFailure era)
-> Word
-> Encode
     Open
     (Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
      -> DijkstraBbodyPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
-> DijkstraBbodyPredFailure era
InvalidBodyHashBBODY @era) Word
1 Encode
  Open
  (Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
   -> DijkstraBbodyPredFailure era)
-> Encode
     (Closed Dense) (Mismatch RelEQ (Hash HASH EraIndependentBlockBody))
-> Encode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
-> Encode
     (Closed Dense) (Mismatch RelEQ (Hash HASH EraIndependentBlockBody))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
mm
      LedgersFailure PredicateFailure (EraRule "LEDGERS" era)
x -> (PredicateFailure (EraRule "LEDGERS" era)
 -> DijkstraBbodyPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "LEDGERS" era)
      -> DijkstraBbodyPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
LedgersFailure @era) Word
2 Encode
  Open
  (PredicateFailure (EraRule "LEDGERS" era)
   -> DijkstraBbodyPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "LEDGERS" era))
-> Encode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "LEDGERS" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "LEDGERS" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "LEDGERS" era)
x
      TooManyExUnits Mismatch RelLTEQ ExUnits
mm -> (Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era
forall era.
Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era
TooManyExUnits Word
3 Encode
  Open (Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ ExUnits)
-> Encode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelLTEQ ExUnits
-> Encode (Closed Dense) (Mismatch RelLTEQ ExUnits)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelLTEQ ExUnits
mm
      BodyRefScriptsSizeTooBig Mismatch RelLTEQ Int
mm -> (Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era
BodyRefScriptsSizeTooBig Word
4 Encode Open (Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ Int)
-> Encode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelLTEQ Int
-> Encode (Closed Dense) (Mismatch RelLTEQ Int)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelLTEQ Int
mm
      PerasCertValidationFailed PerasCert
cert Nonce
nonce ->
        (PerasCert -> Nonce -> DijkstraBbodyPredFailure era)
-> Word
-> Encode Open (PerasCert -> Nonce -> DijkstraBbodyPredFailure era)
forall t. t -> Word -> Encode Open t
Sum PerasCert -> Nonce -> DijkstraBbodyPredFailure era
forall era. PerasCert -> Nonce -> DijkstraBbodyPredFailure era
PerasCertValidationFailed Word
5 Encode Open (PerasCert -> Nonce -> DijkstraBbodyPredFailure era)
-> Encode (Closed Dense) PerasCert
-> Encode Open (Nonce -> DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PerasCert -> Encode (Closed Dense) PerasCert
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PerasCert
cert Encode Open (Nonce -> DijkstraBbodyPredFailure era)
-> Encode (Closed Dense) Nonce
-> Encode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Nonce -> Encode (Closed Dense) Nonce
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Nonce
nonce

instance
  ( Era era
  , DecCBOR (PredicateFailure (EraRule "LEDGERS" era))
  ) =>
  DecCBOR (DijkstraBbodyPredFailure era)
  where
  decCBOR :: forall s. Decoder s (DijkstraBbodyPredFailure era)
decCBOR = Decode (Closed Dense) (DijkstraBbodyPredFailure era)
-> Decoder s (DijkstraBbodyPredFailure era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) (DijkstraBbodyPredFailure era)
 -> Decoder s (DijkstraBbodyPredFailure era))
-> ((Word -> Decode Open (DijkstraBbodyPredFailure era))
    -> Decode (Closed Dense) (DijkstraBbodyPredFailure era))
-> (Word -> Decode Open (DijkstraBbodyPredFailure era))
-> Decoder s (DijkstraBbodyPredFailure era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (Word -> Decode Open (DijkstraBbodyPredFailure era))
-> Decode (Closed Dense) (DijkstraBbodyPredFailure era)
forall t.
Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t
Summands Text
"ConwayBbodyPred" ((Word -> Decode Open (DijkstraBbodyPredFailure era))
 -> Decoder s (DijkstraBbodyPredFailure era))
-> (Word -> Decode Open (DijkstraBbodyPredFailure era))
-> Decoder s (DijkstraBbodyPredFailure era)
forall a b. (a -> b) -> a -> b
$ \case
    Word
0 -> (Mismatch RelEQ Int -> DijkstraBbodyPredFailure era)
-> Decode Open (Mismatch RelEQ Int -> DijkstraBbodyPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ Int -> DijkstraBbodyPredFailure era
forall era. Mismatch RelEQ Int -> DijkstraBbodyPredFailure era
WrongBlockBodySizeBBODY Decode Open (Mismatch RelEQ Int -> DijkstraBbodyPredFailure era)
-> Decode (Closed (ZonkAny 0)) (Mismatch RelEQ Int)
-> Decode Open (DijkstraBbodyPredFailure 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)) (Mismatch RelEQ Int)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
1 -> (Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
 -> DijkstraBbodyPredFailure era)
-> Decode
     Open
     (Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
      -> DijkstraBbodyPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
-> DijkstraBbodyPredFailure era
forall era.
Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
-> DijkstraBbodyPredFailure era
InvalidBodyHashBBODY Decode
  Open
  (Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
   -> DijkstraBbodyPredFailure era)
-> Decode
     (Closed (ZonkAny 1))
     (Mismatch RelEQ (Hash HASH EraIndependentBlockBody))
-> Decode Open (DijkstraBbodyPredFailure 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))
  (Mismatch RelEQ (Hash HASH EraIndependentBlockBody))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
2 -> (PredicateFailure (EraRule "LEDGERS" era)
 -> DijkstraBbodyPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "LEDGERS" era)
      -> DijkstraBbodyPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
LedgersFailure Decode
  Open
  (PredicateFailure (EraRule "LEDGERS" era)
   -> DijkstraBbodyPredFailure era)
-> Decode
     (Closed (ZonkAny 2)) (PredicateFailure (EraRule "LEDGERS" era))
-> Decode Open (DijkstraBbodyPredFailure 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 "LEDGERS" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
3 -> (Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era
forall era.
Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era
TooManyExUnits Decode
  Open (Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era)
-> Decode (Closed (ZonkAny 3)) (Mismatch RelLTEQ ExUnits)
-> Decode Open (DijkstraBbodyPredFailure 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)) (Mismatch RelLTEQ ExUnits)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
4 -> (Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era
BodyRefScriptsSizeTooBig Decode Open (Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era)
-> Decode (Closed (ZonkAny 4)) (Mismatch RelLTEQ Int)
-> Decode Open (DijkstraBbodyPredFailure 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 RelLTEQ Int)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
5 -> (PerasCert -> Nonce -> DijkstraBbodyPredFailure era)
-> Decode Open (PerasCert -> Nonce -> DijkstraBbodyPredFailure era)
forall t. t -> Decode Open t
SumD PerasCert -> Nonce -> DijkstraBbodyPredFailure era
forall era. PerasCert -> Nonce -> DijkstraBbodyPredFailure era
PerasCertValidationFailed Decode Open (PerasCert -> Nonce -> DijkstraBbodyPredFailure era)
-> Decode (Closed (ZonkAny 6)) PerasCert
-> Decode Open (Nonce -> DijkstraBbodyPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 6)) PerasCert
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Nonce -> DijkstraBbodyPredFailure era)
-> Decode (Closed (ZonkAny 5)) Nonce
-> Decode Open (DijkstraBbodyPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 5)) Nonce
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
n -> Word -> Decode Open (DijkstraBbodyPredFailure era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

type instance EraRuleFailure "BBODY" DijkstraEra = DijkstraBbodyPredFailure DijkstraEra

type instance EraRuleEvent "BBODY" DijkstraEra = AlonzoBbodyEvent DijkstraEra

instance InjectRuleFailure "BBODY" DijkstraBbodyPredFailure DijkstraEra

instance InjectRuleFailure "BBODY" ConwayBbodyPredFailure DijkstraEra where
  injectFailure :: ConwayBbodyPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure = ConwayBbodyPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure

instance InjectRuleFailure "BBODY" AlonzoBbodyPredFailure DijkstraEra where
  injectFailure :: AlonzoBbodyPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure = ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (AlonzoBbodyPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> AlonzoBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
AlonzoBbodyPredFailure era -> ConwayBbodyPredFailure era
alonzoToConwayBbodyPredFailure

instance InjectRuleFailure "BBODY" ShelleyBbodyPredFailure DijkstraEra where
  injectFailure :: ShelleyBbodyPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure = ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ShelleyBbodyPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure

instance InjectRuleFailure "BBODY" ShelleyLedgersPredFailure DijkstraEra where
  injectFailure :: ShelleyLedgersPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure = ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ShelleyLedgersPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ShelleyLedgersPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ShelleyLedgersPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ShelleyLedgersPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure

instance InjectRuleFailure "BBODY" DijkstraLedgerPredFailure DijkstraEra where
  injectFailure :: DijkstraLedgerPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (DijkstraLedgerPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (DijkstraLedgerPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (DijkstraLedgerPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
DijkstraLedgerPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" DijkstraUtxowPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxowPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (DijkstraUtxowPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (DijkstraUtxowPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (DijkstraUtxowPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" BabbageUtxowPredFailure DijkstraEra where
  injectFailure :: BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (BabbageUtxowPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> BabbageUtxowPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (BabbageUtxowPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> BabbageUtxowPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (BabbageUtxowPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> BabbageUtxowPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
BabbageUtxowPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" AlonzoUtxowPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (AlonzoUtxowPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> AlonzoUtxowPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (AlonzoUtxowPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> AlonzoUtxowPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (AlonzoUtxowPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> AlonzoUtxowPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
AlonzoUtxowPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ShelleyUtxowPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ShelleyUtxowPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ShelleyUtxowPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ShelleyUtxowPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ShelleyUtxowPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ShelleyUtxowPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ShelleyUtxowPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ShelleyUtxowPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" DijkstraUtxoPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (DijkstraUtxoPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> DijkstraUtxoPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (DijkstraUtxoPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> DijkstraUtxoPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (DijkstraUtxoPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> DijkstraUtxoPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
BabbageUtxoPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
AlonzoUtxoPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ConwayUtxosPredFailure DijkstraEra where
  injectFailure :: ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ConwayUtxosPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ConwayUtxosPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ConwayUtxosPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ConwayUtxosPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ConwayUtxosPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ConwayUtxosPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ShelleyUtxoPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
AllegraUtxoPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ConwayCertsPredFailure DijkstraEra where
  injectFailure :: ConwayCertsPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ConwayCertsPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ConwayCertsPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ConwayCertsPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayCertsPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ConwayCertsPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ConwayCertPredFailure DijkstraEra where
  injectFailure :: ConwayCertPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ConwayCertPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ConwayCertPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ConwayCertPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ConwayCertPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ConwayCertPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ConwayCertPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayCertPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ConwayCertPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ConwayDelegPredFailure DijkstraEra where
  injectFailure :: ConwayDelegPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ConwayDelegPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ConwayDelegPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ConwayDelegPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ConwayDelegPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ConwayDelegPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ConwayDelegPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayDelegPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ConwayDelegPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ShelleyPoolPredFailure DijkstraEra where
  injectFailure :: ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ShelleyPoolPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ShelleyPoolPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ShelleyPoolPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ShelleyPoolPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ShelleyPoolPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ShelleyPoolPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ShelleyPoolPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" DijkstraGovCertPredFailure DijkstraEra where
  injectFailure :: DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (DijkstraGovCertPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> DijkstraGovCertPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (DijkstraGovCertPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> DijkstraGovCertPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (DijkstraGovCertPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> DijkstraGovCertPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
DijkstraGovCertPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" ConwayGovPredFailure DijkstraEra where
  injectFailure :: ConwayGovPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (ConwayGovPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> ConwayGovPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (ConwayGovPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> ConwayGovPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (ConwayGovPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> ConwayGovPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayGovPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
ConwayGovPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "BBODY" DijkstraGovPredFailure DijkstraEra where
  injectFailure :: DijkstraGovPredFailure DijkstraEra
-> EraRuleFailure "BBODY" DijkstraEra
injectFailure =
    ConwayBbodyPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure
      (ConwayBbodyPredFailure DijkstraEra
 -> DijkstraBbodyPredFailure DijkstraEra)
-> (DijkstraGovPredFailure DijkstraEra
    -> ConwayBbodyPredFailure DijkstraEra)
-> DijkstraGovPredFailure DijkstraEra
-> DijkstraBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyBbodyPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall era.
ShelleyBbodyPredFailure era -> ConwayBbodyPredFailure era
shelleyToConwayBbodyPredFailure
      (ShelleyBbodyPredFailure DijkstraEra
 -> ConwayBbodyPredFailure DijkstraEra)
-> (DijkstraGovPredFailure DijkstraEra
    -> ShelleyBbodyPredFailure DijkstraEra)
-> DijkstraGovPredFailure DijkstraEra
-> ConwayBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "LEDGERS" DijkstraEra)
-> ShelleyBbodyPredFailure DijkstraEra
ShelleyLedgersPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> ShelleyBbodyPredFailure era
Shelley.LedgersFailure
      (ShelleyLedgersPredFailure DijkstraEra
 -> ShelleyBbodyPredFailure DijkstraEra)
-> (DijkstraGovPredFailure DijkstraEra
    -> ShelleyLedgersPredFailure DijkstraEra)
-> DijkstraGovPredFailure DijkstraEra
-> ShelleyBbodyPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraGovPredFailure DijkstraEra
-> EraRuleFailure "LEDGERS" DijkstraEra
DijkstraGovPredFailure DijkstraEra
-> ShelleyLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance
  ( Embed (EraRule "LEDGERS" era) (EraRule "BBODY" era)
  , Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era
  , State (EraRule "LEDGERS" era) ~ LedgerState era
  , Signal (EraRule "LEDGERS" era) ~ Seq (Tx TopTx era)
  , AlonzoEraTxWits era
  , EraBlockBody era
  , AlonzoEraPParams era
  , InjectRuleFailure "BBODY" AlonzoBbodyPredFailure era
  , InjectRuleFailure "BBODY" ConwayBbodyPredFailure era
  , InjectRuleFailure "BBODY" DijkstraBbodyPredFailure era
  , InjectRuleFailure "BBODY" ShelleyBbodyPredFailure era
  , EraRule "BBODY" era ~ DijkstraBBODY era
  , AlonzoEraTx era
  , BabbageEraTxBody era
  , ConwayEraPParams era
  , DijkstraEraBlockBody era
  ) =>
  STS (DijkstraBBODY era)
  where
  type State (DijkstraBBODY era) = ShelleyBbodyState era

  type Signal (DijkstraBBODY era) = DijkstraBbodySignal era

  type Environment (DijkstraBBODY era) = BbodyEnv era

  type BaseM (DijkstraBBODY era) = ShelleyBase

  type PredicateFailure (DijkstraBBODY era) = DijkstraBbodyPredFailure era

  type Event (DijkstraBBODY era) = AlonzoBbodyEvent era

  initialRules :: [InitialRule (DijkstraBBODY era)]
initialRules = []
  transitionRules :: [TransitionRule (DijkstraBBODY era)]
transitionRules = [forall era.
(Signal (EraRule "BBODY" era) ~ DijkstraBbodySignal era,
 State (EraRule "BBODY" era) ~ ShelleyBbodyState era,
 State (EraRule "LEDGERS" era) ~ LedgerState era,
 Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era,
 Environment (EraRule "BBODY" era) ~ BbodyEnv era,
 InjectRuleFailure "BBODY" DijkstraBbodyPredFailure era,
 DijkstraEraBlockBody era, BabbageEraTxBody era,
 InjectRuleFailure "BBODY" ConwayBbodyPredFailure era,
 InjectRuleFailure "BBODY" ShelleyBbodyPredFailure era,
 STS (EraRule "BBODY" era),
 Signal (EraRule "LEDGERS" era) ~ Seq (Tx TopTx era),
 BaseM (EraRule "BBODY" era) ~ ShelleyBase, AlonzoEraTx era,
 InjectRuleFailure "BBODY" AlonzoBbodyPredFailure era,
 Embed (EraRule "LEDGERS" era) (EraRule "BBODY" era),
 ConwayEraPParams era) =>
TransitionRule (EraRule "BBODY" era)
dijkstraBbodyTransition @era]

dijkstraBbodyTransition ::
  forall era.
  ( Signal (EraRule "BBODY" era) ~ DijkstraBbodySignal era
  , State (EraRule "BBODY" era) ~ ShelleyBbodyState era
  , State (EraRule "LEDGERS" era) ~ LedgerState era
  , Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era
  , Environment (EraRule "BBODY" era) ~ BbodyEnv era
  , InjectRuleFailure "BBODY" DijkstraBbodyPredFailure era
  , DijkstraEraBlockBody era
  , BabbageEraTxBody era
  , InjectRuleFailure "BBODY" ConwayBbodyPredFailure era
  , InjectRuleFailure "BBODY" ShelleyBbodyPredFailure era
  , STS (EraRule "BBODY" era)
  , Signal (EraRule "LEDGERS" era) ~ Seq (Tx TopTx era)
  , BaseM (EraRule "BBODY" era) ~ ShelleyBase
  , AlonzoEraTx era
  , InjectRuleFailure "BBODY" AlonzoBbodyPredFailure era
  , Embed (EraRule "LEDGERS" era) (EraRule "BBODY" era)
  , ConwayEraPParams era
  ) =>
  TransitionRule (EraRule "BBODY" era)
dijkstraBbodyTransition :: forall era.
(Signal (EraRule "BBODY" era) ~ DijkstraBbodySignal era,
 State (EraRule "BBODY" era) ~ ShelleyBbodyState era,
 State (EraRule "LEDGERS" era) ~ LedgerState era,
 Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era,
 Environment (EraRule "BBODY" era) ~ BbodyEnv era,
 InjectRuleFailure "BBODY" DijkstraBbodyPredFailure era,
 DijkstraEraBlockBody era, BabbageEraTxBody era,
 InjectRuleFailure "BBODY" ConwayBbodyPredFailure era,
 InjectRuleFailure "BBODY" ShelleyBbodyPredFailure era,
 STS (EraRule "BBODY" era),
 Signal (EraRule "LEDGERS" era) ~ Seq (Tx TopTx era),
 BaseM (EraRule "BBODY" era) ~ ShelleyBase, AlonzoEraTx era,
 InjectRuleFailure "BBODY" AlonzoBbodyPredFailure era,
 Embed (EraRule "LEDGERS" era) (EraRule "BBODY" era),
 ConwayEraPParams era) =>
TransitionRule (EraRule "BBODY" era)
dijkstraBbodyTransition = do
  TRC (BbodyEnv pp account, BbodyState ls blocksMade, DijkstraBbodySignal block@Block {blockBody}) <-
    Rule
  (EraRule "BBODY" era)
  'Transition
  (RuleContext 'Transition (EraRule "BBODY" era))
F (Clause (EraRule "BBODY" era) 'Transition)
  (TRC (EraRule "BBODY" era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext

  Shelley.validateBlockBodySize block (pp ^. ppProtocolVersionL)

  Shelley.validateBlockBodyHash block

  let bhSlot = Block h era
block Block h era -> Getting SlotNo (Block h era) SlotNo -> SlotNo
forall s a. s -> Getting a s a -> a
^. Getting SlotNo (Block h era) SlotNo
forall h era. EraBlockHeader h era => Lens' (Block h era) SlotNo
Lens' (Block h era) SlotNo
slotNoBlockHeaderL

  (firstSlot, curEpoch) <- liftSTS $ slotToEpochBoundary bhSlot

  let txs = BlockBody era
blockBody BlockBody era
-> Getting
     (StrictSeq (Tx TopTx era))
     (BlockBody era)
     (StrictSeq (Tx TopTx era))
-> StrictSeq (Tx TopTx era)
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictSeq (Tx TopTx era))
  (BlockBody era)
  (StrictSeq (Tx TopTx era))
forall era.
EraBlockBody era =>
Lens' (BlockBody era) (StrictSeq (Tx TopTx era))
Lens' (BlockBody era) (StrictSeq (Tx TopTx era))
txSeqBlockBodyL

  ls' <-
    trans @(EraRule "LEDGERS" era) $
      TRC
        ( LedgersEnv bhSlot curEpoch pp account
        , ls
        , fromStrict txs
        )

  validateExUnits @era txs $ pp ^. ppMaxBlockExUnitsL

  Conway.validateBodyRefScriptsSizeTooBig @era pp blockBody (ls ^. utxoL)

  case blockBody ^. perasCertBlockBodyL of
    StrictMaybe PerasCert
SNothing -> () -> F (Clause (EraRule "BBODY" era) 'Transition) ()
forall a. a -> F (Clause (EraRule "BBODY" era) 'Transition) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    SJust PerasCert
cert ->
      let nonce :: Nonce
nonce = Block h era
block Block h era -> Getting Nonce (Block h era) Nonce -> Nonce
forall s a. s -> Getting a s a -> a
^. Getting Nonce (Block h era) Nonce
forall h era.
DijkstraEraBlockHeader h era =>
Lens' (Block h era) Nonce
Lens' (Block h era) Nonce
prevNonceBlockHeaderL
       in Nonce -> PerasKey -> PerasCert -> Bool
validatePerasCert Nonce
nonce PerasKey
PerasKey PerasCert
cert Bool
-> PredicateFailure (EraRule "BBODY" era)
-> F (Clause (EraRule "BBODY" era) 'Transition) ()
forall sts (ctx :: RuleType).
Bool -> PredicateFailure sts -> Rule sts ctx ()
?! DijkstraBbodyPredFailure era -> EraRuleFailure "BBODY" era
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure (PerasCert -> Nonce -> DijkstraBbodyPredFailure era
forall era. PerasCert -> Nonce -> DijkstraBbodyPredFailure era
PerasCertValidationFailed PerasCert
cert Nonce
nonce)

  pure $ BbodyState ls' $ incrBlocks block firstSlot (pp ^. ppDG) blocksMade

-- | Validate that Peras certificate is in the block body.
conwayToDijkstraBbodyPredFailure ::
  forall era. ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure :: forall era.
ConwayBbodyPredFailure era -> DijkstraBbodyPredFailure era
conwayToDijkstraBbodyPredFailure = \case
  Conway.WrongBlockBodySizeBBODY Mismatch RelEQ Int
mm -> Mismatch RelEQ Int -> DijkstraBbodyPredFailure era
forall era. Mismatch RelEQ Int -> DijkstraBbodyPredFailure era
WrongBlockBodySizeBBODY Mismatch RelEQ Int
mm
  Conway.InvalidBodyHashBBODY Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
mm -> Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
-> DijkstraBbodyPredFailure era
forall era.
Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
-> DijkstraBbodyPredFailure era
InvalidBodyHashBBODY Mismatch RelEQ (Hash HASH EraIndependentBlockBody)
mm
  Conway.LedgersFailure PredicateFailure (EraRule "LEDGERS" era)
f -> PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
LedgersFailure PredicateFailure (EraRule "LEDGERS" era)
f
  Conway.TooManyExUnits Mismatch RelLTEQ ExUnits
mm -> Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era
forall era.
Mismatch RelLTEQ ExUnits -> DijkstraBbodyPredFailure era
TooManyExUnits Mismatch RelLTEQ ExUnits
mm
  Conway.BodyRefScriptsSizeTooBig Mismatch RelLTEQ Int
mm -> Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraBbodyPredFailure era
BodyRefScriptsSizeTooBig Mismatch RelLTEQ Int
mm
  Conway.HeaderProtVerTooHigh {} -> String -> DijkstraBbodyPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: HeaderProtVerTooHigh cannot be triggered in Dijkstra era"

instance
  ( Era era
  , BaseM ledgers ~ ShelleyBase
  , ledgers ~ EraRule "LEDGERS" era
  , STS ledgers
  ) =>
  Embed ledgers (DijkstraBBODY era)
  where
  wrapFailed :: PredicateFailure ledgers -> PredicateFailure (DijkstraBBODY era)
wrapFailed = PredicateFailure ledgers -> PredicateFailure (DijkstraBBODY era)
PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
forall era.
PredicateFailure (EraRule "LEDGERS" era)
-> DijkstraBbodyPredFailure era
LedgersFailure
  wrapEvent :: Event ledgers -> Event (DijkstraBBODY era)
wrapEvent = ShelleyBbodyEvent era -> AlonzoBbodyEvent era
forall era. ShelleyBbodyEvent era -> AlonzoBbodyEvent era
ShelleyInAlonzoEvent (ShelleyBbodyEvent era -> AlonzoBbodyEvent era)
-> (Event ledgers -> ShelleyBbodyEvent era)
-> Event ledgers
-> AlonzoBbodyEvent era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Event ledgers -> ShelleyBbodyEvent era
Event (EraRule "LEDGERS" era) -> ShelleyBbodyEvent era
forall era. Event (EraRule "LEDGERS" era) -> ShelleyBbodyEvent era
Shelley.LedgersEvent