Plutus.V1.Ledger.Address

Table des matières

  • 1 Aperçu

  • 2 Extensions du langage et importations

  • 3 Structures de données

    • 3.1 Exemple de newtype

    • 3.2 Exemple de synonyme de type

    • 3.3 Exemple de type data

    • 3.4 Type de données Address

  • 4 ⚙️ Fonctions

    • 4.1 pubKeyHashAddress

    • 4.2 toPubKeyHash

    • 4.3 toValidatorHash

    • 4.4 scriptHashAddress

    • 4.5 stakingCredential

  • 5 Instances de classes de type

  • 6 Glossaire


1 Aperçu

Ce tutoriel présente un script Address Plutus en Haskell :

  • Définit un type de données Address personnalisé avec des credentials de paiement et de staking.

  • Implémente des fonctions utilitaires pour construire et interroger des adresses.

  • Montre comment dériver les instances pour les données on-chain (IsData) et le lifting.

  • Explique les extensions de langage, les importations et les classes de type associées.

Il illustre également des exemples basiques de définitions newtype, de synonymes de type et de types algébriques data pour comparaison.


2 Extensions du langage et importations

  • DerivingStrategies : choisit entre stock et anyclass pour le dérivé.

  • DeriveAnyClass : permet de dériver des classes comme NFData.

  • TemplateHaskell : utilisé par PlutusTx.makeIsDataIndexed et makeLift pour le code on-chain.

  • OverloadedStrings : pour des littéraux de chaîne pratiques avec Prettyprinter.

  • INLINABLE pragma : marque les fonctions pour la compilation et l’optimisation on-chain.

Imports :

  • NFData, Generic : pour une évaluation stricte et un dérivé générique.

  • Modules PlutusTx : utilitaires on-chain (Bool, Eq, makeIsDataIndexed, makeLift).

  • Prettyprinter : pour l’instance Pretty lisible par l’humain.

  • Ledger.Credential, Crypto, Scripts : types de grand livre on-chain (PubKeyHash, ValidatorHash, Credential).


3 Structures de données

Ci-dessous, trois exemples de définitions de types Haskell, suivis de notre Address.

3.1 Exemple de newtype

  • Entrée : valeur Int

  • Traitement : aucun (wrapper à coût nul)

  • Sortie : MyInt

3.2 Exemple de synonyme de type

  • Entrée/Sortie : identique à String, simplement renommé.

3.3 Exemple de type data

  • Entrée : paramètres Double

  • Traitement : aucun à la construction

  • Sortie : valeur Shape

3.4 Type de données Address

  • Champs :

    • addressCredential : Credential on-chain (soit clé publique, soit script)

    • addressStakingCredential : Maybe StakingCredential (optionnel)

  • Dérivations :

    • Eq, Ord, Show, Generic via stock

    • NFData via anyclass

Exemple d’utilisation :


4 ⚙️ Fonctions

Chaque fonction ci-dessous est marquée {-# INLINABLE #-} pour une utilisation on-chain.

4.1 pubKeyHashAddress

  • Entrée : PubKeyHash

  • Traitement : wrappe en PubKeyCredential, pas de staking

  • Sortie : Address

Exemple :

4.2 toPubKeyHash

  • Entrée : Address

  • Traitement : correspondance de motif sur Credential

  • Sortie : Maybe PubKeyHash

Exemples :

4.3 toValidatorHash

  • Entrée : Address

  • Traitement : correspondance de motif sur ScriptCredential

  • Sortie : Maybe ValidatorHash

Exemple :

4.4 scriptHashAddress

  • Entrée : ValidatorHash

  • Traitement : wrappe en ScriptCredential, pas de staking

  • Sortie : Address

Exemple :

4.5 stakingCredential

  • Entrée : Address

  • Traitement : projection du champ

  • Sortie : Maybe StakingCredential

Exemple :


5 Instances de classes de type

  • Pretty : classe de Prettyprinter pour l’affichage

  • PlutusTx.Eq : classe Eq on-chain, (==) doit être INLINABLE

  • makeIsDataIndexed : génère l’instance IsData avec index de constructeur

  • makeLift : permet de “lifter” les valeurs Haskell dans le code on-chain


6 Glossaire

  • Address : identifiant on-chain combinant les credentials de paiement et de staking.

  • Credential : soit PubKeyCredential PubKeyHash, soit ScriptCredential ValidatorHash.

  • StakingCredential : credential optionnel pour les récompenses de staking.

  • PubKeyHash : hachage d’une clé publique.

  • ValidatorHash : hachage d’un script de validation.

  • INLINABLE : pragma GHC rendant une fonction disponible pour spécialisation.

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

  • makeLift : Template Haskell pour le lifting en code on-chain.

  • newtype : wrapper à coût nul autour d’un seul champ.

  • type : synonyme pour un autre type.

  • data : définit un nouveau type algébrique.

  • NFData : classe pour l’évaluation profonde (rnf).

  • Pretty : classe pour le “pretty-printing” des valeurs.

Dernière mise à jour : il y a 1 heure.

Last updated