{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# 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.Ledger (
  LEDGER,
  DijkstraLedgerPredFailure (..),
  DijkstraLedgerEvent (..),
  shelleyToDijkstraLedgerPredFailure,
  conwayToDijkstraLedgerPredFailure,
) where

import qualified Cardano.Ledger.Allegra.Rules as Allegra
import Cardano.Ledger.Alonzo (AlonzoScript)
import qualified Cardano.Ledger.Alonzo.Rules as Alonzo
import Cardano.Ledger.Alonzo.UTxO (AlonzoScriptsNeeded)
import Cardano.Ledger.Babbage (BabbageTxOut)
import qualified Cardano.Ledger.Babbage.Rules as Babbage
import Cardano.Ledger.BaseTypes (
  Mismatch (..),
  Relation (..),
  ShelleyBase,
 )
import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..))
import Cardano.Ledger.Binary.Coders
import Cardano.Ledger.Coin (Coin)
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Governance (
  ConwayEraGov (..),
  ConwayGovState,
  Proposals,
  constitutionGuardrailsScriptHashL,
  grCommitteeL,
  proposalsWithPurpose,
 )
import Cardano.Ledger.Conway.PParams (ppMaxRefScriptSizePerTxG)
import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Conway.State
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  ENTITIES,
  GOV,
  LEDGER,
  UTXOW,
 )
import Cardano.Ledger.Dijkstra.Rules.Certs ()
import Cardano.Ledger.Dijkstra.Rules.Entities (
  EntitiesEnv (..),
  EntitiesEvent,
  EntitiesPredFailure (..),
 )
import Cardano.Ledger.Dijkstra.Rules.Gov (DijkstraGovPredFailure)
import Cardano.Ledger.Dijkstra.Rules.GovCert (DijkstraGovCertPredFailure)
import Cardano.Ledger.Dijkstra.Rules.SubLedger
import Cardano.Ledger.Dijkstra.Rules.SubLedgers
import Cardano.Ledger.Dijkstra.Rules.Utxo (DijkstraUtxoEnv (..), DijkstraUtxoPredFailure)
import Cardano.Ledger.Dijkstra.Rules.Utxow (DijkstraUtxowPredFailure)
import Cardano.Ledger.Dijkstra.TxBody
import Cardano.Ledger.Dijkstra.UTxO (DijkstraEraUTxO (..), batchNonDistinctRefScriptsSize)
import Cardano.Ledger.Rules.ValidationMode (Test, runTest)
import Cardano.Ledger.Shelley.LedgerState (
  LedgerState (..),
  UTxOState (..),
  lsUTxOStateL,
  utxosGovStateL,
  utxosUtxo,
 )
import qualified Cardano.Ledger.Shelley.Rules as Shelley
import Cardano.Ledger.Slot (epochFromSlot)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended
import Data.Sequence (Seq)
import qualified Data.Sequence.Strict as StrictSeq
import Data.Word (Word32)
import GHC.Generics (Generic (..))
import Lens.Micro
import Validation (failureUnless)

data DijkstraLedgerPredFailure era
  = DijkstraUtxowFailure (PredicateFailure (EraRule "UTXOW" era))
  | DijkstraEntitiesFailure (PredicateFailure (EraRule "ENTITIES" era))
  | DijkstraGovFailure (PredicateFailure (EraRule "GOV" era))
  | DijkstraTreasuryValueMismatch (Mismatch RelEQ Coin)
  | DijkstraTxRefScriptsSizeTooBig (Mismatch RelLTEQ Int)
  | DijkstraSubLedgersFailure (PredicateFailure (EraRule "SUBLEDGERS" era))
  deriving ((forall x.
 DijkstraLedgerPredFailure era
 -> Rep (DijkstraLedgerPredFailure era) x)
-> (forall x.
    Rep (DijkstraLedgerPredFailure era) x
    -> DijkstraLedgerPredFailure era)
-> Generic (DijkstraLedgerPredFailure era)
forall x.
Rep (DijkstraLedgerPredFailure era) x
-> DijkstraLedgerPredFailure era
forall x.
DijkstraLedgerPredFailure era
-> Rep (DijkstraLedgerPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraLedgerPredFailure era) x
-> DijkstraLedgerPredFailure era
forall era x.
DijkstraLedgerPredFailure era
-> Rep (DijkstraLedgerPredFailure era) x
$cfrom :: forall era x.
DijkstraLedgerPredFailure era
-> Rep (DijkstraLedgerPredFailure era) x
from :: forall x.
DijkstraLedgerPredFailure era
-> Rep (DijkstraLedgerPredFailure era) x
$cto :: forall era x.
Rep (DijkstraLedgerPredFailure era) x
-> DijkstraLedgerPredFailure era
to :: forall x.
Rep (DijkstraLedgerPredFailure era) x
-> DijkstraLedgerPredFailure era
Generic)

type instance EraRuleFailure "LEDGER" DijkstraEra = DijkstraLedgerPredFailure DijkstraEra

type instance EraRuleEvent "LEDGER" DijkstraEra = DijkstraLedgerEvent DijkstraEra

instance InjectRuleEvent "LEDGER" DijkstraLedgerEvent DijkstraEra

instance InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure DijkstraEra

instance InjectRuleFailure "LEDGER" Conway.ConwayLedgerPredFailure DijkstraEra where
  injectFailure :: ConwayLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = ConwayLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
ConwayLedgerPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
(PredicateFailure (EraRule "ENTITIES" era)
 ~ EntitiesPredFailure era) =>
ConwayLedgerPredFailure era -> DijkstraLedgerPredFailure era
conwayToDijkstraLedgerPredFailure

instance InjectRuleFailure "LEDGER" Shelley.ShelleyLedgerPredFailure DijkstraEra where
  injectFailure :: ShelleyLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = ShelleyLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
ShelleyLedgerPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
(PredicateFailure (EraRule "ENTITIES" era)
 ~ EntitiesPredFailure era) =>
ShelleyLedgerPredFailure era -> DijkstraLedgerPredFailure era
shelleyToDijkstraLedgerPredFailure

instance InjectRuleFailure "LEDGER" DijkstraUtxowPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayUtxowPredFailure DijkstraEra where
  injectFailure :: ConwayUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ConwayUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Babbage.BabbageUtxowPredFailure DijkstraEra where
  injectFailure :: BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (BabbageUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> BabbageUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
BabbageUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Alonzo.AlonzoUtxowPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (AlonzoUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> AlonzoUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
AlonzoUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Shelley.ShelleyUtxowPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ShelleyUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ShelleyUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ShelleyUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" DijkstraUtxoPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (DijkstraUtxoPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> DijkstraUtxoPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayUtxoPredFailure DijkstraEra where
  injectFailure :: ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayUtxoPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ConwayUtxoPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Babbage.BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
BabbageUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Alonzo.AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
AlonzoUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Alonzo.AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayUtxosPredFailure DijkstraEra where
  injectFailure :: ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayUtxosPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ConwayUtxosPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Shelley.ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ShelleyUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Allegra.AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOW" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
AllegraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" EntitiesPredFailure DijkstraEra where
  injectFailure :: EntitiesPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayCertsPredFailure DijkstraEra where
  injectFailure :: ConwayCertsPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (EntitiesPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayCertsPredFailure DijkstraEra
    -> EntitiesPredFailure DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayCertsPredFailure DijkstraEra
-> EraRuleFailure "ENTITIES" DijkstraEra
ConwayCertsPredFailure DijkstraEra
-> EntitiesPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayCertPredFailure DijkstraEra where
  injectFailure :: ConwayCertPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (EntitiesPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayCertPredFailure DijkstraEra
    -> EntitiesPredFailure DijkstraEra)
-> ConwayCertPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayCertPredFailure DijkstraEra
-> EraRuleFailure "ENTITIES" DijkstraEra
ConwayCertPredFailure DijkstraEra
-> EntitiesPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayDelegPredFailure DijkstraEra where
  injectFailure :: ConwayDelegPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (EntitiesPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayDelegPredFailure DijkstraEra
    -> EntitiesPredFailure DijkstraEra)
-> ConwayDelegPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayDelegPredFailure DijkstraEra
-> EraRuleFailure "ENTITIES" DijkstraEra
ConwayDelegPredFailure DijkstraEra
-> EntitiesPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Shelley.ShelleyPoolPredFailure DijkstraEra where
  injectFailure :: ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (EntitiesPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ShelleyPoolPredFailure DijkstraEra
    -> EntitiesPredFailure DijkstraEra)
-> ShelleyPoolPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "ENTITIES" DijkstraEra
ShelleyPoolPredFailure DijkstraEra
-> EntitiesPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" DijkstraGovCertPredFailure DijkstraEra where
  injectFailure :: DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (EntitiesPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (DijkstraGovCertPredFailure DijkstraEra
    -> EntitiesPredFailure DijkstraEra)
-> DijkstraGovCertPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "ENTITIES" DijkstraEra
DijkstraGovCertPredFailure DijkstraEra
-> EntitiesPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" DijkstraGovPredFailure DijkstraEra where
  injectFailure :: DijkstraGovPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "GOV" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraGovPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
DijkstraGovFailure (DijkstraGovPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (DijkstraGovPredFailure DijkstraEra
    -> DijkstraGovPredFailure DijkstraEra)
-> DijkstraGovPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraGovPredFailure DijkstraEra
-> EraRuleFailure "GOV" DijkstraEra
DijkstraGovPredFailure DijkstraEra
-> DijkstraGovPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayGovCertPredFailure DijkstraEra where
  injectFailure :: ConwayGovCertPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "ENTITIES" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
EntitiesPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (EntitiesPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayGovCertPredFailure DijkstraEra
    -> EntitiesPredFailure DijkstraEra)
-> ConwayGovCertPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayGovCertPredFailure DijkstraEra
-> EraRuleFailure "ENTITIES" DijkstraEra
ConwayGovCertPredFailure DijkstraEra
-> EntitiesPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" Conway.ConwayGovPredFailure DijkstraEra where
  injectFailure :: ConwayGovPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "GOV" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraGovPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
DijkstraGovFailure (DijkstraGovPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayGovPredFailure DijkstraEra
    -> DijkstraGovPredFailure DijkstraEra)
-> ConwayGovPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayGovPredFailure DijkstraEra
-> EraRuleFailure "GOV" DijkstraEra
ConwayGovPredFailure DijkstraEra
-> DijkstraGovPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" DijkstraSubLedgersPredFailure DijkstraEra where
  injectFailure :: DijkstraSubLedgersPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "SUBLEDGERS" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
DijkstraSubLedgersPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
DijkstraSubLedgersFailure (DijkstraSubLedgersPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (DijkstraSubLedgersPredFailure DijkstraEra
    -> DijkstraSubLedgersPredFailure DijkstraEra)
-> DijkstraSubLedgersPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraSubLedgersPredFailure DijkstraEra
-> EraRuleFailure "SUBLEDGERS" DijkstraEra
DijkstraSubLedgersPredFailure DijkstraEra
-> DijkstraSubLedgersPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

deriving instance
  ( Era era
  , Eq (PredicateFailure (EraRule "UTXOW" era))
  , Eq (PredicateFailure (EraRule "ENTITIES" era))
  , Eq (PredicateFailure (EraRule "GOV" era))
  , Eq (PredicateFailure (EraRule "SUBLEDGERS" era))
  ) =>
  Eq (DijkstraLedgerPredFailure era)

deriving instance
  ( Era era
  , Show (PredicateFailure (EraRule "UTXOW" era))
  , Show (PredicateFailure (EraRule "ENTITIES" era))
  , Show (PredicateFailure (EraRule "GOV" era))
  , Show (PredicateFailure (EraRule "SUBLEDGERS" era))
  ) =>
  Show (DijkstraLedgerPredFailure era)

instance
  ( Era era
  , NFData (PredicateFailure (EraRule "UTXOW" era))
  , NFData (PredicateFailure (EraRule "ENTITIES" era))
  , NFData (PredicateFailure (EraRule "GOV" era))
  , NFData (PredicateFailure (EraRule "SUBLEDGERS" era))
  ) =>
  NFData (DijkstraLedgerPredFailure era)

instance
  ( Era era
  , EncCBOR (PredicateFailure (EraRule "UTXOW" era))
  , EncCBOR (PredicateFailure (EraRule "ENTITIES" era))
  , EncCBOR (PredicateFailure (EraRule "GOV" era))
  , EncCBOR (PredicateFailure (EraRule "SUBLEDGERS" era))
  ) =>
  EncCBOR (DijkstraLedgerPredFailure era)
  where
  encCBOR :: DijkstraLedgerPredFailure era -> Encoding
encCBOR =
    Encode Open (DijkstraLedgerPredFailure era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode Open (DijkstraLedgerPredFailure era) -> Encoding)
-> (DijkstraLedgerPredFailure era
    -> Encode Open (DijkstraLedgerPredFailure era))
-> DijkstraLedgerPredFailure era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      DijkstraUtxowFailure PredicateFailure (EraRule "UTXOW" era)
x -> (PredicateFailure (EraRule "UTXOW" era)
 -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "UTXOW" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure @era) Word
1 Encode
  Open
  (PredicateFailure (EraRule "UTXOW" era)
   -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "UTXOW" era))
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "UTXOW" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "UTXOW" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "UTXOW" era)
x
      DijkstraEntitiesFailure PredicateFailure (EraRule "ENTITIES" era)
x -> (PredicateFailure (EraRule "ENTITIES" era)
 -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "ENTITIES" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure @era) Word
2 Encode
  Open
  (PredicateFailure (EraRule "ENTITIES" era)
   -> DijkstraLedgerPredFailure era)
-> Encode
     (Closed Dense) (PredicateFailure (EraRule "ENTITIES" era))
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "ENTITIES" era)
-> Encode
     (Closed Dense) (PredicateFailure (EraRule "ENTITIES" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "ENTITIES" era)
x
      DijkstraGovFailure PredicateFailure (EraRule "GOV" era)
x -> (PredicateFailure (EraRule "GOV" era)
 -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "GOV" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
DijkstraGovFailure @era) Word
3 Encode
  Open
  (PredicateFailure (EraRule "GOV" era)
   -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "GOV" era))
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "GOV" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "GOV" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "GOV" era)
x
      DijkstraTreasuryValueMismatch Mismatch RelEQ Coin
mm -> (Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era
DijkstraTreasuryValueMismatch @era) Word
5 Encode Open (Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ Coin)
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ Coin -> Encode (Closed Dense) (Mismatch RelEQ Coin)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ Coin
mm
      DijkstraTxRefScriptsSizeTooBig Mismatch RelLTEQ Int
mm -> (Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
DijkstraTxRefScriptsSizeTooBig Word
6 Encode Open (Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ Int)
-> Encode Open (DijkstraLedgerPredFailure 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
      DijkstraSubLedgersFailure PredicateFailure (EraRule "SUBLEDGERS" era)
w -> (PredicateFailure (EraRule "SUBLEDGERS" era)
 -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "SUBLEDGERS" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
DijkstraSubLedgersFailure Word
9 Encode
  Open
  (PredicateFailure (EraRule "SUBLEDGERS" era)
   -> DijkstraLedgerPredFailure era)
-> Encode
     (Closed Dense) (PredicateFailure (EraRule "SUBLEDGERS" era))
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "SUBLEDGERS" era)
-> Encode
     (Closed Dense) (PredicateFailure (EraRule "SUBLEDGERS" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "SUBLEDGERS" era)
w

instance
  ( Era era
  , DecCBOR (PredicateFailure (EraRule "UTXOW" era))
  , DecCBOR (PredicateFailure (EraRule "ENTITIES" era))
  , DecCBOR (PredicateFailure (EraRule "GOV" era))
  , DecCBOR (PredicateFailure (EraRule "SUBLEDGERS" era))
  ) =>
  DecCBOR (DijkstraLedgerPredFailure era)
  where
  decCBOR :: forall s. Decoder s (DijkstraLedgerPredFailure era)
decCBOR = Decode (Closed Dense) (DijkstraLedgerPredFailure era)
-> Decoder s (DijkstraLedgerPredFailure era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) (DijkstraLedgerPredFailure era)
 -> Decoder s (DijkstraLedgerPredFailure era))
-> ((Word -> Decode Open (DijkstraLedgerPredFailure era))
    -> Decode (Closed Dense) (DijkstraLedgerPredFailure era))
-> (Word -> Decode Open (DijkstraLedgerPredFailure era))
-> Decoder s (DijkstraLedgerPredFailure era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (Word -> Decode Open (DijkstraLedgerPredFailure era))
-> Decode (Closed Dense) (DijkstraLedgerPredFailure era)
forall t.
Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t
Summands Text
"DijkstraLedgerPredFailure" ((Word -> Decode Open (DijkstraLedgerPredFailure era))
 -> Decoder s (DijkstraLedgerPredFailure era))
-> (Word -> Decode Open (DijkstraLedgerPredFailure era))
-> Decoder s (DijkstraLedgerPredFailure era)
forall a b. (a -> b) -> a -> b
$ \case
    Word
1 -> (PredicateFailure (EraRule "UTXOW" era)
 -> DijkstraLedgerPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "UTXOW" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure Decode
  Open
  (PredicateFailure (EraRule "UTXOW" era)
   -> DijkstraLedgerPredFailure era)
-> Decode
     (Closed (ZonkAny 0)) (PredicateFailure (EraRule "UTXOW" era))
-> Decode Open (DijkstraLedgerPredFailure 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 "UTXOW" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
2 -> (PredicateFailure (EraRule "ENTITIES" era)
 -> DijkstraLedgerPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "ENTITIES" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure Decode
  Open
  (PredicateFailure (EraRule "ENTITIES" era)
   -> DijkstraLedgerPredFailure era)
-> Decode
     (Closed (ZonkAny 1)) (PredicateFailure (EraRule "ENTITIES" era))
-> Decode Open (DijkstraLedgerPredFailure 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 "ENTITIES" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
3 -> (PredicateFailure (EraRule "GOV" era)
 -> DijkstraLedgerPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "GOV" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
DijkstraGovFailure Decode
  Open
  (PredicateFailure (EraRule "GOV" era)
   -> DijkstraLedgerPredFailure era)
-> Decode
     (Closed (ZonkAny 2)) (PredicateFailure (EraRule "GOV" era))
-> Decode Open (DijkstraLedgerPredFailure 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 "GOV" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
5 -> (Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era)
-> Decode
     Open (Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era
forall era. Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era
DijkstraTreasuryValueMismatch Decode Open (Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era)
-> Decode (Closed (ZonkAny 3)) (Mismatch RelEQ Coin)
-> Decode Open (DijkstraLedgerPredFailure 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 RelEQ Coin)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
6 -> (Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
DijkstraTxRefScriptsSizeTooBig Decode Open (Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era)
-> Decode (Closed (ZonkAny 4)) (Mismatch RelLTEQ Int)
-> Decode Open (DijkstraLedgerPredFailure 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
9 -> (PredicateFailure (EraRule "SUBLEDGERS" era)
 -> DijkstraLedgerPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "SUBLEDGERS" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
DijkstraSubLedgersFailure Decode
  Open
  (PredicateFailure (EraRule "SUBLEDGERS" era)
   -> DijkstraLedgerPredFailure era)
-> Decode
     (Closed (ZonkAny 5)) (PredicateFailure (EraRule "SUBLEDGERS" era))
-> Decode Open (DijkstraLedgerPredFailure 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)) (PredicateFailure (EraRule "SUBLEDGERS" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
n -> Word -> Decode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

data DijkstraLedgerEvent era
  = UtxowEvent (Event (EraRule "UTXOW" era))
  | EntitiesEvent (Event (EraRule "ENTITIES" era))
  | GovEvent (Event (EraRule "GOV" era))
  | SubLedgersEvent (Event (EraRule "SUBLEDGERS" era))
  deriving ((forall x.
 DijkstraLedgerEvent era -> Rep (DijkstraLedgerEvent era) x)
-> (forall x.
    Rep (DijkstraLedgerEvent era) x -> DijkstraLedgerEvent era)
-> Generic (DijkstraLedgerEvent era)
forall x.
Rep (DijkstraLedgerEvent era) x -> DijkstraLedgerEvent era
forall x.
DijkstraLedgerEvent era -> Rep (DijkstraLedgerEvent era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraLedgerEvent era) x -> DijkstraLedgerEvent era
forall era x.
DijkstraLedgerEvent era -> Rep (DijkstraLedgerEvent era) x
$cfrom :: forall era x.
DijkstraLedgerEvent era -> Rep (DijkstraLedgerEvent era) x
from :: forall x.
DijkstraLedgerEvent era -> Rep (DijkstraLedgerEvent era) x
$cto :: forall era x.
Rep (DijkstraLedgerEvent era) x -> DijkstraLedgerEvent era
to :: forall x.
Rep (DijkstraLedgerEvent era) x -> DijkstraLedgerEvent era
Generic)

deriving instance
  ( Eq (Event (EraRule "ENTITIES" era))
  , Eq (Event (EraRule "UTXOW" era))
  , Eq (Event (EraRule "GOV" era))
  , Eq (Event (EraRule "SUBLEDGERS" era))
  ) =>
  Eq (DijkstraLedgerEvent era)

instance
  ( NFData (Event (EraRule "ENTITIES" era))
  , NFData (Event (EraRule "UTXOW" era))
  , NFData (Event (EraRule "GOV" era))
  , NFData (Event (EraRule "SUBLEDGERS" era))
  ) =>
  NFData (DijkstraLedgerEvent era)

instance
  ( AlonzoEraTx era
  , ConwayEraTxBody era
  , ConwayEraGov era
  , DijkstraEraTxBody era
  , DijkstraEraUTxO era
  , GovState era ~ ConwayGovState era
  , Embed (EraRule "UTXOW" era) (LEDGER era)
  , Embed (EraRule "GOV" era) (LEDGER era)
  , Embed (EraRule "ENTITIES" era) (LEDGER era)
  , Embed (EraRule "SUBLEDGERS" era) (LEDGER era)
  , State (EraRule "UTXOW" era) ~ UTxOState era
  , State (EraRule "ENTITIES" era) ~ CertState era
  , State (EraRule "GOV" era) ~ Proposals era
  , Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era
  , Environment (EraRule "ENTITIES" era) ~ EntitiesEnv era
  , Environment (EraRule "GOV" era) ~ Conway.GovEnv era
  , Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era
  , Signal (EraRule "ENTITIES" era) ~ Seq (TxCert era)
  , Signal (EraRule "GOV" era) ~ Conway.GovSignal era
  , Signal (EraRule "SUBLEDGERS" era) ~ [StAnnTx SubTx era]
  , ConwayEraCertState era
  , EraRule "LEDGER" era ~ LEDGER era
  , InjectRuleFailure "LEDGER" Shelley.ShelleyLedgerPredFailure era
  , InjectRuleFailure "LEDGER" Conway.ConwayLedgerPredFailure era
  , InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era
  , EraRule "SUBLEDGERS" era ~ SUBLEDGERS era
  ) =>
  STS (LEDGER era)
  where
  type State (LEDGER era) = LedgerState era
  type Signal (LEDGER era) = StAnnTx TopTx era
  type Environment (LEDGER era) = Shelley.LedgerEnv era
  type BaseM (LEDGER era) = ShelleyBase
  type PredicateFailure (LEDGER era) = DijkstraLedgerPredFailure era
  type Event (LEDGER era) = DijkstraLedgerEvent era

  initialRules :: [InitialRule (LEDGER era)]
initialRules = []
  transitionRules :: [TransitionRule (LEDGER era)]
transitionRules = [TransitionRule (LEDGER era)
forall era.
(AlonzoEraTx era, ConwayEraGov era, DijkstraEraTxBody era,
 DijkstraEraUTxO era, GovState era ~ ConwayGovState era,
 Embed (EraRule "UTXOW" era) (LEDGER era),
 Embed (EraRule "GOV" era) (LEDGER era),
 Embed (EraRule "ENTITIES" era) (LEDGER era),
 Embed (EraRule "SUBLEDGERS" era) (LEDGER era),
 State (EraRule "UTXOW" era) ~ UTxOState era,
 State (EraRule "ENTITIES" era) ~ CertState era,
 State (EraRule "GOV" era) ~ Proposals era,
 Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era,
 Environment (EraRule "GOV" era) ~ GovEnv era,
 Environment (EraRule "ENTITIES" era) ~ EntitiesEnv era,
 Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era,
 Signal (EraRule "ENTITIES" era) ~ Seq (TxCert era),
 Signal (EraRule "GOV" era) ~ GovSignal era, STS (LEDGER era),
 EraRule "LEDGER" era ~ LEDGER era,
 EraRule "SUBLEDGERS" era ~ SUBLEDGERS era,
 InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era,
 InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era) =>
TransitionRule (LEDGER era)
dijkstraLedgerTransition]

  renderAssertionViolation :: AssertionViolation (LEDGER era) -> String
renderAssertionViolation = AssertionViolation (LEDGER era) -> String
forall era t.
(EraTx era, EraGov era, EraCertState era,
 Environment t ~ LedgerEnv era, Signal t ~ StAnnTx TopTx era,
 State t ~ LedgerState era) =>
AssertionViolation t -> String
Shelley.renderDepositEqualsObligationViolation

  assertions :: [Assertion (LEDGER era)]
assertions = forall era (rule :: * -> *).
(EraGov era, EraCertState era,
 State (rule era) ~ LedgerState era) =>
[Assertion (rule era)]
Shelley.shelleyLedgerAssertions @era @LEDGER

validateAllRefScriptSize ::
  ( EraTx era
  , DijkstraEraTxBody era
  ) =>
  PParams era ->
  UTxO era ->
  Tx TopTx era ->
  Test (DijkstraLedgerPredFailure era)
validateAllRefScriptSize :: forall era.
(EraTx era, DijkstraEraTxBody era) =>
PParams era
-> UTxO era -> Tx TopTx era -> Test (DijkstraLedgerPredFailure era)
validateAllRefScriptSize PParams era
pp UTxO era
utxo Tx TopTx era
tx =
  let totalRefScriptSize :: Int
totalRefScriptSize = UTxO era -> Tx TopTx era -> Int
forall era.
(EraTx era, DijkstraEraTxBody era) =>
UTxO era -> Tx TopTx era -> Int
batchNonDistinctRefScriptsSize UTxO era
utxo Tx TopTx era
tx
      maxRefScriptSizePerTx :: Int
maxRefScriptSizePerTx = forall a b. (Integral a, Num b) => a -> b
fromIntegral @Word32 @Int (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$ PParams era
pp PParams era -> Getting Word32 (PParams era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. Getting Word32 (PParams era) Word32
forall era.
ConwayEraPParams era =>
SimpleGetter (PParams era) Word32
SimpleGetter (PParams era) Word32
ppMaxRefScriptSizePerTxG
   in Bool
-> DijkstraLedgerPredFailure era
-> Validation (NonEmpty (DijkstraLedgerPredFailure era)) ()
forall e. Bool -> e -> Validation (NonEmpty e) ()
failureUnless (Int
totalRefScriptSize Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
maxRefScriptSizePerTx) (DijkstraLedgerPredFailure era
 -> Validation (NonEmpty (DijkstraLedgerPredFailure era)) ())
-> DijkstraLedgerPredFailure era
-> Validation (NonEmpty (DijkstraLedgerPredFailure era)) ()
forall a b. (a -> b) -> a -> b
$
        Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
DijkstraTxRefScriptsSizeTooBig
          Mismatch
            { mismatchSupplied :: Int
mismatchSupplied = Int
totalRefScriptSize
            , mismatchExpected :: Int
mismatchExpected = Int
maxRefScriptSizePerTx
            }

dijkstraLedgerTransition ::
  forall era.
  ( AlonzoEraTx era
  , ConwayEraGov era
  , DijkstraEraTxBody era
  , DijkstraEraUTxO era
  , GovState era ~ ConwayGovState era
  , Embed (EraRule "UTXOW" era) (LEDGER era)
  , Embed (EraRule "GOV" era) (LEDGER era)
  , Embed (EraRule "ENTITIES" era) (LEDGER era)
  , Embed (EraRule "SUBLEDGERS" era) (LEDGER era)
  , State (EraRule "UTXOW" era) ~ UTxOState era
  , State (EraRule "ENTITIES" era) ~ CertState era
  , State (EraRule "GOV" era) ~ Proposals era
  , Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era
  , Environment (EraRule "GOV" era) ~ Conway.GovEnv era
  , Environment (EraRule "ENTITIES" era) ~ EntitiesEnv era
  , Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era
  , Signal (EraRule "ENTITIES" era) ~ Seq (TxCert era)
  , Signal (EraRule "GOV" era) ~ Conway.GovSignal era
  , STS (LEDGER era)
  , EraRule "LEDGER" era ~ LEDGER era
  , EraRule "SUBLEDGERS" era ~ SUBLEDGERS era
  , InjectRuleFailure "LEDGER" Conway.ConwayLedgerPredFailure era
  , InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era
  ) =>
  TransitionRule (LEDGER era)
dijkstraLedgerTransition :: forall era.
(AlonzoEraTx era, ConwayEraGov era, DijkstraEraTxBody era,
 DijkstraEraUTxO era, GovState era ~ ConwayGovState era,
 Embed (EraRule "UTXOW" era) (LEDGER era),
 Embed (EraRule "GOV" era) (LEDGER era),
 Embed (EraRule "ENTITIES" era) (LEDGER era),
 Embed (EraRule "SUBLEDGERS" era) (LEDGER era),
 State (EraRule "UTXOW" era) ~ UTxOState era,
 State (EraRule "ENTITIES" era) ~ CertState era,
 State (EraRule "GOV" era) ~ Proposals era,
 Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era,
 Environment (EraRule "GOV" era) ~ GovEnv era,
 Environment (EraRule "ENTITIES" era) ~ EntitiesEnv era,
 Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era,
 Signal (EraRule "ENTITIES" era) ~ Seq (TxCert era),
 Signal (EraRule "GOV" era) ~ GovSignal era, STS (LEDGER era),
 EraRule "LEDGER" era ~ LEDGER era,
 EraRule "SUBLEDGERS" era ~ SUBLEDGERS era,
 InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era,
 InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era) =>
TransitionRule (LEDGER era)
dijkstraLedgerTransition = do
  TRC (Shelley.LedgerEnv slot mbCurEpochNo txIx pp chainAccountState, ledgerState, stAnnTx) <-
    Rule
  (LEDGER era) 'Transition (RuleContext 'Transition (LEDGER era))
F (Clause (LEDGER era) 'Transition) (TRC (LEDGER era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  let tx = StAnnTx TopTx era
Signal (LEDGER era)
stAnnTx StAnnTx TopTx era
-> Getting (Tx TopTx era) (StAnnTx TopTx era) (Tx TopTx era)
-> Tx TopTx era
forall s a. s -> Getting a s a -> a
^. Getting (Tx TopTx era) (StAnnTx TopTx era) (Tx TopTx era)
forall era (l :: TxLevel).
EraTx era =>
SimpleGetter (StAnnTx l era) (Tx l era)
forall (l :: TxLevel). SimpleGetter (StAnnTx l era) (Tx l era)
txStAnnTxG

  -- Capture the original UTxO before any subtransaction processing.
  -- This is passed through the environment to UTXOW
  -- and SUBLEDGERS, and used for all witness/validation lookups.
  let originalUtxo = UTxOState era -> UTxO era
forall era. UTxOState era -> UTxO era
utxosUtxo (State (LEDGER era)
LedgerState era
ledgerState LedgerState era
-> Getting (UTxOState era) (LedgerState era) (UTxOState era)
-> UTxOState era
forall s a. s -> Getting a s a -> a
^. Getting (UTxOState era) (LedgerState era) (UTxOState era)
forall era (f :: * -> *).
Functor f =>
(UTxOState era -> f (UTxOState era))
-> LedgerState era -> f (LedgerState era)
lsUTxOStateL)
      subStAnnTxs = StAnnTx TopTx era -> [StAnnTx SubTx era]
forall era.
DijkstraEraUTxO era =>
StAnnTx TopTx era -> [StAnnTx SubTx era]
subTransactionsStAnnTx StAnnTx TopTx era
Signal (LEDGER era)
stAnnTx

  -- Process all subtransactions first
  LedgerState utxoStateAfterSubLedgers certStateAfterSubLedgers <-
    trans @(EraRule "SUBLEDGERS" era) $
      TRC
        ( SubLedgerEnv
            slot
            mbCurEpochNo
            txIx
            pp
            chainAccountState
            originalUtxo
            (tx ^. isValidTxL)
        , ledgerState
        , subStAnnTxs
        )

  curEpochNo <- maybe (liftSTS $ epochFromSlot slot) pure mbCurEpochNo

  (utxoStateBeforeUtxow, certStateFinal) <-
    if tx ^. isValidTxL == IsValid True
      then do
        let txBody = Tx TopTx era
tx Tx TopTx era
-> Getting (TxBody TopTx era) (Tx TopTx era) (TxBody TopTx era)
-> TxBody TopTx era
forall s a. s -> Getting a s a -> a
^. Getting (TxBody TopTx era) (Tx TopTx era) (TxBody TopTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL
        runTest $ Conway.validateTreasuryValue txBody (chainAccountState ^. casTreasuryL)
        runTest $ validateAllRefScriptSize pp originalUtxo tx

        let govState = UTxOState era
utxoStateAfterSubLedgers UTxOState era
-> Getting
     (ConwayGovState era) (UTxOState era) (ConwayGovState era)
-> ConwayGovState era
forall s a. s -> Getting a s a -> a
^. (GovState era -> Const (ConwayGovState era) (GovState era))
-> UTxOState era -> Const (ConwayGovState era) (UTxOState era)
Getting (ConwayGovState era) (UTxOState era) (ConwayGovState era)
forall era (f :: * -> *).
Functor f =>
(GovState era -> f (GovState era))
-> UTxOState era -> f (UTxOState era)
utxosGovStateL
            committee = ConwayGovState era
govState ConwayGovState era
-> Getting
     (StrictMaybe (Committee era))
     (ConwayGovState era)
     (StrictMaybe (Committee era))
-> StrictMaybe (Committee era)
forall s a. s -> Getting a s a -> a
^. (StrictMaybe (Committee era)
 -> Const
      (StrictMaybe (Committee era)) (StrictMaybe (Committee era)))
-> GovState era
-> Const (StrictMaybe (Committee era)) (GovState era)
Getting
  (StrictMaybe (Committee era))
  (ConwayGovState era)
  (StrictMaybe (Committee era))
forall era.
ConwayEraGov era =>
Lens' (GovState era) (StrictMaybe (Committee era))
Lens' (GovState era) (StrictMaybe (Committee era))
committeeGovStateL
            proposals = ConwayGovState era
govState ConwayGovState era
-> Getting (Proposals era) (ConwayGovState era) (Proposals era)
-> Proposals era
forall s a. s -> Getting a s a -> a
^. (Proposals era -> Const (Proposals era) (Proposals era))
-> GovState era -> Const (Proposals era) (GovState era)
Getting (Proposals era) (ConwayGovState era) (Proposals era)
forall era.
ConwayEraGov era =>
Lens' (GovState era) (Proposals era)
Lens' (GovState era) (Proposals era)
proposalsGovStateL
            committeeProposals = (forall (f1 :: * -> *) (f2 :: * -> *).
 Functor f2 =>
 (f1 (GovPurposeId 'CommitteePurpose)
  -> f2 (f1 (GovPurposeId 'CommitteePurpose)))
 -> GovRelation f1 -> f2 (GovRelation f1))
-> Proposals era
-> Map (GovPurposeId 'CommitteePurpose) (GovActionState era)
forall (p :: GovActionPurpose) era.
ToGovActionPurpose p =>
(forall (f1 :: * -> *) (f2 :: * -> *).
 Functor f2 =>
 (f1 (GovPurposeId p) -> f2 (f1 (GovPurposeId p)))
 -> GovRelation f1 -> f2 (GovRelation f1))
-> Proposals era -> Map (GovPurposeId p) (GovActionState era)
proposalsWithPurpose (f1 (GovPurposeId 'CommitteePurpose)
 -> f2 (f1 (GovPurposeId 'CommitteePurpose)))
-> GovRelation f1 -> f2 (GovRelation f1)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId 'CommitteePurpose)
 -> f2 (f1 (GovPurposeId 'CommitteePurpose)))
-> GovRelation f1 -> f2 (GovRelation f1)
grCommitteeL Proposals era
proposals

        certStateAfterENTITIES <-
          trans @(EraRule "ENTITIES" era) $
            TRC
              ( EntitiesEnv
                  (stAnnTx ^. plutusLegacyModeStAnnTxG)
                  (Conway.CertsEnv tx pp curEpochNo committee committeeProposals)
              , certStateAfterSubLedgers
              , StrictSeq.fromStrict $ txBody ^. certsTxBodyL
              )

        let govSignal =
              Conway.GovSignal
                { gsVotingProcedures :: VotingProcedures era
Conway.gsVotingProcedures = TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (VotingProcedures era) (TxBody TopTx era) (VotingProcedures era)
-> VotingProcedures era
forall s a. s -> Getting a s a -> a
^. Getting
  (VotingProcedures era) (TxBody TopTx era) (VotingProcedures era)
forall era (l :: TxLevel).
ConwayEraTxBody era =>
Lens' (TxBody l era) (VotingProcedures era)
forall (l :: TxLevel). Lens' (TxBody l era) (VotingProcedures era)
votingProceduresTxBodyL
                , gsProposalProcedures :: OSet (ProposalProcedure era)
Conway.gsProposalProcedures = TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (OSet (ProposalProcedure era))
     (TxBody TopTx era)
     (OSet (ProposalProcedure era))
-> OSet (ProposalProcedure era)
forall s a. s -> Getting a s a -> a
^. Getting
  (OSet (ProposalProcedure era))
  (TxBody TopTx era)
  (OSet (ProposalProcedure era))
forall era (l :: TxLevel).
ConwayEraTxBody era =>
Lens' (TxBody l era) (OSet (ProposalProcedure era))
forall (l :: TxLevel).
Lens' (TxBody l era) (OSet (ProposalProcedure era))
proposalProceduresTxBodyL
                , gsCertificates :: StrictSeq (TxCert era)
Conway.gsCertificates = TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (StrictSeq (TxCert era))
     (TxBody TopTx era)
     (StrictSeq (TxCert era))
-> StrictSeq (TxCert era)
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictSeq (TxCert era))
  (TxBody TopTx era)
  (StrictSeq (TxCert era))
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (StrictSeq (TxCert era))
forall (l :: TxLevel).
Lens' (TxBody l era) (StrictSeq (TxCert era))
certsTxBodyL
                }
        proposalsState <-
          trans @(EraRule "GOV" era) $
            TRC
              ( Conway.GovEnv
                  (txIdTxBody txBody)
                  curEpochNo
                  pp
                  (govState ^. constitutionGovStateL . constitutionGuardrailsScriptHashL)
                  certStateAfterENTITIES
                  (govState ^. committeeGovStateL)
              , proposals
              , govSignal
              )
        pure
          ( utxoStateAfterSubLedgers
              & utxosGovStateL . proposalsGovStateL .~ proposalsState
          , certStateAfterENTITIES
          )
      else pure (utxoStateAfterSubLedgers, certStateAfterSubLedgers)

  -- Call UTXOW with DijkstraUtxoEnv, passing the original UTxO and original certState
  utxoStateFinal <-
    trans @(EraRule "UTXOW" era) $
      TRC
        ( DijkstraUtxoEnv slot pp (lsCertState ledgerState) originalUtxo
        , utxoStateBeforeUtxow
        , stAnnTx
        )
  pure $ LedgerState utxoStateFinal certStateFinal

instance
  ( AlonzoEraTx era
  , EraUTxO era
  , BabbageEraTxBody era
  , Embed (EraRule "UTXO" era) (UTXOW era)
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era
  , Script era ~ AlonzoScript era
  , TxOut era ~ BabbageTxOut era
  , ScriptsNeeded era ~ AlonzoScriptsNeeded era
  , Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era
  , PredicateFailure (EraRule "UTXOW" era) ~ DijkstraUtxowPredFailure era
  , Event (EraRule "UTXOW" era) ~ Alonzo.AlonzoUtxowEvent era
  , STS (UTXOW era)
  , Event (UTXOW era) ~ Alonzo.AlonzoUtxowEvent era
  ) =>
  Embed (UTXOW era) (LEDGER era)
  where
  wrapFailed :: PredicateFailure (UTXOW era) -> PredicateFailure (LEDGER era)
wrapFailed = PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
PredicateFailure (UTXOW era) -> PredicateFailure (LEDGER era)
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure
  wrapEvent :: Event (UTXOW era) -> Event (LEDGER era)
wrapEvent = Event (EraRule "UTXOW" era) -> DijkstraLedgerEvent era
Event (UTXOW era) -> Event (LEDGER era)
forall era. Event (EraRule "UTXOW" era) -> DijkstraLedgerEvent era
UtxowEvent

instance
  ( STS (LEDGER era)
  , PredicateFailure (EraRule "LEDGER" era) ~ DijkstraLedgerPredFailure era
  , Event (EraRule "LEDGER" era) ~ DijkstraLedgerEvent era
  ) =>
  Embed (LEDGER era) (Shelley.LEDGERS era)
  where
  wrapFailed :: PredicateFailure (LEDGER era) -> PredicateFailure (LEDGERS era)
wrapFailed = PredicateFailure (EraRule "LEDGER" era)
-> ShelleyLedgersPredFailure era
PredicateFailure (LEDGER era) -> PredicateFailure (LEDGERS era)
forall era.
PredicateFailure (EraRule "LEDGER" era)
-> ShelleyLedgersPredFailure era
Shelley.LedgerFailure
  wrapEvent :: Event (LEDGER era) -> Event (LEDGERS era)
wrapEvent = Event (EraRule "LEDGER" era) -> ShelleyLedgersEvent era
Event (LEDGER era) -> Event (LEDGERS era)
forall era. Event (EraRule "LEDGER" era) -> ShelleyLedgersEvent era
Shelley.LedgerEvent

instance
  ( STS (GOV era)
  , PredicateFailure (EraRule "GOV" era) ~ DijkstraGovPredFailure era
  , Event (EraRule "GOV" era) ~ Conway.ConwayGovEvent era
  ) =>
  Embed (GOV era) (LEDGER era)
  where
  wrapFailed :: PredicateFailure (GOV era) -> PredicateFailure (LEDGER era)
wrapFailed = PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
PredicateFailure (GOV era) -> PredicateFailure (LEDGER era)
forall era.
PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
DijkstraGovFailure
  wrapEvent :: Event (GOV era) -> Event (LEDGER era)
wrapEvent = Event (EraRule "GOV" era) -> DijkstraLedgerEvent era
Event (GOV era) -> Event (LEDGER era)
forall era. Event (EraRule "GOV" era) -> DijkstraLedgerEvent era
GovEvent

conwayToDijkstraLedgerPredFailure ::
  forall era.
  PredicateFailure (EraRule "ENTITIES" era) ~ EntitiesPredFailure era =>
  Conway.ConwayLedgerPredFailure era -> DijkstraLedgerPredFailure era
conwayToDijkstraLedgerPredFailure :: forall era.
(PredicateFailure (EraRule "ENTITIES" era)
 ~ EntitiesPredFailure era) =>
ConwayLedgerPredFailure era -> DijkstraLedgerPredFailure era
conwayToDijkstraLedgerPredFailure = \case
  Conway.ConwayUtxowFailure PredicateFailure (EraRule "UTXOW" era)
f -> PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure PredicateFailure (EraRule "UTXOW" era)
f
  Conway.ConwayCertsFailure PredicateFailure (EraRule "CERTS" era)
f -> PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (PredicateFailure (EraRule "CERTS" era) -> EntitiesPredFailure era
forall era.
PredicateFailure (EraRule "CERTS" era) -> EntitiesPredFailure era
CertsFailure PredicateFailure (EraRule "CERTS" era)
f)
  Conway.ConwayGovFailure PredicateFailure (EraRule "GOV" era)
f -> PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "GOV" era)
-> DijkstraLedgerPredFailure era
DijkstraGovFailure PredicateFailure (EraRule "GOV" era)
f
  Conway.ConwayWdrlNotDelegatedToDRep NonEmpty (KeyHash Staking)
kh -> PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (NonEmpty (KeyHash Staking) -> EntitiesPredFailure era
forall era. NonEmpty (KeyHash Staking) -> EntitiesPredFailure era
WdrlNotDelegatedToDRep NonEmpty (KeyHash Staking)
kh)
  Conway.ConwayTreasuryValueMismatch Mismatch RelEQ Coin
mm -> Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era
forall era. Mismatch RelEQ Coin -> DijkstraLedgerPredFailure era
DijkstraTreasuryValueMismatch Mismatch RelEQ Coin
mm
  Conway.ConwayTxRefScriptsSizeTooBig Mismatch RelLTEQ Int
mm -> Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
forall era. Mismatch RelLTEQ Int -> DijkstraLedgerPredFailure era
DijkstraTxRefScriptsSizeTooBig Mismatch RelLTEQ Int
mm
  Conway.ConwayMempoolFailure Text
_ -> String -> DijkstraLedgerPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: MempoolFailure has been moved to MEMPOOL rule in Dijkstra"
  Conway.ConwayWithdrawalsMissingAccounts Withdrawals
ws -> PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (Withdrawals -> EntitiesPredFailure era
forall era. Withdrawals -> EntitiesPredFailure era
WithdrawalsMissingAccounts Withdrawals
ws)
  Conway.ConwayIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
ws -> PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> EntitiesPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> EntitiesPredFailure era
IncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
ws)

shelleyToDijkstraLedgerPredFailure ::
  forall era.
  PredicateFailure (EraRule "ENTITIES" era) ~ EntitiesPredFailure era =>
  Shelley.ShelleyLedgerPredFailure era -> DijkstraLedgerPredFailure era
shelleyToDijkstraLedgerPredFailure :: forall era.
(PredicateFailure (EraRule "ENTITIES" era)
 ~ EntitiesPredFailure era) =>
ShelleyLedgerPredFailure era -> DijkstraLedgerPredFailure era
shelleyToDijkstraLedgerPredFailure = \case
  Shelley.UtxowFailure PredicateFailure (EraRule "UTXOW" era)
x -> PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure PredicateFailure (EraRule "UTXOW" era)
x
  Shelley.DelegsFailure PredicateFailure (EraRule "DELEGS" era)
_ -> String -> DijkstraLedgerPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: DELEGS has been removed in Dijkstra"
  Shelley.ShelleyWithdrawalsMissingAccounts Withdrawals
x -> PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (Withdrawals -> EntitiesPredFailure era
forall era. Withdrawals -> EntitiesPredFailure era
WithdrawalsMissingAccounts Withdrawals
x)
  Shelley.ShelleyIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
x -> PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> EntitiesPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> EntitiesPredFailure era
IncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
x)

instance
  ( STS (ENTITIES era)
  , PredicateFailure (EraRule "ENTITIES" era) ~ EntitiesPredFailure era
  , Event (EraRule "ENTITIES" era) ~ EntitiesEvent era
  ) =>
  Embed (ENTITIES era) (LEDGER era)
  where
  wrapFailed :: PredicateFailure (ENTITIES era) -> PredicateFailure (LEDGER era)
wrapFailed = PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
PredicateFailure (ENTITIES era) -> PredicateFailure (LEDGER era)
forall era.
PredicateFailure (EraRule "ENTITIES" era)
-> DijkstraLedgerPredFailure era
DijkstraEntitiesFailure
  wrapEvent :: Event (ENTITIES era) -> Event (LEDGER era)
wrapEvent = Event (EraRule "ENTITIES" era) -> DijkstraLedgerEvent era
Event (ENTITIES era) -> Event (LEDGER era)
forall era.
Event (EraRule "ENTITIES" era) -> DijkstraLedgerEvent era
EntitiesEvent

instance
  ( STS (SUBLEDGERS era)
  , PredicateFailure (EraRule "SUBLEDGERS" era) ~ DijkstraSubLedgersPredFailure era
  , Event (EraRule "SUBLEDGERS" era) ~ DijkstraSubLedgersEvent era
  ) =>
  Embed (SUBLEDGERS era) (LEDGER era)
  where
  wrapFailed :: PredicateFailure (SUBLEDGERS era) -> PredicateFailure (LEDGER era)
wrapFailed = PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
PredicateFailure (SUBLEDGERS era) -> PredicateFailure (LEDGER era)
forall era.
PredicateFailure (EraRule "SUBLEDGERS" era)
-> DijkstraLedgerPredFailure era
DijkstraSubLedgersFailure
  wrapEvent :: Event (SUBLEDGERS era) -> Event (LEDGER era)
wrapEvent = Event (EraRule "SUBLEDGERS" era) -> DijkstraLedgerEvent era
Event (SUBLEDGERS era) -> Event (LEDGER era)
forall era.
Event (EraRule "SUBLEDGERS" era) -> DijkstraLedgerEvent era
SubLedgersEvent