diff --git a/plutus-benchmark/common/PlutusBenchmark/Common.hs b/plutus-benchmark/common/PlutusBenchmark/Common.hs index 67338f63a04..adfb6d9b933 100644 --- a/plutus-benchmark/common/PlutusBenchmark/Common.hs +++ b/plutus-benchmark/common/PlutusBenchmark/Common.hs @@ -38,6 +38,7 @@ import PlutusCore.Default import PlutusCore.Evaluation.Machine.ExBudget (ExBudget (..)) import PlutusCore.Evaluation.Machine.ExBudgetingDefaults qualified as PLC import PlutusCore.Evaluation.Machine.ExMemory (ExCPU (..), ExMemory (..)) +import PlutusCore.Pretty (Pretty) import PlutusTx.Test.Util.Compiled (Program, Term, cekResultMatchesHaskellValue, compiledCodeToTerm, toAnonDeBruijnProg, toAnonDeBruijnTerm, toNamedDeBruijnTerm) @@ -45,7 +46,7 @@ import UntypedPlutusCore qualified as UPLC import UntypedPlutusCore.Evaluation.Machine.Cek as Cek import UntypedPlutusCore.Evaluation.Machine.Cek qualified as UPLC -import Control.DeepSeq (force) +import Control.DeepSeq (NFData, force) import Criterion.Main import Criterion.Types (Config (..)) import Data.ByteString qualified as BS @@ -91,7 +92,7 @@ getCostsCek (UPLC.Program _ _ prog) = mkEvalCtx :: LedgerApi.PlutusLedgerLanguage -> BuiltinSemanticsVariant DefaultFun - -> LedgerApi.EvaluationContext + -> LedgerApi.EvaluationContext DefaultFun mkEvalCtx ll semvar = case PLC.defaultCostModelParamsForVariant semvar of Just p -> @@ -109,16 +110,17 @@ mkEvalCtx ll semvar = -- Many of our benchmarks should use an evaluation context for the most recent -- Plutus language version and the ost recent semantic variant. -mkMostRecentEvalCtx :: LedgerApi.EvaluationContext +mkMostRecentEvalCtx :: LedgerApi.EvaluationContext DefaultFun mkMostRecentEvalCtx = mkEvalCtx maxBound maxBound -- | Evaluate a term as it would be evaluated using the on-chain evaluator. evaluateCekLikeInProd - :: LedgerApi.EvaluationContext - -> UPLC.Term PLC.NamedDeBruijn PLC.DefaultUni PLC.DefaultFun () + :: (Pretty fun, PLC.Typeable fun, Eq (BuiltinSemanticsVariant fun)) + => LedgerApi.EvaluationContext fun + -> UPLC.Term PLC.NamedDeBruijn PLC.DefaultUni fun () -> Either - (UPLC.CekEvaluationException UPLC.NamedDeBruijn UPLC.DefaultUni UPLC.DefaultFun) - (UPLC.Term UPLC.NamedDeBruijn UPLC.DefaultUni UPLC.DefaultFun ()) + (UPLC.CekEvaluationException UPLC.NamedDeBruijn UPLC.DefaultUni fun) + (UPLC.Term UPLC.NamedDeBruijn UPLC.DefaultUni fun ()) evaluateCekLikeInProd evalCtx term = let -- The validation benchmarks were all created from PlutusV1 scripts pv = LedgerApi.ledgerLanguageIntroducedIn LedgerApi.PlutusV1 @@ -128,17 +130,26 @@ evaluateCekLikeInProd evalCtx term = -- | Evaluate a term and either throw if evaluation fails or discard the result and return '()'. -- Useful for benchmarking. evaluateCekForBench - :: LedgerApi.EvaluationContext - -> UPLC.Term PLC.NamedDeBruijn PLC.DefaultUni PLC.DefaultFun () + :: (Pretty fun, PLC.Typeable fun, Eq (BuiltinSemanticsVariant fun)) + => LedgerApi.EvaluationContext fun + -> UPLC.Term PLC.NamedDeBruijn PLC.DefaultUni fun () -> () evaluateCekForBench evalCtx = either (error . show) (\_ -> ()) . evaluateCekLikeInProd evalCtx -benchTermCek :: LedgerApi.EvaluationContext -> Term -> Benchmarkable +benchTermCek + :: (NFData fun, Pretty fun, PLC.Typeable fun, Eq (BuiltinSemanticsVariant fun)) + => LedgerApi.EvaluationContext fun + -> UPLC.Term PLC.NamedDeBruijn PLC.DefaultUni fun () + -> Benchmarkable benchTermCek evalCtx term = let !term' = force term in whnf (evaluateCekForBench evalCtx) term' -benchProgramCek :: LedgerApi.EvaluationContext -> Program -> Benchmarkable +benchProgramCek + :: (NFData fun, Pretty fun, PLC.Typeable fun, Eq (BuiltinSemanticsVariant fun)) + => LedgerApi.EvaluationContext fun + -> UPLC.Program UPLC.NamedDeBruijn DefaultUni fun () + -> Benchmarkable benchProgramCek evalCtx (UPLC.Program _ _ term) = benchTermCek evalCtx term diff --git a/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs b/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs index fcc73d4818f..f54f8dfb743 100644 --- a/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs +++ b/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs @@ -282,7 +282,7 @@ executeBenchmark serialisedValidator Benchmark{..} = [bDatum, bRedeemer, toData bScriptContext] -- | The execution context for benchmarking. -evaluationContext :: Either String EvaluationContext +evaluationContext :: Either String (EvaluationContext PLC.DefaultFun) evaluationContext = bimap show fst . runExcept . runWriterT . mkEvaluationContext $ snd <$> testCostModel diff --git a/plutus-core/plutus-core/src/PlutusCore/Evaluation/Machine/MachineParameters/Default.hs b/plutus-core/plutus-core/src/PlutusCore/Evaluation/Machine/MachineParameters/Default.hs index 82304a21698..f63d7a9c254 100644 --- a/plutus-core/plutus-core/src/PlutusCore/Evaluation/Machine/MachineParameters/Default.hs +++ b/plutus-core/plutus-core/src/PlutusCore/Evaluation/Machine/MachineParameters/Default.hs @@ -17,14 +17,14 @@ import Control.Monad.Except import GHC.Exts (inline) -- | The semantics-variant-dependent part of 'MachineParameters'. -type DefaultMachineVariantParameters = - MachineVariantParameters CekMachineCosts DefaultFun (CekValue DefaultUni DefaultFun ()) +type DefaultMachineVariantParameters fun = + MachineVariantParameters CekMachineCosts fun (CekValue DefaultUni fun ()) -- | 'MachineParameters' instantiated at CEK-machine-specific types and default builtins. -- Encompasses everything we need for evaluating a UPLC program with default builtins using the CEK -- machine. -type DefaultMachineParameters = - MachineParameters CekMachineCosts DefaultFun (CekValue DefaultUni DefaultFun ()) +type DefaultMachineParameters fun = + MachineParameters CekMachineCosts fun (CekValue DefaultUni fun ()) {- Note [Inlining meanings of builtins] It's vitally important to inline the 'toBuiltinMeaning' method of a set of built-in functions as @@ -67,7 +67,7 @@ mkMachineVariantParametersFor :: MonadError CostModelApplyError m => [BuiltinSemanticsVariant DefaultFun] -> CostModelParams - -> m [(BuiltinSemanticsVariant DefaultFun, DefaultMachineVariantParameters)] + -> m [(BuiltinSemanticsVariant DefaultFun, DefaultMachineVariantParameters DefaultFun)] mkMachineVariantParametersFor semVars newCMP = do res <- for semVars $ \semVar -> -- See Note [Inlining meanings of builtins]. diff --git a/plutus-core/plutus-ir/test/PlutusIR/Transform/StrictLetRec/Tests/Lib.hs b/plutus-core/plutus-ir/test/PlutusIR/Transform/StrictLetRec/Tests/Lib.hs index 66d94927990..6f0a8715a82 100644 --- a/plutus-core/plutus-ir/test/PlutusIR/Transform/StrictLetRec/Tests/Lib.hs +++ b/plutus-core/plutus-ir/test/PlutusIR/Transform/StrictLetRec/Tests/Lib.hs @@ -92,7 +92,7 @@ evaluateUplcProgramWithTraces uplcProg = costModel = CostModel defaultCekMachineCostsForTesting defaultBuiltinCostModelForTesting - machineParameters :: DefaultMachineParameters + machineParameters :: DefaultMachineParameters DefaultFun machineParameters = MachineParameters def $ mkMachineVariantParameters def costModel diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/Spec.hs b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/Spec.hs index 17d1f4001e3..b563a1bc775 100644 --- a/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/Spec.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/Spec.hs @@ -133,7 +133,7 @@ evaluateUplc = unsafeSplitStructuralOperational . fst <$> evaluateCek noEmitter costModel = CostModel defaultCekMachineCostsForTesting defaultBuiltinCostModelForTesting - machineParameters :: DefaultMachineParameters + machineParameters :: DefaultMachineParameters DefaultFun machineParameters = -- TODO: proper semantic variant. What should def be? MachineParameters def $ mkMachineVariantParameters def costModel diff --git a/plutus-ledger-api/src/PlutusLedgerApi/Common.hs b/plutus-ledger-api/src/PlutusLedgerApi/Common.hs index 513621a2cc3..879387db4a0 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/Common.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/Common.hs @@ -74,6 +74,7 @@ module PlutusLedgerApi.Common ( -- ** Evaluation context Eval.EvaluationContext (..), + Eval.DefaultFun, Eval.mkDynEvaluationContext, Eval.toMachineParameters, -- While not strictly used by the ledger, this is useful for people trying to diff --git a/plutus-ledger-api/src/PlutusLedgerApi/Common/Eval.hs b/plutus-ledger-api/src/PlutusLedgerApi/Common/Eval.hs index d489e166def..c473d359982 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/Common/Eval.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/Common/Eval.hs @@ -1,11 +1,12 @@ -- editorconfig-checker-disable-file -{-# LANGUAGE DeriveAnyClass #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE StrictData #-} -{-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE ViewPatterns #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE StrictData #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE ViewPatterns #-} module PlutusLedgerApi.Common.Eval ( EvaluationError (..) @@ -13,6 +14,7 @@ module PlutusLedgerApi.Common.Eval , AsScriptDecodeError (..) , LogOutput , VerboseMode (..) + , DefaultFun , evaluateScriptRestricting , evaluateScriptCounting , evaluateTerm @@ -113,7 +115,9 @@ mkTermToEvaluate ll pv script args = do -- make sure that term is closed, i.e. well-scoped through (liftEither . first DeBruijnError . UPLC.checkScope) appliedT -toMachineParameters :: MajorProtocolVersion -> EvaluationContext -> DefaultMachineParameters +toMachineParameters + :: Eq (BuiltinSemanticsVariant fun) + => MajorProtocolVersion -> EvaluationContext fun -> DefaultMachineParameters fun toMachineParameters pv (EvaluationContext ll toCaser toSemVar machParsList) = case lookup (toSemVar pv) machParsList of Nothing -> error $ Prelude.concat @@ -148,7 +152,7 @@ protocol version are more semantically precise to associate bundles of machine parameters with semantics variants than with protocol versions -} -data EvaluationContext = EvaluationContext +data EvaluationContext fun = EvaluationContext { _evalCtxLedgerLang :: PlutusLedgerLanguage -- ^ Specifies what language versions the 'EvaluationContext' is for. , _evalCtxCaserBuiltin :: MajorProtocolVersion -> CaserBuiltin DefaultUni @@ -159,16 +163,19 @@ data EvaluationContext = EvaluationContext -- is available. -- FIXME: do we need to test that it fails for older PVs? We can't submit -- transactions in old PVs, so maybe it doesn't matter. - , _evalCtxToSemVar :: MajorProtocolVersion -> BuiltinSemanticsVariant DefaultFun + , _evalCtxToSemVar :: MajorProtocolVersion -> BuiltinSemanticsVariant fun -- ^ Specifies how to get a semantics variant for this ledger language given a -- 'MajorProtocolVersion'. , _evalCtxMachParsCache :: - [(BuiltinSemanticsVariant DefaultFun, DefaultMachineVariantParameters)] + [(BuiltinSemanticsVariant fun, DefaultMachineVariantParameters fun)] -- ^ The cache of 'DefaultMachineParameters' for each semantics variant supported by the -- current language version. } deriving stock Generic - deriving anyclass (NFData, NoThunks) + +instance (NFData (BuiltinSemanticsVariant fun), Enum fun, Bounded fun) => NFData (EvaluationContext fun) + +instance (NoThunks (BuiltinSemanticsVariant fun), Enum fun, Bounded fun) => NoThunks (EvaluationContext fun) {-| Create an 'EvaluationContext' given all builtin semantics variants supported by the provided language version. @@ -190,7 +197,7 @@ mkDynEvaluationContext -> [BuiltinSemanticsVariant DefaultFun] -> (MajorProtocolVersion -> BuiltinSemanticsVariant DefaultFun) -> Plutus.CostModelParams - -> m EvaluationContext + -> m (EvaluationContext DefaultFun) mkDynEvaluationContext ll toCaser semVars toSemVar newCMP = do machPars <- mkMachineVariantParametersFor semVars newCMP pure $ EvaluationContext ll toCaser toSemVar machPars @@ -202,12 +209,13 @@ assertWellFormedCostModelParams = void . Plutus.applyCostModelParams Plutus.defa -- | Evaluate a fully-applied term using the CEK machine. Useful for mimicking the behaviour of the -- on-chain evaluator. evaluateTerm - :: UPLC.ExBudgetMode cost DefaultUni DefaultFun + :: (ThrowableBuiltins DefaultUni fun, Eq (BuiltinSemanticsVariant fun)) + => UPLC.ExBudgetMode cost DefaultUni fun -> MajorProtocolVersion -> VerboseMode - -> EvaluationContext - -> UPLC.Term UPLC.NamedDeBruijn DefaultUni DefaultFun () - -> UPLC.CekReport cost NamedDeBruijn DefaultUni DefaultFun + -> EvaluationContext fun + -> UPLC.Term UPLC.NamedDeBruijn DefaultUni fun () + -> UPLC.CekReport cost NamedDeBruijn DefaultUni fun evaluateTerm budgetMode pv verbose ectx = UPLC.runCekDeBruijn (toMachineParameters pv ectx) @@ -231,7 +239,7 @@ evaluateScriptRestricting :: PlutusLedgerLanguage -- ^ The Plutus ledger language of the script under execution. -> MajorProtocolVersion -- ^ Which major protocol version to run the operation in -> VerboseMode -- ^ Whether to produce log output - -> EvaluationContext -- ^ Includes the cost model to use for tallying up the execution costs + -> EvaluationContext DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> ExBudget -- ^ The resource budget which must not be exceeded during evaluation -> ScriptForEvaluation -- ^ The script to evaluate -> [Plutus.Data] -- ^ The arguments to the script @@ -254,7 +262,7 @@ evaluateScriptCounting :: PlutusLedgerLanguage -- ^ The Plutus ledger language of the script under execution. -> MajorProtocolVersion -- ^ Which major protocol version to run the operation in -> VerboseMode -- ^ Whether to produce log output - -> EvaluationContext -- ^ Includes the cost model to use for tallying up the execution costs + -> EvaluationContext DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> ScriptForEvaluation -- ^ The script to evaluate -> [Plutus.Data] -- ^ The arguments to the script -> (LogOutput, Either EvaluationError ExBudget) diff --git a/plutus-ledger-api/src/PlutusLedgerApi/Data/V1.hs b/plutus-ledger-api/src/PlutusLedgerApi/Data/V1.hs index ed707c9d1a7..b2628c0ab88 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/Data/V1.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/Data/V1.hs @@ -238,7 +238,7 @@ evaluateScriptCounting -- ^ Which major protocol version to run the operation in -> VerboseMode -- ^ Whether to produce log output - -> EvaluationContext + -> EvaluationContext DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> ScriptForEvaluation -- ^ The script to evaluate @@ -259,7 +259,7 @@ evaluateScriptRestricting -- ^ Which major protocol version to run the operation in -> VerboseMode -- ^ Whether to produce log output - -> EvaluationContext + -> EvaluationContext DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> ExBudget -- ^ The resource budget which must not be exceeded during evaluation diff --git a/plutus-ledger-api/src/PlutusLedgerApi/Data/V2.hs b/plutus-ledger-api/src/PlutusLedgerApi/Data/V2.hs index 13f2941e256..3458539789b 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/Data/V2.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/Data/V2.hs @@ -230,7 +230,7 @@ evaluateScriptCounting -- ^ Which major protocol version to run the operation in -> Common.VerboseMode -- ^ Whether to produce log output - -> Common.EvaluationContext + -> Common.EvaluationContext Common.DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> Common.ScriptForEvaluation -- ^ The script to evaluate @@ -251,7 +251,7 @@ evaluateScriptRestricting -- ^ Which major protocol version to run the operation in -> Common.VerboseMode -- ^ Whether to produce log output - -> Common.EvaluationContext + -> Common.EvaluationContext Common.DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> Common.ExBudget -- ^ The resource budget which must not be exceeded during evaluation diff --git a/plutus-ledger-api/src/PlutusLedgerApi/Data/V3.hs b/plutus-ledger-api/src/PlutusLedgerApi/Data/V3.hs index 6367f5e707e..b7f7c9e71a6 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/Data/V3.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/Data/V3.hs @@ -300,7 +300,7 @@ evaluateScriptCounting -- ^ Which protocol version to run the operation in -> Common.VerboseMode -- ^ Whether to produce log output - -> EvaluationContext.EvaluationContext + -> EvaluationContext.EvaluationContext Common.DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> Common.ScriptForEvaluation -- ^ The script to evaluate @@ -322,7 +322,7 @@ evaluateScriptRestricting -- ^ Which protocol version to run the operation in -> Common.VerboseMode -- ^ Whether to produce log output - -> EvaluationContext.EvaluationContext + -> EvaluationContext.EvaluationContext Common.DefaultFun -- ^ Includes the cost model to use for tallying up the execution costs -> Common.ExBudget -- ^ The resource budget which must not be exceeded during evaluation diff --git a/plutus-ledger-api/src/PlutusLedgerApi/MachineParameters.hs b/plutus-ledger-api/src/PlutusLedgerApi/MachineParameters.hs index 32f0a8dd2a5..a9bd9f3c4dc 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/MachineParameters.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/MachineParameters.hs @@ -12,7 +12,7 @@ import PlutusCore.Evaluation.Machine.MachineParameters.Default (DefaultMachinePa machineParametersFor :: PlutusLedgerLanguage -> MajorProtocolVersion - -> DefaultMachineParameters + -> DefaultMachineParameters DefaultFun machineParametersFor ledgerLang majorPV = MachineParameters (if majorPV < pv11PV diff --git a/plutus-ledger-api/src/PlutusLedgerApi/V1.hs b/plutus-ledger-api/src/PlutusLedgerApi/V1.hs index 3f7cad642ca..3b715ef9de0 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/V1.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/V1.hs @@ -251,7 +251,7 @@ evaluateScriptCounting :: -- | Whether to produce log output Common.VerboseMode -> -- | Includes the cost model to use for tallying up the execution costs - EvaluationContext.EvaluationContext -> + EvaluationContext.EvaluationContext Eval.DefaultFun -> -- | The script to evaluate Common.ScriptForEvaluation -> -- | The arguments to the script @@ -272,7 +272,7 @@ evaluateScriptRestricting :: -- | Whether to produce log output Common.VerboseMode -> -- | Includes the cost model to use for tallying up the execution costs - EvaluationContext.EvaluationContext -> + EvaluationContext.EvaluationContext Eval.DefaultFun -> -- | The resource budget which must not be exceeded during evaluation Common.ExBudget -> -- | The script to evaluate diff --git a/plutus-ledger-api/src/PlutusLedgerApi/V1/EvaluationContext.hs b/plutus-ledger-api/src/PlutusLedgerApi/V1/EvaluationContext.hs index 0c1fcd6ec1b..1250b732c9f 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/V1/EvaluationContext.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/V1/EvaluationContext.hs @@ -35,7 +35,7 @@ a protocol update with the updated cost model parameters. mkEvaluationContext :: (MonadError CostModelApplyError m, MonadWriter [CostModelApplyWarn] m) => [Int64] -- ^ the (updated) cost model parameters of the protocol - -> m EvaluationContext + -> m (EvaluationContext DefaultFun) mkEvaluationContext = tagWithParamNames @V1.ParamName >=> pure . toCostModelParams diff --git a/plutus-ledger-api/src/PlutusLedgerApi/V2.hs b/plutus-ledger-api/src/PlutusLedgerApi/V2.hs index bdcdbe49088..496347c5991 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/V2.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/V2.hs @@ -169,7 +169,7 @@ evaluateScriptCounting :: -- | Whether to produce log output Common.VerboseMode -> -- | Includes the cost model to use for tallying up the execution costs - Common.EvaluationContext -> + Common.EvaluationContext Common.DefaultFun -> -- | The script to evaluate Common.ScriptForEvaluation -> -- | The arguments to the script @@ -190,7 +190,7 @@ evaluateScriptRestricting :: -- | Whether to produce log output Common.VerboseMode -> -- | Includes the cost model to use for tallying up the execution costs - Common.EvaluationContext -> + Common.EvaluationContext Common.DefaultFun -> -- | The resource budget which must not be exceeded during evaluation Common.ExBudget -> -- | The script to evaluate diff --git a/plutus-ledger-api/src/PlutusLedgerApi/V2/EvaluationContext.hs b/plutus-ledger-api/src/PlutusLedgerApi/V2/EvaluationContext.hs index 80bf7ea4373..5fbe8d1853c 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/V2/EvaluationContext.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/V2/EvaluationContext.hs @@ -34,7 +34,7 @@ a protocol update with the updated cost model parameters. mkEvaluationContext :: (MonadError CostModelApplyError m, MonadWriter [CostModelApplyWarn] m) => [Int64] -- ^ the (updated) cost model parameters of the protocol - -> m EvaluationContext + -> m (EvaluationContext DefaultFun) mkEvaluationContext = tagWithParamNames @V2.ParamName >=> pure . toCostModelParams diff --git a/plutus-ledger-api/src/PlutusLedgerApi/V3.hs b/plutus-ledger-api/src/PlutusLedgerApi/V3.hs index 6b00a3dff89..b3fe9425381 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/V3.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/V3.hs @@ -195,7 +195,7 @@ evaluateScriptCounting :: -- | Whether to produce log output Common.VerboseMode -> -- | Includes the cost model to use for tallying up the execution costs - EvaluationContext.EvaluationContext -> + EvaluationContext.EvaluationContext Common.DefaultFun -> -- | The script to evaluate Common.ScriptForEvaluation -> -- | The @ScriptContext@ argument to the script @@ -217,7 +217,7 @@ evaluateScriptRestricting :: -- | Whether to produce log output Common.VerboseMode -> -- | Includes the cost model to use for tallying up the execution costs - EvaluationContext.EvaluationContext -> + EvaluationContext.EvaluationContext Common.DefaultFun -> -- | The resource budget which must not be exceeded during evaluation Common.ExBudget -> -- | The script to evaluate diff --git a/plutus-ledger-api/src/PlutusLedgerApi/V3/EvaluationContext.hs b/plutus-ledger-api/src/PlutusLedgerApi/V3/EvaluationContext.hs index 29c0001941f..35b02bf296d 100644 --- a/plutus-ledger-api/src/PlutusLedgerApi/V3/EvaluationContext.hs +++ b/plutus-ledger-api/src/PlutusLedgerApi/V3/EvaluationContext.hs @@ -33,7 +33,7 @@ a protocol update with the updated cost model parameters. mkEvaluationContext :: (MonadError CostModelApplyError m, MonadWriter [CostModelApplyWarn] m) => [Int64] -- ^ the (updated) cost model parameters of the protocol - -> m EvaluationContext + -> m (EvaluationContext DefaultFun) mkEvaluationContext = tagWithParamNames @V3.ParamName >=> pure . toCostModelParams diff --git a/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V1.hs b/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V1.hs index 564523d563d..88ae3b391fc 100644 --- a/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V1.hs +++ b/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V1.hs @@ -11,6 +11,7 @@ module Spec.ReturnUnit.V1 where +import PlutusLedgerApi.Common (DefaultFun) import PlutusLedgerApi.Common.Versions import PlutusLedgerApi.Test.V1.EvaluationContext qualified as V1 import PlutusLedgerApi.V1 as V1 @@ -35,7 +36,7 @@ tests = , expectSuccess "too many parameters" tooManyParameters (I 1) ] -evalCtx :: V1.EvaluationContext +evalCtx :: V1.EvaluationContext DefaultFun evalCtx = fst . unsafeFromRight . runWriterT . V1.mkEvaluationContext $ fmap snd V1.costModelParamsForTesting diff --git a/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V2.hs b/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V2.hs index 07e5c5c39f3..9500c78c0ab 100644 --- a/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V2.hs +++ b/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V2.hs @@ -11,6 +11,7 @@ module Spec.ReturnUnit.V2 where +import PlutusLedgerApi.Common (DefaultFun) import PlutusLedgerApi.Common.Versions import PlutusLedgerApi.Test.V2.EvaluationContext qualified as V2 import PlutusLedgerApi.V2 as V2 @@ -35,7 +36,7 @@ tests = , expectSuccess "too many parameters" tooManyParameters (I 1) ] -evalCtx :: V2.EvaluationContext +evalCtx :: V2.EvaluationContext DefaultFun evalCtx = fst . unsafeFromRight . runWriterT . V2.mkEvaluationContext $ fmap snd V2.costModelParamsForTesting diff --git a/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V3.hs b/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V3.hs index 4a44e76cc1a..3b609f44061 100644 --- a/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V3.hs +++ b/plutus-ledger-api/test-plugin/Spec/ReturnUnit/V3.hs @@ -12,6 +12,7 @@ module Spec.ReturnUnit.V3 where +import PlutusLedgerApi.Common (DefaultFun) import PlutusLedgerApi.Common.Versions import PlutusLedgerApi.Test.V3.EvaluationContext qualified as V3 import PlutusLedgerApi.V3 as V3 @@ -36,7 +37,7 @@ tests = , expectFailure "too many parameters" tooManyParameters (I 1) ] -evalCtx :: V3.EvaluationContext +evalCtx :: V3.EvaluationContext DefaultFun evalCtx = fst . unsafeFromRight . runWriterT . V3.mkEvaluationContext $ fmap snd V3.costModelParamsForTesting diff --git a/plutus-ledger-api/test/Spec.hs b/plutus-ledger-api/test/Spec.hs index b0ca1635941..c5f0e64e388 100644 --- a/plutus-ledger-api/test/Spec.hs +++ b/plutus-ledger-api/test/Spec.hs @@ -2,6 +2,7 @@ module Main where +import PlutusLedgerApi.Common (DefaultFun) import PlutusLedgerApi.Common.Versions import PlutusLedgerApi.Test.Examples import PlutusLedgerApi.Test.V1.EvaluationContext qualified as V1 @@ -33,7 +34,7 @@ import Data.Int (Int64) main :: IO () main = defaultMain tests -v1_evalCtxForTesting :: V1.EvaluationContext +v1_evalCtxForTesting :: V1.EvaluationContext DefaultFun v1_evalCtxForTesting = fst . unsafeFromRight . runWriterT . V1.mkEvaluationContext $ fmap snd V1.costModelParamsForTesting @@ -43,7 +44,7 @@ As a result, the cost model parameters for `integerToByteString` and `byteStringToInteger` should be set to large numbers, preventing them from being used. -} -v3_evalCtxTooFewParams :: V3.EvaluationContext +v3_evalCtxTooFewParams :: V3.EvaluationContext DefaultFun v3_evalCtxTooFewParams = fst . unsafeFromRight . runWriterT $ V3.mkEvaluationContext . take 223 $ diff --git a/plutus-ledger-api/test/Spec/Data/Eval.hs b/plutus-ledger-api/test/Spec/Data/Eval.hs index f807c78bd87..8d367408fbe 100644 --- a/plutus-ledger-api/test/Spec/Data/Eval.hs +++ b/plutus-ledger-api/test/Spec/Data/Eval.hs @@ -55,7 +55,7 @@ evalAPI pv t = -- handcraft a serialised script let ss :: V1.SerialisedScript = V1.serialiseUPLC $ Program () PLC.plcVersion100 t s :: V1.ScriptForEvaluation = either (Prelude.error . show) id $ deserialiseScript PlutusV1 pv ss - ec :: V1.EvaluationContext = fst $ unsafeFromRight $ runWriterT $ V1.mkEvaluationContext $ fmap snd V1.costModelParamsForTesting + ec :: V1.EvaluationContext DefaultFun = fst $ unsafeFromRight $ runWriterT $ V1.mkEvaluationContext $ fmap snd V1.costModelParamsForTesting in isRight $ snd $ V1.evaluateScriptRestricting pv V1.Quiet ec (unExRestrictingBudget enormousBudget) s [] {-| Test a given eval function against the expected results. @@ -97,7 +97,7 @@ lengthParamNamesV PlutusV1 = length $ enumerate @V1.ParamName lengthParamNamesV PlutusV2 = length $ enumerate @V2.ParamName lengthParamNamesV PlutusV3 = length $ enumerate @V3.ParamName -mkEvaluationContextV :: PlutusLedgerLanguage -> IO EvaluationContext +mkEvaluationContextV :: PlutusLedgerLanguage -> IO (EvaluationContext DefaultFun) mkEvaluationContextV ll = either (assertFailure . display) (pure . fst) . runWriterT $ take (lengthParamNamesV ll) costParams & case ll of diff --git a/plutus-ledger-api/test/Spec/Eval.hs b/plutus-ledger-api/test/Spec/Eval.hs index e8b61b03ac1..5fbebb456f8 100644 --- a/plutus-ledger-api/test/Spec/Eval.hs +++ b/plutus-ledger-api/test/Spec/Eval.hs @@ -55,7 +55,7 @@ evalAPI pv t = -- handcraft a serialised script let ss :: V1.SerialisedScript = V1.serialiseUPLC $ Program () PLC.plcVersion100 t s :: V1.ScriptForEvaluation = either (Prelude.error . show) id $ deserialiseScript PlutusV1 pv ss - ec :: V1.EvaluationContext = fst $ unsafeFromRight $ runWriterT $ V1.mkEvaluationContext $ fmap snd V1.costModelParamsForTesting + ec :: V1.EvaluationContext DefaultFun = fst $ unsafeFromRight $ runWriterT $ V1.mkEvaluationContext $ fmap snd V1.costModelParamsForTesting in isRight $ snd $ V1.evaluateScriptRestricting pv V1.Quiet ec (unExRestrictingBudget enormousBudget) s [] {-| Test a given eval function against the expected results. @@ -97,7 +97,7 @@ lengthParamNamesV PlutusV1 = length $ enumerate @V1.ParamName lengthParamNamesV PlutusV2 = length $ enumerate @V2.ParamName lengthParamNamesV PlutusV3 = length $ enumerate @V3.ParamName -mkEvaluationContextV :: PlutusLedgerLanguage -> IO EvaluationContext +mkEvaluationContextV :: PlutusLedgerLanguage -> IO (EvaluationContext DefaultFun) mkEvaluationContextV ll = either (assertFailure . display) (pure . fst) . runWriterT $ take (lengthParamNamesV ll) costParams & case ll of diff --git a/plutus-ledger-api/testlib/PlutusLedgerApi/Test/EvaluationEvent.hs b/plutus-ledger-api/testlib/PlutusLedgerApi/Test/EvaluationEvent.hs index 0e76aff39e9..22a78e3a873 100644 --- a/plutus-ledger-api/testlib/PlutusLedgerApi/Test/EvaluationEvent.hs +++ b/plutus-ledger-api/testlib/PlutusLedgerApi/Test/EvaluationEvent.hs @@ -158,7 +158,7 @@ renderTestFailures testFailures = -- | Re-evaluate an on-chain script evaluation event. checkEvaluationEvent - :: EvaluationContext + :: EvaluationContext DefaultFun -> [Int64] -- ^ Cost parameters -> ScriptEvaluationEvent diff --git a/plutus-tx/src/PlutusTx/Eval.hs b/plutus-tx/src/PlutusTx/Eval.hs index abcdf7d3f87..6363df26658 100644 --- a/plutus-tx/src/PlutusTx/Eval.hs +++ b/plutus-tx/src/PlutusTx/Eval.hs @@ -98,7 +98,7 @@ evaluateCompiledCode = evaluateCompiledCode' defaultCekParametersForTesting with the given machine parameters. -} evaluateCompiledCode' - :: DefaultMachineParameters -> CompiledCode a -> EvalResult + :: DefaultMachineParameters DefaultFun -> CompiledCode a -> EvalResult evaluateCompiledCode' params code = EvalResult{..} where Program _ann _version term = getPlcNoAnn code