Le modèle de Marlowe

Marlowe est conçu pour prendre en charge l'exécution de contrats financiers sur blockchain, et plus particulièrement pour fonctionner sur Cardano. Les contrats sont construits en rassemblant un petit nombre de constructions qui peuvent être combinées pour décrire différents types de contrats financiers.

Avant de décrire ces constructions, nous devons examiner notre approche générale de la modélisation des contrats dans Marlowe, ainsi que le contexte dans lequel les contrats Marlowe sont exécutés, la blockchain Cardano. Ce faisant, nous introduisons également une partie de la terminologie que nous utiliserons, en indiquant les définitions en italique.

Contrats

Les contrats de Marlowe fonctionnent sur une blockchain, mais doivent interagir avec le monde hors blockchain. Les parties au contrat, que nous appelons aussi les participants, peuvent s'engager dans diverses actions : on peut leur demander de déposer de l'argent, ou de faire un choix entre diverses alternatives. La notification d'une valeur externe (également appelée valeur oracle), telle que le prix actuel d'une marchandise particulière, est l'autre forme possible d'entrée. [1]

L'exécution d'un contrat produira également des effets externes, en effectuant des paiements aux parties du contrat.

Participants et rôles

Nous devons séparer les notions de participants et de rôles dans un contrat Marlowe. Les rôles dans un contrat sont fixes et immuables, et nous pourrions les appeler partycounterparty etc. D'autre part, les participants qui sont liés aux rôles du contrat peuvent changer au cours de l'exécution de l'instance particulière du contrat. Cela permet aux rôles dans les contrats en cours d'exécution d'être échangés entre les participants, grâce à un mécanisme de tokenisation. Ce mécanisme sera disponible dans l'implémentation de Marlowe sur la chaîne et dans la simulation de type wallet, mais la simulation omnisciente présente simplement les rôles des contrats.

Comptes

Le modèle Marlowe permet à un contrat de stocker des actifs. Toutes les parties qui participent au contrat possèdent implicitement un compte à leur nom. Tous les actifs stockés dans le contrat doivent être dans le compte de l'une des parties, de cette façon, lorsque le contrat est fermé, tous les actifs qui restent dans le contrat sont remboursés aux propriétaires respectifs. Ces comptes sont locaux, c'est-à-dire qu'ils n'existent que pendant l'exécution du contrat, et pendant ce temps, ils ne sont accessibles qu'aux parties au contrat.

Étapes et états

Les contrats Marlowe décrivent une série d'étapes, généralement en décrivant la première étape, accompagnée d'un autre (sous-) contrat qui décrit ce qu'il faut faire ensuite. Par exemple, le contrat Pay a p t v cont dit "effectuer un paiement de valeur v du token t à la partie p à partir du compte a, puis suivre le contrat cont”. Nous appelons cont la continuation du contrat.

Lors de l'exécution d'un contrat, nous devons garder la trace du contrat en cours : après avoir effectué une étape dans l'exemple ci-dessus, le contrat en cours est la suite, cont. Nous devons également garder la trace de certaines autres informations, telles que le montant détenu sur chaque compte : nous appelons ces informations l'état : celui-ci change potentiellement à chaque étape également. Une étape peut également voir une action se dérouler, comme un dépôt d'argent, ou un effet se produire, par exemple un paiement.

Blockchain

Bien que Marlowe soit conçu pour fonctionner avec les blockchains en général, [2] certains détails sur la façon dont il interagit avec la blockchain sont pertinents pour décrire la sémantique et la mise en œuvre de Marlowe.

Une blockchain basée sur les UTxO est une chaîne de blocs, dont chacun contient une collection de transactions. Chaque transaction a un ensemble d'entrées et de sorties, et la blockchain est construite en liant les sorties de transaction non dépensées (unspent transaction outputs) (UTxO) aux entrées d'une nouvelle transaction. Un bloc au maximum peut être généré dans chaque slot, qui dure une seconde.

Les mécanismes par lesquels ces blocs sont générés, et par qui, ne sont pas pertinents ici, mais les contrats seront exprimés en termes de nombres de slots, en comptant à partir du bloc de départ ("genèse") de la blockchain.

UTxO and wallets

La valeur sur la blockchain réside dans les UTxO, qui sont protégées cryptographiquement par une clé privée détenue par le propriétaire. Ces clés peuvent être utilisées pour rédimer les sorties, et donc pour les utiliser comme entrées dans de nouvelles transactions, ce qui peut être considéré comme dépenser la valeur dans les entrées. Les utilisateurs gardent généralement la trace de leurs clés privées, et des valeurs qui leur sont associées, dans un wallet (portefeuille) sécurisé par cryptographie.

C'est par l'intermédiaire de leurs wallets que les utilisateurs peuvent interagir avec les contrats intelligents - y compris les contrats Marlowe - fonctionnant sur la blockchain. Les dépôts sont effectués à partir des wallets des utilisateurs, et les paiements sont reçus par ces derniers. Notez toutefois qu'il s'agit d'actions hors chaîne qui doivent être contrôlées par le code exécuté dans le wallet de l'utilisateur : elles ne peuvent pas être exécutées par le contrat Marlowe lui-même.

Simulation omnisciente et au niveau du wallet

Le Marlowe Playground prend en charge deux types de simulation : la simulation omnisciente standard et une simulation de type "proof of concept" au niveau du wallet.

Dans une simulation omnisciente, l'utilisateur est capable d'effectuer n'importe quelle action pour n'importe quel rôle, et peut donc observer l'exécution du point de vue de tous les utilisateurs. La simulation de type " wallet " modélise explicitement différents wallets (c'est-à-dire différents participants) et leur participation à de multiples rôles dans de multiples contrats. Ce modèle présente donc une perspective plus fidèle de l'exécution du contrat pour un participant particulier au contrat.

Valeur

Dans les exemples précédents, chaque fois qu'un Value était requis, nous avons exclusivement utilisé Ada. Cela a beaucoup de sens, car Ada est la monnaie fondamentale supportée par Cardano.

Marlowe offre cependant un concept plus général de valeur, en supportant des tokens personnalisés fongibles, non fongibles et mixtes. [3] Qu'est-ce qu'un Value dans Marlowe?

Value

Les types CurrencySymbol et TokenName sont des enveloppes simples autour de ByteString.

Cette notion de valeur englobe Ada, les tokens fongibles (pensez aux devises), les tokens non fongibles (un token personnalisé qui n'est pas interchangeable avec d'autres tokens) et des cas mixtes plus exotiques:

  • Ada a le bytestring vide comme CurrencySymbol et TokenName.
  • Un token fongible est représenté par un CurrencySymbol pour lequel il y a exactement un TokenName qui peut avoir une quantité arbitraire d'entiers non négatifs (dont Ada est un cas particulier).
  • Une classe de tokens non fongibles est un CurrencySymbol avec plusieurs TokenNames, dont chacun a une quantité de un. Chacun de ces noms correspond à un token non fongible unique.
  • Les tokens mixtes sont ceux qui ont plusieurs TokenNameet des quantités supérieures à un.

Cardano offre un moyen simple d'introduire une nouvelle monnaie en la forgeant à l'aide de scripts de politique monétaire. Cela permet d'intégrer efficacement les normes Ethereum ERC-20/ERC-721 comme valeurs primitives dans Cardano. Nous utilisons des tokens personnalisés pour représenter les participants aux contrats Marlowe exécutés sur la chaîne.

Exécution d'un contrat Marlowe

L'exécution d'un contrat Marlowe sur la blockchain Cardano implique de contraindre les transactions générées par l'utilisateur conformément à la logique du contrat. Si un contrat attend un dépôt de 100 Ada de la part d'Alice, seule une telle transaction sera acceptée, toute autre transaction sera rejetée.

Une transaction contient une liste ordonnée d'entrées ou d'actions. L'interpréteur Marlowe est exécuté pendant la validation de la transaction. Tout d'abord, il évalue le contrat étape par étape jusqu'à ce qu'il ne puisse plus être modifié sans traiter aucune entrée, une condition que nous appelons être quiescent. A ce stade, nous progressons à travers When avec des timeouts passés, IfLetPay, et Close constructions sans consommer d'entrées.

La première entrée est alors traitée, puis le contrat est à nouveau exécuté par étapes jusqu'à la quiescence, et ce processus est répété jusqu'à ce que toutes les entrées soient traitées. À chaque étape, le contact actuel et l'état changent, certaines entrées peuvent être traitées et des paiements effectués.

Une telle transaction, comme le montre le schéma ci-dessous, est ajoutée à la blockchain. Nous allons ensuite décrire en détail à quoi ressemblent les contrats Marlowe et comment ils sont évalués étape par étape.

Nous avons montré, [4] que le comportement de Marlowe est indépendant de la manière dont les entrées sont rassemblées en transactions, et donc que lorsque nous simulons l'action d'un contrat, nous n'avons pas besoin de regrouper explicitement les entrées en transactions. Pour être plus concret, nous pouvons considérer que chaque transaction a au plus une entrée. Bien que la sémantique d'un contrat soit indépendante de la façon dont les entrées sont regroupées en transactions, les coûts d'exécution peuvent être plus bas si plusieurs entrées peuvent être regroupées en une seule transaction.

Dans la simulation omnisciente disponible dans le Marlowe Playground, nous faisons abstraction du regroupement des transactions, tandis que dans la simulation " wallet " basée sur les rôles, les transactions sont explicites..

Construction d'une transaction

transaction

[1]

Nous pouvons considérer les oracles comme une autre sorte de partie au contrat ; dans cette optique, les notifications deviennent les choix effectués par cette partie..

[2]

En effet, Marlowe pourrait être modifié pour fonctionner hors blockchain, ou pour fonctionner sur une blockchain à autorisation.

[3]

Cela reflète le modèle de valeur de Plutus.

[4]

Dans notre étude Marlowe: implementing and analysing financial contracts on blockchain

 

© Copyright 2020, IOHK Revision dd1a40dd.

Vous trouverez une copie officielle de ce document ici :

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

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

 

Plus de traductions de Cardano à : http://CardanoForTheWorld.com