{-# 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.SubUtxow (
  DijkstraSUBUTXOW,
  DijkstraSubUtxowPredFailure (..),
  DijkstraSubUtxowEvent (..),
  SubUtxowEnv (..),
) where

import Cardano.Crypto.Hash (ByteString)
import Cardano.Ledger.Alonzo.Plutus.Context (EraPlutusContext)
import Cardano.Ledger.Alonzo.Rules (AlonzoUtxowPredFailure)
import qualified Cardano.Ledger.Alonzo.Rules as Alonzo (
  checkScriptIntegrityHash,
  hasExactSetOfRedeemers,
  missingRequiredDatums,
 )
import Cardano.Ledger.Alonzo.UTxO (AlonzoEraUTxO (..), AlonzoScriptsNeeded)
import Cardano.Ledger.Babbage.Rules (BabbageUtxowPredFailure)
import qualified Cardano.Ledger.Babbage.Rules as Babbage (
  validateFailedBabbageScripts,
  validateScriptsWellFormedTxOuts,
 )
import Cardano.Ledger.Babbage.Tx (mkScriptIntegrity)
import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
 )
import Cardano.Ledger.Binary.Coders
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Governance
import Cardano.Ledger.Conway.Rules (
  ConwayUtxowPredFailure,
  UtxoEnv (..),
  alonzoToConwayUtxowPredFailure,
  babbageToConwayUtxowPredFailure,
  shelleyToConwayUtxowPredFailure,
 )
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraSUBUTXOW,
 )
import Cardano.Ledger.Dijkstra.Rules.SubUtxo
import Cardano.Ledger.Dijkstra.Rules.Utxo (DijkstraUtxoPredFailure (..))
import Cardano.Ledger.Dijkstra.Rules.Utxow (
  DijkstraUtxowPredFailure (..),
  conwayToDijkstraUtxowPredFailure,
 )
import Cardano.Ledger.Keys (VKey)
import Cardano.Ledger.Rules.ValidationMode
import Cardano.Ledger.Shelley.LedgerState (UTxOState, utxosUtxo)
import Cardano.Ledger.Shelley.Rules (ShelleyUtxowPredFailure)
import qualified Cardano.Ledger.Shelley.Rules as Shelley (
  validateMetadata,
  validateNeededWitnesses,
  validateVerifiedWits,
 )
import Cardano.Ledger.State (CertState, EraUTxO (..), ScriptsProvided (..))
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended
import Data.List.NonEmpty (NonEmpty)
import Data.Set (Set)
import Data.Set.NonEmpty (NonEmptySet)
import GHC.Generics (Generic)
import Lens.Micro
import NoThunks.Class (
  InspectHeapNamed (..),
  NoThunks (..),
 )

data SubUtxowEnv era = SubUtxowEnv
  { forall era. SubUtxowEnv era -> SlotNo
sueSlot :: SlotNo
  , forall era. SubUtxowEnv era -> PParams era
suePParams :: PParams era
  , forall era. SubUtxowEnv era -> CertState era
sueCertState :: CertState era
  , forall era. SubUtxowEnv era -> ScriptsProvided era
sueScriptsProvided :: ScriptsProvided era
  }

data DijkstraSubUtxowPredFailure era
  = SubUtxoFailure (PredicateFailure (EraRule "SUBUTXO" era))
  | SubInvalidWitnessesUTXOW (NonEmpty (VKey Witness))
  | -- | witnesses which failed in verifiedWits function
    SubMissingVKeyWitnessesUTXOW
      -- | witnesses which were needed and not supplied
      (NonEmptySet (KeyHash Witness))
  | -- | failed scripts
    SubScriptWitnessNotValidatingUTXOW (NonEmptySet ScriptHash)
  | -- | hash of the full metadata
    SubMissingTxBodyMetadataHash TxAuxDataHash
  | -- | hash of the metadata included in the transaction body
    SubMissingTxMetadata TxAuxDataHash
  | SubConflictingMetadataHash (Mismatch RelEQ TxAuxDataHash)
  | -- | Contains out of range values (string`s too long)
    SubInvalidMetadata
  | SubMissingRedeemers (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
  | SubMissingRequiredDatums
      -- | Set of missing data hashes
      (NonEmptySet DataHash)
      -- | Set of received data hashes
      (Set DataHash)
  | SubNotAllowedSupplementalDatums
      -- | Set of unallowed data hashes.
      (NonEmptySet DataHash)
      -- | Set of acceptable supplemental data hashes
      (Set DataHash)
  | SubPPViewHashesDontMatch
      (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
  | -- | Set of transaction inputs that are TwoPhase scripts, and should have a DataHash but don't
    SubUnspendableUTxONoDatumHash
      (NonEmptySet TxIn)
  | -- | List of redeemers not needed
    SubExtraRedeemers (NonEmpty (PlutusPurpose AsIx era))
  | -- | Embed UTXO rule failures
    SubMalformedScriptWitnesses (NonEmptySet ScriptHash)
  | -- | the set of malformed script witnesses
    SubMalformedReferenceScripts (NonEmptySet ScriptHash)
  | -- | The computed script integrity hash does not match the provided script integrity hash
    SubScriptIntegrityHashMismatch
      (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
      (StrictMaybe ByteString)
  deriving ((forall x.
 DijkstraSubUtxowPredFailure era
 -> Rep (DijkstraSubUtxowPredFailure era) x)
-> (forall x.
    Rep (DijkstraSubUtxowPredFailure era) x
    -> DijkstraSubUtxowPredFailure era)
-> Generic (DijkstraSubUtxowPredFailure era)
forall x.
Rep (DijkstraSubUtxowPredFailure era) x
-> DijkstraSubUtxowPredFailure era
forall x.
DijkstraSubUtxowPredFailure era
-> Rep (DijkstraSubUtxowPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraSubUtxowPredFailure era) x
-> DijkstraSubUtxowPredFailure era
forall era x.
DijkstraSubUtxowPredFailure era
-> Rep (DijkstraSubUtxowPredFailure era) x
$cfrom :: forall era x.
DijkstraSubUtxowPredFailure era
-> Rep (DijkstraSubUtxowPredFailure era) x
from :: forall x.
DijkstraSubUtxowPredFailure era
-> Rep (DijkstraSubUtxowPredFailure era) x
$cto :: forall era x.
Rep (DijkstraSubUtxowPredFailure era) x
-> DijkstraSubUtxowPredFailure era
to :: forall x.
Rep (DijkstraSubUtxowPredFailure era) x
-> DijkstraSubUtxowPredFailure era
Generic)

deriving stock instance
  ( ConwayEraScript era
  , Eq (PredicateFailure (EraRule "SUBUTXO" era))
  ) =>
  Eq (DijkstraSubUtxowPredFailure era)

deriving stock instance
  ( ConwayEraScript era
  , Show (PredicateFailure (EraRule "SUBUTXO" era))
  ) =>
  Show (DijkstraSubUtxowPredFailure era)

deriving via
  InspectHeapNamed "DijkstraSubUtxowPred" (DijkstraSubUtxowPredFailure era)
  instance
    NoThunks (DijkstraSubUtxowPredFailure era)

instance
  ( ConwayEraScript era
  , NFData (TxCert era)
  , NFData (PredicateFailure (EraRule "SUBUTXO" era))
  ) =>
  NFData (DijkstraSubUtxowPredFailure era)

type instance EraRuleFailure "SUBUTXOW" DijkstraEra = DijkstraSubUtxowPredFailure DijkstraEra

type instance EraRuleEvent "SUBUTXOW" DijkstraEra = DijkstraSubUtxowEvent DijkstraEra

instance InjectRuleFailure "SUBUTXOW" DijkstraSubUtxowPredFailure DijkstraEra

instance InjectRuleFailure "SUBUTXOW" DijkstraSubUtxoPredFailure DijkstraEra where
  injectFailure :: DijkstraSubUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "SUBUTXO" DijkstraEra)
-> DijkstraSubUtxowPredFailure DijkstraEra
DijkstraSubUtxoPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
forall era.
PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
SubUtxoFailure

instance InjectRuleFailure "SUBUTXOW" DijkstraUtxowPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxowPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
injectFailure = DijkstraUtxowPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
DijkstraUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall era.
(InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era,
 PredicateFailure (EraRule "UTXO" era)
 ~ DijkstraUtxoPredFailure era) =>
DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure

instance InjectRuleFailure "SUBUTXOW" ConwayUtxowPredFailure DijkstraEra where
  injectFailure :: ConwayUtxowPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
injectFailure = DijkstraUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall era.
(InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era,
 PredicateFailure (EraRule "UTXO" era)
 ~ DijkstraUtxoPredFailure era) =>
DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraSubUtxowPredFailure DijkstraEra)
-> (ConwayUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
ConwayUtxowPredFailure era -> DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure

instance InjectRuleFailure "SUBUTXOW" BabbageUtxowPredFailure DijkstraEra where
  injectFailure :: BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
injectFailure =
    DijkstraUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall era.
(InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era,
 PredicateFailure (EraRule "UTXO" era)
 ~ DijkstraUtxoPredFailure era) =>
DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure
      (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraSubUtxowPredFailure DijkstraEra)
-> (BabbageUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> BabbageUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
ConwayUtxowPredFailure era -> DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure
      (ConwayUtxowPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (BabbageUtxowPredFailure DijkstraEra
    -> ConwayUtxowPredFailure DijkstraEra)
-> BabbageUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxowPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
BabbageUtxowPredFailure era -> ConwayUtxowPredFailure era
babbageToConwayUtxowPredFailure

instance InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
injectFailure =
    DijkstraUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall era.
(InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era,
 PredicateFailure (EraRule "UTXO" era)
 ~ DijkstraUtxoPredFailure era) =>
DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure
      (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraSubUtxowPredFailure DijkstraEra)
-> (AlonzoUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> AlonzoUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
ConwayUtxowPredFailure era -> DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure
      (ConwayUtxowPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (AlonzoUtxowPredFailure DijkstraEra
    -> ConwayUtxowPredFailure DijkstraEra)
-> AlonzoUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxowPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
AlonzoUtxowPredFailure era -> ConwayUtxowPredFailure era
alonzoToConwayUtxowPredFailure

instance InjectRuleFailure "SUBUTXOW" ShelleyUtxowPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "SUBUTXOW" DijkstraEra
injectFailure =
    DijkstraUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall era.
(InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era,
 PredicateFailure (EraRule "UTXO" era)
 ~ DijkstraUtxoPredFailure era) =>
DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure
      (DijkstraUtxowPredFailure DijkstraEra
 -> DijkstraSubUtxowPredFailure DijkstraEra)
-> (ShelleyUtxowPredFailure DijkstraEra
    -> DijkstraUtxowPredFailure DijkstraEra)
-> ShelleyUtxowPredFailure DijkstraEra
-> DijkstraSubUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
ConwayUtxowPredFailure era -> DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure
      (ConwayUtxowPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (ShelleyUtxowPredFailure DijkstraEra
    -> ConwayUtxowPredFailure DijkstraEra)
-> ShelleyUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxowPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
ShelleyUtxowPredFailure era -> ConwayUtxowPredFailure era
shelleyToConwayUtxowPredFailure

instance InjectRuleEvent "SUBUTXOW" DijkstraSubUtxowEvent DijkstraEra

newtype DijkstraSubUtxowEvent era = SubUtxo (Event (EraRule "SUBUTXO" era))
  deriving ((forall x.
 DijkstraSubUtxowEvent era -> Rep (DijkstraSubUtxowEvent era) x)
-> (forall x.
    Rep (DijkstraSubUtxowEvent era) x -> DijkstraSubUtxowEvent era)
-> Generic (DijkstraSubUtxowEvent era)
forall x.
Rep (DijkstraSubUtxowEvent era) x -> DijkstraSubUtxowEvent era
forall x.
DijkstraSubUtxowEvent era -> Rep (DijkstraSubUtxowEvent era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraSubUtxowEvent era) x -> DijkstraSubUtxowEvent era
forall era x.
DijkstraSubUtxowEvent era -> Rep (DijkstraSubUtxowEvent era) x
$cfrom :: forall era x.
DijkstraSubUtxowEvent era -> Rep (DijkstraSubUtxowEvent era) x
from :: forall x.
DijkstraSubUtxowEvent era -> Rep (DijkstraSubUtxowEvent era) x
$cto :: forall era x.
Rep (DijkstraSubUtxowEvent era) x -> DijkstraSubUtxowEvent era
to :: forall x.
Rep (DijkstraSubUtxowEvent era) x -> DijkstraSubUtxowEvent era
Generic)

deriving instance Eq (Event (EraRule "SUBUTXO" era)) => Eq (DijkstraSubUtxowEvent era)

instance NFData (Event (EraRule "SUBUTXO" era)) => NFData (DijkstraSubUtxowEvent era)

instance
  ( AlonzoEraTx era
  , AlonzoEraUTxO era
  , BabbageEraTxOut era
  , ConwayEraGov era
  , ConwayEraTxBody era
  , EraPlutusContext era
  , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era
  , EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era
  , Embed (EraRule "SUBUTXO" era) (DijkstraSUBUTXOW era)
  , InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure era
  , InjectRuleFailure "SUBUTXOW" ShelleyUtxowPredFailure era
  , InjectRuleFailure "SUBUTXOW" BabbageUtxowPredFailure era
  , ScriptsNeeded era ~ AlonzoScriptsNeeded era
  ) =>
  STS (DijkstraSUBUTXOW era)
  where
  type State (DijkstraSUBUTXOW era) = UTxOState era
  type Signal (DijkstraSUBUTXOW era) = Tx SubTx era
  type Environment (DijkstraSUBUTXOW era) = SubUtxowEnv era
  type BaseM (DijkstraSUBUTXOW era) = ShelleyBase
  type PredicateFailure (DijkstraSUBUTXOW era) = DijkstraSubUtxowPredFailure era
  type Event (DijkstraSUBUTXOW era) = DijkstraSubUtxowEvent era

  transitionRules :: [TransitionRule (DijkstraSUBUTXOW era)]
transitionRules = [forall era.
(AlonzoEraTx era, AlonzoEraUTxO era, BabbageEraTxOut era,
 EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era,
 EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era,
 Embed (EraRule "SUBUTXO" era) (DijkstraSUBUTXOW era),
 InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure era,
 InjectRuleFailure "SUBUTXOW" ShelleyUtxowPredFailure era,
 InjectRuleFailure "SUBUTXOW" BabbageUtxowPredFailure era,
 ScriptsNeeded era ~ AlonzoScriptsNeeded era) =>
TransitionRule (EraRule "SUBUTXOW" era)
dijkstraSubUtxowTransition @era]

dijkstraSubUtxowTransition ::
  forall era.
  ( AlonzoEraTx era
  , AlonzoEraUTxO era
  , BabbageEraTxOut era
  , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era
  , EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era
  , Embed (EraRule "SUBUTXO" era) (DijkstraSUBUTXOW era)
  , InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure era
  , InjectRuleFailure "SUBUTXOW" ShelleyUtxowPredFailure era
  , InjectRuleFailure "SUBUTXOW" BabbageUtxowPredFailure era
  , ScriptsNeeded era ~ AlonzoScriptsNeeded era
  ) =>
  TransitionRule (EraRule "SUBUTXOW" era)
dijkstraSubUtxowTransition :: forall era.
(AlonzoEraTx era, AlonzoEraUTxO era, BabbageEraTxOut era,
 EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era,
 EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era,
 Embed (EraRule "SUBUTXO" era) (DijkstraSUBUTXOW era),
 InjectRuleFailure "SUBUTXOW" AlonzoUtxowPredFailure era,
 InjectRuleFailure "SUBUTXOW" ShelleyUtxowPredFailure era,
 InjectRuleFailure "SUBUTXOW" BabbageUtxowPredFailure era,
 ScriptsNeeded era ~ AlonzoScriptsNeeded era) =>
TransitionRule (EraRule "SUBUTXOW" era)
dijkstraSubUtxowTransition = do
  TRC (SubUtxowEnv slot pp certState scriptsProvided, utxoState, tx) <- Rule
  (DijkstraSUBUTXOW era)
  'Transition
  (RuleContext 'Transition (DijkstraSUBUTXOW era))
F (Clause (DijkstraSUBUTXOW era) 'Transition)
  (TRC (DijkstraSUBUTXOW era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  let utxo = UTxOState era -> UTxO era
forall era. UTxOState era -> UTxO era
utxosUtxo State (DijkstraSUBUTXOW era)
UTxOState era
utxoState
      txBody = Tx SubTx era
Signal (DijkstraSUBUTXOW 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
      witsKeyHashes = TxWits era -> Set (KeyHash Witness)
forall era. EraTxWits era => TxWits era -> Set (KeyHash Witness)
keyHashWitnessesTxWits (Tx SubTx era
Signal (DijkstraSUBUTXOW era)
tx Tx SubTx era
-> Getting (TxWits era) (Tx SubTx era) (TxWits era) -> TxWits era
forall s a. s -> Getting a s a -> a
^. Getting (TxWits era) (Tx SubTx era) (TxWits era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxWits era)
forall (l :: TxLevel). Lens' (Tx l era) (TxWits era)
witsTxL)

  {- ∀[ (vk , σ) ∈ vKeySigs ] isSigned vk (txidBytes txId) σ -}
  runTestOnSignal $ Shelley.validateVerifiedWits tx

  let scriptsNeeded = UTxO era -> TxBody SubTx era -> ScriptsNeeded era
forall era (t :: TxLevel).
EraUTxO era =>
UTxO era -> TxBody t era -> ScriptsNeeded era
forall (t :: TxLevel).
UTxO era -> TxBody t era -> ScriptsNeeded era
getScriptsNeeded UTxO era
utxo TxBody SubTx era
txBody
      scriptHashesNeeded = ScriptsNeeded era -> Set ScriptHash
forall era. EraUTxO era => ScriptsNeeded era -> Set ScriptHash
getScriptsHashesNeeded ScriptsNeeded era
scriptsNeeded

  {- ∀[ s ∈ p1ScriptsNeeded ] validP1Script vKeyHashesProvided txVldt s -}
  runTest $ Babbage.validateFailedBabbageScripts tx scriptsProvided scriptHashesNeeded

  {- vKeyHashesNeeded ⊆ vKeyHashesProvided -}
  runTest $ Shelley.validateNeededWitnesses witsKeyHashes certState utxo txBody

  {- dataHashesNeeded ⊆ mapˢ hash dataProvided -}
  runTest $ Alonzo.missingRequiredDatums utxo tx

  {- txADhash ≡ map hash txAuxData -}
  runTestOnSignal $ Shelley.validateMetadata pp tx

  let scriptIntegrity = PParams era
-> Tx SubTx era
-> ScriptsProvided era
-> Set ScriptHash
-> StrictMaybe (ScriptIntegrity era)
forall era (l :: TxLevel).
(AlonzoEraPParams era, AlonzoEraTxWits era, EraUTxO era) =>
PParams era
-> Tx l era
-> ScriptsProvided era
-> Set ScriptHash
-> StrictMaybe (ScriptIntegrity era)
mkScriptIntegrity PParams era
pp Tx SubTx era
Signal (DijkstraSUBUTXOW era)
tx ScriptsProvided era
scriptsProvided Set ScriptHash
scriptHashesNeeded
  runTest $ Alonzo.checkScriptIntegrityHash tx pp scriptIntegrity

  runTest $ Alonzo.hasExactSetOfRedeemers tx scriptsProvided scriptsNeeded

  runTest $
    Babbage.validateScriptsWellFormedTxOuts
      pp
      (tx ^. witsTxL . scriptTxWitsL)
      (tx ^. bodyTxL . outputsTxBodyL)

  trans @(EraRule "SUBUTXO" era) $ TRC (UtxoEnv slot pp certState, utxoState, tx)

instance
  ( ConwayEraGov era
  , ConwayEraTxBody era
  , EraPlutusContext era
  , EraRule "SUBUTXO" era ~ DijkstraSUBUTXO era
  , EraRule "SUBUTXOW" era ~ DijkstraSUBUTXOW era
  ) =>
  Embed (DijkstraSUBUTXO era) (DijkstraSUBUTXOW era)
  where
  wrapFailed :: PredicateFailure (DijkstraSUBUTXO era)
-> PredicateFailure (DijkstraSUBUTXOW era)
wrapFailed = PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
PredicateFailure (DijkstraSUBUTXO era)
-> PredicateFailure (DijkstraSUBUTXOW era)
forall era.
PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
SubUtxoFailure
  wrapEvent :: Event (DijkstraSUBUTXO era) -> Event (DijkstraSUBUTXOW era)
wrapEvent = Event (EraRule "SUBUTXO" era) -> DijkstraSubUtxowEvent era
Event (DijkstraSUBUTXO era) -> Event (DijkstraSUBUTXOW era)
forall era.
Event (EraRule "SUBUTXO" era) -> DijkstraSubUtxowEvent era
SubUtxo

instance
  ( ConwayEraScript era
  , EncCBOR (PredicateFailure (EraRule "SUBUTXO" era))
  ) =>
  EncCBOR (DijkstraSubUtxowPredFailure era)
  where
  encCBOR :: DijkstraSubUtxowPredFailure era -> Encoding
encCBOR =
    Encode Open (DijkstraSubUtxowPredFailure era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode Open (DijkstraSubUtxowPredFailure era) -> Encoding)
-> (DijkstraSubUtxowPredFailure era
    -> Encode Open (DijkstraSubUtxowPredFailure era))
-> DijkstraSubUtxowPredFailure era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      SubUtxoFailure PredicateFailure (EraRule "SUBUTXO" era)
x -> (PredicateFailure (EraRule "SUBUTXO" era)
 -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "SUBUTXO" era)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
forall era.
PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
SubUtxoFailure Word
0 Encode
  Open
  (PredicateFailure (EraRule "SUBUTXO" era)
   -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "SUBUTXO" era))
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "SUBUTXO" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "SUBUTXO" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "SUBUTXO" era)
x
      SubInvalidWitnessesUTXOW NonEmpty (VKey Witness)
xs -> (NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era
SubInvalidWitnessesUTXOW Word
1 Encode
  Open (NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmpty (VKey Witness))
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (VKey Witness)
-> Encode (Closed Dense) (NonEmpty (VKey Witness))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (VKey Witness)
xs
      SubMissingVKeyWitnessesUTXOW NonEmptySet (KeyHash Witness)
xs -> (NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era
SubMissingVKeyWitnessesUTXOW Word
2 Encode
  Open
  (NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet (KeyHash Witness))
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet (KeyHash Witness)
-> Encode (Closed Dense) (NonEmptySet (KeyHash Witness))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet (KeyHash Witness)
xs
      SubScriptWitnessNotValidatingUTXOW NonEmptySet ScriptHash
xs -> (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubScriptWitnessNotValidatingUTXOW Word
3 Encode
  Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet ScriptHash
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet ScriptHash
xs
      SubMissingTxBodyMetadataHash TxAuxDataHash
xs -> (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubMissingTxBodyMetadataHash Word
4 Encode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) TxAuxDataHash
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxAuxDataHash -> Encode (Closed Dense) TxAuxDataHash
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxAuxDataHash
xs
      SubMissingTxMetadata TxAuxDataHash
xs -> (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubMissingTxMetadata Word
5 Encode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) TxAuxDataHash
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxAuxDataHash -> Encode (Closed Dense) TxAuxDataHash
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxAuxDataHash
xs
      SubConflictingMetadataHash Mismatch RelEQ TxAuxDataHash
mm -> (Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubConflictingMetadataHash Word
6 Encode
  Open
  (Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ TxAuxDataHash)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ TxAuxDataHash
-> Encode (Closed Dense) (Mismatch RelEQ TxAuxDataHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ TxAuxDataHash
mm
      DijkstraSubUtxowPredFailure era
SubInvalidMetadata -> DijkstraSubUtxowPredFailure era
-> Word -> Encode Open (DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DijkstraSubUtxowPredFailure era
forall era. DijkstraSubUtxowPredFailure era
SubInvalidMetadata Word
7
      SubMissingRedeemers NonEmpty (PlutusPurpose AsItem era, ScriptHash)
x -> (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
 -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraSubUtxowPredFailure era
SubMissingRedeemers Word
8 Encode
  Open
  (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
   -> DijkstraSubUtxowPredFailure era)
-> Encode
     (Closed Dense) (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> Encode
     (Closed Dense) (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (PlutusPurpose AsItem era, ScriptHash)
x
      SubMissingRequiredDatums NonEmptySet DataHash
x Set DataHash
y -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
SubMissingRequiredDatums Word
9 Encode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet DataHash)
-> Encode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet DataHash
-> Encode (Closed Dense) (NonEmptySet DataHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet DataHash
x Encode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (Set DataHash)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Set DataHash -> Encode (Closed Dense) (Set DataHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Set DataHash
y
      SubNotAllowedSupplementalDatums NonEmptySet DataHash
x Set DataHash
y -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
SubNotAllowedSupplementalDatums Word
10 Encode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet DataHash)
-> Encode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet DataHash
-> Encode (Closed Dense) (NonEmptySet DataHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet DataHash
x Encode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (Set DataHash)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Set DataHash -> Encode (Closed Dense) (Set DataHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Set DataHash
y
      SubPPViewHashesDontMatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraSubUtxowPredFailure era
SubPPViewHashesDontMatch Word
11 Encode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> DijkstraSubUtxowPredFailure era)
-> Encode
     (Closed Dense) (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> Encode
     (Closed Dense) (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm
      SubUnspendableUTxONoDatumHash NonEmptySet TxIn
x -> (NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era
forall era. NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era
SubUnspendableUTxONoDatumHash Word
12 Encode Open (NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet TxIn)
-> Encode Open (DijkstraSubUtxowPredFailure 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
x
      SubExtraRedeemers NonEmpty (PlutusPurpose AsIx era)
x -> (NonEmpty (PlutusPurpose AsIx era)
 -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmpty (PlutusPurpose AsIx era)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (PlutusPurpose AsIx era)
-> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsIx era)
-> DijkstraSubUtxowPredFailure era
SubExtraRedeemers Word
13 Encode
  Open
  (NonEmpty (PlutusPurpose AsIx era)
   -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmpty (PlutusPurpose AsIx era))
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmpty (PlutusPurpose AsIx era)
-> Encode (Closed Dense) (NonEmpty (PlutusPurpose AsIx era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmpty (PlutusPurpose AsIx era)
x
      SubMalformedScriptWitnesses NonEmptySet ScriptHash
x -> (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubMalformedScriptWitnesses Word
14 Encode
  Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet ScriptHash
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet ScriptHash
x
      SubMalformedReferenceScripts NonEmptySet ScriptHash
x -> (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubMalformedReferenceScripts Word
15 Encode
  Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet ScriptHash
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet ScriptHash
x
      SubScriptIntegrityHashMismatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
x StrictMaybe ByteString
y -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
-> Word
-> Encode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era
SubScriptIntegrityHashMismatch Word
16 Encode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
-> Encode
     (Closed Dense) (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Encode
     Open (StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> Encode
     (Closed Dense) (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
x Encode
  Open (StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
-> Encode (Closed Dense) (StrictMaybe ByteString)
-> Encode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> StrictMaybe ByteString
-> Encode (Closed Dense) (StrictMaybe ByteString)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To StrictMaybe ByteString
y

instance
  ( ConwayEraScript era
  , DecCBOR (PredicateFailure (EraRule "SUBUTXO" era))
  ) =>
  DecCBOR (DijkstraSubUtxowPredFailure era)
  where
  decCBOR :: forall s. Decoder s (DijkstraSubUtxowPredFailure era)
decCBOR = Decode (Closed Dense) (DijkstraSubUtxowPredFailure era)
-> Decoder s (DijkstraSubUtxowPredFailure era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) (DijkstraSubUtxowPredFailure era)
 -> Decoder s (DijkstraSubUtxowPredFailure era))
-> ((Word -> Decode Open (DijkstraSubUtxowPredFailure era))
    -> Decode (Closed Dense) (DijkstraSubUtxowPredFailure era))
-> (Word -> Decode Open (DijkstraSubUtxowPredFailure era))
-> Decoder s (DijkstraSubUtxowPredFailure era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (Word -> Decode Open (DijkstraSubUtxowPredFailure era))
-> Decode (Closed Dense) (DijkstraSubUtxowPredFailure era)
forall t.
Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t
Summands Text
"DijkstraUtxowPred" ((Word -> Decode Open (DijkstraSubUtxowPredFailure era))
 -> Decoder s (DijkstraSubUtxowPredFailure era))
-> (Word -> Decode Open (DijkstraSubUtxowPredFailure era))
-> Decoder s (DijkstraSubUtxowPredFailure era)
forall a b. (a -> b) -> a -> b
$ \case
    Word
0 -> (PredicateFailure (EraRule "SUBUTXO" era)
 -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "SUBUTXO" era)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
forall era.
PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
SubUtxoFailure Decode
  Open
  (PredicateFailure (EraRule "SUBUTXO" era)
   -> DijkstraSubUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 0)) (PredicateFailure (EraRule "SUBUTXO" era))
-> Decode Open (DijkstraSubUtxowPredFailure 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 "SUBUTXO" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
1 -> (NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open (NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era
SubInvalidWitnessesUTXOW Decode
  Open (NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 1)) (NonEmpty (VKey Witness))
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (NonEmpty (VKey Witness))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
2 -> (NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era
SubMissingVKeyWitnessesUTXOW Decode
  Open
  (NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 2)) (NonEmptySet (KeyHash Witness))
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (NonEmptySet (KeyHash Witness))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
3 -> (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubScriptWitnessNotValidatingUTXOW Decode
  Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 3)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (NonEmptySet ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
4 -> (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Decode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubMissingTxBodyMetadataHash Decode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 4)) TxAuxDataHash
-> Decode Open (DijkstraSubUtxowPredFailure 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)) TxAuxDataHash
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
5 -> (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Decode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubMissingTxMetadata Decode Open (TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 5)) TxAuxDataHash
-> Decode Open (DijkstraSubUtxowPredFailure 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)) TxAuxDataHash
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
6 -> (Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubConflictingMetadataHash Decode
  Open
  (Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 6)) (Mismatch RelEQ TxAuxDataHash)
-> Decode Open (DijkstraSubUtxowPredFailure 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 TxAuxDataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
7 -> DijkstraSubUtxowPredFailure era
-> Decode Open (DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD DijkstraSubUtxowPredFailure era
forall era. DijkstraSubUtxowPredFailure era
SubInvalidMetadata
    Word
8 -> (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
 -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraSubUtxowPredFailure era
SubMissingRedeemers Decode
  Open
  (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
   -> DijkstraSubUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 7))
     (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
-> Decode Open (DijkstraSubUtxowPredFailure 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))
  (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
9 -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
SubMissingRequiredDatums Decode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 9)) (NonEmptySet DataHash)
-> Decode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 9)) (NonEmptySet DataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 8)) (Set DataHash)
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (Set DataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
10 -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
SubNotAllowedSupplementalDatums Decode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 11)) (NonEmptySet DataHash)
-> Decode Open (Set DataHash -> DijkstraSubUtxowPredFailure 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)) (NonEmptySet DataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Set DataHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 10)) (Set DataHash)
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (Set DataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
11 -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraSubUtxowPredFailure era
SubPPViewHashesDontMatch Decode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> DijkstraSubUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 12))
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Decode Open (DijkstraSubUtxowPredFailure 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))
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
12 -> (NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open (NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era
forall era. NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era
SubUnspendableUTxONoDatumHash Decode Open (NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 13)) (NonEmptySet TxIn)
-> Decode Open (DijkstraSubUtxowPredFailure 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 TxIn)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
13 -> (NonEmpty (PlutusPurpose AsIx era)
 -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (NonEmpty (PlutusPurpose AsIx era)
      -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (PlutusPurpose AsIx era)
-> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsIx era)
-> DijkstraSubUtxowPredFailure era
SubExtraRedeemers Decode
  Open
  (NonEmpty (PlutusPurpose AsIx era)
   -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 14)) (NonEmpty (PlutusPurpose AsIx era))
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (NonEmpty (PlutusPurpose AsIx era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
14 -> (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubMalformedScriptWitnesses Decode
  Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 15)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (NonEmptySet ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
15 -> (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubMalformedReferenceScripts Decode
  Open (NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 16)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (NonEmptySet ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
16 -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
-> Decode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era
SubScriptIntegrityHashMismatch Decode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 18))
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Decode
     Open (StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode
  (Closed (ZonkAny 18))
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  Open (StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era)
-> Decode (Closed (ZonkAny 17)) (StrictMaybe ByteString)
-> Decode Open (DijkstraSubUtxowPredFailure 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)) (StrictMaybe ByteString)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
n -> Word -> Decode Open (DijkstraSubUtxowPredFailure era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

dijkstraUtxowToDijkstraSubUtxowPredFailure ::
  forall era.
  ( InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era
  , PredicateFailure (EraRule "UTXO" era) ~ DijkstraUtxoPredFailure era
  ) =>
  DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure :: forall era.
(InjectRuleFailure "SUBUTXO" DijkstraUtxoPredFailure era,
 PredicateFailure (EraRule "UTXO" era)
 ~ DijkstraUtxoPredFailure era) =>
DijkstraUtxowPredFailure era -> DijkstraSubUtxowPredFailure era
dijkstraUtxowToDijkstraSubUtxowPredFailure = \case
  UtxoFailure PredicateFailure (EraRule "UTXO" era)
f -> PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
forall era.
PredicateFailure (EraRule "SUBUTXO" era)
-> DijkstraSubUtxowPredFailure era
SubUtxoFailure (forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure @"SUBUTXO" PredicateFailure (EraRule "UTXO" era)
DijkstraUtxoPredFailure era
f)
  InvalidWitnessesUTXOW NonEmpty (VKey Witness)
ks -> NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (VKey Witness) -> DijkstraSubUtxowPredFailure era
SubInvalidWitnessesUTXOW NonEmpty (VKey Witness)
ks
  MissingVKeyWitnessesUTXOW NonEmptySet (KeyHash Witness)
ks -> NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet (KeyHash Witness) -> DijkstraSubUtxowPredFailure era
SubMissingVKeyWitnessesUTXOW NonEmptySet (KeyHash Witness)
ks
  MissingScriptWitnessesUTXOW NonEmptySet ScriptHash
_ -> String -> DijkstraSubUtxowPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `MissingScriptWitnessesUTXOW` for SUBUTXOW"
  ScriptWitnessNotValidatingUTXOW NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubScriptWitnessNotValidatingUTXOW NonEmptySet ScriptHash
hs
  MissingTxBodyMetadataHash TxAuxDataHash
dh -> TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubMissingTxBodyMetadataHash TxAuxDataHash
dh
  MissingTxMetadata TxAuxDataHash
dh -> TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubMissingTxMetadata TxAuxDataHash
dh
  ConflictingMetadataHash Mismatch RelEQ TxAuxDataHash
mm -> Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ TxAuxDataHash -> DijkstraSubUtxowPredFailure era
SubConflictingMetadataHash Mismatch RelEQ TxAuxDataHash
mm
  DijkstraUtxowPredFailure era
InvalidMetadata -> DijkstraSubUtxowPredFailure era
forall era. DijkstraSubUtxowPredFailure era
SubInvalidMetadata
  ExtraneousScriptWitnessesUTXOW NonEmptySet ScriptHash
_ -> String -> DijkstraSubUtxowPredFailure era
forall a. HasCallStack => String -> a
error String
"Impossible: `ExtraneousScriptWitnessesUTXOW` for SUBUTXOW"
  MissingRedeemers NonEmpty (PlutusPurpose AsItem era, ScriptHash)
pps -> NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraSubUtxowPredFailure era
SubMissingRedeemers NonEmpty (PlutusPurpose AsItem era, ScriptHash)
pps
  MissingRequiredDatums NonEmptySet DataHash
hs1 Set DataHash
hs2 -> NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
SubMissingRequiredDatums NonEmptySet DataHash
hs1 Set DataHash
hs2
  NotAllowedSupplementalDatums NonEmptySet DataHash
hs1 Set DataHash
hs2 -> NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraSubUtxowPredFailure era
SubNotAllowedSupplementalDatums NonEmptySet DataHash
hs1 Set DataHash
hs2
  PPViewHashesDontMatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm -> Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraSubUtxowPredFailure era
SubPPViewHashesDontMatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm
  UnspendableUTxONoDatumHash NonEmptySet TxIn
txs -> NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era
forall era. NonEmptySet TxIn -> DijkstraSubUtxowPredFailure era
SubUnspendableUTxONoDatumHash NonEmptySet TxIn
txs
  ExtraRedeemers NonEmpty (PlutusPurpose AsIx era)
pps -> NonEmpty (PlutusPurpose AsIx era)
-> DijkstraSubUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsIx era)
-> DijkstraSubUtxowPredFailure era
SubExtraRedeemers NonEmpty (PlutusPurpose AsIx era)
pps
  MalformedScriptWitnesses NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubMalformedScriptWitnesses NonEmptySet ScriptHash
hs
  MalformedReferenceScripts NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
forall era.
NonEmptySet ScriptHash -> DijkstraSubUtxowPredFailure era
SubMalformedReferenceScripts NonEmptySet ScriptHash
hs
  ScriptIntegrityHashMismatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm StrictMaybe ByteString
f -> Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraSubUtxowPredFailure era
SubScriptIntegrityHashMismatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm StrictMaybe ByteString
f