33module Common (
44 benchWith
55 , unsafeUnflat
6- , getEvalCtx
6+ , mkEvalCtx
77 , evaluateCekLikeInProd
88 , peelDataArguments
99 , Term
1010 ) where
1111
12- import PlutusPrelude
13-
1412import PlutusBenchmark.Common (getConfig , getDataDir )
1513import PlutusBenchmark.NaturalSort
1614
1715import PlutusCore qualified as PLC
1816import PlutusCore.Builtin qualified as PLC
1917import PlutusCore.Data qualified as PLC
18+ import PlutusCore.Default qualified as PLC (BuiltinVersion (DefaultFunV1 ))
2019import PlutusCore.Evaluation.Machine.ExBudgetingDefaults qualified as PLC
21- import PlutusCore.Evaluation.Result
22- import PlutusLedgerApi.Common (PlutusLedgerLanguage (PlutusV1 ), evaluateTerm )
23- import PlutusLedgerApi.Common.Versions (ledgerLanguageIntroducedIn )
24- import PlutusLedgerApi.V1 (EvaluationContext , ParamName , VerboseMode (.. ), mkEvaluationContext )
20+ import PlutusLedgerApi.Common (PlutusLedgerLanguage (PlutusV1 ), evaluateTerm ,
21+ ledgerLanguageIntroducedIn , mkDynEvaluationContext )
22+ import PlutusLedgerApi.V1 (EvaluationContext , VerboseMode (.. ))
2523import UntypedPlutusCore qualified as UPLC
2624import UntypedPlutusCore.Evaluation.Machine.Cek qualified as UPLC
2725
@@ -30,8 +28,6 @@ import Criterion.Main.Options (Mode, parseWith)
3028import Criterion.Types (Config (.. ))
3129import Options.Applicative
3230
33- import Control.Monad.Trans.Except
34- import Control.Monad.Trans.Writer.Strict
3531import Data.ByteString qualified as BS
3632import Data.List (isPrefixOf )
3733import Flat
@@ -136,28 +132,26 @@ benchWith act = do
136132 env (BS. readFile $ dir </> file) $ \ scriptBS ->
137133 bench (dropExtension file) $ act file scriptBS
138134
139- getEvalCtx
140- :: Either
141- (UPLC. CekEvaluationException UPLC. NamedDeBruijn UPLC. DefaultUni UPLC. DefaultFun )
142- EvaluationContext
143- getEvalCtx = do
144- costParams <-
145- maybe
146- (Left evaluationFailure)
147- (Right . take (length $ enumerate @ ParamName ) . toList)
148- PLC. defaultCostModelParams
149- either (const $ Left evaluationFailure) (Right . fst ) . runExcept . runWriterT $
150- mkEvaluationContext costParams
151- {-# NOINLINE getEvalCtx #-}
135+ -- | Create the evaluation context for the benchmarks. This doesn't exactly match how it's done
136+ -- on-chain, but that's okay because the evaluation context is cached by the ledger, so we're
137+ -- deliberately not including it in the benchmarks.
138+ mkEvalCtx :: EvaluationContext
139+ mkEvalCtx =
140+ case PLC. defaultCostModelParams of
141+ -- The validation benchmarks were all created from PlutusV1 scripts
142+ Just p -> case mkDynEvaluationContext PLC. DefaultFunV1 p of
143+ Right ec -> ec
144+ Left err -> error $ show err
145+ Nothing -> error " Couldn't get cost model params"
152146
153147-- | Evaluate a term as it would be evaluated using the on-chain evaluator.
154148evaluateCekLikeInProd
155- :: UPLC. Term PLC. NamedDeBruijn PLC. DefaultUni PLC. DefaultFun ()
149+ :: EvaluationContext
150+ -> UPLC. Term PLC. NamedDeBruijn PLC. DefaultUni PLC. DefaultFun ()
156151 -> Either
157152 (UPLC. CekEvaluationException UPLC. NamedDeBruijn UPLC. DefaultUni UPLC. DefaultFun )
158153 (UPLC. Term UPLC. NamedDeBruijn UPLC. DefaultUni UPLC. DefaultFun () )
159- evaluateCekLikeInProd term = do
160- evalCtx <- getEvalCtx
154+ evaluateCekLikeInProd evalCtx term = do
161155 let (getRes, _, _) =
162156 -- The validation benchmarks were all created from PlutusV1 scripts
163157 evaluateTerm UPLC. restrictingEnormous (ledgerLanguageIntroducedIn PlutusV1 ) Quiet evalCtx term
0 commit comments