{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE EmptyDataDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Rules.SubUtxo (
  DijkstraSUBUTXO,
  DijkstraSubUtxoPredFailure (..),
  DijkstraSubUtxoEvent (..),
  SubUtxoEnv (..),
) where

import Cardano.Ledger.Allegra.Rules (
  AllegraUtxoPredFailure,
  shelleyToAllegraUtxoPredFailure,
 )
import qualified Cardano.Ledger.Allegra.Rules as Allegra (
  validateOutsideValidityIntervalUTxO,
 )
import Cardano.Ledger.Alonzo.Rules (AlonzoUtxoPredFailure)
import qualified Cardano.Ledger.Alonzo.Rules as Alonzo (
  validateOutputTooBigUTxO,
  validateOutsideForecast,
  validateWrongNetworkInTxBody,
 )
import Cardano.Ledger.Babbage.Rules (BabbageUtxoPredFailure)
import qualified Cardano.Ledger.Babbage.Rules as Babbage (
  validateOutputTooSmallUTxO,
 )
import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
  sizedValue,
 )
import Cardano.Ledger.Binary.Coders
import Cardano.Ledger.Coin (Coin)
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Governance
import Cardano.Ledger.Conway.Rules (
  ConwayUtxoPredFailure,
  allegraToConwayUtxoPredFailure,
  alonzoToConwayUtxoPredFailure,
  babbageToConwayUtxoPredFailure,
 )
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraSUBUTXO,
 )
import Cardano.Ledger.Dijkstra.Rules.Utxo (
  DijkstraUtxoPredFailure (..),
  conwayToDijkstraUtxoPredFailure,
  validateWrongNetworkInDirectDeposit,
 )
import Cardano.Ledger.Dijkstra.TxBody (DijkstraEraTxBody)
import Cardano.Ledger.Rules.ValidationMode
import Cardano.Ledger.Shelley.LedgerState (UTxOState, utxosGovState, utxosUtxo)
import Cardano.Ledger.Shelley.Rules (ShelleyUtxoPredFailure, updateUTxOStateNoFees)
import qualified Cardano.Ledger.Shelley.Rules as Shelley (
  validateBadInputsUTxO,
  validateInputSetEmptyUTxO,
  validateOutputBootAddrAttrsTooBig,
  validateWrongNetwork,
  validateWrongNetworkWithdrawal,
 )
import Cardano.Ledger.State
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData)
import Control.Monad.Trans.Reader (asks)
import Control.State.Transition.Extended
import Data.List.NonEmpty (NonEmpty)
import qualified Data.Set as Set
import Data.Set.NonEmpty (NonEmptySet)
import Data.Word (Word32)
import GHC.Generics (Generic)
import Lens.Micro

data SubUtxoEnv era = SubUtxoEnv
  { forall era. SubUtxoEnv era -> SlotNo
sueSlot :: SlotNo
  , forall era. SubUtxoEnv era -> PParams era
suePParams :: PParams era
  , forall era. SubUtxoEnv era -> CertState era
sueCertState :: CertState era
  , forall era. SubUtxoEnv era -> ScriptsProvided era
sueScriptsProvided :: ScriptsProvided era
  , forall era. SubUtxoEnv era -> UTxO era
sueOriginalUtxo :: UTxO era
  , forall era. SubUtxoEnv era -> IsValid
sueTopTxIsValid :: IsValid
  }

data DijkstraSubUtxoPredFailure era
  = -- | The bad transaction inputs
    SubBadInputsUTxO (NonEmptySet TxIn)
  | SubOutsideValidityIntervalUTxO
      -- | transaction's validity interval
      ValidityInterval
      -- | current slot
      SlotNo
  | SubMaxTxSizeUTxO (Mismatch RelLTEQ Word32)
  | SubInputSetEmptyUTxO
  | -- | the set of addresses with incorrect network IDs
    SubWrongNetwork
      -- | the expected network id
      Network
      -- | the set of addresses with incorrect network IDs
      (NonEmptySet Addr)
  | SubWrongNetworkWithdrawal
      -- | the expected network id
      Network
      -- | the set of reward addresses with incorrect network IDs
      (NonEmptySet AccountAddress)
  | -- | list of supplied bad transaction outputs
    SubOutputBootAddrAttrsTooBig (NonEmpty (TxOut era))
  | -- | list of supplied bad transaction output triples (actualSize,PParameterMaxValue,TxOut)
    SubOutputTooBigUTxO (NonEmpty (Int, Int, TxOut era))
  | -- | Wrong Network ID in body
    SubWrongNetworkInTxBody
      (Mismatch RelEQ Network)
  | -- | slot number outside consensus forecast range
    SubOutsideForecast SlotNo
  | -- | list of supplied transaction outputs that are too small,
    -- together with the minimum value for the given output.
    SubBabbageOutputTooSmallUTxO (NonEmpty (TxOut era, Coin))
  | SubWrongNetworkInDirectDeposit
      -- | the expected network id
      Network
      -- | the set of account addresses with incorrect network IDs
      (NonEmptySet AccountAddress)
  deriving ((forall x.
 DijkstraSubUtxoPredFailure era
 -> Rep (DijkstraSubUtxoPredFailure era) x)
-> (forall x.
    Rep (DijkstraSubUtxoPredFailure era) x
    -> DijkstraSubUtxoPredFailure era)
-> Generic (DijkstraSubUtxoPredFailure era)
forall x.
Rep (DijkstraSubUtxoPredFailure era) x
-> DijkstraSubUtxoPredFailure era
forall x.
DijkstraSubUtxoPredFailure era
-> Rep (DijkstraSubUtxoPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraSubUtxoPredFailure era) x
-> DijkstraSubUtxoPredFailure era
forall era x.
DijkstraSubUtxoPredFailure era
-> Rep (DijkstraSubUtxoPredFailure era) x
$cfrom :: forall era x.
DijkstraSubUtxoPredFailure era
-> Rep (DijkstraSubUtxoPredFailure era) x
from :: forall x.
DijkstraSubUtxoPredFailure era
-> Rep (DijkstraSubUtxoPredFailure era) x
$cto :: forall era x.
Rep (DijkstraSubUtxoPredFailure era) x
-> DijkstraSubUtxoPredFailure era
to :: forall x.
Rep (DijkstraSubUtxoPredFailure era) x
-> DijkstraSubUtxoPredFailure era
Generic)

deriving stock instance
  ( Era era
  , Eq (Value era)
  , Eq (TxOut era)
  , Eq (Script era)
  , Eq TxIn
  ) =>
  Eq (DijkstraSubUtxoPredFailure era)

deriving stock instance
  ( Era era
  , Show (Value era)
  , Show (TxOut era)
  , Show (Script era)
  , Show TxIn
  ) =>
  Show (DijkstraSubUtxoPredFailure era)

instance
  ( Era era
  , NFData (Value era)
  , NFData (TxOut era)
  ) =>
  NFData (DijkstraSubUtxoPredFailure era)

type instance EraRuleFailure "SUBUTXO" DijkstraEra = DijkstraSubUtxoPredFailure DijkstraEra

type instance EraRuleEvent "SUBUTXO" DijkstraEra = DijkstraSubUtxoEvent DijkstraEra

instance InjectRuleFailure "SUBUTXO" DijkstraSubUtxoPredFailure DijkstraEra

instance InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
injectFailure = DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure

instance InjectRuleFailure "SUBUTXO" ConwayUtxoPredFailure DijkstraEra where
  injectFailure :: ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
injectFailure = DijkstraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraSubUtxoPredFailure DijkstraEra)
-> (ConwayUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> ConwayUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall era.
ConwayUtxoPredFailure era -> DijkstraUtxoPredFailure era
conwayToDijkstraUtxoPredFailure

instance InjectRuleFailure "SUBUTXO" AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
injectFailure =
    DijkstraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure
      (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraSubUtxoPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 "SUBUTXO" BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
injectFailure =
    DijkstraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure
      (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraSubUtxoPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 "SUBUTXO" AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
injectFailure =
    DijkstraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure
      (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraSubUtxoPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 "SUBUTXO" ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXO" DijkstraEra
injectFailure =
    DijkstraUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure
      (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraSubUtxoPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> DijkstraSubUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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 InjectRuleEvent "SUBUTXO" DijkstraSubUtxoEvent DijkstraEra

data DijkstraSubUtxoEvent era
  = TotalDeposits (SafeHash EraIndependentTxBody) Coin
  | -- | The UTxOs consumed and created by a signal tx
    TxUTxODiff
      -- | UTxO consumed
      (UTxO era)
      -- | UTxO created
      (UTxO era)
  deriving ((forall x.
 DijkstraSubUtxoEvent era -> Rep (DijkstraSubUtxoEvent era) x)
-> (forall x.
    Rep (DijkstraSubUtxoEvent era) x -> DijkstraSubUtxoEvent era)
-> Generic (DijkstraSubUtxoEvent era)
forall x.
Rep (DijkstraSubUtxoEvent era) x -> DijkstraSubUtxoEvent era
forall x.
DijkstraSubUtxoEvent era -> Rep (DijkstraSubUtxoEvent era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraSubUtxoEvent era) x -> DijkstraSubUtxoEvent era
forall era x.
DijkstraSubUtxoEvent era -> Rep (DijkstraSubUtxoEvent era) x
$cfrom :: forall era x.
DijkstraSubUtxoEvent era -> Rep (DijkstraSubUtxoEvent era) x
from :: forall x.
DijkstraSubUtxoEvent era -> Rep (DijkstraSubUtxoEvent era) x
$cto :: forall era x.
Rep (DijkstraSubUtxoEvent era) x -> DijkstraSubUtxoEvent era
to :: forall x.
Rep (DijkstraSubUtxoEvent era) x -> DijkstraSubUtxoEvent era
Generic)

deriving instance (Era era, Eq (TxOut era)) => Eq (DijkstraSubUtxoEvent era)

instance (Era era, NFData (TxOut era)) => NFData (DijkstraSubUtxoEvent era)

instance
  ( EraTx era
  , EraStake era
  , EraCertState era
  , DijkstraEraTxBody era
  , AlonzoEraTxWits era
  , ConwayEraGov era
  , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era
  , InjectRuleFailure "SUBUTXO" ShelleyUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" AllegraUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" AlonzoUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" BabbageUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era
  ) =>
  STS (DijkstraSUBUTXO era)
  where
  type State (DijkstraSUBUTXO era) = UTxOState era
  type Signal (DijkstraSUBUTXO era) = Tx SubTx era
  type Environment (DijkstraSUBUTXO era) = SubUtxoEnv era
  type BaseM (DijkstraSUBUTXO era) = ShelleyBase
  type PredicateFailure (DijkstraSUBUTXO era) = DijkstraSubUtxoPredFailure era
  type Event (DijkstraSUBUTXO era) = DijkstraSubUtxoEvent era

  transitionRules :: [TransitionRule (DijkstraSUBUTXO era)]
transitionRules = [forall era.
(EraTx era, EraStake era, EraCertState era, DijkstraEraTxBody era,
 AlonzoEraTxWits era, STS (EraRule "SUBUTXO" era),
 EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era,
 InjectRuleFailure "SUBUTXO" ShelleyUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" AllegraUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" AlonzoUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" BabbageUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era) =>
TransitionRule (EraRule "SUBUTXO" era)
dijkstraSubUtxoTransition @era]

dijkstraSubUtxoTransition ::
  forall era.
  ( EraTx era
  , EraStake era
  , EraCertState era
  , DijkstraEraTxBody era
  , AlonzoEraTxWits era
  , STS (EraRule "SUBUTXO" era)
  , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era
  , InjectRuleFailure "SUBUTXO" ShelleyUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" AllegraUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" AlonzoUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" BabbageUtxoPredFailure era
  , InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era
  ) =>
  TransitionRule (EraRule "SUBUTXO" era)
dijkstraSubUtxoTransition :: forall era.
(EraTx era, EraStake era, EraCertState era, DijkstraEraTxBody era,
 AlonzoEraTxWits era, STS (EraRule "SUBUTXO" era),
 EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era,
 InjectRuleFailure "SUBUTXO" ShelleyUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" AllegraUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" AlonzoUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" BabbageUtxoPredFailure era,
 InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era) =>
TransitionRule (EraRule "SUBUTXO" era)
dijkstraSubUtxoTransition = do
  TRC (SubUtxoEnv slot pp certState _ originalUtxo (IsValid isValid), utxoState, tx) <-
    Rule
  (DijkstraSUBUTXO era)
  'Transition
  (RuleContext 'Transition (DijkstraSUBUTXO era))
F (Clause (DijkstraSUBUTXO era) 'Transition)
  (TRC (DijkstraSUBUTXO era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext

  let txBody = Tx SubTx era
Signal (DijkstraSUBUTXO era)
tx Tx SubTx era
-> Getting (TxBody SubTx era) (Tx SubTx era) (TxBody SubTx era)
-> TxBody SubTx era
forall s a. s -> Getting a s a -> a
^. Getting (TxBody SubTx era) (Tx SubTx era) (TxBody 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

  runTest $ Allegra.validateOutsideValidityIntervalUTxO slot txBody

  sysSt <- liftSTS $ asks systemStart
  ei <- liftSTS $ asks epochInfo
  runTest $ Alonzo.validateOutsideForecast ei slot sysSt tx

  let allSizedOutputs = TxBody SubTx era
txBody TxBody SubTx era
-> Getting
     (StrictSeq (Sized (TxOut era)))
     (TxBody SubTx era)
     (StrictSeq (Sized (TxOut era)))
-> StrictSeq (Sized (TxOut era))
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictSeq (Sized (TxOut era)))
  (TxBody SubTx 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
  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
  runTest $ Alonzo.validateOutputTooBigUTxO pp allOutputs

  runTest $ Shelley.validateInputSetEmptyUTxO txBody

  let inputs = TxBody SubTx era
txBody TxBody SubTx era
-> Getting (Set TxIn) (TxBody SubTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. Getting (Set TxIn) (TxBody SubTx 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
  let refInputs = TxBody SubTx era
txBody TxBody SubTx era
-> Getting (Set TxIn) (TxBody SubTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. Getting (Set TxIn) (TxBody SubTx era) (Set TxIn)
forall era (l :: TxLevel).
BabbageEraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel). Lens' (TxBody l era) (Set TxIn)
referenceInputsTxBodyL
  runTest $ Shelley.validateBadInputsUTxO originalUtxo (inputs `Set.union` refInputs)
  runTest $ Shelley.validateBadInputsUTxO (utxosUtxo utxoState) inputs

  runTestOnSignal $ Shelley.validateOutputBootAddrAttrsTooBig allOutputs

  runTestOnSignal $ Babbage.validateOutputTooSmallUTxO pp allSizedOutputs

  netId <- liftSTS $ asks networkId
  runTestOnSignal $ Shelley.validateWrongNetwork netId allOutputs
  runTestOnSignal $ Shelley.validateWrongNetworkWithdrawal netId txBody
  runTestOnSignal $ validateWrongNetworkInDirectDeposit netId txBody
  runTestOnSignal $ Alonzo.validateWrongNetworkInTxBody netId txBody

  if isValid
    then
      updateUTxOStateNoFees
        pp
        utxoState
        txBody
        certState
        (utxosGovState utxoState)
        (tellEvent . TotalDeposits (hashAnnotated txBody))
        (\UTxO era
a UTxO era
b -> Event (DijkstraSUBUTXO era)
-> F (Clause (DijkstraSUBUTXO era) 'Transition) ()
forall sts (ctx :: RuleType). Event sts -> Rule sts ctx ()
tellEvent (Event (DijkstraSUBUTXO era)
 -> F (Clause (DijkstraSUBUTXO era) 'Transition) ())
-> Event (DijkstraSUBUTXO era)
-> F (Clause (DijkstraSUBUTXO era) 'Transition) ()
forall a b. (a -> b) -> a -> b
$ UTxO era -> UTxO era -> DijkstraSubUtxoEvent era
forall era. UTxO era -> UTxO era -> DijkstraSubUtxoEvent era
TxUTxODiff UTxO era
a UTxO era
b)
    else
      pure utxoState

instance
  ( Era era
  , EncCBOR (TxOut era)
  ) =>
  EncCBOR (DijkstraSubUtxoPredFailure era)
  where
  encCBOR :: DijkstraSubUtxoPredFailure era -> Encoding
encCBOR =
    Encode Open (DijkstraSubUtxoPredFailure era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode Open (DijkstraSubUtxoPredFailure era) -> Encoding)
-> (DijkstraSubUtxoPredFailure era
    -> Encode Open (DijkstraSubUtxoPredFailure era))
-> DijkstraSubUtxoPredFailure era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      SubBadInputsUTxO NonEmptySet TxIn
ins -> (NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode Open (NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era
SubBadInputsUTxO @era) Word
0 Encode Open (NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet TxIn)
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubOutsideValidityIntervalUTxO ValidityInterval
a SlotNo
b -> (ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open (ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era
forall era.
ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era
SubOutsideValidityIntervalUTxO Word
1 Encode
  Open (ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) ValidityInterval
-> Encode Open (SlotNo -> DijkstraSubUtxoPredFailure 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 -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) SlotNo
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubMaxTxSizeUTxO Mismatch RelLTEQ Word32
mm -> (Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era
forall era.
Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era
SubMaxTxSizeUTxO Word
2 Encode
  Open (Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelLTEQ Word32)
-> Encode Open (DijkstraSubUtxoPredFailure 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
      DijkstraSubUtxoPredFailure era
SubInputSetEmptyUTxO -> DijkstraSubUtxoPredFailure era
-> Word -> Encode Open (DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DijkstraSubUtxoPredFailure era
forall era. DijkstraSubUtxoPredFailure era
SubInputSetEmptyUTxO Word
3
      SubWrongNetwork Network
right NonEmptySet Addr
wrongs -> (Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open
     (Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era
SubWrongNetwork @era) Word
4 Encode
  Open
  (Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode Open (NonEmptySet Addr -> DijkstraSubUtxoPredFailure 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 -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet Addr)
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubWrongNetworkWithdrawal Network
right NonEmptySet AccountAddress
wrongs -> (Network
 -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
SubWrongNetworkWithdrawal @era) Word
5 Encode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode
     Open (NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure 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 -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet AccountAddress)
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubOutputBootAddrAttrsTooBig NonEmpty (TxOut era)
outs -> (NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era. NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era
SubOutputBootAddrAttrsTooBig @era) Word
6 Encode
  Open (NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty (TxOut era))
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubOutputTooBigUTxO NonEmpty (Int, Int, TxOut era)
outs -> (NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open
     (NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era
SubOutputTooBigUTxO @era) Word
7 Encode
  Open
  (NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty (Int, Int, TxOut era))
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubWrongNetworkInTxBody Mismatch RelEQ Network
mm -> (Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era
forall era.
Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era
SubWrongNetworkInTxBody Word
8 Encode
  Open (Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ Network)
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubOutsideForecast SlotNo
a -> (SlotNo -> DijkstraSubUtxoPredFailure era)
-> Word -> Encode Open (SlotNo -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum SlotNo -> DijkstraSubUtxoPredFailure era
forall era. SlotNo -> DijkstraSubUtxoPredFailure era
SubOutsideForecast Word
9 Encode Open (SlotNo -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) SlotNo
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubBabbageOutputTooSmallUTxO NonEmpty (TxOut era, Coin)
x -> (NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era
forall era.
NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era
SubBabbageOutputTooSmallUTxO Word
10 Encode
  Open (NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmpty (TxOut era, Coin))
-> Encode Open (DijkstraSubUtxoPredFailure 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
      SubWrongNetworkInDirectDeposit Network
right NonEmptySet AccountAddress
wrongs -> (Network
 -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Word
-> Encode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
forall t. t -> Word -> Encode Open t
Sum (forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
SubWrongNetworkInDirectDeposit @era) Word
11 Encode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) Network
-> Encode
     Open (NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure 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 -> DijkstraSubUtxoPredFailure era)
-> Encode (Closed Dense) (NonEmptySet AccountAddress)
-> Encode Open (DijkstraSubUtxoPredFailure 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

instance
  ( Era era
  , DecCBOR (TxOut era)
  , EncCBOR (Value era)
  , DecCBOR (Value era)
  ) =>
  DecCBOR (DijkstraSubUtxoPredFailure era)
  where
  decCBOR :: forall s. Decoder s (DijkstraSubUtxoPredFailure era)
decCBOR = Decode (Closed Dense) (DijkstraSubUtxoPredFailure era)
-> Decoder s (DijkstraSubUtxoPredFailure era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) (DijkstraSubUtxoPredFailure era)
 -> Decoder s (DijkstraSubUtxoPredFailure era))
-> ((Word -> Decode Open (DijkstraSubUtxoPredFailure era))
    -> Decode (Closed Dense) (DijkstraSubUtxoPredFailure era))
-> (Word -> Decode Open (DijkstraSubUtxoPredFailure era))
-> Decoder s (DijkstraSubUtxoPredFailure era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (Word -> Decode Open (DijkstraSubUtxoPredFailure era))
-> Decode (Closed Dense) (DijkstraSubUtxoPredFailure era)
forall t.
Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t
Summands Text
"DijkstraSubUtxoPredFailure" ((Word -> Decode Open (DijkstraSubUtxoPredFailure era))
 -> Decoder s (DijkstraSubUtxoPredFailure era))
-> (Word -> Decode Open (DijkstraSubUtxoPredFailure era))
-> Decoder s (DijkstraSubUtxoPredFailure era)
forall a b. (a -> b) -> a -> b
$ \case
    Word
0 -> (NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era)
-> Decode Open (NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era
forall era. NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era
SubBadInputsUTxO Decode Open (NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 0)) (NonEmptySet TxIn)
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (NonEmptySet TxIn)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
1 -> (ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open (ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era
forall era.
ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era
SubOutsideValidityIntervalUTxO Decode
  Open (ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 2)) ValidityInterval
-> Decode Open (SlotNo -> DijkstraSubUtxoPredFailure 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)) ValidityInterval
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (SlotNo -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 1)) SlotNo
-> Decode Open (DijkstraSubUtxoPredFailure 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)) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
2 -> (Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open (Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era
forall era.
Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era
SubMaxTxSizeUTxO Decode
  Open (Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 3)) (Mismatch RelLTEQ Word32)
-> Decode Open (DijkstraSubUtxoPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 3)) (Mismatch RelLTEQ Word32)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
3 -> DijkstraSubUtxoPredFailure era
-> Decode Open (DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD DijkstraSubUtxoPredFailure era
forall era. DijkstraSubUtxoPredFailure era
SubInputSetEmptyUTxO
    Word
4 -> (Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open
     (Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era
forall era.
Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era
SubWrongNetwork Decode
  Open
  (Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 5)) Network
-> Decode Open (NonEmptySet Addr -> DijkstraSubUtxoPredFailure 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)) Network
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (NonEmptySet Addr -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 4)) (NonEmptySet Addr)
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (NonEmptySet Addr)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
5 -> (Network
 -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
SubWrongNetworkWithdrawal Decode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 7)) Network
-> Decode
     Open (NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure 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)) Network
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  Open (NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 6)) (NonEmptySet AccountAddress)
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (NonEmptySet AccountAddress)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
6 -> (NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open (NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era
forall era. NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era
SubOutputBootAddrAttrsTooBig Decode
  Open (NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 8)) (NonEmpty (TxOut era))
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (NonEmpty (TxOut era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
7 -> (NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open
     (NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era
forall era.
NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era
SubOutputTooBigUTxO Decode
  Open
  (NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 9)) (NonEmpty (Int, Int, TxOut era))
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (NonEmpty (Int, Int, TxOut era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
8 -> (Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open (Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era
forall era.
Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era
SubWrongNetworkInTxBody Decode
  Open (Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 10)) (Mismatch RelEQ Network)
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (Mismatch RelEQ Network)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
9 -> (SlotNo -> DijkstraSubUtxoPredFailure era)
-> Decode Open (SlotNo -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD SlotNo -> DijkstraSubUtxoPredFailure era
forall era. SlotNo -> DijkstraSubUtxoPredFailure era
SubOutsideForecast Decode Open (SlotNo -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 11)) SlotNo
-> Decode Open (DijkstraSubUtxoPredFailure 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)) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
10 -> (NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open (NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era
forall era.
NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era
SubBabbageOutputTooSmallUTxO Decode
  Open (NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 12)) (NonEmpty (TxOut era, Coin))
-> Decode Open (DijkstraSubUtxoPredFailure 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 (TxOut era, Coin))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
11 -> (Network
 -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Decode
     Open
     (Network
      -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
forall t. t -> Decode Open t
SumD Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
SubWrongNetworkInDirectDeposit Decode
  Open
  (Network
   -> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 14)) Network
-> Decode
     Open (NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure 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)) Network
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  Open (NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era)
-> Decode (Closed (ZonkAny 13)) (NonEmptySet AccountAddress)
-> Decode Open (DijkstraSubUtxoPredFailure 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)) (NonEmptySet AccountAddress)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
n -> Word -> Decode Open (DijkstraSubUtxoPredFailure era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

dijkstraUtxoToDijkstraSubUtxoPredFailure ::
  DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure :: forall era.
DijkstraUtxoPredFailure era -> DijkstraSubUtxoPredFailure era
dijkstraUtxoToDijkstraSubUtxoPredFailure = \case
  UtxosFailure PredicateFailure (EraRule "UTXOS" era)
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `UtxosFailure` for SUBUTXO"
  BadInputsUTxO NonEmptySet TxIn
x -> NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era
forall era. NonEmptySet TxIn -> DijkstraSubUtxoPredFailure era
SubBadInputsUTxO NonEmptySet TxIn
x
  OutsideValidityIntervalUTxO ValidityInterval
vi SlotNo
slotNo -> ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era
forall era.
ValidityInterval -> SlotNo -> DijkstraSubUtxoPredFailure era
SubOutsideValidityIntervalUTxO ValidityInterval
vi SlotNo
slotNo
  MaxTxSizeUTxO Mismatch RelLTEQ Word32
m -> Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era
forall era.
Mismatch RelLTEQ Word32 -> DijkstraSubUtxoPredFailure era
SubMaxTxSizeUTxO Mismatch RelLTEQ Word32
m
  DijkstraUtxoPredFailure era
InputSetEmptyUTxO -> DijkstraSubUtxoPredFailure era
forall era. DijkstraSubUtxoPredFailure era
SubInputSetEmptyUTxO
  FeeTooSmallUTxO Mismatch RelGTEQ Coin
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `FeeTooSmallUTxO` for SUBUTXO"
  ValueNotConservedUTxO Mismatch RelEQ (Value era)
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `ValueNotConservedUTxO` for SUBUTXO"
  WrongNetwork Network
x NonEmptySet Addr
y -> Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era
forall era.
Network -> NonEmptySet Addr -> DijkstraSubUtxoPredFailure era
SubWrongNetwork Network
x NonEmptySet Addr
y
  WrongNetworkWithdrawal Network
x NonEmptySet AccountAddress
y -> Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
SubWrongNetworkWithdrawal Network
x NonEmptySet AccountAddress
y
  OutputBootAddrAttrsTooBig NonEmpty (TxOut era)
xs -> NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era
forall era. NonEmpty (TxOut era) -> DijkstraSubUtxoPredFailure era
SubOutputBootAddrAttrsTooBig NonEmpty (TxOut era)
xs
  OutputTooBigUTxO NonEmpty (Int, Int, TxOut era)
xs -> NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era
forall era.
NonEmpty (Int, Int, TxOut era) -> DijkstraSubUtxoPredFailure era
SubOutputTooBigUTxO NonEmpty (Int, Int, TxOut era)
xs
  InsufficientCollateral DeltaCoin
_ Coin
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `InsufficientCollateral` for SUBUTXO"
  ScriptsNotPaidUTxO NonEmptyMap TxIn (TxOut era)
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `ScriptsNotPaidUTxO` for SUBUTXO"
  ExUnitsTooBigUTxO Mismatch RelLTEQ ExUnits
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `ExUnitsTooBigUTxO` for SUBUTXO"
  CollateralContainsNonADA Value era
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `CollateralContainsNonADA` for SUBUTXO"
  WrongNetworkInTxBody Mismatch RelEQ Network
m -> Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era
forall era.
Mismatch RelEQ Network -> DijkstraSubUtxoPredFailure era
SubWrongNetworkInTxBody Mismatch RelEQ Network
m
  OutsideForecast SlotNo
sno -> SlotNo -> DijkstraSubUtxoPredFailure era
forall era. SlotNo -> DijkstraSubUtxoPredFailure era
SubOutsideForecast SlotNo
sno
  TooManyCollateralInputs Mismatch RelLTEQ Word16
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `TooManyCollateralInputs` for SUBUTXO"
  DijkstraUtxoPredFailure era
NoCollateralInputs -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `NoCollateralInputs` for SUBUTXO"
  IncorrectTotalCollateralField DeltaCoin
_ Coin
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `IncorrectTotalCollateralField` for SUBUTXO"
  BabbageOutputTooSmallUTxO NonEmpty (TxOut era, Coin)
outs -> NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era
forall era.
NonEmpty (TxOut era, Coin) -> DijkstraSubUtxoPredFailure era
SubBabbageOutputTooSmallUTxO NonEmpty (TxOut era, Coin)
outs
  BabbageNonDisjointRefInputs NonEmpty TxIn
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `BabbageNonDisjointRefInputs` for SUBUTXO"
  PtrPresentInCollateralReturn TxOut era
_ -> String -> DijkstraSubUtxoPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `PtrPresentInCollateralReturn` for SUBUTXO"
  WrongNetworkInDirectDeposit Network
x NonEmptySet AccountAddress
y -> Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
forall era.
Network
-> NonEmptySet AccountAddress -> DijkstraSubUtxoPredFailure era
SubWrongNetworkInDirectDeposit Network
x NonEmptySet AccountAddress
y