{-# LANGUAGE DataKinds #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Alonzo ( AlonzoEra, AlonzoTxOut, MaryValue, pattern AlonzoTxBody, AlonzoScript, AlonzoTxAuxData, Tx (..), ApplyTxError (..), AlonzoStAnnTx (..), mkAlonzoStAnnTx, ) where import Cardano.Ledger.Alonzo.BlockBody () import Cardano.Ledger.Alonzo.Core import Cardano.Ledger.Alonzo.Era import Cardano.Ledger.Alonzo.Forecast () import Cardano.Ledger.Alonzo.PParams () import Cardano.Ledger.Alonzo.Plutus.Context (EraPlutusContext, LedgerTxInfo (..)) import Cardano.Ledger.Alonzo.Plutus.Evaluate ( scriptsWithContextFromLedgerTxInfo, ) import Cardano.Ledger.Alonzo.Plutus.TxInfo () import Cardano.Ledger.Alonzo.Rules () import Cardano.Ledger.Alonzo.Scripts (AlonzoScript (..), plutusScriptLanguage) import Cardano.Ledger.Alonzo.State () import Cardano.Ledger.Alonzo.Transition () import Cardano.Ledger.Alonzo.Translation () import Cardano.Ledger.Alonzo.Tx (AlonzoStAnnTx (..), Tx (..)) import Cardano.Ledger.Alonzo.TxAuxData (AlonzoTxAuxData) import Cardano.Ledger.Alonzo.TxBody (AlonzoTxOut, TxBody (AlonzoTxBody)) import Cardano.Ledger.Alonzo.TxWits () import Cardano.Ledger.Alonzo.UTxO ( AlonzoEraUTxO, AlonzoScriptsNeeded, resolveNeededPlutusScriptsWithPurpose, ) import Cardano.Ledger.Binary (DecCBOR, EncCBOR) import Cardano.Ledger.Block (EraBlockHeader) import Cardano.Ledger.Mary.Value (MaryValue) import Cardano.Ledger.Plutus.Data () import Cardano.Ledger.Rules.ValidationMode (lblStatic) import Cardano.Ledger.Shelley.API import Cardano.Ledger.Shelley.Rules (ledgerPpL, ledgerSlotNoL) import qualified Cardano.Ledger.Shelley.Rules as Shelley import Cardano.Ledger.State (EraUTxO (..), utxoG) import Cardano.Slotting.EpochInfo (EpochInfo) import Cardano.Slotting.EpochInfo.Extend (unsafeLinearExtendEpochInfo) import Cardano.Slotting.Time (SystemStart) import Control.State.Transition.Extended (ValidationPolicy (..)) import Data.Bifunctor (Bifunctor (first)) import Data.List.NonEmpty (NonEmpty) import qualified Data.Set as Set import Data.Text (Text) import GHC.Generics (Generic) import Lens.Micro instance ApplyTx AlonzoEra where newtype ApplyTxError AlonzoEra = AlonzoApplyTxError (NonEmpty (Shelley.ShelleyLedgerPredFailure AlonzoEra)) deriving (ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool (ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool) -> (ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool) -> Eq (ApplyTxError AlonzoEra) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool == :: ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool $c/= :: ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool /= :: ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> Bool Eq, Int -> ApplyTxError AlonzoEra -> ShowS [ApplyTxError AlonzoEra] -> ShowS ApplyTxError AlonzoEra -> String (Int -> ApplyTxError AlonzoEra -> ShowS) -> (ApplyTxError AlonzoEra -> String) -> ([ApplyTxError AlonzoEra] -> ShowS) -> Show (ApplyTxError AlonzoEra) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ApplyTxError AlonzoEra -> ShowS showsPrec :: Int -> ApplyTxError AlonzoEra -> ShowS $cshow :: ApplyTxError AlonzoEra -> String show :: ApplyTxError AlonzoEra -> String $cshowList :: [ApplyTxError AlonzoEra] -> ShowS showList :: [ApplyTxError AlonzoEra] -> ShowS Show) deriving newtype (ApplyTxError AlonzoEra -> Encoding (ApplyTxError AlonzoEra -> Encoding) -> EncCBOR (ApplyTxError AlonzoEra) forall a. (a -> Encoding) -> EncCBOR a $cencCBOR :: ApplyTxError AlonzoEra -> Encoding encCBOR :: ApplyTxError AlonzoEra -> Encoding EncCBOR, Typeable (ApplyTxError AlonzoEra) Typeable (ApplyTxError AlonzoEra) => (forall s. Decoder s (ApplyTxError AlonzoEra)) -> (forall s. Proxy (ApplyTxError AlonzoEra) -> Decoder s ()) -> (Proxy (ApplyTxError AlonzoEra) -> Text) -> DecCBOR (ApplyTxError AlonzoEra) Proxy (ApplyTxError AlonzoEra) -> Text forall s. Decoder s (ApplyTxError AlonzoEra) forall a. Typeable a => (forall s. Decoder s a) -> (forall s. Proxy a -> Decoder s ()) -> (Proxy a -> Text) -> DecCBOR a forall s. Proxy (ApplyTxError AlonzoEra) -> Decoder s () $cdecCBOR :: forall s. Decoder s (ApplyTxError AlonzoEra) decCBOR :: forall s. Decoder s (ApplyTxError AlonzoEra) $cdropCBOR :: forall s. Proxy (ApplyTxError AlonzoEra) -> Decoder s () dropCBOR :: forall s. Proxy (ApplyTxError AlonzoEra) -> Decoder s () $clabel :: Proxy (ApplyTxError AlonzoEra) -> Text label :: Proxy (ApplyTxError AlonzoEra) -> Text DecCBOR, NonEmpty (ApplyTxError AlonzoEra) -> ApplyTxError AlonzoEra ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra (ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra) -> (NonEmpty (ApplyTxError AlonzoEra) -> ApplyTxError AlonzoEra) -> (forall b. Integral b => b -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra) -> Semigroup (ApplyTxError AlonzoEra) forall b. Integral b => b -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra forall a. (a -> a -> a) -> (NonEmpty a -> a) -> (forall b. Integral b => b -> a -> a) -> Semigroup a $c<> :: ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra <> :: ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra $csconcat :: NonEmpty (ApplyTxError AlonzoEra) -> ApplyTxError AlonzoEra sconcat :: NonEmpty (ApplyTxError AlonzoEra) -> ApplyTxError AlonzoEra $cstimes :: forall b. Integral b => b -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra stimes :: forall b. Integral b => b -> ApplyTxError AlonzoEra -> ApplyTxError AlonzoEra Semigroup, (forall x. ApplyTxError AlonzoEra -> Rep (ApplyTxError AlonzoEra) x) -> (forall x. Rep (ApplyTxError AlonzoEra) x -> ApplyTxError AlonzoEra) -> Generic (ApplyTxError AlonzoEra) forall x. Rep (ApplyTxError AlonzoEra) x -> ApplyTxError AlonzoEra forall x. ApplyTxError AlonzoEra -> Rep (ApplyTxError AlonzoEra) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. ApplyTxError AlonzoEra -> Rep (ApplyTxError AlonzoEra) x from :: forall x. ApplyTxError AlonzoEra -> Rep (ApplyTxError AlonzoEra) x $cto :: forall x. Rep (ApplyTxError AlonzoEra) x -> ApplyTxError AlonzoEra to :: forall x. Rep (ApplyTxError AlonzoEra) x -> ApplyTxError AlonzoEra Generic) mkStAnnTx :: EpochInfo (Either Text) -> SystemStart -> PParams AlonzoEra -> UTxO AlonzoEra -> Tx TopTx AlonzoEra -> StAnnTx TopTx AlonzoEra mkStAnnTx = EpochInfo (Either Text) -> SystemStart -> PParams AlonzoEra -> UTxO AlonzoEra -> Tx TopTx AlonzoEra -> StAnnTx TopTx AlonzoEra EpochInfo (Either Text) -> SystemStart -> PParams AlonzoEra -> UTxO AlonzoEra -> Tx TopTx AlonzoEra -> AlonzoStAnnTx TopTx AlonzoEra forall era. (AlonzoEraUTxO era, AlonzoEraTx era, EraPlutusContext era, ScriptsNeeded era ~ AlonzoScriptsNeeded era) => EpochInfo (Either Text) -> SystemStart -> PParams era -> UTxO era -> Tx TopTx era -> AlonzoStAnnTx TopTx era mkAlonzoStAnnTx internalApplyTxWithValidation :: ValidationPolicy -> Globals -> MempoolEnv AlonzoEra -> MempoolState AlonzoEra -> Tx TopTx AlonzoEra -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) internalApplyTxWithValidation ValidationPolicy validationPolicy Globals globals MempoolEnv AlonzoEra env MempoolState AlonzoEra state Tx TopTx AlonzoEra tx = let stAnnTx :: StAnnTx TopTx AlonzoEra stAnnTx = EpochInfo (Either Text) -> SystemStart -> PParams AlonzoEra -> UTxO AlonzoEra -> Tx TopTx AlonzoEra -> StAnnTx TopTx AlonzoEra forall era. ApplyTx era => EpochInfo (Either Text) -> SystemStart -> PParams era -> UTxO era -> Tx TopTx era -> StAnnTx TopTx era mkStAnnTx (SlotNo -> EpochInfo (Either Text) -> EpochInfo (Either Text) forall (m :: * -> *). Monad m => SlotNo -> EpochInfo m -> EpochInfo m unsafeLinearExtendEpochInfo (MempoolEnv AlonzoEra env MempoolEnv AlonzoEra -> Getting SlotNo (MempoolEnv AlonzoEra) SlotNo -> SlotNo forall s a. s -> Getting a s a -> a ^. Getting SlotNo (MempoolEnv AlonzoEra) SlotNo forall era (f :: * -> *). Functor f => (SlotNo -> f SlotNo) -> LedgerEnv era -> f (LedgerEnv era) ledgerSlotNoL) (Globals -> EpochInfo (Either Text) epochInfo Globals globals)) (Globals -> SystemStart systemStart Globals globals) (MempoolEnv AlonzoEra env MempoolEnv AlonzoEra -> Getting (PParams AlonzoEra) (MempoolEnv AlonzoEra) (PParams AlonzoEra) -> PParams AlonzoEra forall s a. s -> Getting a s a -> a ^. Getting (PParams AlonzoEra) (MempoolEnv AlonzoEra) (PParams AlonzoEra) forall era (f :: * -> *). Functor f => (PParams era -> f (PParams era)) -> LedgerEnv era -> f (LedgerEnv era) ledgerPpL) (MempoolState AlonzoEra state MempoolState AlonzoEra -> Getting (UTxO AlonzoEra) (MempoolState AlonzoEra) (UTxO AlonzoEra) -> UTxO AlonzoEra forall s a. s -> Getting a s a -> a ^. Getting (UTxO AlonzoEra) (MempoolState AlonzoEra) (UTxO AlonzoEra) forall era. SimpleGetter (LedgerState era) (UTxO era) forall (t :: * -> *) era. CanGetUTxO t => SimpleGetter (t era) (UTxO era) utxoG) Tx TopTx AlonzoEra tx in (NonEmpty (ShelleyLedgerPredFailure AlonzoEra) -> ApplyTxError AlonzoEra) -> Either (NonEmpty (ShelleyLedgerPredFailure AlonzoEra)) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) forall a b c. (a -> b) -> Either a c -> Either b c forall (p :: * -> * -> *) a b c. Bifunctor p => (a -> b) -> p a c -> p b c first NonEmpty (ShelleyLedgerPredFailure AlonzoEra) -> ApplyTxError AlonzoEra AlonzoApplyTxError (Either (NonEmpty (ShelleyLedgerPredFailure AlonzoEra)) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra)) -> Either (NonEmpty (ShelleyLedgerPredFailure AlonzoEra)) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) forall a b. (a -> b) -> a -> b $ forall (rule :: Symbol) era. (EraTx era, STS (EraRule rule era), BaseM (EraRule rule era) ~ ShelleyBase, Environment (EraRule rule era) ~ LedgerEnv era, State (EraRule rule era) ~ MempoolState era, Signal (EraRule rule era) ~ StAnnTx TopTx era) => ValidationPolicy -> Globals -> LedgerEnv era -> MempoolState era -> StAnnTx TopTx era -> Either (NonEmpty (PredicateFailure (EraRule rule era))) (MempoolState era, ValidatedTx era) ruleApplyTxValidation @"LEDGER" ValidationPolicy validationPolicy Globals globals MempoolEnv AlonzoEra env MempoolState AlonzoEra state StAnnTx TopTx AlonzoEra stAnnTx internalReapplyValidatedTx :: Globals -> MempoolEnv AlonzoEra -> MempoolState AlonzoEra -> ValidatedTx AlonzoEra -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra) internalReapplyValidatedTx Globals globals MempoolEnv AlonzoEra env MempoolState AlonzoEra state ValidatedTx AlonzoEra vtx | ValidatedTx AlonzoEra -> SlotNo forall era. ValidatedTx era -> SlotNo getValidatedTxSlotNo ValidatedTx AlonzoEra vtx SlotNo -> SlotNo -> Bool forall a. Eq a => a -> a -> Bool == MempoolEnv AlonzoEra env MempoolEnv AlonzoEra -> Getting SlotNo (MempoolEnv AlonzoEra) SlotNo -> SlotNo forall s a. s -> Getting a s a -> a ^. Getting SlotNo (MempoolEnv AlonzoEra) SlotNo forall era (f :: * -> *). Functor f => (SlotNo -> f SlotNo) -> LedgerEnv era -> f (LedgerEnv era) ledgerSlotNoL = (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> MempoolState AlonzoEra forall a b. (a, b) -> a fst ((MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> MempoolState AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (NonEmpty (ShelleyLedgerPredFailure AlonzoEra) -> ApplyTxError AlonzoEra) -> Either (NonEmpty (ShelleyLedgerPredFailure AlonzoEra)) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) forall a b c. (a -> b) -> Either a c -> Either b c forall (p :: * -> * -> *) a b c. Bifunctor p => (a -> b) -> p a c -> p b c first NonEmpty (ShelleyLedgerPredFailure AlonzoEra) -> ApplyTxError AlonzoEra AlonzoApplyTxError ( forall (rule :: Symbol) era. (EraTx era, STS (EraRule rule era), BaseM (EraRule rule era) ~ ShelleyBase, Environment (EraRule rule era) ~ LedgerEnv era, State (EraRule rule era) ~ MempoolState era, Signal (EraRule rule era) ~ StAnnTx TopTx era) => ValidationPolicy -> Globals -> LedgerEnv era -> MempoolState era -> StAnnTx TopTx era -> Either (NonEmpty (PredicateFailure (EraRule rule era))) (MempoolState era, ValidatedTx era) ruleApplyTxValidation @"LEDGER" (([String] -> Bool) -> ValidationPolicy ValidateSuchThat (String -> [String] -> Bool forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool notElem String lblStatic)) Globals globals MempoolEnv AlonzoEra env MempoolState AlonzoEra state (ValidatedTx AlonzoEra -> StAnnTx TopTx AlonzoEra forall era. ValidatedTx era -> StAnnTx TopTx era getValidatedTxStAnnTx ValidatedTx AlonzoEra vtx) ) | Bool otherwise = (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> MempoolState AlonzoEra forall a b. (a, b) -> a fst ((MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> MempoolState AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ValidationPolicy -> Globals -> MempoolEnv AlonzoEra -> MempoolState AlonzoEra -> Tx TopTx AlonzoEra -> Either (ApplyTxError AlonzoEra) (MempoolState AlonzoEra, ValidatedTx AlonzoEra) forall era. ApplyTx era => ValidationPolicy -> Globals -> MempoolEnv era -> MempoolState era -> Tx TopTx era -> Either (ApplyTxError era) (MempoolState era, ValidatedTx era) internalApplyTxWithValidation ValidationPolicy ValidateAll Globals globals MempoolEnv AlonzoEra env MempoolState AlonzoEra state (ValidatedTx AlonzoEra -> StAnnTx TopTx AlonzoEra forall era. ValidatedTx era -> StAnnTx TopTx era getValidatedTxStAnnTx ValidatedTx AlonzoEra vtx AlonzoStAnnTx TopTx AlonzoEra -> Getting (Tx TopTx AlonzoEra) (AlonzoStAnnTx TopTx AlonzoEra) (Tx TopTx AlonzoEra) -> Tx TopTx AlonzoEra forall s a. s -> Getting a s a -> a ^. Getting (Tx TopTx AlonzoEra) (StAnnTx TopTx AlonzoEra) (Tx TopTx AlonzoEra) Getting (Tx TopTx AlonzoEra) (AlonzoStAnnTx TopTx AlonzoEra) (Tx TopTx AlonzoEra) forall era (l :: TxLevel). EraTx era => SimpleGetter (StAnnTx l era) (Tx l era) forall (l :: TxLevel). SimpleGetter (StAnnTx l AlonzoEra) (Tx l AlonzoEra) txStAnnTxG) instance ApplyTick AlonzoEra instance EraBlockHeader h AlonzoEra => ApplyBlock h AlonzoEra mkAlonzoStAnnTx :: ( AlonzoEraUTxO era , AlonzoEraTx era , EraPlutusContext era , ScriptsNeeded era ~ AlonzoScriptsNeeded era ) => EpochInfo (Either Text) -> SystemStart -> PParams era -> UTxO era -> Tx TopTx era -> AlonzoStAnnTx TopTx era mkAlonzoStAnnTx :: forall era. (AlonzoEraUTxO era, AlonzoEraTx era, EraPlutusContext era, ScriptsNeeded era ~ AlonzoScriptsNeeded era) => EpochInfo (Either Text) -> SystemStart -> PParams era -> UTxO era -> Tx TopTx era -> AlonzoStAnnTx TopTx era mkAlonzoStAnnTx EpochInfo (Either Text) ei SystemStart sysStart PParams era pp UTxO era utxo Tx TopTx era tx = let scriptsNeeded :: ScriptsNeeded era scriptsNeeded = 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 utxo (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) scriptsProvided :: ScriptsProvided era scriptsProvided = UTxO era -> Tx TopTx era -> ScriptsProvided era forall era (t :: TxLevel). EraUTxO era => UTxO era -> Tx t era -> ScriptsProvided era forall (t :: TxLevel). UTxO era -> Tx t era -> ScriptsProvided era getScriptsProvided UTxO era utxo Tx TopTx era tx plutusScriptsUsed :: [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] plutusScriptsUsed = ScriptsProvided era -> AlonzoScriptsNeeded era -> [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] forall era. AlonzoEraScript era => ScriptsProvided era -> AlonzoScriptsNeeded era -> [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] resolveNeededPlutusScriptsWithPurpose ScriptsProvided era scriptsProvided ScriptsNeeded era AlonzoScriptsNeeded era scriptsNeeded ledgerTxInfo :: LedgerTxInfo era ledgerTxInfo = LedgerTxInfo { ltiProtVer :: ProtVer ltiProtVer = PParams era pp PParams era -> Getting ProtVer (PParams era) ProtVer -> ProtVer forall s a. s -> Getting a s a -> a ^. Getting ProtVer (PParams era) ProtVer forall era. EraPParams era => Lens' (PParams era) ProtVer Lens' (PParams era) ProtVer ppProtocolVersionL , ltiEpochInfo :: EpochInfo (Either Text) ltiEpochInfo = EpochInfo (Either Text) ei , ltiSystemStart :: SystemStart ltiSystemStart = SystemStart sysStart , ltiUTxO :: UTxO era ltiUTxO = UTxO era utxo , ltiTx :: Tx TopTx era ltiTx = Tx TopTx era tx , ltiMemoizedSubTransactions :: Map TxId (TxInfoResult era) ltiMemoizedSubTransactions = Map TxId (TxInfoResult era) forall a. Monoid a => a mempty } in AlonzoStAnnTx { asatTx :: Tx TopTx era asatTx = Tx TopTx era tx , asatScriptsNeeded :: ScriptsNeeded era asatScriptsNeeded = ScriptsNeeded era scriptsNeeded , asatScriptsProvided :: ScriptsProvided era asatScriptsProvided = ScriptsProvided era scriptsProvided , asatPlutusLanguagesUsed :: Set Language asatPlutusLanguagesUsed = [Language] -> Set Language forall a. Ord a => [a] -> Set a Set.fromList [PlutusScript era -> Language forall era. AlonzoEraScript era => PlutusScript era -> Language plutusScriptLanguage PlutusScript era s | (ScriptHash _, PlutusPurpose AsIxItem era _, PlutusScript era s) <- [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] plutusScriptsUsed] , asatPlutusScriptsWithContext :: Either (NonEmpty (CollectError era)) [PlutusWithContext] asatPlutusScriptsWithContext = LedgerTxInfo era -> CostModels -> [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] -> Either (NonEmpty (CollectError era)) [PlutusWithContext] forall era. (AlonzoEraTxWits era, AlonzoEraUTxO era, EraPlutusContext era) => LedgerTxInfo era -> CostModels -> [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] -> Either (NonEmpty (CollectError era)) [PlutusWithContext] scriptsWithContextFromLedgerTxInfo LedgerTxInfo era ledgerTxInfo (PParams era pp PParams era -> Getting CostModels (PParams era) CostModels -> CostModels forall s a. s -> Getting a s a -> a ^. Getting CostModels (PParams era) CostModels forall era. AlonzoEraPParams era => Lens' (PParams era) CostModels Lens' (PParams era) CostModels ppCostModelsL) [(ScriptHash, PlutusPurpose AsIxItem era, PlutusScript era)] plutusScriptsUsed }