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 PrettyprinterStrictData: 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 = ShortByteString3.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:
OrdforProtocolVersionPrettyforProtocolVersionandEvaluationErrorNo 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