{-# 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 (
  DijkstraLEDGER,
  DijkstraLedgerPredFailure (..),
  DijkstraLedgerEvent (..),
  shelleyToDijkstraLedgerPredFailure,
  conwayToDijkstraLedgerPredFailure,
) where

import Cardano.Ledger.Allegra.Rules (AllegraUtxoPredFailure)
import Cardano.Ledger.Alonzo (AlonzoScript)
import Cardano.Ledger.Alonzo.Rules (
  AlonzoUtxoPredFailure,
  AlonzoUtxosPredFailure,
  AlonzoUtxowEvent,
  AlonzoUtxowPredFailure,
 )
import Cardano.Ledger.Alonzo.UTxO (AlonzoScriptsNeeded)
import Cardano.Ledger.Babbage (BabbageTxOut)
import Cardano.Ledger.Babbage.Rules (
  BabbageUtxoPredFailure,
  BabbageUtxowPredFailure,
 )
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 Cardano.Ledger.Conway.Rules (
  CertsEnv (..),
  ConwayCERTS,
  ConwayCertPredFailure (..),
  ConwayCertsPredFailure (..),
  ConwayDelegPredFailure,
  ConwayGovCertPredFailure,
  ConwayGovPredFailure,
  ConwayLedgerPredFailure,
  ConwayUtxoPredFailure,
  ConwayUtxosPredFailure,
  ConwayUtxowPredFailure,
  GovEnv (..),
  GovSignal (..),
  updateDormantDRepExpiries,
  updateVotingDRepExpiries,
  validateTreasuryValue,
  validateWithdrawalsDelegated,
 )
import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Conway.State
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraGOV,
  DijkstraLEDGER,
  DijkstraUTXOW,
 )
import Cardano.Ledger.Dijkstra.Rules.Certs ()
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.Tx (DijkstraStAnnTx (..))
import Cardano.Ledger.Dijkstra.TxBody
import Cardano.Ledger.Dijkstra.UTxO (batchNonDistinctRefScriptsSize)
import Cardano.Ledger.Rules.ValidationMode (Test, runTest)
import Cardano.Ledger.Shelley.LedgerState (
  LedgerState (..),
  UTxOState (..),
  lsUTxOStateL,
  utxosGovStateL,
  utxosUtxo,
 )
import Cardano.Ledger.Shelley.Rules (
  LedgerEnv (..),
  ShelleyLEDGERS,
  ShelleyLedgerPredFailure (..),
  ShelleyLedgersEvent (LedgerEvent),
  ShelleyLedgersPredFailure (LedgerFailure),
  ShelleyPoolPredFailure,
  ShelleyUtxoPredFailure,
  ShelleyUtxowPredFailure,
  renderDepositEqualsObligationViolation,
  shelleyLedgerAssertions,
  testIncompleteAndMissingWithdrawals,
 )
import Cardano.Ledger.Slot (epochFromSlot)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended
import Data.List.NonEmpty (NonEmpty)
import Data.Map.NonEmpty (NonEmptyMap)
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))
  | DijkstraCertsFailure (PredicateFailure (EraRule "CERTS" era))
  | DijkstraGovFailure (PredicateFailure (EraRule "GOV" era))
  | DijkstraWdrlNotDelegatedToDRep (NonEmpty (KeyHash Staking))
  | DijkstraTreasuryValueMismatch (Mismatch RelEQ Coin)
  | DijkstraTxRefScriptsSizeTooBig (Mismatch RelLTEQ Int)
  | DijkstraWithdrawalsMissingAccounts Withdrawals
  | DijkstraIncompleteWithdrawals (NonEmptyMap AccountAddress (Mismatch RelEQ Coin))
  | 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" ConwayLedgerPredFailure DijkstraEra where
  injectFailure :: ConwayLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = ConwayLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
ConwayLedgerPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
ConwayLedgerPredFailure era -> DijkstraLedgerPredFailure era
conwayToDijkstraLedgerPredFailure

instance InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure DijkstraEra where
  injectFailure :: ShelleyLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = ShelleyLedgerPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
ShelleyLedgerPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" ConwayCertsPredFailure DijkstraEra where
  injectFailure :: ConwayCertsPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERTS" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
ConwayCertsPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure

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

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

instance InjectRuleFailure "LEDGER" ShelleyPoolPredFailure DijkstraEra where
  injectFailure :: ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERTS" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
ConwayCertsPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure (ConwayCertsPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ShelleyPoolPredFailure DijkstraEra
    -> ConwayCertsPredFailure DijkstraEra)
-> ShelleyPoolPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
ShelleyPoolPredFailure DijkstraEra
-> ConwayCertsPredFailure 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 "CERTS" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
ConwayCertsPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure (ConwayCertsPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (DijkstraGovCertPredFailure DijkstraEra
    -> ConwayCertsPredFailure DijkstraEra)
-> DijkstraGovCertPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
DijkstraGovCertPredFailure DijkstraEra
-> ConwayCertsPredFailure 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" ConwayGovCertPredFailure DijkstraEra where
  injectFailure :: ConwayGovCertPredFailure DijkstraEra
-> EraRuleFailure "LEDGER" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERTS" DijkstraEra)
-> DijkstraLedgerPredFailure DijkstraEra
ConwayCertsPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure (ConwayCertsPredFailure DijkstraEra
 -> DijkstraLedgerPredFailure DijkstraEra)
-> (ConwayGovCertPredFailure DijkstraEra
    -> ConwayCertsPredFailure DijkstraEra)
-> ConwayGovCertPredFailure DijkstraEra
-> DijkstraLedgerPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayGovCertPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
ConwayGovCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" 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 "CERTS" 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 "CERTS" 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 "CERTS" 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 "CERTS" 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
      DijkstraCertsFailure PredicateFailure (EraRule "CERTS" era)
x -> (PredicateFailure (EraRule "CERTS" era)
 -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "CERTS" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure @era) Word
2 Encode
  Open
  (PredicateFailure (EraRule "CERTS" era)
   -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "CERTS" 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 "CERTS" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "CERTS" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "CERTS" 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
      DijkstraWdrlNotDelegatedToDRep NonEmpty (KeyHash Staking)
x -> (NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era
DijkstraWdrlNotDelegatedToDRep @era) Word
4 Encode
  Open (NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) (NonEmpty (KeyHash Staking))
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (KeyHash Staking)
-> Encode (Closed Dense) (NonEmpty (KeyHash Staking))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (KeyHash Staking)
x
      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
      DijkstraWithdrawalsMissingAccounts Withdrawals
w -> (Withdrawals -> DijkstraLedgerPredFailure era)
-> Word
-> Encode Open (Withdrawals -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Withdrawals -> DijkstraLedgerPredFailure era
forall era. Withdrawals -> DijkstraLedgerPredFailure era
DijkstraWithdrawalsMissingAccounts Word
7 Encode Open (Withdrawals -> DijkstraLedgerPredFailure era)
-> Encode (Closed Dense) Withdrawals
-> Encode Open (DijkstraLedgerPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Withdrawals -> Encode (Closed Dense) Withdrawals
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Withdrawals
w
      DijkstraIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
w -> (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
 -> DijkstraLedgerPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
DijkstraIncompleteWithdrawals Word
8 Encode
  Open
  (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
   -> DijkstraLedgerPredFailure era)
-> Encode
     (Closed Dense) (NonEmptyMap AccountAddress (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
!> NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> Encode
     (Closed Dense) (NonEmptyMap AccountAddress (Mismatch RelEQ Coin))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
w
      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 "CERTS" 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 "CERTS" era)
 -> DijkstraLedgerPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "CERTS" era)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure Decode
  Open
  (PredicateFailure (EraRule "CERTS" era)
   -> DijkstraLedgerPredFailure era)
-> Decode
     (Closed (ZonkAny 1)) (PredicateFailure (EraRule "CERTS" 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 "CERTS" 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
4 -> (NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era)
-> Decode
     Open (NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era
forall era.
NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era
DijkstraWdrlNotDelegatedToDRep Decode
  Open (NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era)
-> Decode (Closed (ZonkAny 3)) (NonEmpty (KeyHash Staking))
-> 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)) (NonEmpty (KeyHash Staking))
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 4)) (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 4)) (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 5)) (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 5)) (Mismatch RelLTEQ Int)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
7 -> (Withdrawals -> DijkstraLedgerPredFailure era)
-> Decode Open (Withdrawals -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD Withdrawals -> DijkstraLedgerPredFailure era
forall era. Withdrawals -> DijkstraLedgerPredFailure era
DijkstraWithdrawalsMissingAccounts Decode Open (Withdrawals -> DijkstraLedgerPredFailure era)
-> Decode (Closed (ZonkAny 6)) Withdrawals
-> 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 6)) Withdrawals
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
8 -> (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
 -> DijkstraLedgerPredFailure era)
-> Decode
     Open
     (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
      -> DijkstraLedgerPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
DijkstraIncompleteWithdrawals Decode
  Open
  (NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
   -> DijkstraLedgerPredFailure era)
-> Decode
     (Closed (ZonkAny 7))
     (NonEmptyMap AccountAddress (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 7))
  (NonEmptyMap AccountAddress (Mismatch RelEQ Coin))
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 8)) (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 8)) (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))
  | CertsEvent (Event (EraRule "CERTS" 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 "CERTS" era))
  , Eq (Event (EraRule "UTXOW" era))
  , Eq (Event (EraRule "GOV" era))
  , Eq (Event (EraRule "SUBLEDGERS" era))
  ) =>
  Eq (DijkstraLedgerEvent era)

instance
  ( NFData (Event (EraRule "CERTS" 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
  , EraUTxO era
  , GovState era ~ ConwayGovState era
  , Embed (EraRule "UTXOW" era) (DijkstraLEDGER era)
  , Embed (EraRule "GOV" era) (DijkstraLEDGER era)
  , Embed (EraRule "CERTS" era) (DijkstraLEDGER era)
  , Embed (EraRule "SUBLEDGERS" era) (DijkstraLEDGER era)
  , State (EraRule "UTXOW" era) ~ UTxOState era
  , State (EraRule "CERTS" era) ~ CertState era
  , State (EraRule "GOV" era) ~ Proposals era
  , Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era
  , Environment (EraRule "CERTS" era) ~ CertsEnv era
  , Environment (EraRule "GOV" era) ~ GovEnv era
  , Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era
  , Signal (EraRule "CERTS" era) ~ Seq (TxCert era)
  , Signal (EraRule "GOV" era) ~ GovSignal era
  , Signal (EraRule "SUBLEDGERS" era) ~ [StAnnTx SubTx era]
  , StAnnTx TopTx era ~ DijkstraStAnnTx TopTx era
  , StAnnTx SubTx era ~ DijkstraStAnnTx SubTx era
  , ConwayEraCertState era
  , EraRule "LEDGER" era ~ DijkstraLEDGER era
  , InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure era
  , InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era
  , InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era
  , EraRule "SUBLEDGERS" era ~ DijkstraSUBLEDGERS era
  ) =>
  STS (DijkstraLEDGER era)
  where
  type State (DijkstraLEDGER era) = LedgerState era
  type Signal (DijkstraLEDGER era) = StAnnTx TopTx era
  type Environment (DijkstraLEDGER era) = LedgerEnv era
  type BaseM (DijkstraLEDGER era) = ShelleyBase
  type PredicateFailure (DijkstraLEDGER era) = DijkstraLedgerPredFailure era
  type Event (DijkstraLEDGER era) = DijkstraLedgerEvent era

  initialRules :: [InitialRule (DijkstraLEDGER era)]
initialRules = []
  transitionRules :: [TransitionRule (DijkstraLEDGER era)]
transitionRules = [TransitionRule (DijkstraLEDGER era)
forall era.
(AlonzoEraTx era, ConwayEraCertState era, ConwayEraGov era,
 DijkstraEraTxBody era, EraUTxO era,
 GovState era ~ ConwayGovState era,
 Embed (EraRule "UTXOW" era) (DijkstraLEDGER era),
 Embed (EraRule "GOV" era) (DijkstraLEDGER era),
 Embed (EraRule "CERTS" era) (DijkstraLEDGER era),
 Embed (EraRule "SUBLEDGERS" era) (DijkstraLEDGER era),
 State (EraRule "UTXOW" era) ~ UTxOState era,
 State (EraRule "CERTS" era) ~ CertState era,
 State (EraRule "GOV" era) ~ Proposals era,
 Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era,
 Environment (EraRule "GOV" era) ~ GovEnv era,
 Environment (EraRule "CERTS" era) ~ CertsEnv era,
 Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era,
 Signal (EraRule "CERTS" era) ~ Seq (TxCert era),
 Signal (EraRule "GOV" era) ~ GovSignal era,
 StAnnTx TopTx era ~ DijkstraStAnnTx TopTx era,
 StAnnTx SubTx era ~ DijkstraStAnnTx SubTx era,
 STS (DijkstraLEDGER era),
 EraRule "LEDGER" era ~ DijkstraLEDGER era,
 EraRule "SUBLEDGERS" era ~ DijkstraSUBLEDGERS era,
 InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure era,
 InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era,
 InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era) =>
TransitionRule (DijkstraLEDGER era)
dijkstraLedgerTransition]

  renderAssertionViolation :: AssertionViolation (DijkstraLEDGER era) -> String
renderAssertionViolation = AssertionViolation (DijkstraLEDGER 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
renderDepositEqualsObligationViolation

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

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
  , ConwayEraCertState era
  , ConwayEraGov era
  , DijkstraEraTxBody era
  , EraUTxO era
  , GovState era ~ ConwayGovState era
  , Embed (EraRule "UTXOW" era) (DijkstraLEDGER era)
  , Embed (EraRule "GOV" era) (DijkstraLEDGER era)
  , Embed (EraRule "CERTS" era) (DijkstraLEDGER era)
  , Embed (EraRule "SUBLEDGERS" era) (DijkstraLEDGER era)
  , State (EraRule "UTXOW" era) ~ UTxOState era
  , State (EraRule "CERTS" era) ~ CertState era
  , State (EraRule "GOV" era) ~ Proposals era
  , Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era
  , Environment (EraRule "GOV" era) ~ GovEnv era
  , Environment (EraRule "CERTS" era) ~ CertsEnv era
  , Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era
  , Signal (EraRule "CERTS" era) ~ Seq (TxCert era)
  , Signal (EraRule "GOV" era) ~ GovSignal era
  , StAnnTx TopTx era ~ DijkstraStAnnTx TopTx era
  , StAnnTx SubTx era ~ DijkstraStAnnTx SubTx era
  , STS (DijkstraLEDGER era)
  , EraRule "LEDGER" era ~ DijkstraLEDGER era
  , EraRule "SUBLEDGERS" era ~ DijkstraSUBLEDGERS era
  , InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure era
  , InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era
  , InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era
  ) =>
  TransitionRule (DijkstraLEDGER era)
dijkstraLedgerTransition :: forall era.
(AlonzoEraTx era, ConwayEraCertState era, ConwayEraGov era,
 DijkstraEraTxBody era, EraUTxO era,
 GovState era ~ ConwayGovState era,
 Embed (EraRule "UTXOW" era) (DijkstraLEDGER era),
 Embed (EraRule "GOV" era) (DijkstraLEDGER era),
 Embed (EraRule "CERTS" era) (DijkstraLEDGER era),
 Embed (EraRule "SUBLEDGERS" era) (DijkstraLEDGER era),
 State (EraRule "UTXOW" era) ~ UTxOState era,
 State (EraRule "CERTS" era) ~ CertState era,
 State (EraRule "GOV" era) ~ Proposals era,
 Environment (EraRule "UTXOW" era) ~ DijkstraUtxoEnv era,
 Environment (EraRule "GOV" era) ~ GovEnv era,
 Environment (EraRule "CERTS" era) ~ CertsEnv era,
 Signal (EraRule "UTXOW" era) ~ StAnnTx TopTx era,
 Signal (EraRule "CERTS" era) ~ Seq (TxCert era),
 Signal (EraRule "GOV" era) ~ GovSignal era,
 StAnnTx TopTx era ~ DijkstraStAnnTx TopTx era,
 StAnnTx SubTx era ~ DijkstraStAnnTx SubTx era,
 STS (DijkstraLEDGER era),
 EraRule "LEDGER" era ~ DijkstraLEDGER era,
 EraRule "SUBLEDGERS" era ~ DijkstraSUBLEDGERS era,
 InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure era,
 InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era,
 InjectRuleFailure "LEDGER" DijkstraLedgerPredFailure era) =>
TransitionRule (DijkstraLEDGER era)
dijkstraLedgerTransition = do
  TRC (LedgerEnv slot mbCurEpochNo txIx pp chainAccountState, ledgerState, stAnnTx) <-
    Rule
  (DijkstraLEDGER era)
  'Transition
  (RuleContext 'Transition (DijkstraLEDGER era))
F (Clause (DijkstraLEDGER era) 'Transition)
  (TRC (DijkstraLEDGER era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  let tx = Signal (DijkstraLEDGER era)
DijkstraStAnnTx TopTx era
stAnnTx DijkstraStAnnTx TopTx era
-> Getting
     (Tx TopTx era) (DijkstraStAnnTx 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)
Getting (Tx TopTx era) (DijkstraStAnnTx 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 (DijkstraLEDGER 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 = DijkstraStAnnTx TopTx era -> [DijkstraStAnnTx SubTx era]
forall era.
DijkstraStAnnTx TopTx era -> [DijkstraStAnnTx SubTx era]
dsattStAnnSubTxs Signal (DijkstraLEDGER era)
DijkstraStAnnTx TopTx era
stAnnTx
      -- getScriptsProvided is recursive for Dijkstra
      scriptsProvided = UTxO era -> Tx TopTx era -> ScriptsProvided era
forall era (t :: TxLevel).
EraUTxO era =>
UTxO era -> Tx t era -> ScriptsProvided era
forall (t :: TxLevel). UTxO era -> Tx t era -> ScriptsProvided era
getScriptsProvided UTxO era
originalUtxo Tx TopTx era
tx

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

  curEpochNo <- maybe (liftSTS $ epochFromSlot slot) pure mbCurEpochNo
  let LedgerState _ certState = ledgerState

  (utxoStateBeforeUtxow, certStateAfterCERTS) <-
    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 $ 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
            accounts = CertState era
certState CertState era
-> Getting (Accounts era) (CertState era) (Accounts era)
-> Accounts era
forall s a. s -> Getting a s a -> a
^. (DState era -> Const (Accounts era) (DState era))
-> CertState era -> Const (Accounts era) (CertState era)
forall era. EraCertState era => Lens' (CertState era) (DState era)
Lens' (CertState era) (DState era)
certDStateL ((DState era -> Const (Accounts era) (DState era))
 -> CertState era -> Const (Accounts era) (CertState era))
-> ((Accounts era -> Const (Accounts era) (Accounts era))
    -> DState era -> Const (Accounts era) (DState era))
-> Getting (Accounts era) (CertState era) (Accounts era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Accounts era -> Const (Accounts era) (Accounts era))
-> DState era -> Const (Accounts era) (DState era)
forall era. Lens' (DState era) (Accounts era)
forall (t :: * -> *) era.
CanSetAccounts t =>
Lens' (t era) (Accounts era)
accountsL

        runTest $ validateWithdrawalsDelegated accounts tx

        let withdrawals = Tx TopTx era
tx Tx TopTx era
-> Getting Withdrawals (Tx TopTx era) Withdrawals -> Withdrawals
forall s a. s -> Getting a s a -> a
^. (TxBody TopTx era -> Const Withdrawals (TxBody TopTx era))
-> Tx TopTx era -> Const Withdrawals (Tx 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 ((TxBody TopTx era -> Const Withdrawals (TxBody TopTx era))
 -> Tx TopTx era -> Const Withdrawals (Tx TopTx era))
-> ((Withdrawals -> Const Withdrawals Withdrawals)
    -> TxBody TopTx era -> Const Withdrawals (TxBody TopTx era))
-> Getting Withdrawals (Tx TopTx era) Withdrawals
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Withdrawals -> Const Withdrawals Withdrawals)
-> TxBody TopTx era -> Const Withdrawals (TxBody TopTx era)
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) Withdrawals
forall (l :: TxLevel). Lens' (TxBody l era) Withdrawals
withdrawalsTxBodyL
        testIncompleteAndMissingWithdrawals accounts withdrawals

        certStateAfterCERTS <-
          trans @(EraRule "CERTS" era) $
            TRC
              ( CertsEnv tx pp curEpochNo committee committeeProposals
              , certState
                  & updateDormantDRepExpiries tx curEpochNo
                  & updateVotingDRepExpiries tx curEpochNo (pp ^. ppDRepActivityL)
                  & certDStateL . accountsL %~ drainAccounts withdrawals
              , StrictSeq.fromStrict $ txBody ^. certsTxBodyL
              )

        let govSignal =
              GovSignal
                { gsVotingProcedures :: VotingProcedures era
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)
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)
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
              ( GovEnv
                  (txIdTxBody txBody)
                  curEpochNo
                  pp
                  (govState ^. constitutionGovStateL . constitutionGuardrailsScriptHashL)
                  certStateAfterCERTS
                  (govState ^. committeeGovStateL)
              , proposals
              , govSignal
              )
        pure
          ( utxoStateAfterSubLedgers
              & utxosGovStateL . proposalsGovStateL .~ proposalsState
          , certStateAfterCERTS
          )
      else pure (utxoStateAfterSubLedgers, certStateAfterSubLedgers)

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

instance
  ( AlonzoEraTx era
  , EraUTxO era
  , BabbageEraTxBody era
  , Embed (EraRule "UTXO" era) (DijkstraUTXOW 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) ~ AlonzoUtxowEvent era
  , STS (DijkstraUTXOW era)
  , Event (DijkstraUTXOW era) ~ AlonzoUtxowEvent era
  ) =>
  Embed (DijkstraUTXOW era) (DijkstraLEDGER era)
  where
  wrapFailed :: PredicateFailure (DijkstraUTXOW era)
-> PredicateFailure (DijkstraLEDGER era)
wrapFailed = PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
PredicateFailure (DijkstraUTXOW era)
-> PredicateFailure (DijkstraLEDGER era)
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> DijkstraLedgerPredFailure era
DijkstraUtxowFailure
  wrapEvent :: Event (DijkstraUTXOW era) -> Event (DijkstraLEDGER era)
wrapEvent = Event (EraRule "UTXOW" era) -> DijkstraLedgerEvent era
Event (DijkstraUTXOW era) -> Event (DijkstraLEDGER era)
forall era. Event (EraRule "UTXOW" era) -> DijkstraLedgerEvent era
UtxowEvent

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

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

conwayToDijkstraLedgerPredFailure ::
  forall era. ConwayLedgerPredFailure era -> DijkstraLedgerPredFailure era
conwayToDijkstraLedgerPredFailure :: forall 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 "CERTS" era)
-> DijkstraLedgerPredFailure era
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure 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 -> NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era
forall era.
NonEmpty (KeyHash Staking) -> DijkstraLedgerPredFailure era
DijkstraWdrlNotDelegatedToDRep 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 -> Withdrawals -> DijkstraLedgerPredFailure era
forall era. Withdrawals -> DijkstraLedgerPredFailure era
DijkstraWithdrawalsMissingAccounts Withdrawals
ws
  Conway.ConwayIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
ws -> NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
DijkstraIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
ws

shelleyToDijkstraLedgerPredFailure ::
  forall era. ShelleyLedgerPredFailure era -> DijkstraLedgerPredFailure era
shelleyToDijkstraLedgerPredFailure :: forall era.
ShelleyLedgerPredFailure era -> DijkstraLedgerPredFailure era
shelleyToDijkstraLedgerPredFailure = \case
  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
  DelegsFailure PredicateFailure (EraRule "DELEGS" era)
_ -> String -> DijkstraLedgerPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: DELEGS has ben removed in Dijkstra"
  ShelleyWithdrawalsMissingAccounts Withdrawals
x -> Withdrawals -> DijkstraLedgerPredFailure era
forall era. Withdrawals -> DijkstraLedgerPredFailure era
DijkstraWithdrawalsMissingAccounts Withdrawals
x
  ShelleyIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
x -> NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
-> DijkstraLedgerPredFailure era
DijkstraIncompleteWithdrawals NonEmptyMap AccountAddress (Mismatch RelEQ Coin)
x

instance
  ( STS (ConwayCERTS era)
  , PredicateFailure (EraRule "CERTS" era) ~ ConwayCertsPredFailure era
  , Event (EraRule "CERTS" era) ~ Conway.ConwayCertsEvent era
  ) =>
  Embed (ConwayCERTS era) (DijkstraLEDGER era)
  where
  wrapFailed :: PredicateFailure (ConwayCERTS era)
-> PredicateFailure (DijkstraLEDGER era)
wrapFailed = PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
PredicateFailure (ConwayCERTS era)
-> PredicateFailure (DijkstraLEDGER era)
forall era.
PredicateFailure (EraRule "CERTS" era)
-> DijkstraLedgerPredFailure era
DijkstraCertsFailure
  wrapEvent :: Event (ConwayCERTS era) -> Event (DijkstraLEDGER era)
wrapEvent = Event (EraRule "CERTS" era) -> DijkstraLedgerEvent era
Event (ConwayCERTS era) -> Event (DijkstraLEDGER era)
forall era. Event (EraRule "CERTS" era) -> DijkstraLedgerEvent era
CertsEvent

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