{-# 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,
  DijkstraUtxoPredFailure (..),
  conwayToDijkstraUtxoPredFailure,
) where

import Cardano.Ledger.Address (
  Addr (..),
  RewardAccount,
 )
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.Babbage.Rules (
  BabbageUtxoPredFailure,
  babbageUtxoValidation,
 )
import Cardano.Ledger.BaseTypes (
  Mismatch (..),
  Network,
  Relation (..),
  ShelleyBase,
  SlotNo,
  StrictMaybe (..),
 )
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
 )
import Cardano.Ledger.Binary.Coders (
  Decode (..),
  Encode (..),
  decode,
  encode,
  (!>),
  (<!),
 )
import Cardano.Ledger.Coin (Coin, DeltaCoin)
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Rules (
  ConwayUTXOS,
  ConwayUtxoPredFailure,
  ConwayUtxosPredFailure (..),
  UtxoEnv,
  allegraToConwayUtxoPredFailure,
  alonzoToConwayUtxoPredFailure,
  babbageToConwayUtxoPredFailure,
 )
import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Credential (StakeReference (..))
import Cardano.Ledger.Dijkstra.Era (DijkstraEra, DijkstraUTXO)
import Cardano.Ledger.Dijkstra.Rules.Utxos ()
import Cardano.Ledger.Plutus (ExUnits)
import Cardano.Ledger.Rules.ValidationMode (failOnJustStatic)
import Cardano.Ledger.Shelley.LedgerState (UTxOState)
import qualified Cardano.Ledger.Shelley.LedgerState as Shelley (UTxOState)
import Cardano.Ledger.Shelley.Rules (
  ShelleyUtxoPredFailure,
 )
import qualified Cardano.Ledger.Shelley.Rules as Shelley (UtxoEnv, validSizeComputationCheck)
import Cardano.Ledger.State (
  EraCertState (..),
  EraUTxO,
  UTxO (..),
 )
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended (
  Embed (..),
  Rule,
  STS (..),
  TRC (..),
  TransitionRule,
  judgmentContext,
  trans,
 )
import Data.Coerce (coerce)
import Data.List.NonEmpty (NonEmpty)
import Data.Set (Set)
import Data.Word (Word32)
import GHC.Generics (Generic)
import GHC.Natural (Natural)
import Lens.Micro ((^.))
import NoThunks.Class (InspectHeapNamed (..), NoThunks (..))

-- ======================================================

-- | Predicate failure for the Dijkstra Era
data DijkstraUtxoPredFailure era
  = -- | Subtransition Failures
    UtxosFailure (PredicateFailure (EraRule "UTXOS" era))
  | -- | The bad transaction inputs
    BadInputsUTxO (Set 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
      (Set Addr)
  | WrongNetworkWithdrawal
      -- | the expected network id
      Network
      -- | the set of reward addresses with incorrect network IDs
      (Set RewardAccount)
  | -- | list of supplied transaction outputs that are too small
    OutputTooSmallUTxO [TxOut era]
  | -- | list of supplied bad transaction outputs
    OutputBootAddrAttrsTooBig [TxOut era]
  | -- | list of supplied bad transaction output triples (actualSize,PParameterMaxValue,TxOut)
    OutputTooBigUTxO [(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 (UTxO 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 Natural)
  | 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 [(TxOut era, Coin)]
  | -- | TxIns that appear in both inputs and reference inputs
    BabbageNonDisjointRefInputs (NonEmpty TxIn)
  | PtrPresentInCollateralReturn (TxOut era)
  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)

deriving via
  InspectHeapNamed "ConwayUtxoPred" (DijkstraUtxoPredFailure era)
  instance
    NoThunks (DijkstraUtxoPredFailure era)

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

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

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)

utxoTransition ::
  forall era.
  ( EraUTxO era
  , EraCertState era
  , BabbageEraTxBody era
  , AlonzoEraTxWits 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) ~ UtxoEnv era
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Signal (EraRule "UTXO" era) ~ Tx 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
    Environment (EraRule "UTXOS" era) ~ UtxoEnv era
  , State (EraRule "UTXOS" era) ~ UTxOState era
  , Signal (EraRule "UTXOS" era) ~ Tx TopTx era
  , Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)
  ) =>
  TransitionRule (EraRule "UTXO" era)
utxoTransition :: forall era.
(EraUTxO era, EraCertState era, BabbageEraTxBody era,
 AlonzoEraTxWits 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) ~ UtxoEnv era,
 State (EraRule "UTXO" era) ~ UTxOState era,
 Signal (EraRule "UTXO" era) ~ Tx TopTx era,
 BaseM (EraRule "UTXO" era) ~ ShelleyBase, STS (EraRule "UTXO" era),
 Environment (EraRule "UTXOS" era) ~ UtxoEnv era,
 State (EraRule "UTXOS" era) ~ UTxOState era,
 Signal (EraRule "UTXOS" era) ~ Tx TopTx era,
 Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)) =>
TransitionRule (EraRule "UTXO" era)
utxoTransition = do
  TRC (_, _, tx) <- 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
  babbageUtxoValidation

  validateNoPtrInCollateralReturn $ tx ^. bodyTxL

  trans @(EraRule "UTXOS" era) =<< coerce <$> judgmentContext

instance
  forall era.
  ( EraTx era
  , EraUTxO era
  , ConwayEraTxBody era
  , AlonzoEraTxWits 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) ~ UtxoEnv era
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Signal (EraRule "UTXO" era) ~ Tx 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) ~ UtxoEnv era
  , State (EraRule "UTXOS" era) ~ UTxOState era
  , Signal (EraRule "UTXOS" era) ~ Tx TopTx era
  , EraCertState era
  , EraRule "UTXO" era ~ DijkstraUTXO era
  , SafeToHash (TxWits era)
  ) =>
  STS (DijkstraUTXO era)
  where
  type State (DijkstraUTXO era) = Shelley.UTxOState era
  type Signal (DijkstraUTXO era) = Tx TopTx era
  type Environment (DijkstraUTXO era) = Shelley.UtxoEnv 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, BabbageEraTxBody era,
 AlonzoEraTxWits 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) ~ UtxoEnv era,
 State (EraRule "UTXO" era) ~ UTxOState era,
 Signal (EraRule "UTXO" era) ~ Tx TopTx era,
 BaseM (EraRule "UTXO" era) ~ ShelleyBase, STS (EraRule "UTXO" era),
 Environment (EraRule "UTXOS" era) ~ UtxoEnv era,
 State (EraRule "UTXOS" era) ~ UTxOState era,
 Signal (EraRule "UTXOS" era) ~ Tx TopTx era,
 Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)) =>
TransitionRule (EraRule "UTXO" era)
utxoTransition @era]

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

instance
  ( Era era
  , 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 Set TxIn
ins -> (Set TxIn -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open (Set TxIn -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. Set TxIn -> DijkstraUtxoPredFailure era
BadInputsUTxO @era) Word
1 Encode Open (Set TxIn -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Set TxIn)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Set TxIn -> Encode (Closed Dense) (Set TxIn)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Set 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 Set Addr
wrongs -> (Network -> Set Addr -> DijkstraUtxoPredFailure era)
-> Word
-> Encode Open (Network -> Set Addr -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. Network -> Set Addr -> DijkstraUtxoPredFailure era
WrongNetwork @era) Word
7 Encode Open (Network -> Set Addr -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode Open (Set 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 (Set Addr -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Set Addr)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Set Addr -> Encode (Closed Dense) (Set Addr)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Set Addr
wrongs
      WrongNetworkWithdrawal Network
right Set RewardAccount
wrongs -> (Network -> Set RewardAccount -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Network -> Set RewardAccount -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network -> Set RewardAccount -> DijkstraUtxoPredFailure era
WrongNetworkWithdrawal @era) Word
8 Encode
  Open (Network -> Set RewardAccount -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode Open (Set RewardAccount -> 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 (Set RewardAccount -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Set RewardAccount)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Set RewardAccount -> Encode (Closed Dense) (Set RewardAccount)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Set RewardAccount
wrongs
      OutputTooSmallUTxO [TxOut era]
outs -> ([TxOut era] -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open ([TxOut era] -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. [TxOut era] -> DijkstraUtxoPredFailure era
OutputTooSmallUTxO @era) Word
9 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]
outs
      OutputBootAddrAttrsTooBig [TxOut era]
outs -> ([TxOut era] -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open ([TxOut era] -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. [TxOut era] -> DijkstraUtxoPredFailure era
OutputBootAddrAttrsTooBig @era) Word
10 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]
outs
      OutputTooBigUTxO [(Int, Int, TxOut era)]
outs -> ([(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open ([(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. [(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era
OutputTooBigUTxO @era) Word
11 Encode
  Open ([(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) [(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
!> [(Int, Int, TxOut era)]
-> Encode (Closed Dense) [(Int, Int, TxOut era)]
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To [(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
12 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 UTxO era
a -> (UTxO era -> DijkstraUtxoPredFailure era)
-> Word -> Encode Open (UTxO era -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum UTxO era -> DijkstraUtxoPredFailure era
forall era. UTxO era -> DijkstraUtxoPredFailure era
ScriptsNotPaidUTxO Word
13 Encode Open (UTxO era -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (UTxO era)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> UTxO era -> Encode (Closed Dense) (UTxO era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To UTxO 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
14 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
15 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
16 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
17 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 Natural
mm -> (Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era
TooManyCollateralInputs Word
18 Encode
  Open (Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ Natural)
-> Encode Open (DijkstraUtxoPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelLTEQ Natural
-> Encode (Closed Dense) (Mismatch RelLTEQ Natural)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelLTEQ Natural
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
19
      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
20 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 [(TxOut era, Coin)]
x -> ([(TxOut era, Coin)] -> DijkstraUtxoPredFailure era)
-> Word
-> Encode Open ([(TxOut era, Coin)] -> DijkstraUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum [(TxOut era, Coin)] -> DijkstraUtxoPredFailure era
forall era. [(TxOut era, Coin)] -> DijkstraUtxoPredFailure era
BabbageOutputTooSmallUTxO Word
21 Encode Open ([(TxOut era, Coin)] -> DijkstraUtxoPredFailure era)
-> Encode (Closed Dense) [(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
!> [(TxOut era, Coin)] -> Encode (Closed Dense) [(TxOut era, Coin)]
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To [(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
22 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
23 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

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 0)) (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 0)) (PredicateFailure (EraRule "UTXOS" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
1 -> (Set TxIn -> DijkstraUtxoPredFailure era)
-> Decode Open (Set TxIn -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Set TxIn -> DijkstraUtxoPredFailure era
forall era. Set TxIn -> DijkstraUtxoPredFailure era
BadInputsUTxO Decode Open (Set TxIn -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 1)) (Set 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)) (Set 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 -> Set Addr -> DijkstraUtxoPredFailure era)
-> Decode Open (Network -> Set Addr -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network -> Set Addr -> DijkstraUtxoPredFailure era
forall era. Network -> Set Addr -> DijkstraUtxoPredFailure era
WrongNetwork Decode Open (Network -> Set Addr -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 8)) Network
-> Decode Open (Set 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 (Set Addr -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 7)) (Set 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)) (Set Addr)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
8 -> (Network -> Set RewardAccount -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Network -> Set RewardAccount -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network -> Set RewardAccount -> DijkstraUtxoPredFailure era
forall era.
Network -> Set RewardAccount -> DijkstraUtxoPredFailure era
WrongNetworkWithdrawal Decode
  Open (Network -> Set RewardAccount -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 10)) Network
-> Decode Open (Set RewardAccount -> 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 (Set RewardAccount -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 9)) (Set RewardAccount)
-> 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)) (Set RewardAccount)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
9 -> ([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
OutputTooSmallUTxO Decode Open ([TxOut era] -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 11)) [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)) [TxOut era]
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
10 -> ([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
OutputBootAddrAttrsTooBig Decode Open ([TxOut era] -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 12)) [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)) [TxOut era]
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
11 -> ([(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era)
-> Decode
     Open ([(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD [(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era
forall era. [(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era
OutputTooBigUTxO Decode
  Open ([(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 13)) [(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 13)) [(Int, Int, TxOut era)]
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
12 -> (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 15)) 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 15)) DeltaCoin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 14)) 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 14)) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
13 -> (UTxO era -> DijkstraUtxoPredFailure era)
-> Decode Open (UTxO era -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD UTxO era -> DijkstraUtxoPredFailure era
forall era. UTxO era -> DijkstraUtxoPredFailure era
ScriptsNotPaidUTxO Decode Open (UTxO era -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 16)) (UTxO 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 16)) (UTxO era)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
14 -> (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 17)) (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 17)) (Mismatch RelLTEQ ExUnits)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
15 -> (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 18)) (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 18)) (Value era)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
16 -> (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 19)) (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 19)) (Mismatch RelEQ Network)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
17 -> (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 20)) 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 20)) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
18 -> (Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era
TooManyCollateralInputs Decode
  Open (Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 21)) (Mismatch RelLTEQ Natural)
-> 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)) (Mismatch RelLTEQ Natural)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
19 -> DijkstraUtxoPredFailure era
-> Decode Open (DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD DijkstraUtxoPredFailure era
forall era. DijkstraUtxoPredFailure era
NoCollateralInputs
    Word
20 -> (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 23)) 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 23)) DeltaCoin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Coin -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 22)) 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 22)) Coin
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
21 -> ([(TxOut era, Coin)] -> DijkstraUtxoPredFailure era)
-> Decode Open ([(TxOut era, Coin)] -> DijkstraUtxoPredFailure era)
forall t. t -> Decode Open t
SumD [(TxOut era, Coin)] -> DijkstraUtxoPredFailure era
forall era. [(TxOut era, Coin)] -> DijkstraUtxoPredFailure era
BabbageOutputTooSmallUTxO Decode Open ([(TxOut era, Coin)] -> DijkstraUtxoPredFailure era)
-> Decode (Closed (ZonkAny 24)) [(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 24)) [(TxOut era, Coin)]
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
22 -> (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 25)) (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 25)) (NonEmpty TxIn)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
23 -> (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 26)) (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 26)) (TxOut era)
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 Set TxIn
x -> Set TxIn -> DijkstraUtxoPredFailure era
forall era. Set TxIn -> DijkstraUtxoPredFailure era
BadInputsUTxO Set 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 Set Addr
y -> Network -> Set Addr -> DijkstraUtxoPredFailure era
forall era. Network -> Set Addr -> DijkstraUtxoPredFailure era
WrongNetwork Network
x Set Addr
y
  Conway.WrongNetworkWithdrawal Network
x Set RewardAccount
y -> Network -> Set RewardAccount -> DijkstraUtxoPredFailure era
forall era.
Network -> Set RewardAccount -> DijkstraUtxoPredFailure era
WrongNetworkWithdrawal Network
x Set RewardAccount
y
  Conway.OutputTooSmallUTxO [TxOut era]
x -> [TxOut era] -> DijkstraUtxoPredFailure era
forall era. [TxOut era] -> DijkstraUtxoPredFailure era
OutputTooSmallUTxO [TxOut era]
x
  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 [TxOut era]
xs -> [TxOut era] -> DijkstraUtxoPredFailure era
forall era. [TxOut era] -> DijkstraUtxoPredFailure era
OutputBootAddrAttrsTooBig [TxOut era]
xs
  Conway.OutputTooBigUTxO [(Int, Int, TxOut era)]
xs -> [(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era
forall era. [(Int, Int, TxOut era)] -> DijkstraUtxoPredFailure era
OutputTooBigUTxO [(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 UTxO era
u -> UTxO era -> DijkstraUtxoPredFailure era
forall era. UTxO era -> DijkstraUtxoPredFailure era
ScriptsNotPaidUTxO UTxO 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 Natural
m -> Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era
forall era. Mismatch RelLTEQ Natural -> DijkstraUtxoPredFailure era
TooManyCollateralInputs Mismatch RelLTEQ Natural
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 [(TxOut era, Coin)]
txouts -> [(TxOut era, Coin)] -> DijkstraUtxoPredFailure era
forall era. [(TxOut era, Coin)] -> DijkstraUtxoPredFailure era
BabbageOutputTooSmallUTxO [(TxOut era, Coin)]
txouts
  Conway.BabbageNonDisjointRefInputs NonEmpty TxIn
txin -> NonEmpty TxIn -> DijkstraUtxoPredFailure era
forall era. NonEmpty TxIn -> DijkstraUtxoPredFailure era
BabbageNonDisjointRefInputs NonEmpty TxIn
txin