Plutus.V1.Ledger.Contexts

Table des matières

  1. 📜 Overview

  2. 🔧 LANGUAGE EXTENSIONS AND IMPORTS

  3. 🗄️ Data Types

    • 📥 TxInInfo

    • 🎯 ScriptPurpose

    • 📋 TxInfo

    • 📜 ScriptContext

  4. ⚙️ Utility Functions

    • 🔍 findOwnInput

    • 🔎 findDatum

    • 🔖 findDatumHash

    • 🔗 findTxInByTxOutRef

    • 🔄 findContinuingOutputs

    • 📥 getContinuingOutputs

    • ✔️ txSignedBy

    • 🔑 pubKeyOutput

    • 🧩 ownHashes

    • 🏷️ ownHash

    • 🔃 fromSymbol

    • 🖋️ scriptOutputsAt

    • 💰 valueLockedBy

    • 💳 pubKeyOutputsAt

    • 🏦 valuePaidTo

    • 🔥 valueSpent

    • 🏭 valueProduced

    • 💱 ownCurrencySymbol

    • ⚔️ spendsOutput

  5. 🤝 Typeclass Instances

  6. 📚 Glossary


1 📜 Overview

Le module Plutus.V1.Ledger.Contexts définit les types principaux et les fonctions d’assistance pour accéder au contexte de transaction dans les validateurs Plutus :

  • Types de données : TxInInfo, ScriptPurpose, TxInfo, ScriptContext capturent les entrées, sorties et le but des transactions en attente.

  • Fonctions utilitaires pour inspecter et interroger les éléments de la transaction courante (findDatum, valuePaidTo, etc.).

  • Instances de typeclass pour l’égalité et le pretty-printing, toutes annotées INLINABLE ou avec des pragmas de compilation pour l’utilisation on-chain.

Ce tutoriel détaille les pragmas du langage/imports, chaque type de données (champs, constructeurs), les fonctions utilitaires (entrées, traitement, sorties), puis conclut par un glossaire.


2 🔧 LANGUAGE EXTENSIONS AND IMPORTS

De nombreuses pragmas LANGUAGE pour prendre en charge les génériques, les stratégies de dérivation et les exigences on-chain.

Les options OPTIONS_GHC contrôlent l’inlining et la spécialisation des interfaces.

Imports depuis PlutusTx et d’autres modules du ledger (Address, Crypto, Tx, Value).


3 🗄️ Data Types

3.1 📥 TxInInfo

Champs :

  • txInInfoOutRef : référence vers la sortie dépensée

  • txInInfoResolved : la sortie complète (TxOut) consommée

Instances : Égalité personnalisée et pretty-printing définis ci-dessous.


3.2 🎯 ScriptPurpose

Constructeurs : indique la raison de l’exécution du script :

  • Minting : forgeage de tokens

  • Spending : consommation d’une sortie

  • Rewarding : distribution de récompenses de staking

  • Certifying : gestion de certificats

L’égalité personnalisée permet le pattern matching on-chain.


3.3 📋 TxInfo

Agrège toutes les parties pertinentes de la transaction en attente, telles que vues par un validateur.

Champs principaux :

  • Entrées (txInfoInputs), sorties (txInfoOutputs)

  • Frais, mint, certificats, retraits, plage de validité

  • Signataires, données (Datum/DatumHash), identifiant (TxId)

Égalité personnalisée et pretty-printing définis ci-dessous.


3.4 📜 ScriptContext

Enveloppe le contexte complet passé à un validateur : informations de transaction + but.

Égalité personnalisée et pretty-printing ci-dessous.


4 ⚙️ Utility Functions

Chaque fonction est annotée {-# INLINABLE #-} pour la compilation on-chain.


4.1 🔍 findOwnInput

Trouve le TxInInfo correspondant à la sortie en cours de validation lorsque purpose = Spending.

Exemple : retourne Just si une entrée correspond, sinon Nothing.


4.2 🔎 findDatum

Recherche dans txInfoData par hash, retourne le Datum associé.


4.3 🔖 findDatumHash

Inverse de findDatum : retrouve le hash pour un Datum donné dans la transaction.


4.4 🔗 findTxInByTxOutRef

Cherche une entrée (TxInInfo) par sa clé TxOutRef dans txInfoInputs.


4.5 🔄 findContinuingOutputs

Retourne les indices des sorties qui payent vers la même adresse de script en cours de validation.

Erreur (traceError) si aucune entrée correspondante n’est trouvée.


4.6 📥 getContinuingOutputs

Filtre txInfoOutputs pour ne garder que celles avec la même adresse de script que l’entrée.


4.7 ✔️ txSignedBy

Vérifie si une clé publique donnée a signé la transaction.


4.8 🔑 pubKeyOutput

Extrait le PubKeyHash verrouillant une sortie (TxOut), si présent.


4.9 🧩 ownHashes

Obtient le hash du script de validation et le hash de datum pour l’entrée en validation.


4.10 🏷️ ownHash

Extrait uniquement le hash du validateur via fst . ownHashes.


4.11 🔃 fromSymbol

Convertit un CurrencySymbol en ValidatorHash.


4.12 🖋️ scriptOutputsAt

Rassemble les sorties qui paient vers une adresse de script donnée.


4.13 💰 valueLockedBy

Somme la valeur (Value) de toutes les sorties de script pour un hash donné.


4.14 💳 pubKeyOutputsAt

Liste les valeurs envoyées à une adresse de clé publique.


4.15 🏦 valuePaidTo

Agrège toutes les sorties vers une clé publique en une valeur totale.


4.16 🔥 valueSpent

Somme la valeur des entrées consommées par la transaction.


4.17 🏭 valueProduced

Somme la valeur des sorties créées par la transaction.


4.18 💱 ownCurrencySymbol

Retourne le symbole de la monnaie en cours de forgeage lorsque purpose = Minting.


4.19 ⚔️ spendsOutput

Vérifie si la transaction dépense une sortie spécifique par ID et index.


5 🤝 Typeclass Instances

  • Instance d’égalité personnalisée pour TxInInfo, ScriptPurpose, TxInfo, ScriptContext adaptée à chaque structure.

  • Instance Pretty pour chaque type, affichage lisible pour le debug.

  • Génération automatique d’instances pour le lifting et la sérialisation on-chain via Template Haskell (makeLift, makeIsDataIndexed).


6 📚 Glossary

  • TxInInfo : Entrée d’une transaction en attente (référence + sortie résolue).

  • ScriptPurpose : Raison d’exécution d’un validateur (minting, spending, rewarding, certifying).

  • TxInfo : Résumé des entrées, sorties, frais, mint, certificats, etc. de la transaction.

  • ScriptContext : Contexte complet passé au validateur : TxInfo + ScriptPurpose.

  • TxOutRef : Pointeur vers une sortie de transaction (TxId + index).

  • Datum / DatumHash : Données off-chain associées à des sorties.

  • CurrencySymbol : Identifiant pour un token minté.

  • INLINABLE / INLINE : Pragmas pour contrôler la compilation on-chain et la spécialisation.

  • makeLift / makeIsDataIndexed : Template Haskell pour la sérialisation des données on-chain.


Last updated