{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# 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.Utxo (
  DijkstraUTXO,
  DijkstraUtxoEnv (..),
  DijkstraUtxoPredFailure (..),
  conwayToDijkstraUtxoPredFailure,
  validateWrongNetworkInDirectDeposit,
) where

import Cardano.Ledger.Address (DirectDeposits (..))
import Cardano.Ledger.Allegra.Rules (AllegraUtxoPredFailure, shelleyToAllegraUtxoPredFailure)
import qualified Cardano.Ledger.Allegra.Rules as Allegra
import Cardano.Ledger.Alonzo.Rules (
  AlonzoUtxoEvent,
  AlonzoUtxoPredFailure,
  AlonzoUtxosPredFailure,
 )
import qualified Cardano.Ledger.Alonzo.Rules as Alonzo
import Cardano.Ledger.Alonzo.TxWits (unRedeemersL)
import Cardano.Ledger.Babbage.Rules (
  BabbageUtxoPredFailure,
  updateUTxOStateByTxValidity,
  validateTotalCollateral,
 )
import qualified Cardano.Ledger.Babbage.Rules as Babbage (
  validateOutputTooSmallUTxO,
 )
import Cardano.Ledger.BaseTypes (
  Mismatch (..),
  Network,
  Relation (..),
  ShelleyBase,
  SlotNo,
  StrictMaybe (..),
  epochInfo,
  networkId,
  systemStart,
 )
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
  sizedValue,
 )
import Cardano.Ledger.Binary.Coders (
  Decode (..),
  Encode (..),
  decode,
  encode,
  (!>),
  (<!),
 )
import Cardano.Ledger.Coin (Coin, DeltaCoin)
import Cardano.Ledger.Compactible (fromCompact)
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Rules (
  ConwayUTXOS,
  ConwayUtxoPredFailure,
  ConwayUtxosEnv (..),
  ConwayUtxosPredFailure (..),
  allegraToConwayUtxoPredFailure,
  alonzoToConwayUtxoPredFailure,
  babbageToConwayUtxoPredFailure,
  updateTreasuryDonation,
 )
import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Conway.State
import Cardano.Ledger.Credential (StakeReference (..))
import Cardano.Ledger.Dijkstra.Era (DijkstraEra, DijkstraUTXO)
import Cardano.Ledger.Dijkstra.Rules.Utxos ()
import Cardano.Ledger.Dijkstra.TxBody (DijkstraEraTxBody (..))
import Cardano.Ledger.Plutus (ExUnits)
import Cardano.Ledger.Rules.ValidationMode (Test, failOnJustStatic, runTest, runTestOnSignal)
import Cardano.Ledger.Shelley.LedgerState (UTxOState (..))
import Cardano.Ledger.Shelley.Rules (
  ShelleyUtxoPredFailure,
  validSizeComputationCheck,
 )
import qualified Cardano.Ledger.Shelley.Rules as Shelley
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData)
import Control.Monad (when)
import Control.Monad.Trans.Reader (asks)
import Control.State.Transition.Extended (
  Embed (..),
  Rule,
  STS (..),
  TRC (..),
  TransitionRule,
  failureOnNonEmptyMap,
  failureOnNonEmptySet,
  judgmentContext,
  liftSTS,
  trans,
  validate,
 )
import Data.List.NonEmpty (NonEmpty)
import Data.Map.NonEmpty (NonEmptyMap)
import qualified Data.Map.Strict as Map
import qualified Data.OMap.Strict as OMap
import Data.Set.NonEmpty (NonEmptySet)
import Data.Word (Word16, Word32)
import GHC.Generics (Generic)
import Lens.Micro ((^.))

data DijkstraUtxoEnv era = DijkstraUtxoEnv
  { forall era. DijkstraUtxoEnv era -> SlotNo
dueSlot :: SlotNo
  , forall era. DijkstraUtxoEnv era -> PParams era
duePParams :: PParams era
  , forall era. DijkstraUtxoEnv era -> CertState era
dueCertState :: CertState era
  , forall era. DijkstraUtxoEnv era -> UTxO era
dueOriginalUtxo :: UTxO era
  , forall era. DijkstraUtxoEnv era -> ScriptsProvided era
dueScriptsProvided :: ScriptsProvided era
  -- ^ aggregated scripts provided across all transaction levels
  }

-- | Predicate failure for the Dijkstra Era
data DijkstraUtxoPredFailure era
  = -- | Subtransition Failures
    UtxosFailure (PredicateFailure (EraRule "UTXOS" era))
  | -- | The bad transaction inputs
    BadInputsUTxO (NonEmptySet TxIn)
  | OutsideValidityIntervalUTxO
      -- | transaction's validity interval
      ValidityInterval
      -- | current slot
      SlotNo
  | MaxTxSizeUTxO (Mismatch RelLTEQ Word32)
  | InputSetEmptyUTxO
  | FeeTooSmallUTxO
      (Mismatch RelGTEQ Coin)
  | ValueNotConservedUTxO
      (Mismatch RelEQ (Value era)) -- Serialise consumed first, then produced
  | -- | the set of addresses with incorrect network IDs
    WrongNetwork
      -- | the expected network id
      Network
      -- | the set of addresses with incorrect network IDs
      (NonEmptySet Addr)
  | WrongNetworkWithdrawal
      -- | the expected network id
      Network
      -- | the set of reward addresses with incorrect network IDs
      (NonEmptySet AccountAddress)
  | -- | list of supplied bad transaction outputs
    OutputBootAddrAttrsTooBig (NonEmpty (TxOut era))
  | -- | list of supplied bad transaction output triples (actualSize,PParameterMaxValue,TxOut)
    OutputTooBigUTxO (NonEmpty (Int, Int, TxOut era))
  | InsufficientCollateral
      -- | balance computed
      DeltaCoin
      -- | the required collateral for the given fee
      Coin
  | -- | The UTxO entries which have the wrong kind of script
    ScriptsNotPaidUTxO (NonEmptyMap TxIn (TxOut era))
  | ExUnitsTooBigUTxO
      (Mismatch RelLTEQ ExUnits)
  | -- | The inputs marked for use as fees contain non-ADA tokens
    CollateralContainsNonADA (Value era)
  | -- | Wrong Network ID in body
    WrongNetworkInTxBody
      (Mismatch RelEQ Network)
  | -- | slot number outside consensus forecast range
    OutsideForecast SlotNo
  | -- | There are too many collateral inputs
    TooManyCollateralInputs
      (Mismatch RelLTEQ Word16)
  | NoCollateralInputs
  | -- | The collateral is not equivalent to the total collateral asserted by the transaction
    IncorrectTotalCollateralField
      -- | collateral provided
      DeltaCoin
      -- | collateral amount declared in transaction body
      Coin
  | -- | list of supplied transaction outputs that are too small,
    -- together with the minimum value for the given output.
    BabbageOutputTooSmallUTxO (NonEmpty (TxOut era, Coin))
  | -- | TxIns that appear in both inputs and reference inputs
    BabbageNonDisjointRefInputs (NonEmpty TxIn)
  | PtrPresentInCollateralReturn (TxOut era)
  | WrongNetworkInDirectDeposit
      -- | the expected network id
      Network
      -- | the set of account addresses with incorrect network IDs
      (NonEmptySet AccountAddress)
  | -- | Total withdrawals per account that exceed the original account balance
    WithdrawalsExceedAccountBalance (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin))
  deriving ((forall x.
 DijkstraUtxoPredFailure era -> Rep (DijkstraUtxoPredFailure era) x)
-> (forall x.
    Rep (DijkstraUtxoPredFailure era) x -> DijkstraUtxoPredFailure era)
-> Generic (DijkstraUtxoPredFailure era)
forall x.
Rep (DijkstraUtxoPredFailure era) x -> DijkstraUtxoPredFailure era
forall x.
DijkstraUtxoPredFailure era -> Rep (DijkstraUtxoPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraUtxoPredFailure era) x -> DijkstraUtxoPredFailure era
forall era x.
DijkstraUtxoPredFailure era -> Rep (DijkstraUtxoPredFailure era) x
$cfrom :: forall era x.
DijkstraUtxoPredFailure era -> Rep (DijkstraUtxoPredFailure era) x
from :: forall x.
DijkstraUtxoPredFailure era -> Rep (DijkstraUtxoPredFailure era) x
$cto :: forall era x.
Rep (DijkstraUtxoPredFailure era) x -> DijkstraUtxoPredFailure era
to :: forall x.
Rep (DijkstraUtxoPredFailure era) x -> DijkstraUtxoPredFailure era
Generic)

type instance EraRuleFailure "UTXO" DijkstraEra = DijkstraUtxoPredFailure DijkstraEra

type instance EraRuleEvent "UTXO" DijkstraEra = AlonzoUtxoEvent DijkstraEra

instance InjectRuleFailure "UTXO" DijkstraUtxoPredFailure DijkstraEra

instance InjectRuleFailure "UTXO" ConwayUtxoPredFailure DijkstraEra where
  injectFailure :: ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure

instance InjectRuleFailure "UTXO" BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure (ConwayUtxoPredFailure DijkstraEra
 -> DijkstraUtxoPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era. BabbageUtxoPredFailure era -> ConwayUtxoPredFailure era
babbageToConwayUtxoPredFailure

instance InjectRuleFailure "UTXO" AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure (ConwayUtxoPredFailure DijkstraEra
 -> DijkstraUtxoPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era. AlonzoUtxoPredFailure era -> ConwayUtxoPredFailure era
alonzoToConwayUtxoPredFailure

instance InjectRuleFailure "UTXO" ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure =
    ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure (ConwayUtxoPredFailure DijkstraEra
 -> DijkstraUtxoPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllegraUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era.
(EraRuleFailure "PPUP" era ~ VoidEraRule "PPUP" era) =>
AllegraUtxoPredFailure era -> ConwayUtxoPredFailure era
allegraToConwayUtxoPredFailure (AllegraUtxoPredFailure DijkstraEra
 -> ConwayUtxoPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> AllegraUtxoPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure DijkstraEra
-> AllegraUtxoPredFailure DijkstraEra
forall era.
ShelleyUtxoPredFailure era -> AllegraUtxoPredFailure era
shelleyToAllegraUtxoPredFailure

instance InjectRuleFailure "UTXO" Allegra.AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure (ConwayUtxoPredFailure DijkstraEra
 -> DijkstraUtxoPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllegraUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era.
(EraRuleFailure "PPUP" era ~ VoidEraRule "PPUP" era) =>
AllegraUtxoPredFailure era -> ConwayUtxoPredFailure era
allegraToConwayUtxoPredFailure

instance InjectRuleFailure "UTXO" ConwayUtxosPredFailure DijkstraEra where
  injectFailure :: ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOS" DijkstraEra)
-> DijkstraUtxoPredFailure DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
UtxosFailure

instance InjectRuleFailure "UTXO" AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure =
    ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure
      (ConwayUtxoPredFailure DijkstraEra
 -> DijkstraUtxoPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era. AlonzoUtxoPredFailure era -> ConwayUtxoPredFailure era
alonzoToConwayUtxoPredFailure
      (AlonzoUtxoPredFailure DijkstraEra
 -> ConwayUtxoPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> AlonzoUtxoPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "UTXOS" DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> AlonzoUtxoPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOS" era) -> AlonzoUtxoPredFailure era
Alonzo.UtxosFailure
      (ConwayUtxosPredFailure DijkstraEra
 -> AlonzoUtxoPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ConwayUtxosPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> AlonzoUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOS" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxosPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

deriving instance
  ( Era era
  , Show (Value era)
  , Show (PredicateFailure (EraRule "UTXOS" era))
  , Show (TxOut era)
  , Show (Script era)
  , Show TxIn
  ) =>
  Show (DijkstraUtxoPredFailure era)

deriving instance
  ( Era era
  , Eq (Value era)
  , Eq (PredicateFailure (EraRule "UTXOS" era))
  , Eq (TxOut era)
  , Eq (Script era)
  , Eq TxIn
  ) =>
  Eq (DijkstraUtxoPredFailure era)

instance
  ( Era era
  , NFData (Value era)
  , NFData (TxOut era)
  , NFData (PredicateFailure (EraRule "UTXOS" era))
  ) =>
  NFData (DijkstraUtxoPredFailure era)

validateNoPtrInCollateralReturn ::
  ( BabbageEraTxBody era
  , InjectRuleFailure rule DijkstraUtxoPredFailure era
  ) =>
  TxBody TopTx era ->
  Rule (EraRule rule era) ctx ()
validateNoPtrInCollateralReturn :: forall era (rule :: Symbol) (ctx :: RuleType).
(BabbageEraTxBody era,
 InjectRuleFailure rule DijkstraUtxoPredFailure era) =>
TxBody TopTx era -> Rule (EraRule rule era) ctx ()
validateNoPtrInCollateralReturn TxBody TopTx era
txBody = do
  let hasCollateralTxOut :: Maybe (TxOut era)
hasCollateralTxOut = do
        SJust collateralReturn <- StrictMaybe (TxOut era) -> Maybe (StrictMaybe (TxOut era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (StrictMaybe (TxOut era) -> Maybe (StrictMaybe (TxOut era)))
-> StrictMaybe (TxOut era) -> Maybe (StrictMaybe (TxOut era))
forall a b. (a -> b) -> a -> b
$ TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (StrictMaybe (TxOut era))
     (TxBody TopTx era)
     (StrictMaybe (TxOut era))
-> StrictMaybe (TxOut era)
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictMaybe (TxOut era))
  (TxBody TopTx era)
  (StrictMaybe (TxOut era))
forall era.
BabbageEraTxBody era =>
Lens' (TxBody TopTx era) (StrictMaybe (TxOut era))
Lens' (TxBody TopTx era) (StrictMaybe (TxOut era))
collateralReturnTxBodyL
        Addr _ _ (StakeRefPtr {}) <- pure $ collateralReturn ^. addrTxOutL
        Just collateralReturn
  Maybe (TxOut era)
-> (TxOut era -> PredicateFailure (EraRule rule era))
-> F (Clause (EraRule rule era) ctx) ()
forall a sts (ctx :: RuleType).
Maybe a -> (a -> PredicateFailure sts) -> Rule sts ctx ()
failOnJustStatic Maybe (TxOut era)
hasCollateralTxOut (DijkstraUtxoPredFailure era -> EraRuleFailure rule era
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure (DijkstraUtxoPredFailure era -> EraRuleFailure rule era)
-> (TxOut era -> DijkstraUtxoPredFailure era)
-> TxOut era
-> EraRuleFailure rule era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxOut era -> DijkstraUtxoPredFailure era
forall era. TxOut era -> DijkstraUtxoPredFailure era
PtrPresentInCollateralReturn)

-- | For each account, the total withdrawals across the entire batch should not exceed the original account balance.
-- Unregistered accounts are treated as having 0 balance.
validateBatchWithdrawals ::
  ( EraTx era
  , EraAccounts era
  , DijkstraEraTxBody era
  ) =>
  Accounts era ->
  Tx TopTx era ->
  Test (DijkstraUtxoPredFailure era)
validateBatchWithdrawals :: forall era.
(EraTx era, EraAccounts era, DijkstraEraTxBody era) =>
Accounts era -> Tx TopTx era -> Test (DijkstraUtxoPredFailure era)
validateBatchWithdrawals Accounts era
accounts Tx TopTx era
tx =
  let allWithdrawals :: Map AccountAddress Coin
allWithdrawals =
        (Coin -> Coin -> Coin)
-> [Map AccountAddress Coin] -> Map AccountAddress Coin
forall (f :: * -> *) k a.
(Foldable f, Ord k) =>
(a -> a -> a) -> f (Map k a) -> Map k a
Map.unionsWith Coin -> Coin -> Coin
forall a. Semigroup a => a -> a -> a
(<>) ([Map AccountAddress Coin] -> Map AccountAddress Coin)
-> [Map AccountAddress Coin] -> Map AccountAddress Coin
forall a b. (a -> b) -> a -> b
$
          Withdrawals -> Map AccountAddress Coin
unWithdrawals (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)
            Map AccountAddress Coin
-> [Map AccountAddress Coin] -> [Map AccountAddress Coin]
forall a. a -> [a] -> [a]
: [ Withdrawals -> Map AccountAddress Coin
unWithdrawals (Withdrawals -> Map AccountAddress Coin)
-> Withdrawals -> Map AccountAddress Coin
forall a b. (a -> b) -> a -> b
$ Tx SubTx era
subTx Tx SubTx era
-> Getting Withdrawals (Tx SubTx era) Withdrawals -> Withdrawals
forall s a. s -> Getting a s a -> a
^. (TxBody SubTx era -> Const Withdrawals (TxBody SubTx era))
-> Tx SubTx era -> Const Withdrawals (Tx SubTx 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 SubTx era -> Const Withdrawals (TxBody SubTx era))
 -> Tx SubTx era -> Const Withdrawals (Tx SubTx era))
-> ((Withdrawals -> Const Withdrawals Withdrawals)
    -> TxBody SubTx era -> Const Withdrawals (TxBody SubTx era))
-> Getting Withdrawals (Tx SubTx era) Withdrawals
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Withdrawals -> Const Withdrawals Withdrawals)
-> TxBody SubTx era -> Const Withdrawals (TxBody SubTx era)
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) Withdrawals
forall (l :: TxLevel). Lens' (TxBody l era) Withdrawals
withdrawalsTxBodyL
              | Tx SubTx era
subTx <- OMap TxId (Tx SubTx era) -> [Tx SubTx era]
forall k v. Ord k => OMap k v -> [v]
OMap.elems (OMap TxId (Tx SubTx era) -> [Tx SubTx era])
-> OMap TxId (Tx SubTx era) -> [Tx SubTx era]
forall a b. (a -> b) -> a -> b
$ Tx TopTx era
tx Tx TopTx era
-> Getting
     (OMap TxId (Tx SubTx era))
     (Tx TopTx era)
     (OMap TxId (Tx SubTx era))
-> OMap TxId (Tx SubTx era)
forall s a. s -> Getting a s a -> a
^. (TxBody TopTx era
 -> Const (OMap TxId (Tx SubTx era)) (TxBody TopTx era))
-> Tx TopTx era -> Const (OMap TxId (Tx SubTx era)) (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 (OMap TxId (Tx SubTx era)) (TxBody TopTx era))
 -> Tx TopTx era -> Const (OMap TxId (Tx SubTx era)) (Tx TopTx era))
-> ((OMap TxId (Tx SubTx era)
     -> Const (OMap TxId (Tx SubTx era)) (OMap TxId (Tx SubTx era)))
    -> TxBody TopTx era
    -> Const (OMap TxId (Tx SubTx era)) (TxBody TopTx era))
-> Getting
     (OMap TxId (Tx SubTx era))
     (Tx TopTx era)
     (OMap TxId (Tx SubTx era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (OMap TxId (Tx SubTx era)
 -> Const (OMap TxId (Tx SubTx era)) (OMap TxId (Tx SubTx era)))
-> TxBody TopTx era
-> Const (OMap TxId (Tx SubTx era)) (TxBody TopTx era)
forall era.
DijkstraEraTxBody era =>
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
subTransactionsTxBodyL
              ]
      badWithdrawals :: Map AccountAddress (Mismatch RelLTEQ Coin)
badWithdrawals =
        (AccountAddress -> Coin -> Maybe (Mismatch RelLTEQ Coin))
-> Map AccountAddress Coin
-> Map AccountAddress (Mismatch RelLTEQ Coin)
forall k a b. (k -> a -> Maybe b) -> Map k a -> Map k b
Map.mapMaybeWithKey
          ( \AccountAddress
acctAddr Coin
withdrawn ->
              let balance :: Coin
balance = AccountAddress -> Coin
getAccountBalance AccountAddress
acctAddr
               in if Coin
withdrawn Coin -> Coin -> Bool
forall a. Ord a => a -> a -> Bool
> Coin
balance
                    then Mismatch RelLTEQ Coin -> Maybe (Mismatch RelLTEQ Coin)
forall a. a -> Maybe a
Just Mismatch {mismatchSupplied :: Coin
mismatchSupplied = Coin
withdrawn, mismatchExpected :: Coin
mismatchExpected = Coin
balance}
                    else Maybe (Mismatch RelLTEQ Coin)
forall a. Maybe a
Nothing
          )
          Map AccountAddress Coin
allWithdrawals
   in Map AccountAddress (Mismatch RelLTEQ Coin)
-> (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
    -> DijkstraUtxoPredFailure era)
-> Validation (NonEmpty (DijkstraUtxoPredFailure era)) ()
forall k v e.
Map k v -> (NonEmptyMap k v -> e) -> Validation (NonEmpty e) ()
failureOnNonEmptyMap Map AccountAddress (Mismatch RelLTEQ Coin)
badWithdrawals NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> DijkstraUtxoPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> DijkstraUtxoPredFailure era
WithdrawalsExceedAccountBalance
  where
    getAccountBalance :: AccountAddress -> Coin
getAccountBalance (AccountAddress Network
_ (AccountId Credential Staking
cred)) =
      case Credential Staking -> Accounts era -> Maybe (AccountState era)
forall era.
EraAccounts era =>
Credential Staking -> Accounts era -> Maybe (AccountState era)
lookupAccountState Credential Staking
cred Accounts era
accounts of
        Maybe (AccountState era)
Nothing -> Coin
forall a. Monoid a => a
mempty -- unregistered account, 0 balance
        Just AccountState era
accountState -> CompactForm Coin -> Coin
forall a. Compactible a => CompactForm a -> a
fromCompact (CompactForm Coin -> Coin) -> CompactForm Coin -> Coin
forall a b. (a -> b) -> a -> b
$ AccountState era
accountState AccountState era
-> Getting (CompactForm Coin) (AccountState era) (CompactForm Coin)
-> CompactForm Coin
forall s a. s -> Getting a s a -> a
^. Getting (CompactForm Coin) (AccountState era) (CompactForm Coin)
forall era.
EraAccounts era =>
Lens' (AccountState era) (CompactForm Coin)
Lens' (AccountState era) (CompactForm Coin)
balanceAccountStateL

-- | Validate collateral if any transaction in the batch has redeemers.
validateBatchCollateral ::
  forall era rule.
  ( AlonzoEraTx era
  , DijkstraEraTxBody era
  , InjectRuleFailure rule AlonzoUtxoPredFailure era
  , InjectRuleFailure rule BabbageUtxoPredFailure era
  ) =>
  PParams era ->
  Tx TopTx era ->
  UTxO era ->
  Test (EraRuleFailure rule era)
validateBatchCollateral :: forall era (rule :: Symbol).
(AlonzoEraTx era, DijkstraEraTxBody era,
 InjectRuleFailure rule AlonzoUtxoPredFailure era,
 InjectRuleFailure rule BabbageUtxoPredFailure era) =>
PParams era
-> Tx TopTx era -> UTxO era -> Test (EraRuleFailure rule era)
validateBatchCollateral PParams era
pp Tx TopTx era
tx (UTxO Map TxIn (TxOut era)
utxo) =
  -- TODO OPTIMIZATION: Rewrite in a way that doesn't require this check when rules are executed without validation
  Bool
-> Validation (NonEmpty (EraRuleFailure rule era)) ()
-> Validation (NonEmpty (EraRuleFailure rule era)) ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Tx TopTx era -> Bool
hasAnyRedeemers Tx TopTx era
tx) (Validation (NonEmpty (EraRuleFailure rule era)) ()
 -> Validation (NonEmpty (EraRuleFailure rule era)) ())
-> Validation (NonEmpty (EraRuleFailure rule era)) ()
-> Validation (NonEmpty (EraRuleFailure rule era)) ()
forall a b. (a -> b) -> a -> b
$
    PParams era
-> TxBody TopTx era
-> Map TxIn (TxOut era)
-> Validation (NonEmpty (EraRuleFailure rule era)) ()
forall era (rule :: Symbol).
(BabbageEraTxBody era,
 InjectRuleFailure rule AlonzoUtxoPredFailure era,
 InjectRuleFailure rule BabbageUtxoPredFailure era) =>
PParams era
-> TxBody TopTx era
-> Map TxIn (TxOut era)
-> Test (EraRuleFailure rule era)
validateTotalCollateral PParams era
pp (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) Map TxIn (TxOut era)
utxoCollateral
  where
    utxoCollateral :: Map TxIn (TxOut era)
utxoCollateral = Map TxIn (TxOut era) -> Set TxIn -> Map TxIn (TxOut era)
forall k a. Ord k => Map k a -> Set k -> Map k a
Map.restrictKeys Map TxIn (TxOut era)
utxo (Tx TopTx era
tx Tx TopTx era
-> Getting (Set TxIn) (Tx TopTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. (TxBody TopTx era -> Const (Set TxIn) (TxBody TopTx era))
-> Tx TopTx era -> Const (Set TxIn) (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 (Set TxIn) (TxBody TopTx era))
 -> Tx TopTx era -> Const (Set TxIn) (Tx TopTx era))
-> ((Set TxIn -> Const (Set TxIn) (Set TxIn))
    -> TxBody TopTx era -> Const (Set TxIn) (TxBody TopTx era))
-> Getting (Set TxIn) (Tx TopTx era) (Set TxIn)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set TxIn -> Const (Set TxIn) (Set TxIn))
-> TxBody TopTx era -> Const (Set TxIn) (TxBody TopTx era)
forall era.
AlonzoEraTxBody era =>
Lens' (TxBody TopTx era) (Set TxIn)
Lens' (TxBody TopTx era) (Set TxIn)
collateralInputsTxBodyL)
    hasAnyRedeemers :: Tx TopTx era -> Bool
hasAnyRedeemers Tx TopTx era
t =
      Tx TopTx era -> Bool
forall {l :: TxLevel}. Tx l era -> Bool
hasRedeemers Tx TopTx era
t Bool -> Bool -> Bool
|| (Tx SubTx era -> Bool) -> OMap TxId (Tx SubTx era) -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any Tx SubTx era -> Bool
forall {l :: TxLevel}. Tx l era -> Bool
hasRedeemers (Tx TopTx era
t Tx TopTx era
-> Getting
     (OMap TxId (Tx SubTx era))
     (Tx TopTx era)
     (OMap TxId (Tx SubTx era))
-> OMap TxId (Tx SubTx era)
forall s a. s -> Getting a s a -> a
^. (TxBody TopTx era
 -> Const (OMap TxId (Tx SubTx era)) (TxBody TopTx era))
-> Tx TopTx era -> Const (OMap TxId (Tx SubTx era)) (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 (OMap TxId (Tx SubTx era)) (TxBody TopTx era))
 -> Tx TopTx era -> Const (OMap TxId (Tx SubTx era)) (Tx TopTx era))
-> ((OMap TxId (Tx SubTx era)
     -> Const (OMap TxId (Tx SubTx era)) (OMap TxId (Tx SubTx era)))
    -> TxBody TopTx era
    -> Const (OMap TxId (Tx SubTx era)) (TxBody TopTx era))
-> Getting
     (OMap TxId (Tx SubTx era))
     (Tx TopTx era)
     (OMap TxId (Tx SubTx era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (OMap TxId (Tx SubTx era)
 -> Const (OMap TxId (Tx SubTx era)) (OMap TxId (Tx SubTx era)))
-> TxBody TopTx era
-> Const (OMap TxId (Tx SubTx era)) (TxBody TopTx era)
forall era.
DijkstraEraTxBody era =>
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
subTransactionsTxBodyL)
    hasRedeemers :: Tx l era -> Bool
hasRedeemers = Bool -> Bool
not (Bool -> Bool) -> (Tx l era -> Bool) -> Tx l era -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Bool
forall a. Map (PlutusPurpose AsIx era) a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Bool)
-> (Tx l era -> Map (PlutusPurpose AsIx era) (Data era, ExUnits))
-> Tx l era
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tx l era
-> Getting
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
     (Tx l era)
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
-> Map (PlutusPurpose AsIx era) (Data era, ExUnits)
forall s a. s -> Getting a s a -> a
^. (TxWits era
 -> Const
      (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (TxWits era))
-> Tx l era
-> Const
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (Tx l era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxWits era)
forall (l :: TxLevel). Lens' (Tx l era) (TxWits era)
witsTxL ((TxWits era
  -> Const
       (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (TxWits era))
 -> Tx l era
 -> Const
      (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (Tx l era))
-> ((Map (PlutusPurpose AsIx era) (Data era, ExUnits)
     -> Const
          (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
          (Map (PlutusPurpose AsIx era) (Data era, ExUnits)))
    -> TxWits era
    -> Const
         (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (TxWits era))
-> Getting
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
     (Tx l era)
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Redeemers era
 -> Const
      (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (Redeemers era))
-> TxWits era
-> Const
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (TxWits era)
forall era.
AlonzoEraTxWits era =>
Lens' (TxWits era) (Redeemers era)
Lens' (TxWits era) (Redeemers era)
rdmrsTxWitsL ((Redeemers era
  -> Const
       (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (Redeemers era))
 -> TxWits era
 -> Const
      (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (TxWits era))
-> ((Map (PlutusPurpose AsIx era) (Data era, ExUnits)
     -> Const
          (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
          (Map (PlutusPurpose AsIx era) (Data era, ExUnits)))
    -> Redeemers era
    -> Const
         (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (Redeemers era))
-> (Map (PlutusPurpose AsIx era) (Data era, ExUnits)
    -> Const
         (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
         (Map (PlutusPurpose AsIx era) (Data era, ExUnits)))
-> TxWits era
-> Const
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (TxWits era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (PlutusPurpose AsIx era) (Data era, ExUnits)
 -> Const
      (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
      (Map (PlutusPurpose AsIx era) (Data era, ExUnits)))
-> Redeemers era
-> Const
     (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) (Redeemers era)
forall era.
AlonzoEraScript era =>
Lens'
  (Redeemers era) (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
Lens'
  (Redeemers era) (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
unRedeemersL)

validateWrongNetworkInDirectDeposit ::
  DijkstraEraTxBody era =>
  Network ->
  TxBody t era ->
  Test (DijkstraUtxoPredFailure era)
validateWrongNetworkInDirectDeposit :: forall era (t :: TxLevel).
DijkstraEraTxBody era =>
Network -> TxBody t era -> Test (DijkstraUtxoPredFailure era)
validateWrongNetworkInDirectDeposit Network
netId TxBody t era
txb =
  Set AccountAddress
-> (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Validation (NonEmpty (DijkstraUtxoPredFailure era)) ()
forall (f :: * -> *) a e.
(Foldable f, Ord a) =>
f a -> (NonEmptySet a -> e) -> Validation (NonEmpty e) ()
failureOnNonEmptySet Set AccountAddress
depositsWrongNetwork (Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
WrongNetworkInDirectDeposit Network
netId)
  where
    depositsWrongNetwork :: Set AccountAddress
depositsWrongNetwork =
      Map AccountAddress Coin -> Set AccountAddress
forall k a. Map k a -> Set k
Map.keysSet (Map AccountAddress Coin -> Set AccountAddress)
-> Map AccountAddress Coin -> Set AccountAddress
forall a b. (a -> b) -> a -> b
$
        (AccountAddress -> Coin -> Bool)
-> Map AccountAddress Coin -> Map AccountAddress Coin
forall k a. (k -> a -> Bool) -> Map k a -> Map k a
Map.filterWithKey
          (\AccountAddress
a Coin
_ -> AccountAddress -> Network
aaNetworkId AccountAddress
a Network -> Network -> Bool
forall a. Eq a => a -> a -> Bool
/= Network
netId)
          (DirectDeposits -> Map AccountAddress Coin
unDirectDeposits (DirectDeposits -> Map AccountAddress Coin)
-> DirectDeposits -> Map AccountAddress Coin
forall a b. (a -> b) -> a -> b
$ TxBody t era
txb TxBody t era
-> Getting DirectDeposits (TxBody t era) DirectDeposits
-> DirectDeposits
forall s a. s -> Getting a s a -> a
^. Getting DirectDeposits (TxBody t era) DirectDeposits
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens' (TxBody l era) DirectDeposits
forall (l :: TxLevel). Lens' (TxBody l era) DirectDeposits
directDepositsTxBodyL)

dijkstraUtxoTransition ::
  forall era.
  ( EraUTxO era
  , EraCertState era
  , DijkstraEraTxBody era
  , AlonzoEraTx era
  , EraStake era
  , InjectRuleFailure "UTXO" ShelleyUtxoPredFailure era
  , InjectRuleFailure "UTXO" AllegraUtxoPredFailure era
  , InjectRuleFailure "UTXO" AlonzoUtxoPredFailure era
  , InjectRuleFailure "UTXO" BabbageUtxoPredFailure era
  , InjectRuleFailure "UTXO" DijkstraUtxoPredFailure era
  , Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era
  , BaseM (EraRule "UTXO" era) ~ ShelleyBase
  , STS (EraRule "UTXO" era)
  , Event (EraRule "UTXO" era) ~ AlonzoUtxoEvent era
  , -- In this function we call the UTXOS rule, so we need some assumptions
    Environment (EraRule "UTXOS" era) ~ ConwayUtxosEnv era
  , State (EraRule "UTXOS" era) ~ ()
  , Signal (EraRule "UTXOS" era) ~ StAnnTx TopTx era
  , Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)
  ) =>
  TransitionRule (EraRule "UTXO" era)
dijkstraUtxoTransition :: forall era.
(EraUTxO era, EraCertState era, DijkstraEraTxBody era,
 AlonzoEraTx era, EraStake era,
 InjectRuleFailure "UTXO" ShelleyUtxoPredFailure era,
 InjectRuleFailure "UTXO" AllegraUtxoPredFailure era,
 InjectRuleFailure "UTXO" AlonzoUtxoPredFailure era,
 InjectRuleFailure "UTXO" BabbageUtxoPredFailure era,
 InjectRuleFailure "UTXO" DijkstraUtxoPredFailure era,
 Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era,
 State (EraRule "UTXO" era) ~ UTxOState era,
 Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era,
 BaseM (EraRule "UTXO" era) ~ ShelleyBase, STS (EraRule "UTXO" era),
 Event (EraRule "UTXO" era) ~ AlonzoUtxoEvent era,
 Environment (EraRule "UTXOS" era) ~ ConwayUtxosEnv era,
 State (EraRule "UTXOS" era) ~ (),
 Signal (EraRule "UTXOS" era) ~ StAnnTx TopTx era,
 Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)) =>
TransitionRule (EraRule "UTXO" era)
dijkstraUtxoTransition = do
  TRC (DijkstraUtxoEnv slot pp certState originalUtxo _scriptsProvided, utxos, stAnnTx) <-
    Rule
  (EraRule "UTXO" era)
  'Transition
  (RuleContext 'Transition (EraRule "UTXO" era))
F (Clause (EraRule "UTXO" era) 'Transition)
  (TRC (EraRule "UTXO" era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  let tx = StAnnTx TopTx era
Signal (EraRule "UTXO" 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
  -- this is the original Accounts, before any transactions were applied
  let 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

  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

  {- inInterval (SlotOf Γ) (ValidIntervalOf txTop) -}
  runTest $ Allegra.validateOutsideValidityIntervalUTxO slot txBody

  sysSt <- liftSTS $ asks systemStart
  ei <- liftSTS $ asks epochInfo

  runTest $ Alonzo.validateOutsideForecast ei slot sysSt tx

  {- SpendInputs ≠ ∅ -}
  runTestOnSignal $ Shelley.validateInputSetEmptyUTxO txBody

  let allInputs = TxBody TopTx era
txBody TxBody TopTx era
-> Getting (Set TxIn) (TxBody TopTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. Getting (Set TxIn) (TxBody TopTx era) (Set TxIn)
forall era.
EraTxBody era =>
SimpleGetter (TxBody TopTx era) (Set TxIn)
SimpleGetter (TxBody TopTx era) (Set TxIn)
allInputsTxBodyF
      inputs = TxBody TopTx era
txBody TxBody TopTx era
-> Getting (Set TxIn) (TxBody TopTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. Getting (Set TxIn) (TxBody TopTx era) (Set TxIn)
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel). Lens' (TxBody l era) (Set TxIn)
inputsTxBodyL

  {- SpendInputsOf txTop ∪ RefInputsOf txTop ∪ CollInputsOf txTop ⊆ dom(utxo₀) -}
  runTest $ Shelley.validateBadInputsUTxO originalUtxo allInputs

  {- SpendInputsOf txTop ⊆ dom(utxo_s) — prevents double-spend with subtxs -}
  runTest $ Shelley.validateBadInputsUTxO (utxosUtxo utxos) inputs

  {- minfee pp txTop utxo₀ ≤ txfee txb -}
  runTest $ Shelley.validateFeeTooSmallUTxO pp tx originalUtxo

  {- (RedeemersOf txTop ≠ ∅ ⊎ Any (λ txSub → RedeemersOf txSub ≠ ∅) subtxs) → collateralCheck -}
  validate $ validateBatchCollateral pp tx originalUtxo

  runTest $ validateBatchWithdrawals accounts tx

  {- consumed pp utxo₀ txb = produced pp certState txb -}
  runTest $ Shelley.validateValueNotConservedUTxO pp originalUtxo certState txBody

  {- ∀ txout ∈ allOuts txb, getValue txout ≥ inject (serSize txout * coinsPerUTxOByte pp) -}
  let allSizedOutputs = TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (StrictSeq (Sized (TxOut era)))
     (TxBody TopTx era)
     (StrictSeq (Sized (TxOut era)))
-> StrictSeq (Sized (TxOut era))
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictSeq (Sized (TxOut era)))
  (TxBody TopTx era)
  (StrictSeq (Sized (TxOut era)))
forall era (l :: TxLevel).
BabbageEraTxBody era =>
SimpleGetter (TxBody l era) (StrictSeq (Sized (TxOut era)))
forall (l :: TxLevel).
SimpleGetter (TxBody l era) (StrictSeq (Sized (TxOut era)))
allSizedOutputsTxBodyF
  runTest $ Babbage.validateOutputTooSmallUTxO pp allSizedOutputs

  let allOutputs = (Sized (TxOut era) -> TxOut era)
-> StrictSeq (Sized (TxOut era)) -> StrictSeq (TxOut era)
forall a b. (a -> b) -> StrictSeq a -> StrictSeq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sized (TxOut era) -> TxOut era
forall a. Sized a -> a
sizedValue StrictSeq (Sized (TxOut era))
allSizedOutputs
  {- ∀ txout ∈ allOuts txb, serSize (getValue txout) ≤ maxValSize pp -}
  runTest $ Alonzo.validateOutputTooBigUTxO pp allOutputs

  {- ∀ ( _ ↦ (a,_)) ∈ allOuts txb, a ∈ Addrbootstrap → bootstrapAttrsSize a ≤ 64 -}
  runTestOnSignal $ Shelley.validateOutputBootAddrAttrsTooBig allOutputs

  netId <- liftSTS $ asks networkId

  {- ∀(_ → (a, _)) ∈ allOuts txb, netId a = NetworkId -}
  runTestOnSignal $ Shelley.validateWrongNetwork netId allOutputs

  {- ∀(a → ) ∈ txwdrls txb, netId a = NetworkId -}
  runTestOnSignal $ Shelley.validateWrongNetworkWithdrawal netId txBody

  {- (txnetworkid txb = NetworkId) ∨ (txnetworkid txb = ◇) -}
  runTestOnSignal $ Alonzo.validateWrongNetworkInTxBody netId txBody

  {- direct deposit network IDs -}
  runTestOnSignal $ validateWrongNetworkInDirectDeposit netId txBody

  {- no Ptr in collateral return -}
  validateNoPtrInCollateralReturn txBody

  {- txsize tx ≤ maxTxSize pp -}
  runTestOnSignal $ Shelley.validateMaxTxSizeUTxO pp tx

  {- totExunits tx ≤ maxTxExUnits pp -}
  runTest $ Alonzo.validateExUnitsTooBigUTxO pp tx

  {- ‖collateral tx‖ ≤ maxCollInputs pp -}
  runTest $ Alonzo.validateTooManyCollateralInputs pp txBody

  () <- trans @(EraRule "UTXOS" era) $ TRC (ConwayUtxosEnv pp originalUtxo, (), stAnnTx)
  updateUTxOStateByTxValidity
    pp
    certState
    (utxosGovState utxos)
    tx
    (updateTreasuryDonation tx utxos)

--------------------------------------------------------------------------------
-- DijkstraUTXO STS
--------------------------------------------------------------------------------

instance
  forall era.
  ( EraTx era
  , EraUTxO era
  , EraStake era
  , DijkstraEraTxBody era
  , AlonzoEraTx era
  , EraRule "UTXO" era ~ DijkstraUTXO era
  , InjectRuleFailure "UTXO" ShelleyUtxoPredFailure era
  , InjectRuleFailure "UTXO" AllegraUtxoPredFailure era
  , InjectRuleFailure "UTXO" AlonzoUtxoPredFailure era
  , InjectRuleFailure "UTXO" BabbageUtxoPredFailure era
  , InjectRuleFailure "UTXO" ConwayUtxoPredFailure era
  , InjectRuleFailure "UTXO" DijkstraUtxoPredFailure era
  , Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era
  , BaseM (EraRule "UTXO" era) ~ ShelleyBase
  , STS (EraRule "UTXO" era)
  , -- In this function we we call the UTXOS rule, so we need some assumptions
    Embed (EraRule "UTXOS" era) (DijkstraUTXO era)
  , Environment (EraRule "UTXOS" era) ~ ConwayUtxosEnv era
  , State (EraRule "UTXOS" era) ~ ()
  , Signal (EraRule "UTXOS" era) ~ StAnnTx TopTx era
  , EraCertState era
  , EraRule "UTXO" era ~ DijkstraUTXO era
  , SafeToHash (TxWits era)
  ) =>
  STS (DijkstraUTXO era)
  where
  type State (DijkstraUTXO era) = UTxOState era
  type Signal (DijkstraUTXO era) = StAnnTx TopTx era
  type Environment (DijkstraUTXO era) = DijkstraUtxoEnv era
  type BaseM (DijkstraUTXO era) = ShelleyBase
  type PredicateFailure (DijkstraUTXO era) = DijkstraUtxoPredFailure era
  type Event (DijkstraUTXO era) = AlonzoUtxoEvent era

  initialRules :: [InitialRule (DijkstraUTXO era)]
initialRules = []

  transitionRules :: [TransitionRule (DijkstraUTXO era)]
transitionRules = [forall era.
(EraUTxO era, EraCertState era, DijkstraEraTxBody era,
 AlonzoEraTx era, EraStake era,
 InjectRuleFailure "UTXO" ShelleyUtxoPredFailure era,
 InjectRuleFailure "UTXO" AllegraUtxoPredFailure era,
 InjectRuleFailure "UTXO" AlonzoUtxoPredFailure era,
 InjectRuleFailure "UTXO" BabbageUtxoPredFailure era,
 InjectRuleFailure "UTXO" DijkstraUtxoPredFailure era,
 Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era,
 State (EraRule "UTXO" era) ~ UTxOState era,
 Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era,
 BaseM (EraRule "UTXO" era) ~ ShelleyBase, STS (EraRule "UTXO" era),
 Event (EraRule "UTXO" era) ~ AlonzoUtxoEvent era,
 Environment (EraRule "UTXOS" era) ~ ConwayUtxosEnv era,
 State (EraRule "UTXOS" era) ~ (),
 Signal (EraRule "UTXOS" era) ~ StAnnTx TopTx era,
 Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)) =>
TransitionRule (EraRule "UTXO" era)
dijkstraUtxoTransition @era]

  assertions :: [Assertion (DijkstraUTXO era)]
assertions = [Assertion (DijkstraUTXO era)
forall era (rule :: * -> *).
(EraTx era, SafeToHash (TxWits era),
 Signal (rule era) ~ StAnnTx TopTx era) =>
Assertion (rule era)
validSizeComputationCheck]

instance
  ( STS (ConwayUTXOS era)
  , PredicateFailure (EraRule "UTXOS" era) ~ ConwayUtxosPredFailure era
  , Event (EraRule "UTXOS" era) ~ Event (ConwayUTXOS era)
  ) =>
  Embed (ConwayUTXOS era) (DijkstraUTXO era)
  where
  wrapFailed :: PredicateFailure (ConwayUTXOS era)
-> PredicateFailure (DijkstraUTXO era)
wrapFailed = PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
PredicateFailure (ConwayUTXOS era)
-> PredicateFailure (DijkstraUTXO era)
forall era.
PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
UtxosFailure
  wrapEvent :: Event (ConwayUTXOS era) -> Event (DijkstraUTXO era)
wrapEvent = Event (EraRule "UTXOS" era) -> AlonzoUtxoEvent era
Event (ConwayUTXOS era) -> Event (DijkstraUTXO era)
forall era. Event (EraRule "UTXOS" era) -> AlonzoUtxoEvent era
Alonzo.UtxosEvent

--------------------------------------------------------------------------------
-- Serialisation
--------------------------------------------------------------------------------

instance
  ( Era era
  , EncCBOR (TxOut era)
  , EncCBOR (Value era)
  , EncCBOR (PredicateFailure (EraRule "UTXOS" era))
  ) =>
  EncCBOR (DijkstraUtxoPredFailure era)
  where
  encCBOR :: DijkstraUtxoPredFailure era -> Encoding
encCBOR =
    Encode Open (DijkstraUtxoPredFailure era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode Open (DijkstraUtxoPredFailure era) -> Encoding)
-> (DijkstraUtxoPredFailure era
    -> Encode Open (DijkstraUtxoPredFailure era))
-> DijkstraUtxoPredFailure era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      UtxosFailure PredicateFailure (EraRule "UTXOS" era)
a -> (PredicateFailure (EraRule "UTXOS" era)
 -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "UTXOS" era)
      -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
UtxosFailure @era) Word
0 Encode
  Open
  (PredicateFailure (EraRule "UTXOS" era)
   -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "UTXOS" era))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "UTXOS" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "UTXOS" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "UTXOS" era)
a
      BadInputsUTxO NonEmptySet TxIn
ins -> (NonEmptySet TxIn -> DijkstraUtxoPredFailure era)
-> Word
-> Encode Open (NonEmptySet TxIn -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. NonEmptySet TxIn -> DijkstraUtxoPredFailure era
BadInputsUTxO @era) Word
1 Encode Open (NonEmptySet TxIn -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet TxIn)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet TxIn -> Encode (Closed Dense) (NonEmptySet TxIn)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet TxIn
ins
      OutsideValidityIntervalUTxO ValidityInterval
a SlotNo
b -> (ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era
forall era.
ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era
OutsideValidityIntervalUTxO Word
2 Encode
  Open (ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) ValidityInterval
-> Encode Open (SlotNo -> DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> ValidityInterval -> Encode (Closed Dense) ValidityInterval
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To ValidityInterval
a Encode Open (SlotNo -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) SlotNo
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> SlotNo -> Encode (Closed Dense) SlotNo
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To SlotNo
b
      MaxTxSizeUTxO Mismatch RelLTEQ Word32
mm -> (Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era
MaxTxSizeUTxO Word
3 Encode
  Open (Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ Word32)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelLTEQ Word32
-> Encode (Closed Dense) (Mismatch RelLTEQ Word32)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelLTEQ Word32
mm
      DijkstraUtxoPredFailure era
InputSetEmptyUTxO -> DijkstraUtxoPredFailure era
-> Word -> Encode Open (DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
InputSetEmptyUTxO Word
4
      FeeTooSmallUTxO Mismatch RelGTEQ Coin
mm -> (Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era
forall era. Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era
FeeTooSmallUTxO Word
5 Encode Open (Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelGTEQ Coin)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelGTEQ Coin
-> Encode (Closed Dense) (Mismatch RelGTEQ Coin)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelGTEQ Coin
mm
      ValueNotConservedUTxO Mismatch RelEQ (Value era)
mm -> (Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era
ValueNotConservedUTxO @era) Word
6 Encode
  Open (Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ (Value era))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ (Value era)
-> Encode (Closed Dense) (Mismatch RelEQ (Value era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ (Value era)
mm
      WrongNetwork Network
right NonEmptySet Addr
wrongs -> (Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era
WrongNetwork @era) Word
7 Encode
  Open (Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode Open (NonEmptySet Addr -> DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Network -> Encode (Closed Dense) Network
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Network
right Encode Open (NonEmptySet Addr -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet Addr)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet Addr -> Encode (Closed Dense) (NonEmptySet Addr)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet Addr
wrongs
      WrongNetworkWithdrawal Network
right NonEmptySet AccountAddress
wrongs -> (Network
 -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
WrongNetworkWithdrawal @era) Word
8 Encode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode
     Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Network -> Encode (Closed Dense) Network
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Network
right Encode
  Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet AccountAddress)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet AccountAddress
-> Encode (Closed Dense) (NonEmptySet AccountAddress)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet AccountAddress
wrongs
      OutputBootAddrAttrsTooBig NonEmpty (TxOut era)
outs -> (NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era
OutputBootAddrAttrsTooBig @era) Word
9 Encode Open (NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty (TxOut era))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (TxOut era)
-> Encode (Closed Dense) (NonEmpty (TxOut era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (TxOut era)
outs
      OutputTooBigUTxO NonEmpty (Int, Int, TxOut era)
outs -> (NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open
     (NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era
OutputTooBigUTxO @era) Word
10 Encode
  Open
  (NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty (Int, Int, TxOut era))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (Int, Int, TxOut era)
-> Encode (Closed Dense) (NonEmpty (Int, Int, TxOut era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (Int, Int, TxOut era)
outs
      InsufficientCollateral DeltaCoin
a Coin
b -> (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Word
-> Encode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
forall era. DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
InsufficientCollateral Word
11 Encode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) DeltaCoin
-> Encode Open (Coin -> DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> DeltaCoin -> Encode (Closed Dense) DeltaCoin
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To DeltaCoin
a Encode Open (Coin -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Coin
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Coin -> Encode (Closed Dense) Coin
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Coin
b
      ScriptsNotPaidUTxO NonEmptyMap TxIn (TxOut era)
a -> (NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era
forall era.
NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era
ScriptsNotPaidUTxO Word
12 Encode
  Open (NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptyMap TxIn (TxOut era))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptyMap TxIn (TxOut era)
-> Encode (Closed Dense) (NonEmptyMap TxIn (TxOut era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptyMap TxIn (TxOut era)
a
      ExUnitsTooBigUTxO Mismatch RelLTEQ ExUnits
mm -> (Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era
ExUnitsTooBigUTxO Word
13 Encode
  Open (Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ ExUnits)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelLTEQ ExUnits
-> Encode (Closed Dense) (Mismatch RelLTEQ ExUnits)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelLTEQ ExUnits
mm
      CollateralContainsNonADA Value era
a -> (Value era -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open (Value era -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Value era -> DijkstraUtxoPredFailure era
forall era. Value era -> DijkstraUtxoPredFailure era
CollateralContainsNonADA Word
14 Encode Open (Value era -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Value era)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Value era -> Encode (Closed Dense) (Value era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Value era
a
      WrongNetworkInTxBody Mismatch RelEQ Network
mm -> (Mismatch RelEQ Network -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelEQ Network -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ Network -> DijkstraUtxoPredFailure era
forall era. Mismatch RelEQ Network -> DijkstraUtxoPredFailure era
WrongNetworkInTxBody Word
15 Encode Open (Mismatch RelEQ Network -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ Network)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ Network
-> Encode (Closed Dense) (Mismatch RelEQ Network)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ Network
mm
      OutsideForecast SlotNo
a -> (SlotNo -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open (SlotNo -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum SlotNo -> DijkstraUtxoPredFailure era
forall era. SlotNo -> DijkstraUtxoPredFailure era
OutsideForecast Word
16 Encode Open (SlotNo -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) SlotNo
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> SlotNo -> Encode (Closed Dense) SlotNo
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To SlotNo
a
      TooManyCollateralInputs Mismatch RelLTEQ Word16
mm -> (Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era
TooManyCollateralInputs Word
17 Encode
  Open (Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ Word16)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelLTEQ Word16
-> Encode (Closed Dense) (Mismatch RelLTEQ Word16)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelLTEQ Word16
mm
      DijkstraUtxoPredFailure era
NoCollateralInputs -> DijkstraUtxoPredFailure era
-> Word -> Encode Open (DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
NoCollateralInputs Word
18
      IncorrectTotalCollateralField DeltaCoin
c1 Coin
c2 -> (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Word
-> Encode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
forall era. DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
IncorrectTotalCollateralField Word
19 Encode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) DeltaCoin
-> Encode Open (Coin -> DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> DeltaCoin -> Encode (Closed Dense) DeltaCoin
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To DeltaCoin
c1 Encode Open (Coin -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Coin
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Coin -> Encode (Closed Dense) Coin
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Coin
c2
      BabbageOutputTooSmallUTxO NonEmpty (TxOut era, Coin)
x -> (NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era
forall era.
NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era
BabbageOutputTooSmallUTxO Word
20 Encode
  Open (NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty (TxOut era, Coin))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (TxOut era, Coin)
-> Encode (Closed Dense) (NonEmpty (TxOut era, Coin))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (TxOut era, Coin)
x
      BabbageNonDisjointRefInputs NonEmpty TxIn
x -> (NonEmpty TxIn -> DijkstraUtxoPredFailure era)
-> Word
-> Encode Open (NonEmpty TxIn -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty TxIn -> DijkstraUtxoPredFailure era
forall era. NonEmpty TxIn -> DijkstraUtxoPredFailure era
BabbageNonDisjointRefInputs Word
21 Encode Open (NonEmpty TxIn -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty TxIn)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty TxIn -> Encode (Closed Dense) (NonEmpty TxIn)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty TxIn
x
      PtrPresentInCollateralReturn TxOut era
x -> (TxOut era -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open (TxOut era -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum TxOut era -> DijkstraUtxoPredFailure era
forall era. TxOut era -> DijkstraUtxoPredFailure era
PtrPresentInCollateralReturn Word
22 Encode Open (TxOut era -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (TxOut era)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxOut era -> Encode (Closed Dense) (TxOut era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxOut era
x
      WrongNetworkInDirectDeposit Network
right NonEmptySet AccountAddress
wrongs -> (Network
 -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
WrongNetworkInDirectDeposit @era) Word
23 Encode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode
     Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Network -> Encode (Closed Dense) Network
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Network
right Encode
  Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet AccountAddress)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet AccountAddress
-> Encode (Closed Dense) (NonEmptySet AccountAddress)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet AccountAddress
wrongs
      WithdrawalsExceedAccountBalance NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
mm -> (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
 -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
      -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> DijkstraUtxoPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> DijkstraUtxoPredFailure era
WithdrawalsExceedAccountBalance Word
24 Encode
  Open
  (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
   -> DijkstraUtxoPredFailure era)
-> Encode
     (Closed Dense) (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin))
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> Encode
     (Closed Dense) (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
mm

instance
  ( Era era
  , DecCBOR (TxOut era)
  , EncCBOR (Value era)
  , DecCBOR (Value era)
  , DecCBOR (PredicateFailure (EraRule "UTXOS" era))
  ) =>
  DecCBOR (DijkstraUtxoPredFailure era)
  where
  decCBOR :: forall s. Decoder s (DijkstraUtxoPredFailure era)
decCBOR = Decode (Closed Dense) (DijkstraUtxoPredFailure era)
-> Decoder s (DijkstraUtxoPredFailure era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) (DijkstraUtxoPredFailure era)
 -> Decoder s (DijkstraUtxoPredFailure era))
-> ((Word -> Decode Open (DijkstraUtxoPredFailure era))
    -> Decode (Closed Dense) (DijkstraUtxoPredFailure era))
-> (Word -> Decode Open (DijkstraUtxoPredFailure era))
-> Decoder s (DijkstraUtxoPredFailure era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (Word -> Decode Open (DijkstraUtxoPredFailure era))
-> Decode (Closed Dense) (DijkstraUtxoPredFailure era)
forall t.
Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t
Summands Text
"DijkstraUtxoPredFailure" ((Word -> Decode Open (DijkstraUtxoPredFailure era))
 -> Decoder s (DijkstraUtxoPredFailure era))
-> (Word -> Decode Open (DijkstraUtxoPredFailure era))
-> Decoder s (DijkstraUtxoPredFailure era)
forall a b. (a -> b) -> a -> b
$ \case
    Word
0 -> (PredicateFailure (EraRule "UTXOS" era)
 -> DijkstraUtxoPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "UTXOS" era)
      -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
forall era.
PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
UtxosFailure Decode
  Open
  (PredicateFailure (EraRule "UTXOS" era)
   -> DijkstraUtxoPredFailure era)
-> Decode
     (Closed (ZonkAny MinVersion))
     (PredicateFailure (EraRule "UTXOS" era))
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode
  (Closed (ZonkAny MinVersion))
  (PredicateFailure (EraRule "UTXOS" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
1 -> (NonEmptySet TxIn -> DijkstraUtxoPredFailure era)
-> Decode Open (NonEmptySet TxIn -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet TxIn -> DijkstraUtxoPredFailure era
forall era. NonEmptySet TxIn -> DijkstraUtxoPredFailure era
BadInputsUTxO Decode Open (NonEmptySet TxIn -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 1)) (NonEmptySet TxIn)
-> Decode Open (DijkstraUtxoPredFailure 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)) (NonEmptySet TxIn)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
2 -> (ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era)
-> Decode
     Open (ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era
forall era.
ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era
OutsideValidityIntervalUTxO Decode
  Open (ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 3)) ValidityInterval
-> Decode Open (SlotNo -> DijkstraUtxoPredFailure 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)) ValidityInterval
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (SlotNo -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 2)) SlotNo
-> Decode Open (DijkstraUtxoPredFailure 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)) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
3 -> (Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era
MaxTxSizeUTxO Decode
  Open (Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 4)) (Mismatch RelLTEQ Word32)
-> Decode Open (DijkstraUtxoPredFailure 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 Word32)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
4 -> DijkstraUtxoPredFailure era
-> Decode Open (DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
InputSetEmptyUTxO
    Word
5 -> (Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era
forall era. Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era
FeeTooSmallUTxO Decode Open (Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 5)) (Mismatch RelGTEQ Coin)
-> Decode Open (DijkstraUtxoPredFailure 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 RelGTEQ Coin)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
6 -> (Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era
forall era.
Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era
ValueNotConservedUTxO Decode
  Open (Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 6)) (Mismatch RelEQ (Value era))
-> Decode Open (DijkstraUtxoPredFailure 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)) (Mismatch RelEQ (Value era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
7 -> (Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era
forall era.
Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era
WrongNetwork Decode
  Open (Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 8)) Network
-> Decode Open (NonEmptySet Addr -> DijkstraUtxoPredFailure 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)) Network
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (NonEmptySet Addr -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 7)) (NonEmptySet Addr)
-> Decode Open (DijkstraUtxoPredFailure 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)) (NonEmptySet Addr)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
8 -> (Network
 -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Decode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
WrongNetworkWithdrawal Decode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 10)) Network
-> Decode
     Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 10)) Network
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 9)) (NonEmptySet AccountAddress)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 9)) (NonEmptySet AccountAddress)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
9 -> (NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era)
-> Decode
     Open (NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era
forall era. NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era
OutputBootAddrAttrsTooBig Decode Open (NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 11)) (NonEmpty (TxOut era))
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 11)) (NonEmpty (TxOut era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
10 -> (NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era)
-> Decode
     Open
     (NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era
forall era.
NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era
OutputTooBigUTxO Decode
  Open
  (NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 12)) (NonEmpty (Int, Int, TxOut era))
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 12)) (NonEmpty (Int, Int, TxOut era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
11 -> (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Decode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
forall era. DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
InsufficientCollateral Decode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 14)) DeltaCoin
-> Decode Open (Coin -> DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 14)) DeltaCoin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny MaxVersion)) Coin
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny MaxVersion)) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
12 -> (NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era)
-> Decode
     Open (NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era
forall era.
NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era
ScriptsNotPaidUTxO Decode
  Open (NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 15)) (NonEmptyMap TxIn (TxOut era))
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 15)) (NonEmptyMap TxIn (TxOut era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
13 -> (Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era
ExUnitsTooBigUTxO Decode
  Open (Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 16)) (Mismatch RelLTEQ ExUnits)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 16)) (Mismatch RelLTEQ ExUnits)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
14 -> (Value era -> DijkstraUtxoPredFailure era)
-> Decode Open (Value era -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Value era -> DijkstraUtxoPredFailure era
forall era. Value era -> DijkstraUtxoPredFailure era
CollateralContainsNonADA Decode Open (Value era -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 17)) (Value era)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 17)) (Value era)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
15 -> (Mismatch RelEQ Network -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelEQ Network -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ Network -> DijkstraUtxoPredFailure era
forall era. Mismatch RelEQ Network -> DijkstraUtxoPredFailure era
WrongNetworkInTxBody Decode Open (Mismatch RelEQ Network -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 18)) (Mismatch RelEQ Network)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 18)) (Mismatch RelEQ Network)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
16 -> (SlotNo -> DijkstraUtxoPredFailure era)
-> Decode Open (SlotNo -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD SlotNo -> DijkstraUtxoPredFailure era
forall era. SlotNo -> DijkstraUtxoPredFailure era
OutsideForecast Decode Open (SlotNo -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 19)) SlotNo
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 19)) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
17 -> (Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era
TooManyCollateralInputs Decode
  Open (Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 20)) (Mismatch RelLTEQ Word16)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 20)) (Mismatch RelLTEQ Word16)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
18 -> DijkstraUtxoPredFailure era
-> Decode Open (DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
NoCollateralInputs
    Word
19 -> (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Decode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
forall era. DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
IncorrectTotalCollateralField Decode Open (DeltaCoin -> Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 22)) DeltaCoin
-> Decode Open (Coin -> DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 22)) DeltaCoin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 21)) Coin
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 21)) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
20 -> (NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era)
-> Decode
     Open (NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era
forall era.
NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era
BabbageOutputTooSmallUTxO Decode
  Open (NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 23)) (NonEmpty (TxOut era, Coin))
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 23)) (NonEmpty (TxOut era, Coin))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
21 -> (NonEmpty TxIn -> DijkstraUtxoPredFailure era)
-> Decode Open (NonEmpty TxIn -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty TxIn -> DijkstraUtxoPredFailure era
forall era. NonEmpty TxIn -> DijkstraUtxoPredFailure era
BabbageNonDisjointRefInputs Decode Open (NonEmpty TxIn -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 24)) (NonEmpty TxIn)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 24)) (NonEmpty TxIn)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
22 -> (TxOut era -> DijkstraUtxoPredFailure era)
-> Decode Open (TxOut era -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD TxOut era -> DijkstraUtxoPredFailure era
forall era. TxOut era -> DijkstraUtxoPredFailure era
PtrPresentInCollateralReturn Decode Open (TxOut era -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 25)) (TxOut era)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 25)) (TxOut era)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
23 -> (Network
 -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Decode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
WrongNetworkInDirectDeposit Decode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 27)) Network
-> Decode
     Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 27)) Network
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  Open (NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 26)) (NonEmptySet AccountAddress)
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 26)) (NonEmptySet AccountAddress)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
24 -> (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
 -> DijkstraUtxoPredFailure era)
-> Decode
     Open
     (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
      -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> DijkstraUtxoPredFailure era
forall era.
NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
-> DijkstraUtxoPredFailure era
WithdrawalsExceedAccountBalance Decode
  Open
  (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin)
   -> DijkstraUtxoPredFailure era)
-> Decode
     (Closed (ZonkAny 28))
     (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin))
-> Decode Open (DijkstraUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode
  (Closed (ZonkAny 28))
  (NonEmptyMap AccountAddress (Mismatch RelLTEQ Coin))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
n -> Word -> Decode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

-- =====================================================
-- Injecting from one PredicateFailure to another

conwayToDijkstraUtxoPredFailure ::
  forall era.
  ConwayUtxoPredFailure era ->
  DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure :: forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure = \case
  Conway.BadInputsUTxO NonEmptySet TxIn
x -> NonEmptySet TxIn -> DijkstraUtxoPredFailure era
forall era. NonEmptySet TxIn -> DijkstraUtxoPredFailure era
BadInputsUTxO NonEmptySet TxIn
x
  Conway.OutsideValidityIntervalUTxO ValidityInterval
vi SlotNo
slotNo -> ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era
forall era.
ValidityInterval -> SlotNo -> DijkstraUtxoPredFailure era
OutsideValidityIntervalUTxO ValidityInterval
vi SlotNo
slotNo
  Conway.MaxTxSizeUTxO Mismatch RelLTEQ Word32
m -> Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Word32 -> DijkstraUtxoPredFailure era
MaxTxSizeUTxO Mismatch RelLTEQ Word32
m
  ConwayUtxoPredFailure era
Conway.InputSetEmptyUTxO -> DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
InputSetEmptyUTxO
  Conway.FeeTooSmallUTxO Mismatch RelGTEQ Coin
m -> Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era
forall era. Mismatch RelGTEQ Coin -> DijkstraUtxoPredFailure era
FeeTooSmallUTxO Mismatch RelGTEQ Coin
m
  Conway.ValueNotConservedUTxO Mismatch RelEQ (Value era)
m -> Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era
forall era.
Mismatch RelEQ (Value era) -> DijkstraUtxoPredFailure era
ValueNotConservedUTxO Mismatch RelEQ (Value era)
m
  Conway.WrongNetwork Network
x NonEmptySet Addr
y -> Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era
forall era.
Network -> NonEmptySet Addr -> DijkstraUtxoPredFailure era
WrongNetwork Network
x NonEmptySet Addr
y
  Conway.WrongNetworkWithdrawal Network
x NonEmptySet AccountAddress
y -> Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraUtxoPredFailure era
WrongNetworkWithdrawal Network
x NonEmptySet AccountAddress
y
  Conway.OutputTooSmallUTxO NonEmpty (TxOut era)
_ -> String -> DijkstraUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `OutputTooSmallUTxO` for DijkstraUTXO"
  Conway.UtxosFailure PredicateFailure (EraRule "UTXOS" era)
x -> PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
forall era.
PredicateFailure (EraRule "UTXOS" era)
-> DijkstraUtxoPredFailure era
UtxosFailure PredicateFailure (EraRule "UTXOS" era)
x
  Conway.OutputBootAddrAttrsTooBig NonEmpty (TxOut era)
xs -> NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era
forall era. NonEmpty (TxOut era) -> DijkstraUtxoPredFailure era
OutputBootAddrAttrsTooBig NonEmpty (TxOut era)
xs
  Conway.OutputTooBigUTxO NonEmpty (Int, Int, TxOut era)
xs -> NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era
forall era.
NonEmpty (Int, Int, TxOut era) -> DijkstraUtxoPredFailure era
OutputTooBigUTxO NonEmpty (Int, Int, TxOut era)
xs
  Conway.InsufficientCollateral DeltaCoin
c1 Coin
c2 -> DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
forall era. DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
InsufficientCollateral DeltaCoin
c1 Coin
c2
  Conway.ScriptsNotPaidUTxO NonEmptyMap TxIn (TxOut era)
u -> NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era
forall era.
NonEmptyMap TxIn (TxOut era) -> DijkstraUtxoPredFailure era
ScriptsNotPaidUTxO NonEmptyMap TxIn (TxOut era)
u
  Conway.ExUnitsTooBigUTxO Mismatch RelLTEQ ExUnits
m -> Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ ExUnits -> DijkstraUtxoPredFailure era
ExUnitsTooBigUTxO Mismatch RelLTEQ ExUnits
m
  Conway.CollateralContainsNonADA Value era
v -> Value era -> DijkstraUtxoPredFailure era
forall era. Value era -> DijkstraUtxoPredFailure era
CollateralContainsNonADA Value era
v
  Conway.WrongNetworkInTxBody Mismatch RelEQ Network
m -> Mismatch RelEQ Network -> DijkstraUtxoPredFailure era
forall era. Mismatch RelEQ Network -> DijkstraUtxoPredFailure era
WrongNetworkInTxBody Mismatch RelEQ Network
m
  Conway.OutsideForecast SlotNo
sno -> SlotNo -> DijkstraUtxoPredFailure era
forall era. SlotNo -> DijkstraUtxoPredFailure era
OutsideForecast SlotNo
sno
  Conway.TooManyCollateralInputs Mismatch RelLTEQ Word16
m -> Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Word16 -> DijkstraUtxoPredFailure era
TooManyCollateralInputs Mismatch RelLTEQ Word16
m
  ConwayUtxoPredFailure era
Conway.NoCollateralInputs -> DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
NoCollateralInputs
  Conway.IncorrectTotalCollateralField DeltaCoin
dc Coin
c -> DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
forall era. DeltaCoin -> Coin -> DijkstraUtxoPredFailure era
IncorrectTotalCollateralField DeltaCoin
dc Coin
c
  Conway.BabbageOutputTooSmallUTxO NonEmpty (TxOut era, Coin)
x -> NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era
forall era.
NonEmpty (TxOut era, Coin) -> DijkstraUtxoPredFailure era
BabbageOutputTooSmallUTxO NonEmpty (TxOut era, Coin)
x
  Conway.BabbageNonDisjointRefInputs NonEmpty TxIn
txin -> NonEmpty TxIn -> DijkstraUtxoPredFailure era
forall era. NonEmpty TxIn -> DijkstraUtxoPredFailure era
BabbageNonDisjointRefInputs NonEmpty TxIn
txin