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

module Cardano.Ledger.Dijkstra.Rules.Utxow (
  DijkstraUTXOW,
  DijkstraUtxowPredFailure (..),
  conwayToDijkstraUtxowPredFailure,
) where

import Cardano.Crypto.Hash (ByteString)
import Cardano.Ledger.Allegra.Rules (
  AllegraUtxoPredFailure,
 )
import Cardano.Ledger.Alonzo.Rules (
  AlonzoUtxoEvent,
  AlonzoUtxoPredFailure,
  AlonzoUtxosPredFailure,
  AlonzoUtxowEvent (WrappedShelleyEraEvent),
  AlonzoUtxowPredFailure,
  checkScriptIntegrityHash,
  hasExactSetOfRedeemers,
  missingRequiredDatums,
 )
import Cardano.Ledger.Alonzo.UTxO (
  AlonzoEraUTxO (..),
  AlonzoScriptsNeeded (..),
 )
import Cardano.Ledger.Babbage.Rules (
  BabbageUtxoPredFailure,
  BabbageUtxowPredFailure,
  babbageMissingScripts,
  validateFailedBabbageScripts,
  validateScriptsWellFormed,
 )
import Cardano.Ledger.Babbage.Tx (mkScriptIntegrity)
import Cardano.Ledger.Babbage.UTxO (getReferenceScripts)
import Cardano.Ledger.BaseTypes (
  Mismatch (..),
  Relation (..),
  ShelleyBase,
  StrictMaybe (..),
 )
import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..))
import Cardano.Ledger.Binary.Coders (
  Decode (..),
  Encode (..),
  decode,
  encode,
  (!>),
  (<!),
 )
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Rules (
  ConwayUtxoPredFailure,
  ConwayUtxosPredFailure,
  ConwayUtxowPredFailure,
  alonzoToConwayUtxowPredFailure,
  babbageToConwayUtxowPredFailure,
  shelleyToConwayUtxowPredFailure,
 )
import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Credential (Credential)
import Cardano.Ledger.Dijkstra.Era (DijkstraEra, DijkstraUTXO, DijkstraUTXOW)
import Cardano.Ledger.Dijkstra.Rules.Utxo (DijkstraUtxoEnv (..), DijkstraUtxoPredFailure)
import Cardano.Ledger.Dijkstra.TxBody (DijkstraEraTxBody (..))
import Cardano.Ledger.Keys (VKey)
import Cardano.Ledger.Rules.ValidationMode (runTest, runTestOnSignal)
import Cardano.Ledger.Shelley.LedgerState (UTxOState)
import Cardano.Ledger.Shelley.Rules (
  ShelleyUtxoPredFailure,
  ShelleyUtxowEvent (UtxoEvent),
  ShelleyUtxowPredFailure,
  validateNeededWitnesses,
 )
import qualified Cardano.Ledger.Shelley.Rules as Shelley (
  validateMetadata,
  validateVerifiedWits,
 )
import Cardano.Ledger.State (EraUTxO (..))
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended (
  Embed (..),
  STS (..),
  TRC (..),
  TransitionRule,
  failureOnNonEmptySet,
  judgmentContext,
  trans,
 )
import Data.List.NonEmpty (NonEmpty)
import qualified Data.Map.Strict as Map
import qualified Data.OMap.Strict as OMap
import qualified Data.OSet.Strict as OSet
import Data.Set (Set)
import qualified Data.Set as Set
import Data.Set.NonEmpty (NonEmptySet)
import GHC.Generics (Generic)
import Lens.Micro ((^.))

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

-- | Predicate failure type for the Dijkstra Era
data DijkstraUtxowPredFailure era
  = UtxoFailure (PredicateFailure (EraRule "UTXO" era))
  | InvalidWitnessesUTXOW (NonEmpty (VKey Witness))
  | -- | witnesses which failed in verifiedWits function
    MissingVKeyWitnessesUTXOW
      -- | witnesses which were needed and not supplied
      (NonEmptySet (KeyHash Witness))
  | -- | missing scripts
    MissingScriptWitnessesUTXOW (NonEmptySet ScriptHash)
  | -- | failed scripts
    ScriptWitnessNotValidatingUTXOW (NonEmptySet ScriptHash)
  | -- | hash of the full metadata
    MissingTxBodyMetadataHash TxAuxDataHash
  | -- | hash of the metadata included in the transaction body
    MissingTxMetadata TxAuxDataHash
  | ConflictingMetadataHash (Mismatch RelEQ TxAuxDataHash)
  | -- | Contains out of range values (string`s too long)
    InvalidMetadata
  | -- | extraneous scripts
    ExtraneousScriptWitnessesUTXOW (NonEmptySet ScriptHash)
  | MissingRedeemers (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
  | MissingRequiredDatums
      -- | Set of missing data hashes
      (NonEmptySet DataHash)
      -- | Set of received data hashes
      (Set DataHash)
  | NotAllowedSupplementalDatums
      -- | Set of unallowed data hashes.
      (NonEmptySet DataHash)
      -- | Set of acceptable supplemental data hashes
      (Set DataHash)
  | PPViewHashesDontMatch
      (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
  | -- | Set of transaction inputs that are TwoPhase scripts, and should have a DataHash but don't
    UnspendableUTxONoDatumHash
      (NonEmptySet TxIn)
  | -- | List of redeemers not needed
    ExtraRedeemers (NonEmpty (PlutusPurpose AsIx era))
  | -- | Embed UTXO rule failures
    MalformedScriptWitnesses (NonEmptySet ScriptHash)
  | -- | the set of malformed script witnesses
    MalformedReferenceScripts (NonEmptySet ScriptHash)
  | -- | The computed script integrity hash does not match the provided script integrity hash
    ScriptIntegrityHashMismatch
      (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
      (StrictMaybe ByteString)
  | -- | Guards required by subtransactions but missing from top-level guards
    MissingRequiredGuards (NonEmptySet (Credential Guard))
  deriving ((forall x.
 DijkstraUtxowPredFailure era
 -> Rep (DijkstraUtxowPredFailure era) x)
-> (forall x.
    Rep (DijkstraUtxowPredFailure era) x
    -> DijkstraUtxowPredFailure era)
-> Generic (DijkstraUtxowPredFailure era)
forall x.
Rep (DijkstraUtxowPredFailure era) x
-> DijkstraUtxowPredFailure era
forall x.
DijkstraUtxowPredFailure era
-> Rep (DijkstraUtxowPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraUtxowPredFailure era) x
-> DijkstraUtxowPredFailure era
forall era x.
DijkstraUtxowPredFailure era
-> Rep (DijkstraUtxowPredFailure era) x
$cfrom :: forall era x.
DijkstraUtxowPredFailure era
-> Rep (DijkstraUtxowPredFailure era) x
from :: forall x.
DijkstraUtxowPredFailure era
-> Rep (DijkstraUtxowPredFailure era) x
$cto :: forall era x.
Rep (DijkstraUtxowPredFailure era) x
-> DijkstraUtxowPredFailure era
to :: forall x.
Rep (DijkstraUtxowPredFailure era) x
-> DijkstraUtxowPredFailure era
Generic)

type instance EraRuleFailure "UTXOW" DijkstraEra = DijkstraUtxowPredFailure DijkstraEra

type instance EraRuleEvent "UTXOW" DijkstraEra = AlonzoUtxowEvent DijkstraEra

instance InjectRuleFailure "UTXOW" DijkstraUtxowPredFailure DijkstraEra

instance InjectRuleFailure "UTXOW" ConwayUtxowPredFailure DijkstraEra where
  injectFailure :: ConwayUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = ConwayUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ConwayUtxowPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
ConwayUtxowPredFailure era -> DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure

instance InjectRuleFailure "UTXOW" BabbageUtxowPredFailure DijkstraEra where
  injectFailure :: BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = 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 "UTXOW" AlonzoUtxowPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = 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 "UTXOW" ShelleyUtxowPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = 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 InjectRuleFailure "UTXOW" DijkstraUtxoPredFailure DijkstraEra where
  injectFailure :: DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (DijkstraUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" ConwayUtxoPredFailure DijkstraEra where
  injectFailure :: ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (ConwayUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
BabbageUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AlonzoUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" ConwayUtxosPredFailure DijkstraEra where
  injectFailure :: ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (ConwayUtxosPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> ConwayUtxosPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ShelleyUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> DijkstraUtxowPredFailure DijkstraEra
DijkstraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure (DijkstraUtxoPredFailure DijkstraEra
 -> DijkstraUtxowPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> DijkstraUtxoPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> DijkstraUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AllegraUtxoPredFailure DijkstraEra
-> DijkstraUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

deriving instance
  ( ConwayEraScript era
  , Show (PredicateFailure (EraRule "UTXO" era))
  ) =>
  Show (DijkstraUtxowPredFailure era)

deriving instance
  ( ConwayEraScript era
  , Eq (PredicateFailure (EraRule "UTXO" era))
  ) =>
  Eq (DijkstraUtxowPredFailure era)

instance
  ( ConwayEraScript era
  , NFData (TxCert era)
  , NFData (PredicateFailure (EraRule "UTXO" era))
  ) =>
  NFData (DijkstraUtxowPredFailure era)

--------------------------------------------------------------------------------
-- DijkstraUTXOW STS
--------------------------------------------------------------------------------

dijkstraUtxowTransition ::
  forall era.
  ( AlonzoEraTx era
  , AlonzoEraUTxO era
  , ScriptsNeeded era ~ AlonzoScriptsNeeded era
  , DijkstraEraTxBody era
  , EraRule "UTXOW" era ~ DijkstraUTXOW era
  , InjectRuleFailure "UTXOW" ShelleyUtxowPredFailure era
  , InjectRuleFailure "UTXOW" AlonzoUtxowPredFailure era
  , InjectRuleFailure "UTXOW" BabbageUtxowPredFailure era
  , InjectRuleFailure "UTXOW" DijkstraUtxowPredFailure era
  , -- Allow UTXOW to call UTXO
    Embed (EraRule "UTXO" era) (DijkstraUTXOW era)
  , Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era
  ) =>
  TransitionRule (EraRule "UTXOW" era)
dijkstraUtxowTransition :: forall era.
(AlonzoEraTx era, AlonzoEraUTxO era,
 ScriptsNeeded era ~ AlonzoScriptsNeeded era, DijkstraEraTxBody era,
 EraRule "UTXOW" era ~ DijkstraUTXOW era,
 InjectRuleFailure "UTXOW" ShelleyUtxowPredFailure era,
 InjectRuleFailure "UTXOW" AlonzoUtxowPredFailure era,
 InjectRuleFailure "UTXOW" BabbageUtxowPredFailure era,
 InjectRuleFailure "UTXOW" DijkstraUtxowPredFailure era,
 Embed (EraRule "UTXO" era) (DijkstraUTXOW era),
 Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era,
 State (EraRule "UTXO" era) ~ UTxOState era,
 Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era) =>
TransitionRule (EraRule "UTXOW" era)
dijkstraUtxowTransition = do
  TRC (DijkstraUtxoEnv slot pp certState originalUtxo scriptsProvided, u, stAnnTx) <- Rule
  (DijkstraUTXOW era)
  'Transition
  (RuleContext 'Transition (DijkstraUTXOW era))
F (Clause (DijkstraUTXOW era) 'Transition)
  (TRC (DijkstraUTXOW era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  let tx = StAnnTx TopTx era
Signal (DijkstraUTXOW era)
stAnnTx StAnnTx TopTx era
-> Getting (Tx TopTx era) (StAnnTx TopTx era) (Tx TopTx era)
-> Tx TopTx era
forall s a. s -> Getting a s a -> a
^. Getting (Tx TopTx era) (StAnnTx TopTx era) (Tx TopTx era)
forall era (l :: TxLevel).
EraTx era =>
SimpleGetter (StAnnTx l era) (Tx l era)
forall (l :: TxLevel). SimpleGetter (StAnnTx l era) (Tx l era)
txStAnnTxG

  let txBody = Tx TopTx era
tx Tx TopTx era
-> Getting (TxBody TopTx era) (Tx TopTx era) (TxBody TopTx era)
-> TxBody TopTx era
forall s a. s -> Getting a s a -> a
^. Getting (TxBody TopTx era) (Tx TopTx era) (TxBody TopTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL
      subTxs = OMap TxId (Tx SubTx era) -> [Tx SubTx era]
forall k v. Ord k => OMap k v -> [v]
OMap.elems (OMap TxId (Tx SubTx era) -> [Tx SubTx era])
-> OMap TxId (Tx SubTx era) -> [Tx SubTx era]
forall a b. (a -> b) -> a -> b
$ TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (OMap TxId (Tx SubTx era))
     (TxBody TopTx era)
     (OMap TxId (Tx SubTx era))
-> OMap TxId (Tx SubTx era)
forall s a. s -> Getting a s a -> a
^. Getting
  (OMap TxId (Tx SubTx era))
  (TxBody TopTx era)
  (OMap TxId (Tx SubTx era))
forall era.
DijkstraEraTxBody era =>
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
subTransactionsTxBodyL
      witsKeyHashes = TxWits era -> Set (KeyHash Witness)
forall era. EraTxWits era => TxWits era -> Set (KeyHash Witness)
keyHashWitnessesTxWits (Tx TopTx era
tx Tx TopTx era
-> Getting (TxWits era) (Tx TopTx era) (TxWits era) -> TxWits era
forall s a. s -> Getting a s a -> a
^. Getting (TxWits era) (Tx TopTx 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)

  -- All lookups use originalUtxo.
  -- A subtx may consume a txout that the top-level tx references, so the UTXO threaded in the state may not contain it.

  -- scriptsNeeded for the top-level tx
  let topScriptsNeeded = UTxO era -> TxBody TopTx 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
originalUtxo TxBody TopTx era
txBody
      topScriptHashesNeeded = ScriptsNeeded era -> Set ScriptHash
forall era. EraUTxO era => ScriptsNeeded era -> Set ScriptHash
getScriptsHashesNeeded ScriptsNeeded era
topScriptsNeeded

  -- scriptsNeeded aggregated across all levels
  let allScriptHashesNeeded =
        [Set ScriptHash] -> Set ScriptHash
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions ([Set ScriptHash] -> Set ScriptHash)
-> [Set ScriptHash] -> Set ScriptHash
forall a b. (a -> b) -> a -> b
$
          Set ScriptHash
topScriptHashesNeeded
            Set ScriptHash -> [Set ScriptHash] -> [Set ScriptHash]
forall a. a -> [a] -> [a]
: [ ScriptsNeeded era -> Set ScriptHash
forall era. EraUTxO era => ScriptsNeeded era -> Set ScriptHash
getScriptsHashesNeeded
                  (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
originalUtxo (Tx SubTx era
subTx 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))
              | Tx SubTx era
subTx <- [Tx SubTx era]
subTxs
              ]

  {- ∀s ∈ (txscripts txw utxo neededHashes ) ∩ Scriptph1 , validateScript s tx -}
  -- Per-level: phase-1 script validation is per-tx (script execution)
  runTest $ validateFailedBabbageScripts tx scriptsProvided topScriptHashesNeeded

  {- neededHashes − dom(refScripts tx utxo) = dom(txwitscripts txw) -}
  -- Aggregated: missing/extraneous scripts across all levels.
  let witnessScripts =
        Map ScriptHash (Script era) -> Set ScriptHash
forall k a. Map k a -> Set k
Map.keysSet (Tx TopTx era
tx Tx TopTx era
-> Getting
     (Map ScriptHash (Script era))
     (Tx TopTx era)
     (Map ScriptHash (Script era))
-> Map ScriptHash (Script era)
forall s a. s -> Getting a s a -> a
^. (TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era))
-> Tx TopTx era
-> Const (Map ScriptHash (Script era)) (Tx TopTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxWits era)
forall (l :: TxLevel). Lens' (Tx l era) (TxWits era)
witsTxL ((TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era))
 -> Tx TopTx era
 -> Const (Map ScriptHash (Script era)) (Tx TopTx era))
-> ((Map ScriptHash (Script era)
     -> Const
          (Map ScriptHash (Script era)) (Map ScriptHash (Script era)))
    -> TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era))
-> Getting
     (Map ScriptHash (Script era))
     (Tx TopTx era)
     (Map ScriptHash (Script era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map ScriptHash (Script era)
 -> Const
      (Map ScriptHash (Script era)) (Map ScriptHash (Script era)))
-> TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era)
forall era.
EraTxWits era =>
Lens' (TxWits era) (Map ScriptHash (Script era))
Lens' (TxWits era) (Map ScriptHash (Script era))
scriptTxWitsL)
          Set ScriptHash -> Set ScriptHash -> Set ScriptHash
forall a. Semigroup a => a -> a -> a
<> (Tx SubTx era -> Set ScriptHash)
-> [Tx SubTx era] -> Set ScriptHash
forall m a. Monoid m => (a -> m) -> [a] -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Map ScriptHash (Script era) -> Set ScriptHash
forall k a. Map k a -> Set k
Map.keysSet (Map ScriptHash (Script era) -> Set ScriptHash)
-> (Tx SubTx era -> Map ScriptHash (Script era))
-> Tx SubTx era
-> Set ScriptHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tx SubTx era
-> Getting
     (Map ScriptHash (Script era))
     (Tx SubTx era)
     (Map ScriptHash (Script era))
-> Map ScriptHash (Script era)
forall s a. s -> Getting a s a -> a
^. (TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era))
-> Tx SubTx era
-> Const (Map ScriptHash (Script era)) (Tx SubTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxWits era)
forall (l :: TxLevel). Lens' (Tx l era) (TxWits era)
witsTxL ((TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era))
 -> Tx SubTx era
 -> Const (Map ScriptHash (Script era)) (Tx SubTx era))
-> ((Map ScriptHash (Script era)
     -> Const
          (Map ScriptHash (Script era)) (Map ScriptHash (Script era)))
    -> TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era))
-> Getting
     (Map ScriptHash (Script era))
     (Tx SubTx era)
     (Map ScriptHash (Script era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map ScriptHash (Script era)
 -> Const
      (Map ScriptHash (Script era)) (Map ScriptHash (Script era)))
-> TxWits era -> Const (Map ScriptHash (Script era)) (TxWits era)
forall era.
EraTxWits era =>
Lens' (TxWits era) (Map ScriptHash (Script era))
Lens' (TxWits era) (Map ScriptHash (Script era))
scriptTxWitsL)) [Tx SubTx era]
subTxs
      allRefScriptInputs =
        TxBody TopTx era
txBody TxBody TopTx era
-> Getting (Set TxIn) (TxBody TopTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. Getting (Set TxIn) (TxBody TopTx era) (Set TxIn)
forall era (l :: TxLevel).
BabbageEraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel). Lens' (TxBody l era) (Set TxIn)
referenceInputsTxBodyL
          Set TxIn -> Set TxIn -> Set TxIn
forall a. Semigroup a => a -> a -> a
<> TxBody TopTx era
txBody TxBody TopTx era
-> Getting (Set TxIn) (TxBody TopTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. Getting (Set TxIn) (TxBody TopTx era) (Set TxIn)
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel). Lens' (TxBody l era) (Set TxIn)
inputsTxBodyL
          Set TxIn -> Set TxIn -> Set TxIn
forall a. Semigroup a => a -> a -> a
<> (Tx SubTx era -> Set TxIn) -> [Tx SubTx era] -> Set TxIn
forall m a. Monoid m => (a -> m) -> [a] -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap
            ( \Tx SubTx era
subTx ->
                Tx SubTx era
subTx Tx SubTx era
-> Getting (Set TxIn) (Tx SubTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. (TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era))
-> Tx SubTx era -> Const (Set TxIn) (Tx SubTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL ((TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era))
 -> Tx SubTx era -> Const (Set TxIn) (Tx SubTx era))
-> ((Set TxIn -> Const (Set TxIn) (Set TxIn))
    -> TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era))
-> Getting (Set TxIn) (Tx SubTx era) (Set TxIn)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set TxIn -> Const (Set TxIn) (Set TxIn))
-> TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era)
forall era (l :: TxLevel).
BabbageEraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel). Lens' (TxBody l era) (Set TxIn)
referenceInputsTxBodyL
                  Set TxIn -> Set TxIn -> Set TxIn
forall a. Semigroup a => a -> a -> a
<> Tx SubTx era
subTx Tx SubTx era
-> Getting (Set TxIn) (Tx SubTx era) (Set TxIn) -> Set TxIn
forall s a. s -> Getting a s a -> a
^. (TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era))
-> Tx SubTx era -> Const (Set TxIn) (Tx SubTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL ((TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era))
 -> Tx SubTx era -> Const (Set TxIn) (Tx SubTx era))
-> ((Set TxIn -> Const (Set TxIn) (Set TxIn))
    -> TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era))
-> Getting (Set TxIn) (Tx SubTx era) (Set TxIn)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set TxIn -> Const (Set TxIn) (Set TxIn))
-> TxBody SubTx era -> Const (Set TxIn) (TxBody SubTx era)
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel). Lens' (TxBody l era) (Set TxIn)
inputsTxBodyL
            )
            [Tx SubTx era]
subTxs
      refScripts = Map ScriptHash (Script era) -> Set ScriptHash
forall k a. Map k a -> Set k
Map.keysSet (Map ScriptHash (Script era) -> Set ScriptHash)
-> Map ScriptHash (Script era) -> Set ScriptHash
forall a b. (a -> b) -> a -> b
$ UTxO era -> Set TxIn -> Map ScriptHash (Script era)
forall era.
BabbageEraTxOut era =>
UTxO era -> Set TxIn -> Map ScriptHash (Script era)
getReferenceScripts UTxO era
originalUtxo Set TxIn
allRefScriptInputs
  runTest $ babbageMissingScripts pp allScriptHashesNeeded refScripts witnessScripts

  {-  inputHashes ⊆  dom(txdats txw) ⊆  allowed -}
  -- Per-level: datum check for top-level tx's own spend inputs
  runTest $ missingRequiredDatums originalUtxo tx

  {- dom (txrdmrs tx) = { rdptr txb sp | (sp, h) ∈ scriptsNeeded utxo tx,
                          h ↦ s ∈ txscripts txw, s ∈ Scriptph2} -}
  -- Per-level: redeemer indexing is per-tx
  runTest $ hasExactSetOfRedeemers tx scriptsProvided topScriptsNeeded

  -- check VKey witnesses
  {- ∀ (vk ↦ σ) ∈ (txwitsVKey txw), V_vk⟦ txbodyHash ⟧_σ -}
  runTestOnSignal $ Shelley.validateVerifiedWits tx

  {- witsVKeyNeeded utxo tx genDelegs ⊆ witsKeyHashes -}
  runTest $ validateNeededWitnesses witsKeyHashes certState originalUtxo txBody

  -- check metadata hash
  {- ((adh = ◇) ∧ (ad= ◇)) ∨ (adh = hashAD ad) -}
  runTestOnSignal $ Shelley.validateMetadata pp tx

  {- ∀x ∈ range(txdats txw) ∪ range(txwitscripts txw) ∪ (⋃ ( , ,d,s) ∈ txouts tx {s, d}),
                       x ∈ Script ∪ Datum ⇒ isWellFormed x -}
  runTest $ validateScriptsWellFormed pp tx

  {- scriptIntegrityHash txb = hashScriptIntegrity pp (languages txw) (txrdmrs txw) -}
  -- Per-level: script integrity is per-tx (depends on that tx's redeemers and language views)
  let scriptIntegrity = PParams era
-> Tx TopTx 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 TopTx era
tx ScriptsProvided era
scriptsProvided Set ScriptHash
topScriptHashesNeeded
  runTest $ checkScriptIntegrityHash tx pp scriptIntegrity

  {- concatMapˡ (λ txSub → mapˢ proj₁ (TopLevelGuardsOf txSub)) (SubTransactionsOf txTop) ⊆ GuardsOf txTop -}
  let requiredGuardsBySubTxs =
        (Tx SubTx era -> Set (Credential Guard))
-> [Tx SubTx era] -> Set (Credential Guard)
forall m a. Monoid m => (a -> m) -> [a] -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Map (Credential Guard) (StrictMaybe (Data era))
-> Set (Credential Guard)
forall k a. Map k a -> Set k
Map.keysSet (Map (Credential Guard) (StrictMaybe (Data era))
 -> Set (Credential Guard))
-> (Tx SubTx era
    -> Map (Credential Guard) (StrictMaybe (Data era)))
-> Tx SubTx era
-> Set (Credential Guard)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tx SubTx era
-> Getting
     (Map (Credential Guard) (StrictMaybe (Data era)))
     (Tx SubTx era)
     (Map (Credential Guard) (StrictMaybe (Data era)))
-> Map (Credential Guard) (StrictMaybe (Data era))
forall s a. s -> Getting a s a -> a
^. (TxBody SubTx era
 -> Const
      (Map (Credential Guard) (StrictMaybe (Data era)))
      (TxBody SubTx era))
-> Tx SubTx era
-> Const
     (Map (Credential Guard) (StrictMaybe (Data era))) (Tx SubTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL ((TxBody SubTx era
  -> Const
       (Map (Credential Guard) (StrictMaybe (Data era)))
       (TxBody SubTx era))
 -> Tx SubTx era
 -> Const
      (Map (Credential Guard) (StrictMaybe (Data era))) (Tx SubTx era))
-> ((Map (Credential Guard) (StrictMaybe (Data era))
     -> Const
          (Map (Credential Guard) (StrictMaybe (Data era)))
          (Map (Credential Guard) (StrictMaybe (Data era))))
    -> TxBody SubTx era
    -> Const
         (Map (Credential Guard) (StrictMaybe (Data era)))
         (TxBody SubTx era))
-> Getting
     (Map (Credential Guard) (StrictMaybe (Data era)))
     (Tx SubTx era)
     (Map (Credential Guard) (StrictMaybe (Data era)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (Credential Guard) (StrictMaybe (Data era))
 -> Const
      (Map (Credential Guard) (StrictMaybe (Data era)))
      (Map (Credential Guard) (StrictMaybe (Data era))))
-> TxBody SubTx era
-> Const
     (Map (Credential Guard) (StrictMaybe (Data era)))
     (TxBody SubTx era)
forall era.
DijkstraEraTxBody era =>
Lens'
  (TxBody SubTx era)
  (Map (Credential Guard) (StrictMaybe (Data era)))
Lens'
  (TxBody SubTx era)
  (Map (Credential Guard) (StrictMaybe (Data era)))
requiredTopLevelGuardsL)) [Tx SubTx era]
subTxs
      topLevelGuards = OSet (Credential Guard) -> Set (Credential Guard)
forall a. OSet a -> Set a
OSet.toSet (TxBody TopTx era
txBody TxBody TopTx era
-> Getting
     (OSet (Credential Guard))
     (TxBody TopTx era)
     (OSet (Credential Guard))
-> OSet (Credential Guard)
forall s a. s -> Getting a s a -> a
^. Getting
  (OSet (Credential Guard))
  (TxBody TopTx era)
  (OSet (Credential Guard))
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens' (TxBody l era) (OSet (Credential Guard))
forall (l :: TxLevel).
Lens' (TxBody l era) (OSet (Credential Guard))
guardsTxBodyL)
      missingGuards = Set (Credential Guard)
requiredGuardsBySubTxs Set (Credential Guard)
-> Set (Credential Guard) -> Set (Credential Guard)
forall a. Ord a => Set a -> Set a -> Set a
`Set.difference` Set (Credential Guard)
topLevelGuards
  runTestOnSignal $ failureOnNonEmptySet missingGuards MissingRequiredGuards

  -- Pass through to UTXO sub-rule, carrying the original UTxO and scriptsProvided
  trans @(EraRule "UTXO" era) $
    TRC (DijkstraUtxoEnv slot pp certState originalUtxo scriptsProvided, u, stAnnTx)

instance
  forall era.
  ( AlonzoEraTx era
  , AlonzoEraUTxO era
  , ScriptsNeeded era ~ AlonzoScriptsNeeded era
  , DijkstraEraTxBody era
  , EraRule "UTXOW" era ~ DijkstraUTXOW era
  , InjectRuleFailure "UTXOW" ShelleyUtxowPredFailure era
  , InjectRuleFailure "UTXOW" AlonzoUtxowPredFailure era
  , InjectRuleFailure "UTXOW" BabbageUtxowPredFailure era
  , InjectRuleFailure "UTXOW" ConwayUtxowPredFailure era
  , InjectRuleFailure "UTXOW" DijkstraUtxowPredFailure era
  , -- Allow UTXOW to call UTXO
    Embed (EraRule "UTXO" era) (DijkstraUTXOW era)
  , Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era
  , State (EraRule "UTXO" era) ~ UTxOState era
  , Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era
  , Eq (PredicateFailure (EraRule "UTXOS" era))
  , Show (PredicateFailure (EraRule "UTXOS" era))
  ) =>
  STS (DijkstraUTXOW era)
  where
  type State (DijkstraUTXOW era) = UTxOState era
  type Signal (DijkstraUTXOW era) = StAnnTx TopTx era
  type Environment (DijkstraUTXOW era) = DijkstraUtxoEnv era
  type BaseM (DijkstraUTXOW era) = ShelleyBase
  type PredicateFailure (DijkstraUTXOW era) = DijkstraUtxowPredFailure era
  type Event (DijkstraUTXOW era) = AlonzoUtxowEvent era
  transitionRules :: [TransitionRule (DijkstraUTXOW era)]
transitionRules = [forall era.
(AlonzoEraTx era, AlonzoEraUTxO era,
 ScriptsNeeded era ~ AlonzoScriptsNeeded era, DijkstraEraTxBody era,
 EraRule "UTXOW" era ~ DijkstraUTXOW era,
 InjectRuleFailure "UTXOW" ShelleyUtxowPredFailure era,
 InjectRuleFailure "UTXOW" AlonzoUtxowPredFailure era,
 InjectRuleFailure "UTXOW" BabbageUtxowPredFailure era,
 InjectRuleFailure "UTXOW" DijkstraUtxowPredFailure era,
 Embed (EraRule "UTXO" era) (DijkstraUTXOW era),
 Environment (EraRule "UTXO" era) ~ DijkstraUtxoEnv era,
 State (EraRule "UTXO" era) ~ UTxOState era,
 Signal (EraRule "UTXO" era) ~ StAnnTx TopTx era) =>
TransitionRule (EraRule "UTXOW" era)
dijkstraUtxowTransition @era]
  initialRules :: [InitialRule (DijkstraUTXOW era)]
initialRules = []

instance
  ( STS (DijkstraUTXO era)
  , PredicateFailure (EraRule "UTXO" era) ~ DijkstraUtxoPredFailure era
  , Event (EraRule "UTXO" era) ~ AlonzoUtxoEvent era
  ) =>
  Embed (DijkstraUTXO era) (DijkstraUTXOW era)
  where
  wrapFailed :: PredicateFailure (DijkstraUTXO era)
-> PredicateFailure (DijkstraUTXOW era)
wrapFailed = PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
PredicateFailure (DijkstraUTXO era)
-> PredicateFailure (DijkstraUTXOW era)
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure
  wrapEvent :: Event (DijkstraUTXO era) -> Event (DijkstraUTXOW era)
wrapEvent = ShelleyUtxowEvent era -> AlonzoUtxowEvent era
forall era. ShelleyUtxowEvent era -> AlonzoUtxowEvent era
WrappedShelleyEraEvent (ShelleyUtxowEvent era -> AlonzoUtxowEvent era)
-> (AlonzoUtxoEvent era -> ShelleyUtxowEvent era)
-> AlonzoUtxoEvent era
-> AlonzoUtxowEvent era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoEvent era -> ShelleyUtxowEvent era
Event (EraRule "UTXO" era) -> ShelleyUtxowEvent era
forall era. Event (EraRule "UTXO" era) -> ShelleyUtxowEvent era
UtxoEvent

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

instance
  ( ConwayEraScript era
  , EncCBOR (PredicateFailure (EraRule "UTXO" era))
  ) =>
  EncCBOR (DijkstraUtxowPredFailure era)
  where
  encCBOR :: DijkstraUtxowPredFailure era -> Encoding
encCBOR =
    Encode Open (DijkstraUtxowPredFailure era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode Open (DijkstraUtxowPredFailure era) -> Encoding)
-> (DijkstraUtxowPredFailure era
    -> Encode Open (DijkstraUtxowPredFailure era))
-> DijkstraUtxowPredFailure era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      UtxoFailure PredicateFailure (EraRule "UTXO" era)
x -> (PredicateFailure (EraRule "UTXO" era)
 -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (PredicateFailure (EraRule "UTXO" era)
      -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure Word
0 Encode
  Open
  (PredicateFailure (EraRule "UTXO" era)
   -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "UTXO" era))
-> Encode Open (DijkstraUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> PredicateFailure (EraRule "UTXO" era)
-> Encode (Closed Dense) (PredicateFailure (EraRule "UTXO" era))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To PredicateFailure (EraRule "UTXO" era)
x
      InvalidWitnessesUTXOW NonEmpty (VKey Witness)
xs -> (NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era
forall era. NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era
InvalidWitnessesUTXOW Word
1 Encode
  Open (NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmpty (VKey Witness))
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingVKeyWitnessesUTXOW NonEmptySet (KeyHash Witness)
xs -> (NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era
MissingVKeyWitnessesUTXOW Word
2 Encode
  Open
  (NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet (KeyHash Witness))
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingScriptWitnessesUTXOW NonEmptySet ScriptHash
xs -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MissingScriptWitnessesUTXOW Word
3 Encode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      ScriptWitnessNotValidatingUTXOW NonEmptySet ScriptHash
xs -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
ScriptWitnessNotValidatingUTXOW Word
4 Encode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingTxBodyMetadataHash TxAuxDataHash
xs -> (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraUtxowPredFailure era
MissingTxBodyMetadataHash Word
5 Encode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) TxAuxDataHash
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingTxMetadata TxAuxDataHash
xs -> (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraUtxowPredFailure era
MissingTxMetadata Word
6 Encode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) TxAuxDataHash
-> Encode Open (DijkstraUtxowPredFailure 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
      ConflictingMetadataHash Mismatch RelEQ TxAuxDataHash
mm -> (Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era
ConflictingMetadataHash Word
7 Encode
  Open (Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (Mismatch RelEQ TxAuxDataHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      DijkstraUtxowPredFailure era
InvalidMetadata -> DijkstraUtxowPredFailure era
-> Word -> Encode Open (DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum DijkstraUtxowPredFailure era
forall era. DijkstraUtxowPredFailure era
InvalidMetadata Word
8
      ExtraneousScriptWitnessesUTXOW NonEmptySet ScriptHash
xs -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
ExtraneousScriptWitnessesUTXOW Word
9 Encode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingRedeemers NonEmpty (PlutusPurpose AsItem era, ScriptHash)
x -> (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
 -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
      -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraUtxowPredFailure era
MissingRedeemers Word
10 Encode
  Open
  (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
   -> DijkstraUtxowPredFailure era)
-> Encode
     (Closed Dense) (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingRequiredDatums NonEmptySet DataHash
x Set DataHash
y -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
MissingRequiredDatums Word
11 Encode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet DataHash)
-> Encode Open (Set DataHash -> DijkstraUtxowPredFailure 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 -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (Set DataHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      NotAllowedSupplementalDatums NonEmptySet DataHash
x Set DataHash
y -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
NotAllowedSupplementalDatums Word
12 Encode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet DataHash)
-> Encode Open (Set DataHash -> DijkstraUtxowPredFailure 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 -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (Set DataHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      PPViewHashesDontMatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraUtxowPredFailure era
PPViewHashesDontMatch Word
13 Encode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> DijkstraUtxowPredFailure era)
-> Encode
     (Closed Dense) (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Encode Open (DijkstraUtxowPredFailure 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
      UnspendableUTxONoDatumHash NonEmptySet TxIn
x -> (NonEmptySet TxIn -> DijkstraUtxowPredFailure era)
-> Word
-> Encode Open (NonEmptySet TxIn -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet TxIn -> DijkstraUtxowPredFailure era
forall era. NonEmptySet TxIn -> DijkstraUtxowPredFailure era
UnspendableUTxONoDatumHash Word
14 Encode Open (NonEmptySet TxIn -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet TxIn)
-> Encode Open (DijkstraUtxowPredFailure 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
      ExtraRedeemers NonEmpty (PlutusPurpose AsIx era)
x -> (NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era
ExtraRedeemers Word
15 Encode
  Open
  (NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmpty (PlutusPurpose AsIx era))
-> Encode Open (DijkstraUtxowPredFailure 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
      MalformedScriptWitnesses NonEmptySet ScriptHash
x -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MalformedScriptWitnesses Word
16 Encode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      MalformedReferenceScripts NonEmptySet ScriptHash
x -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MalformedReferenceScripts Word
17 Encode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet ScriptHash)
-> Encode Open (DijkstraUtxowPredFailure 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
      ScriptIntegrityHashMismatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
x StrictMaybe ByteString
y -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraUtxowPredFailure era
ScriptIntegrityHashMismatch Word
18 Encode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
-> Encode
     (Closed Dense) (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Encode
     Open (StrictMaybe ByteString -> DijkstraUtxowPredFailure 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 -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (StrictMaybe ByteString)
-> Encode Open (DijkstraUtxowPredFailure 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
      MissingRequiredGuards NonEmptySet (Credential Guard)
x -> (NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era)
-> Word
-> Encode
     Open
     (NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era)
forall t. t -> Word -> Encode Open t
Sum NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era
MissingRequiredGuards Word
19 Encode
  Open
  (NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era)
-> Encode (Closed Dense) (NonEmptySet (Credential Guard))
-> Encode Open (DijkstraUtxowPredFailure era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> NonEmptySet (Credential Guard)
-> Encode (Closed Dense) (NonEmptySet (Credential Guard))
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To NonEmptySet (Credential Guard)
x

instance
  ( ConwayEraScript era
  , DecCBOR (PredicateFailure (EraRule "UTXO" era))
  ) =>
  DecCBOR (DijkstraUtxowPredFailure era)
  where
  decCBOR :: forall s. Decoder s (DijkstraUtxowPredFailure era)
decCBOR = Decode (Closed Dense) (DijkstraUtxowPredFailure era)
-> Decoder s (DijkstraUtxowPredFailure era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) (DijkstraUtxowPredFailure era)
 -> Decoder s (DijkstraUtxowPredFailure era))
-> ((Word -> Decode Open (DijkstraUtxowPredFailure era))
    -> Decode (Closed Dense) (DijkstraUtxowPredFailure era))
-> (Word -> Decode Open (DijkstraUtxowPredFailure era))
-> Decoder s (DijkstraUtxowPredFailure era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text
-> (Word -> Decode Open (DijkstraUtxowPredFailure era))
-> Decode (Closed Dense) (DijkstraUtxowPredFailure era)
forall t.
Text -> (Word -> Decode Open t) -> Decode (Closed Dense) t
Summands Text
"ConwayUtxowPred" ((Word -> Decode Open (DijkstraUtxowPredFailure era))
 -> Decoder s (DijkstraUtxowPredFailure era))
-> (Word -> Decode Open (DijkstraUtxowPredFailure era))
-> Decoder s (DijkstraUtxowPredFailure era)
forall a b. (a -> b) -> a -> b
$ \case
    Word
0 -> (PredicateFailure (EraRule "UTXO" era)
 -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (PredicateFailure (EraRule "UTXO" era)
      -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure Decode
  Open
  (PredicateFailure (EraRule "UTXO" era)
   -> DijkstraUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 0)) (PredicateFailure (EraRule "UTXO" era))
-> Decode Open (DijkstraUtxowPredFailure 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 "UTXO" era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
1 -> (NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era)
-> Decode
     Open (NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era
forall era. NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era
InvalidWitnessesUTXOW Decode
  Open (NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 1)) (NonEmpty (VKey Witness))
-> Decode Open (DijkstraUtxowPredFailure 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) -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era
MissingVKeyWitnessesUTXOW Decode
  Open
  (NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 2)) (NonEmptySet (KeyHash Witness))
-> Decode Open (DijkstraUtxowPredFailure 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 -> DijkstraUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MissingScriptWitnessesUTXOW Decode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 3)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraUtxowPredFailure 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 -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
ScriptWitnessNotValidatingUTXOW Decode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 4)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraUtxowPredFailure 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 ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
5 -> (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Decode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraUtxowPredFailure era
MissingTxBodyMetadataHash Decode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 5)) TxAuxDataHash
-> Decode Open (DijkstraUtxowPredFailure 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 -> (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Decode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraUtxowPredFailure era
MissingTxMetadata Decode Open (TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 6)) TxAuxDataHash
-> Decode Open (DijkstraUtxowPredFailure 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)) TxAuxDataHash
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
7 -> (Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open (Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era
ConflictingMetadataHash Decode
  Open (Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 7)) (Mismatch RelEQ TxAuxDataHash)
-> Decode Open (DijkstraUtxowPredFailure 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)) (Mismatch RelEQ TxAuxDataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
8 -> DijkstraUtxowPredFailure era
-> Decode Open (DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD DijkstraUtxowPredFailure era
forall era. DijkstraUtxowPredFailure era
InvalidMetadata
    Word
9 -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
ExtraneousScriptWitnessesUTXOW Decode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 8)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraUtxowPredFailure 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)) (NonEmptySet ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
10 -> (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
 -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
      -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraUtxowPredFailure era
MissingRedeemers Decode
  Open
  (NonEmpty (PlutusPurpose AsItem era, ScriptHash)
   -> DijkstraUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 9))
     (NonEmpty (PlutusPurpose AsItem era, ScriptHash))
-> Decode Open (DijkstraUtxowPredFailure 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 (PlutusPurpose AsItem era, ScriptHash))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
11 -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
MissingRequiredDatums Decode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 11)) (NonEmptySet DataHash)
-> Decode Open (Set DataHash -> DijkstraUtxowPredFailure 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 -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 10)) (Set DataHash)
-> Decode Open (DijkstraUtxowPredFailure 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
12 -> (NonEmptySet DataHash
 -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet DataHash
      -> Set DataHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
NotAllowedSupplementalDatums Decode
  Open
  (NonEmptySet DataHash
   -> Set DataHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 13)) (NonEmptySet DataHash)
-> Decode Open (Set DataHash -> DijkstraUtxowPredFailure 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 DataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode Open (Set DataHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 12)) (Set DataHash)
-> Decode Open (DijkstraUtxowPredFailure 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)) (Set DataHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
13 -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraUtxowPredFailure era
PPViewHashesDontMatch Decode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> DijkstraUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 14))
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Decode Open (DijkstraUtxowPredFailure 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))
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
14 -> (NonEmptySet TxIn -> DijkstraUtxowPredFailure era)
-> Decode Open (NonEmptySet TxIn -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet TxIn -> DijkstraUtxowPredFailure era
forall era. NonEmptySet TxIn -> DijkstraUtxowPredFailure era
UnspendableUTxONoDatumHash Decode Open (NonEmptySet TxIn -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 15)) (NonEmptySet TxIn)
-> Decode Open (DijkstraUtxowPredFailure 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 TxIn)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
15 -> (NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era
ExtraRedeemers Decode
  Open
  (NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 16)) (NonEmpty (PlutusPurpose AsIx era))
-> Decode Open (DijkstraUtxowPredFailure 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)) (NonEmpty (PlutusPurpose AsIx era))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
16 -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MalformedScriptWitnesses Decode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 17)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraUtxowPredFailure 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)) (NonEmptySet ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
17 -> (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode
     Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MalformedReferenceScripts Decode
  Open (NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 18)) (NonEmptySet ScriptHash)
-> Decode Open (DijkstraUtxowPredFailure 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)) (NonEmptySet ScriptHash)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
18 -> (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
 -> StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
      -> StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraUtxowPredFailure era
ScriptIntegrityHashMismatch Decode
  Open
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
   -> StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
-> Decode
     (Closed (ZonkAny 20))
     (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
-> Decode
     Open (StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode
  (Closed (ZonkAny 20))
  (Mismatch RelEQ (StrictMaybe ScriptIntegrityHash))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  Open (StrictMaybe ByteString -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 19)) (StrictMaybe ByteString)
-> Decode Open (DijkstraUtxowPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 19)) (StrictMaybe ByteString)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
19 -> (NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era)
-> Decode
     Open
     (NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era)
forall t. t -> Decode Open t
SumD NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era
MissingRequiredGuards Decode
  Open
  (NonEmptySet (Credential Guard) -> DijkstraUtxowPredFailure era)
-> Decode (Closed (ZonkAny 21)) (NonEmptySet (Credential Guard))
-> Decode Open (DijkstraUtxowPredFailure era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 21)) (NonEmptySet (Credential Guard))
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
    Word
n -> Word -> Decode Open (DijkstraUtxowPredFailure era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

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

conwayToDijkstraUtxowPredFailure ::
  forall era.
  ConwayUtxowPredFailure era ->
  DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure :: forall era.
ConwayUtxowPredFailure era -> DijkstraUtxowPredFailure era
conwayToDijkstraUtxowPredFailure = \case
  Conway.UtxoFailure PredicateFailure (EraRule "UTXO" era)
f -> PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
forall era.
PredicateFailure (EraRule "UTXO" era)
-> DijkstraUtxowPredFailure era
UtxoFailure PredicateFailure (EraRule "UTXO" era)
f
  Conway.InvalidWitnessesUTXOW NonEmpty (VKey Witness)
ks -> NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era
forall era. NonEmpty (VKey Witness) -> DijkstraUtxowPredFailure era
InvalidWitnessesUTXOW NonEmpty (VKey Witness)
ks
  Conway.MissingVKeyWitnessesUTXOW NonEmptySet (KeyHash Witness)
ks -> NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet (KeyHash Witness) -> DijkstraUtxowPredFailure era
MissingVKeyWitnessesUTXOW NonEmptySet (KeyHash Witness)
ks
  Conway.MissingScriptWitnessesUTXOW NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MissingScriptWitnessesUTXOW NonEmptySet ScriptHash
hs
  Conway.ScriptWitnessNotValidatingUTXOW NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
ScriptWitnessNotValidatingUTXOW NonEmptySet ScriptHash
hs
  Conway.MissingTxBodyMetadataHash TxAuxDataHash
dh -> TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraUtxowPredFailure era
MissingTxBodyMetadataHash TxAuxDataHash
dh
  Conway.MissingTxMetadata TxAuxDataHash
dh -> TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era. TxAuxDataHash -> DijkstraUtxowPredFailure era
MissingTxMetadata TxAuxDataHash
dh
  Conway.ConflictingMetadataHash Mismatch RelEQ TxAuxDataHash
mm -> Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ TxAuxDataHash -> DijkstraUtxowPredFailure era
ConflictingMetadataHash Mismatch RelEQ TxAuxDataHash
mm
  ConwayUtxowPredFailure era
Conway.InvalidMetadata -> DijkstraUtxowPredFailure era
forall era. DijkstraUtxowPredFailure era
InvalidMetadata
  Conway.ExtraneousScriptWitnessesUTXOW NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
ExtraneousScriptWitnessesUTXOW NonEmptySet ScriptHash
hs
  Conway.MissingRedeemers NonEmpty (PlutusPurpose AsItem era, ScriptHash)
pps -> NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsItem era, ScriptHash)
-> DijkstraUtxowPredFailure era
MissingRedeemers NonEmpty (PlutusPurpose AsItem era, ScriptHash)
pps
  Conway.MissingRequiredDatums NonEmptySet DataHash
hs1 Set DataHash
hs2 -> NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
MissingRequiredDatums NonEmptySet DataHash
hs1 Set DataHash
hs2
  Conway.NotAllowedSupplementalDatums NonEmptySet DataHash
hs1 Set DataHash
hs2 -> NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
forall era.
NonEmptySet DataHash
-> Set DataHash -> DijkstraUtxowPredFailure era
NotAllowedSupplementalDatums NonEmptySet DataHash
hs1 Set DataHash
hs2
  Conway.PPViewHashesDontMatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm -> Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> DijkstraUtxowPredFailure era
PPViewHashesDontMatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm
  Conway.UnspendableUTxONoDatumHash NonEmptySet TxIn
txs -> NonEmptySet TxIn -> DijkstraUtxowPredFailure era
forall era. NonEmptySet TxIn -> DijkstraUtxowPredFailure era
UnspendableUTxONoDatumHash NonEmptySet TxIn
txs
  Conway.ExtraRedeemers NonEmpty (PlutusPurpose AsIx era)
pps -> NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era
forall era.
NonEmpty (PlutusPurpose AsIx era) -> DijkstraUtxowPredFailure era
ExtraRedeemers NonEmpty (PlutusPurpose AsIx era)
pps
  Conway.MalformedScriptWitnesses NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MalformedScriptWitnesses NonEmptySet ScriptHash
hs
  Conway.MalformedReferenceScripts NonEmptySet ScriptHash
hs -> NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
forall era. NonEmptySet ScriptHash -> DijkstraUtxowPredFailure era
MalformedReferenceScripts NonEmptySet ScriptHash
hs
  Conway.ScriptIntegrityHashMismatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm StrictMaybe ByteString
f -> Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraUtxowPredFailure era
forall era.
Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
-> StrictMaybe ByteString -> DijkstraUtxowPredFailure era
ScriptIntegrityHashMismatch Mismatch RelEQ (StrictMaybe ScriptIntegrityHash)
mm StrictMaybe ByteString
f