33module Common (
44 benchWith
55 , unsafeUnflat
6- , unsafeEvaluateCekNoEmit'
6+ , getEvalCtx
7+ , evaluateCekLikeInProd
78 , peelDataArguments
89 , Term
910 ) where
1011
12+ import PlutusPrelude
13+
1114import PlutusBenchmark.Common (getConfig , getDataDir )
1215import PlutusBenchmark.NaturalSort
1316
1417import PlutusCore qualified as PLC
1518import PlutusCore.Builtin qualified as PLC
1619import PlutusCore.Data qualified as PLC
1720import PlutusCore.Evaluation.Machine.ExBudgetingDefaults qualified as PLC
18- import PlutusCore.Evaluation.Machine.Exception
21+ import PlutusCore.Evaluation.Result
22+ import PlutusLedgerApi.Common (LedgerPlutusVersion (PlutusV1 ), evaluateTerm )
23+ import PlutusLedgerApi.Common.Versions (languageIntroducedIn )
24+ import PlutusLedgerApi.V3 (EvaluationContext , ParamName , VerboseMode (.. ), mkEvaluationContext )
1925import UntypedPlutusCore qualified as UPLC
2026import UntypedPlutusCore.Evaluation.Machine.Cek qualified as UPLC
2127
@@ -24,6 +30,8 @@ import Criterion.Main.Options (Mode, parseWith)
2430import Criterion.Types (Config (.. ))
2531import Options.Applicative
2632
33+ import Control.Monad.Trans.Except
34+ import Control.Monad.Trans.Writer.Strict
2735import Data.ByteString qualified as BS
2836import Data.List (isPrefixOf )
2937import Flat
@@ -128,13 +136,32 @@ benchWith act = do
128136 env (BS. readFile $ dir </> file) $ \ scriptBS ->
129137 bench (dropExtension file) $ act file scriptBS
130138
131- unsafeEvaluateCekNoEmit' :: UPLC. Term PLC. NamedDeBruijn PLC. DefaultUni PLC. DefaultFun () -> PLC. EvaluationResult (UPLC. Term PLC. NamedDeBruijn PLC. DefaultUni PLC. DefaultFun () )
132- unsafeEvaluateCekNoEmit' =
133- (\ (e, _, _) -> unsafeExtractEvaluationResult e) .
134- UPLC. runCekDeBruijn
135- PLC. defaultCekParameters
136- UPLC. restrictingEnormous
137- UPLC. noEmitter
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 #-}
152+
153+ -- | Evaluate a term as it would be evaluated using the on-chain evaluator.
154+ evaluateCekLikeInProd
155+ :: UPLC. Term PLC. NamedDeBruijn PLC. DefaultUni PLC. DefaultFun ()
156+ -> Either
157+ (UPLC. CekEvaluationException UPLC. NamedDeBruijn UPLC. DefaultUni UPLC. DefaultFun )
158+ (UPLC. Term UPLC. NamedDeBruijn UPLC. DefaultUni UPLC. DefaultFun () )
159+ evaluateCekLikeInProd term = do
160+ evalCtx <- getEvalCtx
161+ let (getRes, _, _) =
162+ -- The validation benchmarks were all created from PlutusV1 scripts
163+ evaluateTerm UPLC. restrictingEnormous (languageIntroducedIn PlutusV1 ) Quiet evalCtx term
164+ getRes
138165
139166type Term = UPLC. Term UPLC. DeBruijn UPLC. DefaultUni UPLC. DefaultFun ()
140167
0 commit comments