Plutus.V1.Ledger.EvaluationContext
1. ๐ Overview
2. ๐ง LANGUAGE PRAGMAS, OPTIONS, AND IMPORTS
3. ๐๏ธ Type Synonyms and Data Types
3.1 ๐ค SerializedScript (type)
3.2 ๐ LedgerPlutusVersion (data)
3.3 ๐ข ProtocolVersion (data)
3.4 ๐งช EvaluationError (data)
3.5 ๐ VerboseMode (data)
3.6 ๐ ๏ธ ScriptForExecution (newtype)
3.7 ๐๏ธ EvaluationContext (data)
4. โ๏ธ Core Functions
4.1 ๐ builtinsIntroducedIn
4.2 ๐ builtinsAvailableIn
4.3 ๐ ๏ธ scriptCBORDecoder
4.4 โ isScriptWellFormed
4.5 โ๏ธ mkTermToEvaluate
4.6 ๐ unliftingModeIn
4.7 ๐ง toMachineParameters
4.8 ๐ ๏ธ mkMachineParametersFor
4.9 ๐๏ธ mkEvaluationContext
4.10 โ๏ธ assertWellFormedCostModelParams
4.11 ๐ evaluateScriptRestricting
4.12 ๐จ evaluateScriptCounting
5. ๐ค Typeclass Instances
6. ๐ญ On-Chain Derivations
7. ๐ Glossary
1 ๐ Overview
This updated Plutus.ApiCommon
module variant adds StrictData
to ensure all fields are strict, and retains the extensive evaluation and serialization tools:
Strict data fields to avoid laziness-related thunks.
Configures GHC simplifier tick budget.
Defines
SerializedScript
, versioning types, error types, logging, and evaluation context.Core functions for decoding, checking well-formedness, and running scripts under cost constraints.
2 ๐ง LANGUAGE PRAGMAS, OPTIONS, AND IMPORTS
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE StrictData #-}
{-# OPTIONS_GHC -fsimpl-tick-factor=200 #-}
{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
module Plutus.ApiCommon where
import PlutusCore as Plutus hiding (Version)
import PlutusCore as ScriptPlutus (Version)
import PlutusCore.Data as Plutus
import PlutusCore.Evaluation.Machine.CostModelInterface as Plutus
import PlutusCore.Evaluation.Machine.ExBudget as Plutus
import PlutusCore.Evaluation.Machine.MachineParameters as Plutus
import PlutusCore.MkPlc qualified as UPLC
import UntypedPlutusCore qualified as UPLC
import UntypedPlutusCore.Check.Scope qualified as UPLC
import UntypedPlutusCore.Evaluation.Machine.Cek qualified as UPLC
import Codec.CBOR.Decoding qualified as CBOR
import Codec.CBOR.Extras
import Codec.CBOR.Read qualified as CBOR
import Control.DeepSeq
import Control.Monad.Except
import Control.Monad.Writer
import Data.Bifunctor
import Data.ByteString.Lazy (fromStrict)
import Data.ByteString.Short
import Data.Coerce
import Data.Either
import Data.Foldable (fold)
import Data.Map qualified as Map
import Data.Set qualified as Set
import Data.Text
import Data.Tuple
import GHC.Exts (inline)
import GHC.Generics
import NoThunks.Class
import PlutusCore.Pretty
import PlutusPrelude (through)
import Prettyprinter
StrictData: makes all fields in data types strict by default.
-fsimpl-tick-factor: increases simplifier ticks.
Imports: identical to previous, importing Plutus Core, CBOR, control, and utility modules.
3 ๐๏ธ Type Synonyms and Data Types
3.1 ๐ค SerializedScript
type SerializedScript = ShortByteString
3.2 ๐ LedgerPlutusVersion
data LedgerPlutusVersion = PlutusV1 | PlutusV2
deriving stock (Eq, Ord)
3.3 ๐ข ProtocolVersion
data ProtocolVersion = ProtocolVersion { pvMajor :: Int, pvMinor :: Int }
deriving stock (Show, Eq)
3.4 ๐งช EvaluationError
data EvaluationError
= CekError (UPLC.CekEvaluationException NamedDeBruijn DefaultUni DefaultFun)
| DeBruijnError FreeVariableError
| CodecError CBOR.DeserialiseFailure
| IncompatibleVersionError (ScriptPlutus.Version ())
| CostModelParameterMismatch
deriving stock (Show, Eq)
3.5 ๐ VerboseMode
data VerboseMode = Verbose | Quiet
deriving stock (Eq)
3.6 ๐ ๏ธ ScriptForExecution
newtype ScriptForExecution = ScriptForExecution (UPLC.Program UPLC.NamedDeBruijn DefaultUni DefaultFun ())
3.7 ๐๏ธ EvaluationContext
data EvaluationContext = EvaluationContext
{ machineParametersImmediate :: DefaultMachineParameters
, machineParametersDeferred :: DefaultMachineParameters
}
deriving stock Generic
deriving anyclass (NFData, NoThunks)
4 โ๏ธ Core Functions
See Section 4 of the previous ApiCommon
tutorial for detailed code, inputs, processing, and outputs. This variant is strictly data-strict but function signatures and behavior remain unchanged.
5 ๐ค Typeclass Instances
Identical to the earlier walkthrough:
Ord
forProtocolVersion
Pretty
forProtocolVersion
andEvaluationError
No change in instance definitions beyond strictness in data.
6 ๐ญ On-Chain Derivations
Same makeIsDataIndexed
and makeLift
calls as before; unaffected by StrictData
.
7 ๐ Glossary
All terms match the previous glossary, with the addition of:
StrictData: pragma making all data fields strict, preventing thunks.
NoThunks: class ensuring absence of unexpected laziness in data structures.
Last updated