Le Marlowe Playground
Ce tutoriel donne un aperçu du Marlowe Playground, un outil en ligne qui permet aux utilisateurs de créer, d'analyser, d'interagir avec et de simuler le fonctionnement des contrats intégrés de Marlowe.
Introduction du Marlowe Playground
Pour que Marlowe soit utilisable dans la pratique, les utilisateurs doivent être en mesure de comprendre comment les contrats se comporteront une fois déployés sur la blockchain, mais sans effectuer le déploiement. Nous pouvons le faire en simulant leur comportement hors chaîne, en parcourant de manière interactive l'évaluation d'un contrat dans l'outil basé sur un navigateur, le Marlowe Playground, un outil Web qui prend en charge la construction, la révision et la simulation interactives de contrats intelligents écrits en Marlowe.
Les contrats peuvent être rédigés de quatre manières différentes dans le Playground. On peut écrire directement dans Marlowe, ou utiliser la représentation Blockly de Marlowe. Marlowe est également intégré dans Haskell et JavaScript, et nous pouvons créer des contrats dans ces langages, puis les convertir ("compiler") en Marlowe dans le Playground.
Une fois qu'un contrat a été écrit en Blockly, Haskell ou JavaScript, nous pouvons passer au simulateur pour analyser et simuler le contrat.
Le travail du Playground peut être sauvegardé dans un gist github. Cela permet de sauvegarder, en tant que projet, tout ce qui se trouve dans le Playground : non seulement les contrats, mais aussi l'état actuel de la simulation, les journaux, etc. Les projets peuvent être rechargés ou dupliqués ultérieurement. Même sans utiliser github, le projet est sauvegardé entre les sessions, mais il est volatile et sera perdu si les caches du navigateur sont mis à jour.
Le reste de cette section couvre le fonctionnement du Playground de manière plus détaillée. Dans les sections suivantes, deux fonctionnalités expérimentales, qui sont en cours de développement, seront également abordées: Actus Labs et la simulation au niveau de Wallet.
Nous utilisons des caractères gras pour les boutons et autres composants dans ce qui suit.
Mise en route
La page d'accueil du Marlowe Playground ressemble à ceci
La barre de titre comporte, à droite, des liens vers ce tutoriel et vers la fonctionnalité Actus Labs, et les opérations du menu principal sont indiquées au-dessous de ceci.
- New Project Cela efface le projet existant et en crée un nouveau, dans un environnement de codage au choix de l'utilisateur:
- Open Project Cela ouvre un projet qui a été enregistré précédemment. Voir la section sur la sauvegarde et l'ouverture de projets ci-dessous pour plus de détails sur la configuration de cette fonction.
- Open Example Ceci va charger un exemple dans le projet existant, dans l'environnement choisi par l'utilisateur.
- Rename Project Renomme un projet : le nom est affiché au centre de la barre de titre.
- Save Project Sauvegarde un projet. Voir la section Sauvegarde et Ouverture des Projets ci-dessous.
- Save as New Project Sauvegarde le projet en cours avec un nouveau nom.
L'éditeur de programmes utilisé dans le Playground est l'éditeur Monaco https://microsoft.github.io/monaco-editor/ et beaucoup de ses fonctionnalités sont disponibles, y compris le menu disponible en cliquant avec le bouton droit de la souris.
L'éditeur Haskell : développer des contrats intégrés
L'éditeur supporte le développement de contrats Marlowe décrits en Haskell. Nous pouvons utiliser Haskell pour rendre les définitions de contrat plus lisibles en utilisant des définitions Haskell pour les sous-composants, les abréviations et les fonctions de modèle simples. L'éditeur Haskell est présenté dans l'image suivante.
L'éditeur Haskell est ouvert ici sur l'exemple Escrow contenu dans les exemples. Pour décrire un contrat Marlowe dans l'éditeur, nous devons définir une valeur de premier niveau contract de type Contract; c'est cette valeur qui est convertie en Marlowe pur avec le bouton Compile (dans le coin supérieur droit). Si la compilation est réussie, le code compilé est affiché dans une superposition (qui peut être réduite):
Une fois la compilation réussie, le résultat peut être envoyé au simulateur ou à Blockly : ces options sont fournies par les boutons Send to Simulator et Send to Blockly dans le coin supérieur droit de la page.
Si le contrat ne peut être converti avec succès en Marlowe, les erreurs sont également affichées dans une superposition:
L'éditeur JavaScript : développer des contrats intégrés
L'éditeur supporte également le développement de contrats Marlowe décrits en JavaScript. Nous pouvons utiliser JavaScript pour rendre les définitions de contrat plus lisibles en utilisant des définitions JS pour les sous-composants, les abréviations et les fonctions de modèle simples. L'éditeur JS est présenté dans l'image suivante.
L'éditeur JS est ouvert ici sur l'exemple Escrow contenu dans les exemples. Pour décrire un contrat Marlowe dans l'éditeur, une valeur de type Contract doit être retourné comme résultat de la fonction fournie en utilisant l'instruction return.
L'éditeur supporte l'autocomplétion, la vérification des erreurs pendant l'édition et les informations sur les liaisons au passage de la souris. En particulier, le passage de la souris sur l'une des liaisons importées affichera son type (en TypeScript).
Lorsque vous cliquez sur le bouton Compile (dans le coin supérieur droit), le code de l'éditeur est exécuté et l'objet JSON renvoyé par la fonction résultant de l'exécution est transformé en un contrat Marlowe réel qui peut ensuite être envoyé dans l'onglet Simulation où il peut être simulé.
Si la compilation est réussie, le code compilé est affiché dans une superposition (qui peut être réduite):
Une fois la compilation réussie, le résultat peut être envoyé au simulateur en utilisant le bouton Send to Simulator dans le coin supérieur droit de la page..
Si le contrat ne peut être converti avec succès en Marlowe, les erreurs sont également affichées dans une superposition.:
Développer des contrats dans Blockly
Le playground fournit un mécanisme pour créer et visualiser les contrats sous une forme visuelle, plutôt que textuelle. Ce point est abordé dans la section précédente sur Blockly.
Développer des contrats dans Marlowe
Il est également possible de créer des contrats en Marlowe "brut", ce qui s'effectue dans l'environnement de simulation. Marlowe est édité dans l'éditeur Monaco, qui permet un formatage automatique (par clic droit) et supporte également les trous.
Les trous permettent de construire un programme de haut en bas. En cliquant sur l'ampoule à côté d'un trou, un menu de complétion apparaît, remplaçant dans chaque cas chaque sous-composant par un nouveau trou. Par exemple, en choisissant Pay pour remplir le trou du niveau supérieur aura pour résultat ceci:
Les trous peuvent être combinés avec l'édition de texte ordinaire, de sorte que vous pouvez utiliser un mélange de constructions de bas en haut et de haut en bas dans la construction des contrats Marlowe. De plus, les contrats avec des trous peuvent être transférés vers et depuis Blockly : les trous dans Marlowe deviennent des trous littéraux dans Blockly. Pour transférer vers Blockly, utilisez le bouton View in Blockly Editor dans le coin supérieur droit de l'écran.
Simulation des contrats Marlowe
Quelle que soit la façon dont le contrat est rédigé, lorsqu'il est envoyé à la simulation, voici la vue qui apparaît en premier lieu.
Le code montré ici présente ce qu'il reste du contrat à simuler, et le volet en bas de page donne des données sur la simulation, ainsi que l'accès à l'analyse statique du contrat (à partir de son état actuel).
La simulation est lancée en cliquant sur le bouton Start simulation, et une fois ceci fait, les actions disponibles qui feront avancer le contrat sont présentées;
Dans ce cas, il y a deux actions possibles : Alice peut faire un dépôt, ou le slot (temps) peut avancer jusqu'à 10 à lequel l'attente d'un dépôt se termine. Deux autres actions génériques peuvent également être effectuées
- Undo annulera la dernière action effectuée dans le simulateur. Cela signifie que nous pouvons explorer un contrat de manière interactive, en effectuant certains mouvements, en annulant certains d'entre eux, puis en poursuivant dans une autre direction..
- Reset réinitialise le contrat et son état à leurs valeurs initiales : le contrat complet et un état vide. Il arrête également la simulation.
Pour notre exemple, choisissons pour Alice de faire un dépôt de 450 lovelace. Nous pouvons le faire avec le bouton + à côté de cette entrée. Après avoir fait cela, nous voyons
Où l'on voit en bas de l'écran que le dépôt a eu lieu..
Ceci reste visible si nous faisons ensuite le choix d'Alice puis le choix de Bob. Notez également que l'état actuel du contrat est affiché dans la partie principale de la fenêtre, et qu'en effet nous attendons à ce stade un choix d'Alice.
Si Alice et Bob font des choix différents, nous voyons alors
et à ce stade de l'évolution du contrat, nous attendons un choix de Carol pour arbitrer le résultat.
Simulation d'Oracle
Comme nous l'avons noté précédemment dans la section sur les Oracles, le Playground fournit des valeurs oracle aux simulations pour le rôle "kraken". Lorsque la simulation atteint le point de simuler cette construction
alors la valeur est pré-remplie dans la simulation comme ceci:
Sauvegarde et Ouverture de Projets
Les projets peuvent être sauvegardés sur github, et donc lorsque vous enregistrez un projet pour la première fois, vous serez sollicité ainsi:
et, si vous choisissez de Login, vous serez dirigé vers un écran de connexion pour github:
Lorsque vous choisissez Open Project, un choix s'offre à vous comme ceci:
Le Marlowe Playground ne fournit pas de mécanisme pour effacer les projets, mais cela peut être fait directement sur github.
Analyser un contrat
L'analyse statique d'un contrat est effectuée en sélectionnant l'onglet Static analysis dans le volet en bas de page.
En cliquant sur le bouton Analyse for warnings, le contrat actuel dans l'état actuel est analysé. Le résultat est soit de dire que le contrat a passé tous les tests, soit d'expliquer comment il échoue, et de donner la séquence de transactions qui conduit à l'erreur. À titre d'exercice, essayez ceci avec le contrat Escrow, en changeant le dépôt initial d'Alice à quelque chose de plus petit que 450 lovelace. Plus de détails sont donnés dans la section sur l'analyse statique ci-dessous.
Le bouton Analyse reachability permet de vérifier si certaines parties d'un contrat ne seront jamais exécutées, quelle que soit l'interaction des participants avec ce contrat.
Utilisez le Marlowe Playground pour interagir avec le contrat escrow dans les différents scénarios abordés dans le tutoriel sur l'utilisation de Marlowe.
Explorez la possibilité d'apporter quelques modifications au contrat et les interactions avec ces contrats modifiés.
Utilisez le Marlowe Playground pour explorer les autres exemples qui y sont présentés : le contrat d'incitation au dépôt et l'exemple de crowd funding.
© Copyright 2020, IOHK Revision b1894eb4.
Vous trouverez une copie officielle de ce document ici :
https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/playground-overview.html
https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/playground-overview.html
Plus de traductions de Cardano à: Cardano For The World