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 for ProtocolVersion

  • Pretty for ProtocolVersion and EvaluationError

  • 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