Plutus.V1.Ledger.EvaluationContext

Table des matières

  1. 📜 Overview

  2. 🔧 LANGUAGE PRAGMAS, OPTIONS, AND IMPORTS

  3. 🗄️ Type Synonyms and Data Types

    • 🔤 SerializedScript (type)

    • 📊 LedgerPlutusVersion (data)

    • 🔢 ProtocolVersion (data)

    • 🧪 EvaluationError (data)

    • 🔄 VerboseMode (data)

    • 🛠️ ScriptForExecution (newtype)

    • 🏗️ EvaluationContext (data)

  4. ⚙️ Core Functions

  5. 🤝 Typeclass Instances

  6. 🏭 On-Chain Derivations

  7. 📚 Glossary


1 📜 Overview

Cette variante du module Plutus.ApiCommon ajoute le pragma StrictData afin de garantir que tous les champs sont stricts, tout en conservant les outils d’évaluation et de sérialisation :

  • Champs de données stricts pour éviter les thunks liés à la paresse (laziness).

  • Configure le budget de ticks du simplificateur GHC.

  • Définit SerializedScript, les types de versionnement, les types d’erreur, le logging et le contexte d’évaluation.

  • Fonctions principales pour décoder, vérifier la validité et exécuter des scripts sous contraintes de coûts.


2 🔧 LANGUAGE PRAGMAS, OPTIONS, AND IMPORTS

Pragmas Haskell :

  • DeriveAnyClass, OverloadedStrings, TypeApplications, StrictDataStrictData : rend tous les champs des types de données stricts par défaut.

OPTIONS_GHC :

  • -fsimpl-tick-factor=200 : augmente le budget de ticks du simplificateur.

  • -fno-omit-interface-pragmas : conserve toutes les pragmas d’interface.

Imports : identiques à la version précédente, couvrant Plutus Core, CBOR, contrôle, et modules utilitaires.


3 🗄️ Type Synonyms and Data Types

3.1 🔤 SerializedScript (type)

Un simple alias de type :

type SerializedScript = ShortByteString

3.2 📊 LedgerPlutusVersion (data)

Type de données représentant la version du ledger pour Plutus :

data LedgerPlutusVersion = PlutusV1 | PlutusV2
  deriving stock (Eq, Ord)

3.3 🔢 ProtocolVersion (data)

Version du protocole Cardano :

data ProtocolVersion = ProtocolVersion { pvMajor :: Int, pvMinor :: Int }
  deriving stock (Show, Eq)

3.4 🧪 EvaluationError (data)

Type pour modéliser les erreurs à l’évaluation des scripts :

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)

Contrôle du niveau de verbosité lors de l’évaluation :

data VerboseMode = Verbose | Quiet
  deriving stock (Eq)

3.6 🛠️ ScriptForExecution (newtype)

Programme UPLC prêt à être exécuté :

newtype ScriptForExecution = ScriptForExecution (UPLC.Program UPLC.NamedDeBruijn DefaultUni DefaultFun ())

3.7 🏗️ EvaluationContext (data)

Contexte d’évaluation contenant deux ensembles de paramètres pour l’unlifting immédiat et différé :

data EvaluationContext = EvaluationContext
  { machineParametersImmediate :: DefaultMachineParameters
  , machineParametersDeferred  :: DefaultMachineParameters
  }
  deriving stock Generic
  deriving anyclass (NFData, NoThunks)

4 ⚙️ Core Functions

Voir la Section 4 du précédent tutoriel ApiCommon pour le détail du code, des entrées, traitements et sorties. Cette variante est strictement "data-strict", mais les signatures et comportements des fonctions restent inchangés.


5 🤝 Typeclass Instances

Identique à la version précédente :

  • Ord pour ProtocolVersion

  • Pretty pour ProtocolVersion et EvaluationError

  • Aucune modification au niveau des définitions, si ce n’est la stricte stricte des données.


6 🏭 On-Chain Derivations

Les mêmes appels à makeIsDataIndexed et makeLift que précédemment ; non affectés par StrictData.


7 📚 Glossary

Tous les termes correspondent au glossaire précédent, avec l’ajout de :

  • StrictData : pragma qui rend tous les champs des types de données stricts, prévenant la création de thunks inattendus.

  • NoThunks : classe qui assure l’absence de paresse inattendue (laziness) dans les structures de données.

Last updated