Un premier exemple

Ce tutoriel présente un contrat financier simple en pseudocode, avant d'expliquer comment il est modifié pour fonctionner dans Marlowe, en donnant le premier exemple de contrat Marlowe.

Un simple contrat de séquestre

Supposons que alice veut acheter un chat de bob, mais aucun d'eux ne fait confiance à l'autre. Heureusement, ils ont une amie commune carol à qui ils font tous deux confiance pour être neutre (mais pas assez pour lui donner l'argent et servir d'intermédiaire). Ils se mettent donc d'accord sur le contrat suivant, écrit en utilisant un pseudo-code fonctionnel simple. Ce type de contrat est un exemple simple de séquestre.

Le contrat est décrit à l'aide des constructeurs d'un type de données Haskell. Le constructeur When le plus externe a deux arguments : le premier est une observation et le second est un autre contrat. Le sens voulu est que lorsque l'action se produit, le second contrat est activé.

Le second contrat est lui-même un autre When – demandant une décision de bob – mais à l'intérieur de ça, il y a un choixIf alice et bob sont d'accord sur ce qu'il faut faire, c'est fait ; sinon, carol est invité à arbitrer et à prendre une décision.

En général When offre une liste de cas, [1] chacun avec une action et un contrat correspondant qui est déclenché lorsque cette action se produit. En utilisant ceci, nous pouvons permettre l'option que bob fasse le premier choix, plutôt que alice, comme ça:

Dans ce contrat, Alice ou Bob peut faire le premier choix ; l'autre fait ensuite un choix. S'ils sont d'accord, c'est fait ; sinon, Carol arbitre. Dans le reste du tutoriel, nous reviendrons à la version plus simple où alice choisit d'abord.

Exercice

Pensez à l'exécution de ce contrat dans la pratique. Supposons qu'Alice ait déjà engagé de l'argent dans le contrat. Que se passera-t-il si Bob choisit de ne plus participer?

Nous avons supposé qu'Alice a déjà engagé son paiement, mais supposons que nous voulions concevoir un contrat pour nous en assurer : que devrions-nous faire pour cela?

Séquestre en Marlowe

Les contrats Marlowe intègrent des constructions supplémentaires pour garantir leur bon déroulement. Chaque fois que nous voyons un  When, nous devons fournir deux choses supplémentaires :

  • un timeout après lequel le contrat progressera, et
  • le contrat continuation vers lequel il progresse.

 

Ajoutant timeouts

Tout d'abord, examinons comment modifier ce que nous avons écrit pour prendre en charge le cas où la condition du When ne devient jamais vrai. Nous ajoutons donc des valeurs de timeout et de continuation à chaque occurrence de When dans le contrat.

Le When le plus externe stipule que le premier choix doit être fait par Alice : si Alice n'a pas fait de choix au slot 40, le contrat est fermé et tous les fonds du contrat sont remboursés.

Close est généralement la dernière étape de chaque " voie " d'un contrat Marlowe, et son effet est de rembourser l'argent du contrat aux participants ; nous décrirons cela plus en détail lorsque nous étudierons Marlowe étape par étape dans un prochain tutoriel. Dans ce cas particulier, le remboursement aura lieu au slot numéro 40.

En regardant les constructions internes, si le choix d'Alice a été fait, alors nous attendons celui de Bob. Si ce choix n'est pas fait au slot 60, alors Carol est appelée à arbitrer. [2]

Ajouter des engagements

Ensuite, nous devons examiner comment les liquidités sont engagées lors de la première étape du contrat.

Un dépôt de price est demandé à "alice": s'il est donné, il est alors détenu sur un compte, également appelé "alice". Les comptes de ce type n'existent que pour la durée du contrat ; chaque compte appartient à un seul contrat.

Il y a un timeout au slot numéro 10 pour effectuer le dépôt ; si ce temps est atteint sans qu'un dépôt soit effectué, le contrat est fermé et tout l'argent déjà dans le contrat est remboursé. Dans ce cas, il s'agit simplement de la fin du contrat.

Définitions

Nous verrons plus tard que certaines parties de cette description de contrat, telles que arbitrateagreement, et price, utilisent l'intégration Haskell du DSL Marlowe pour donner des définitions abrégées. Nous utilisons également des strings surchargés pour rendre plus concises certaines descriptions (par exemple, des comptes).

Ces éléments sont abordés plus en détail lorsque nous examinons Marlowe intégré dans Haskell.

Exercice

Commentez le choix des valeurs de timeout et examinez les alternatives.

Par exemple, que se passerait-il si le timeout de 40 sur le When était remplacé par 60, et vice versa ? Serait-il judicieux d'avoir le même timeout, de 100 par exemple, sur chaque When? Si non, pourquoi ?

Cet exemple a montré plusieurs des ingrédients du langage contractuel de Marlowe ; dans le prochain tutoriel, nous présenterons le langage complet.

Notes

  • Si les noms des comptes doivent être fournis manuellement dans l'exemple présenté ici, ils pourraient être générés par les portefeuilles des utilisateurs dans une version de Marlowe déployée sur une blockchain.

 

Où aller pour en savoir plus

Ces articles couvrent le travail original sur l'utilisation de la programmation fonctionnelle pour décrire les contrats financiers.

 

[1]

Les listes dans Marlowe sont incluses entre crochets, comme dans [2,3,4].

[2]

Encore une fois, nous décrirons le fonctionnement de arbitrate et agreement dans Marlowe integré.

© Copyright 2020, IOHK Revision b8f2855c.

 

Vous trouverez une copie officielle de ce document ici :

https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/escrow-ex.html

https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/escrow-ex.html

 

Plus de traductions de Cardano à: http://CardanoForTheWorld.com/fr-FR