Introduction de Marlowe
Ce tutoriel donne un aperçu des idées derrière Marlowe, en tant que langage spécifique à un domaine intégré à Haskell. Il présente également les commitments et les timeouts, qui sont essentiels au fonctionnement de Marlowe dans un contexte de blockchain.
Les Langages de Programmation et les Langages Spécifiques à un Domaine
Les premiers ordinateurs étaient programmés en "code machine". Chaque type de système avait un code différent, et ces codes étaient de bas niveau et inexpressifs : les programmes étaient de longues séquences d'instructions très simples, incompréhensibles pour quiconque ne les avait pas écrites. Aujourd'hui, nous pouvons utiliser des langages de plus haut niveau comme C, Java et Haskell pour programmer des systèmes. Les mêmes langages peuvent être utilisés sur des machines très différentes, et la structure des programmes reflète ce qu'ils font. Sur blockchain, leurs équivalents sont des langages comme Plutus, Solidity et Simplicity. Ces langages de niveau supérieur sont d'usage général - ils peuvent être utilisés pour résoudre toutes sortes de problèmes différents - mais les solutions qu'ils expriment sont toujours des programmes, et leur utilisation efficace nécessite toujours des compétences en programmation.
En revanche, Marlowe est un langage spécifique à un domaine (DSL) conçu pour être utilisé par une personne experte dans un domaine particulier, plutôt que de nécessiter des compétences en programmation pour l'utiliser. Dans le cas de Marlowe, le domaine est celui des contrats financiers.
L'utilisation d'un DSL présente de nombreux avantages, au-delà de son utilisation par des non-programmeurs:
- Nous pouvons nous assurer que certaines sortes de mauvais programmes ne peuvent même pas être écrits, en concevant ces possibilités hors du langage. Ce faisant, nous pouvons éviter certains des exploits imprévus qui ont posé problème aux blockchains existantes.
- Nous pouvons également vérifier plus facilement que les programmes ont les propriétés que nous voulons : par exemple, dans le cas d'un contrat Marlowe, nous pouvons nous assurer que le contrat ne manquera jamais d'effectuer un paiement qu'il devrait.
- Comme il s'agit d'un DSL, nous pouvons créer des outils spéciaux pour aider les gens à écrire des programmes dans ce langage. Dans le cas de Marlowe, nous pouvons émuler le comportement d'un contrat avant qu'il ne soit exécuté pour de vrai sur la blockchain ; cela nous permet de nous assurer que le contrat que nous avons écrit fait ce qu'il doit faire.
Marlowe est également un DSL intégré, hébergé dans le langage de programmation Haskell. Bien qu'il soit possible d'utiliser Marlowe "pur" si on le souhaite, le fait d'être intégré dans un langage polyvalent permet aux rédacteurs de contrats d'exploiter sélectivement les caractéristiques de Haskell dans la rédaction des contrats Marlowe, ce qui les rend plus faciles à lire et favorise la réutilisation. En fait, Marlowe n'est pas lié à Haskell, et nous avons également développé un environnement JavaScript pour Marlowe. Vous en trouverez également un prototype dans le Playground.
Marlowe en bref
Marlowe s'inspire des DSL de contrats financiers popularisés depuis une dizaine d'années par des universitaires et des entreprises telles que LexiFi, qui fournit des logiciels de contrats dans le secteur financier. En développant Marlowe, nous avons adapté ces langages pour qu'ils fonctionnent sur blockchain. Marlowe est implémenté sur la blockchain Cardano, mais pourrait tout aussi bien être implémenté sur Ethereum ou d'autres plateformes blockchain ; à cet égard, il est "agnostique en termes de plateforme", tout comme les langages de programmation modernes tels que Java et C++. La simulation en ligne Marlowe Playground vous permet d'expérimenter, de développer, de simuler et d'analyser les contrats Marlowe dans votre navigateur Web, sans devoir installer de logiciel.
À quoi ressemble un contrat Marlowe ? Il est construit en combinant un petit nombre de blocs de construction qui décrivent un paiement, une observation de quelque chose dans le "monde réel", l'attente d'une certaine condition, etc.
Timeouts, deposits et commitments
Ce qui nous différencie des approches non blockchain, c'est la façon dont nous nous assurons que le contrat est respecté. Cela signifie non seulement que les instructions du contrat ne sont pas désobéies - "rien de mal n'arrive" - mais aussi que les participants participent et ne se retirent pas prématurément, laissant l'argent bloqué dans le contrat pour toujours : "de bonnes choses arrivent réellement". Pour ce faire, nous utilisons les timeouts.
Un contrat peut demander à un participant de déposer des fonds, mais il ne peut évidemment pas l'obliger à le faire. Au lieu de cela, le contrat peut attendre un certain temps que le participant s'engage à respecter le contrat : à l'expiration de ce délai, le contrat passe à d'autres instructions. Cela permet d'éviter qu'un participant ne mette fin à un contrat en ne prenant pas part à celui-ci, garantissant ainsi que "les choses se passent".
Toutes les constructions de Marlowe qui nécessitent la participation de l'utilisateur - y compris les dépôts et les choix de l'utilisateur - sont protégées par des timeouts. De ce fait, il est facile de voir que l'engagement pris par un participant dans un contrat est limité : nous pouvons prédire quand le contrat n'aura plus rien à faire - quand il pourra être fermé - à ce moment-là, tous les fonds non dépensés restant dans le contrat sont remboursés aux participants, et le contrat s'arrête, ou se termine. Ainsi, les fonds placés dans le contrat par un participant ne peuvent pas être bloqués pour toujours : à ce moment-là, l'engagement prend effectivement fin.
De plus, il nous est facile de lire dans le contrat quand il prendra fin, nous appelons cela la durée de vie du contrat : tous les participants pourront donc connaître cette durée de vie avant de prendre part au contrat.
Dans notre modèle, un contrat en cours d'exécution ne peut pas forcer un dépôt ou un choix à se produire : tout ce qu'il peut faire est de demander un dépôt ou un choix à un participant. En d'autres termes, pour ces actions, il ne peut pas "pousser", mais il peut "tirer". D'un autre côté, il peut effectuer des paiements automatiquement, de sorte que certains aspects d'un contrat Marlowe peuvent "pousser" pour que certaines choses se produisent, par exemple s'assurer qu'un paiement est effectué à un participant en construisant une sortie de transaction appropriée.
Marlowe en action
Nous travaillons sur une version de production de Marlowe sur la blockchain Cardano au début de l'année 2021. À partir d'aujourd'hui, vous pouvez explorer Marlowe par vous-même, soit en le téléchargeant et en utilisant directement l'implémentation Haskell, soit en utilisant l'outil de simulation en ligne Marlowe Playground ; ces deux aspects seront abordés dans les prochains tutoriels. Ces derniers couvriront également les détails de Marlowe, introduiront une série d'exemples, approfondiront les outils de Marlowe.
Nous avons également travaillé à l'élaboration d'un ensemble de modèles pour les instruments financiers les plus courants, tirés de la norme Actus, et nous pouvons générer des contrats particuliers à partir de ces modèles en fonction des différents paramètres et options qui peuvent être définis.
Comme Marlowe est un DSL, nous pouvons déterminer comment les contrats Marlowe se comporteront sans les exécuter : cela signifie que nous pouvons fournir des diagnostics précieux aux participants potentiels avant qu'ils ne s'engagent dans un contrat, en utilisant l'analyse statique. Nous pouvons également utiliser des outils logiques pour prouver formellement les propriétés des contrats Marlowe, donnant ainsi aux utilisateurs le plus haut niveau d'assurance que leurs contrats se comportent comme prévu.
Où aller pour en savoir plus
Ce tutoriel couvre la dernière version de Marlowe, tandis que certains de ces liens couvrent des versions antérieures du langage et du playground.
© Copyright 2020, IOHK Revision b8f2855c.
Vous trouverez une copie officielle de ce document ici :
https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/introducing-marlowe.html
https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/introducing-marlowe.html
Plus de traductions de Cardano à: http://CardanoForTheWorld.com/fr-FR