Marlowe étape par étape
Marlowe a six façons de construire des contrats. Cinq d'entre elles – Pay, Let, If, When et Assert – construisent un contrat complexe à partir de contrats plus simples, et la sixième, Close, est un contrat simple. A chaque étape de l'exécution, en plus de renvoyer un nouvel état et un contrat de continuation, il est possible que des effets - paiements - et des avertissements soient également générés.
En expliquant ces contrats, nous expliquerons également les valeurs, les observations et les actions de Marlowe, qui sont utilisées pour fournir des informations et des données externes à un contrat en cours afin de contrôler son évolution.
Pay
Un contrat de paiement Pay a p t v cont fera un paiement de valeur v de token t depuis le compte a à un bénéficiaire p, qui sera l'un des participants au contrat ou un autre compte du contrat. Des avertissements seront générés si la valeur v est négative, ou s'il n'y a pas assez d'argent sur le compte pour effectuer le paiement complet (même s'il y a des soldes positifs d'autres tokens sur le compte). Dans ce dernier cas, un paiement partiel (de tout l'argent disponible) est effectué. Le contrat de continuation est celui donné dans le contrat: cont.
Close
Le contrat Close permet de clôturer (ou de terminer) le contrat. La seule action exécutée consiste à rembourser les propriétaires de comptes présentant un solde positif. Cette action est effectuée pour un compte par étape, mais tous les comptes seront remboursés en une seule transaction.
Avant d'aborder les autres formes de contrats, nous devons décrire les valeurs, les observations et les actions.
Valeurs, observations et actions
Valeurs incluent certaines quantités qui changent avec le temps, notamment "le numéro de slot actuel", 1 "Le solde actuel d'un certain token sur un compte", ainsi que tous les choix qui ont déjà été faits ; nous les appelons des valeurs volatiles. Les valeurs peuvent également être combinées en utilisant l'addition, la soustraction et la négation, et peuvent être conditionnées par une observation.
Observations sont des valeurs booléennes dérivées de la comparaison de valeurs, et peuvent être combinées à l'aide des opérateurs booléens standard. Il est également possible d'observer si un choix a été fait (pour un choix particulier identifié).
Les observations auront une valeur à chaque étape de l'exécution. D'autre part, les actions se produisent à des moments particuliers de l'exécution. Comme indiqué précédemment, les actions peuvent être
- le dépôt d'une somme d'argent,
- faire un choix entre plusieurs alternatives, y compris une valeur oracle (voir section suivante), ou
- la notification d'une valeur externe quelconque.
Oracles
Des oracles sont en cours de développement pour la blockchain Cardano en général, et seront disponibles pour une utilisation dans Marlowe sur Cardano. En attendant, nous avons présenté un prototype d'oracle, qui est mis en œuvre dans le Marlowe Playground.
Nous modélisons les Oracles comme des choix effectués par un participant ayant un rôle spécifique d'Oracle, "kraken".
Si un rôle dans un contrat est "kraken", et ce rôle fait un choix tel que "dir-adausd" alors, dans la simulation Playground, ce choix sera pré-rempli, sur la base des données de Cryptowat.ch, avec la valeur actuelle du taux de conversion direct ADA/USD. Vous pouvez trouver toutes les paires de devises supportées ici https://api.cryptowat.ch/markets/kraken
Il est également possible d'obtenir les taux inverses des paires de devises répertoriées en ajoutant le préfixe inv- au lieu de cela. Par exemple, "inv-adausd" retournerait la valeur du taux de conversion USD/ADA.
Notez que nous ne supportons que les nombres entiers comme entrées de choix. Comment utiliser le prix actuel de l'ADA/USD, qui est de 0,098924 $ ? Nous multiplions simplement le prix par 108, de sorte que le prix apparaisse comme 9892400. Vous pouvez Scale la valeur après avoir fait vos calculs.
Par exemple, vous souhaitez acheter USDT pour 12 ADA, en utilisant le prix Oracle.
Obtenez le prix:
Calculez le montant de USDT
Réduisez le résultat par 106 pour obtenir le montant en centimes USDT.
If
Le conditionnel If obs cont1 cont2 continuera comme cont1 où cont2, en fonction de la valeur booléenne de l'observation obs lorsque cette construction est exécutée.
When
Ceci est le constructeur le plus complexe pour les contrats, avec la forme When cases timeout cont. Il s'agit d'un contrat qui est déclenché par des actions, qui peuvent se produire ou non à un moment donné : ce qui se passe lorsque diverses actions se produisent est décrit par les cas du contrat.
Dans le contrat When cases timeout cont, la liste cases contient une collection de cas. Chaque cas a la forme Case ac co où ac est une action et co une continuation (un autre contrat). Lorsqu'une action particulière, par exemple ac, se produit, l'état est mis à jour en conséquence et le contrat se poursuit comme la continuation correspondante co.
Afin de s'assurer que le contrat progresse éventuellement, le contrat When cases timeout cont continuera comme cont une fois que le timeout, un numéro de slot, est atteint.
Let
Un contrat let Let id val cont permet à un contrat de nommer une valeur en utilisant un identifiant. Dans ce cas, l'expression val est évaluée, et stockée avec le nom id. Le contrat continue ensuite comme cont.
En plus de nous permettre d'utiliser des abréviations, ce mécanisme signifie également que nous pouvons capturer et sauvegarder des valeurs volatiles susceptibles de changer dans le temps, par exemple le prix actuel du pétrole ou le numéro de slot actuel, à un moment particulier de l'exécution du contrat, pour les utiliser ultérieurement dans l'exécution du contrat.
Assert
Un contrat assert Assert obs cont n'a pas d'effet sur l'état du contrat, il continue immédiatement comme cont, mais il émet un avertissement lorsque l'observation obs est fausse. Il peut être utilisé pour s'assurer de la validité d'une propriété en tout point du contrat, puisque l'analyse statique échouera si une exécution quelconque entraîne une assertion fausse.
1
La présentation ici est une simplification de l'implémentation concrète, dans laquelle les transactions sont associées à un intervalle de slot pendant lequel il est valide de les ajouter à la blockchain.La raison en est qu'en général il est difficile de prédire le slot précis dans lequel une transaction sera acceptée pour être incluse dans la blockchain ; il est donc plus robuste de spécifier un intervalle dans lequel la transaction devrait être acceptée. La vision présentée ici est une simplification dans la mesure où nous ne considérons effectivement que les intervalles de longueur un. Ainsi, un contrat Marlowe est capable d'accéder aux limites supérieure et inférieure de l'intervalle du slot actuel, plutôt qu'à la valeur spécifique du slot actuel. L'exécution d'un contrat peut, dans certaines circonstances, conduire à une "erreur d'intervalle de slot ambigu", mais nous n'en parlerons pas davantage ici.
© Copyright 2020, IOHK Revision 34aa9c32
.
Vous trouverez une copie officielle de ce document ici https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/marlowe-step-by-step.html
https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/marlowe-step-by-step.html
Plus de traductions de Cardano à: Cardano For The World