El Marlowe Playground
Este tutorial ofrece una visión general del Marlowe Playground, una herramienta en línea que permite a los usuarios crear, analizar, interactuar y simular el funcionamiento de los contratos integrados de Marlowe.
Introduciendo el Marlowe Playground
Para que Marlowe sea utilizable en la práctica, los usuarios deben ser capaces de entender cómo se comportarán los contratos una vez desplegados en la blockchain, pero sin hacer el despliegue. Podemos hacerlo simulando su comportamiento fuera de la cadena, pasando interactivamente por la evaluación de un contrato en la herramienta basada en el navegador, el Marlowe Playground, una herramienta web que soporta la construcción interactiva, la revisión y la simulación de contratos inteligentes escritos en Marlowe.
Los contratos se pueden redactar de cuatro maneras diferentes en el Playground. Podemos escribir directamente en Marlowe, o utilizar la representación Blockly de Marlowe. Marlowe también está integrado en Haskell y JavaScript, y podemos crear contratos en estos lenguajes y luego convertirlos ("compilarlos") a Marlowe en el Playground.
Una vez escrito un contrato en Blockly, Haskell o JavaScript, podemos pasar al Simulador para analizar y simular el contrato.
El trabajo del Playground puede guardarse como un gist de github. Esto guarda, como proyecto, todo lo que hay en el Playground: no sólo los contratos, sino el estado actual de la simulación, los registros, etc. Los proyectos pueden ser recargados o duplicados en un momento posterior. Incluso sin usar github el proyecto se guarda entre sesiones, pero esto es volátil, y se perderá si se actualizan las cachés del navegador.
En el resto de esta sección se tratará con más detalle el funcionamiento del Playground. En secciones posteriores, también se cubren dos características experimentales, que están en desarrollo activo: Actus Labs y la simulación a nivel de Wallet.
En lo que sigue utilizamos letra negrita para los botones y otros componentes.
Cómo empezar
La página de inicio del Marlowe Playground tiene el siguiente aspecto
La barra de título tiene, en el lado derecho, enlaces a este tutorial y a la función Actus Labs, y las operaciones del menú principal se muestran por debajo de esto.
- New Project Esto borra el proyecto existente, y crea uno nuevo, en un entorno de codificación a elección del usuario:
- Open Project Esto abre un proyecto que ha sido guardado previamente. Consulta la sección sobre cómo guardar y abrir proyectos más adelante para obtener más detalles sobre su configuración.
- Open Example Esto cargará un ejemplo en el proyecto existente, en el entorno elegido por el usuario.
- Rename Project Cambia el nombre de un proyecto: el nombre se muestra en el centro de la barra de título.
- Save Project Guarda un proyecto. Consulta la sección Guardar y Abrir Proyectos más abajo.
- Save as New Project Guarda el proyecto actual con un nuevo nombre.
El editor de programas utilizado en el Playground es el editor Monaco https://microsoft.github.io/monaco-editor/ y muchas de sus funciones están disponibles, incluido el menú disponible al hacer clic con el botón derecho del ratón.
El editor de Haskell: desarrollo de contratos integrados
El editor soporta el desarrollo de contratos Marlowe descritos en Haskell. Podemos utilizar Haskell para hacer que las definiciones de los contratos sean más legibles utilizando definiciones de Haskell para los subcomponentes, las abreviaturas y las funciones de plantilla simples. El editor Haskell se muestra en la siguiente imagen.
El editor Haskell está abierto aquí en el ejemplo Escrow contenido en los ejemplos. Para describir un contrato Marlowe en el editor, tenemos que definir un valor de nivel superior contract de tipo Contract; es este valor el que se convierte en Marlowe puro con el botón Compile (en la esquina superior derecha). Si la compilación tiene éxito, el código compilado se muestra en una superposición (que puede minimizarse):
Una vez compilado con éxito, el resultado puede enviarse al simulador o a Blockly: estas opciones se ofrecen mediante los botones Send to Simulator (Enviar al simulador) y Send to Blockly (Enviar a Blockly) en la esquina superior derecha de la página.
Si el contrato no se puede convertir con éxito a Marlowe, los errores también se muestran en una superposición:
El editor de JavaScript: desarrollo de contratos integrados
El editor soporta el desarrollo de contratos Marlowe descritos en JavaScript, también. Podemos utilizar JavaScript para hacer más legibles las definiciones de los contratos mediante el uso de definiciones JS para los subcomponentes, las abreviaturas y las funciones simples de las plantillas. El editor JS se muestra en la siguiente imagen.
El editor JS está abierto aquí en el ejemplo de Escrow contenido en los ejemplos. Para describir un contrato Marlowe en el editor, un valor del tipo Contract debe ser devuelto como resultado de la función proporcionada utilizando la instrucción return.
El editor soporta el autocompletado, la comprobación de errores durante la edición y la información sobre los bindings al pasar el ratón por encima. En particular, al pasar el ratón por encima de cualquiera de los enlaces importados se mostrará su tipo (en TypeScript).
Al hacer clic en el botón Compile (en la esquina superior derecha), se ejecuta el código en el editor, y el objeto JSON devuelto por la función resultante de la ejecución se convierte en un contrato Marlowe real que puede enviarse a la pestaña Simulación, donde puede simularse.
Si la compilación tiene éxito, el código compilado se muestra en una superposición (que puede minimizarse):
Una vez compilado con éxito, el resultado puede enviarse al simulador mediante el botón Send to Simulator situado en la esquina superior derecha de la página.
Si el contrato no se puede convertir con éxito a Marlowe, los errores también se muestran en una superposición:
Desarrollar contratos en Blockly
El playground ofrece un mecanismo para crear y ver los contratos de forma visual, en lugar de en texto. Esto se discute en esta sección anterior sobre Blockly.
Desarrollar contratos en Marlowe
También es posible crear contratos en Marlowe "crudo", y esto se realiza en el entorno de simulación. Marlowe se edita en el editor de Mónaco, que permite formatear automáticamente (al hacer clic con el botón derecho) y también soporta agujeros.
Los agujeros permiten construir un programa de arriba abajo. Al hacer clic en la bombilla situada junto a un agujero, se presenta un menú de finalización, en el que se sustituye cada subcomponente por un nuevo agujero. Por ejemplo, al elegir Pay para rellenar el agujero del nivel superior resultará en esto:
Los agujeros pueden combinarse con la edición de texto ordinaria, de modo que se puede utilizar una mezcla de construcciones de abajo a arriba y de arriba a abajo en la construcción de contratos de Marlowe. Además, los contratos con agujeros pueden transferirse a y desde Blockly: los agujeros en Marlowe se convierten en agujeros literales en Blockly. Para transferirlos a Blockly, utiliza el botón View in Blockly Editor, situado en la esquina superior derecha de la pantalla.
Simulación de contratos Marlowe
Independientemente de cómo se redacte un contrato, cuando se envía a la simulación esta es la vista que se ve primero.
El código mostrado aquí presenta lo que queda por simular del contrato, y el panel al pie da datos sobre la simulación, además de dar acceso al análisis estático del contrato (desde su estado actual).
La simulación se inicia haciendo clic en el botón Start simulation, y una vez hecho esto, se presentan las acciones disponibles que harán avanzar el contrato;
En este caso hay dos acciones potenciales: Alice puede hacer un depósito, o el slot (tiempo) puede avanzar a 10 en el que se agota la espera de un depósito. También se pueden realizar otras dos acciones genéricas
- Undo deshará la última acción realizada en el simulador. Esto significa que podemos explorar un contrato de forma interactiva, haciendo algunos movimientos, deshaciendo algunos de ellos, y luego procediendo en una dirección diferente.
- Reset devolverá el contrato y su estado a sus valores iniciales: el contrato completo y un estado vacío. También detiene la simulación.
Para nuestro ejemplo, vamos a seleccionar que Alice haga el depósito de 450 lovelace. Podemos hacerlo con el botón + al lado de esta entrada. Después de hacer eso vemos
Donde vemos al pie de la pantalla que el depósito se ha producido.
Esto queda a la vista si luego hacemos la elección de Alice y luego la de Bob. Observa también que el estado actual del contrato se muestra en la parte principal de la ventana, y de hecho estamos esperando en este momento una elección de Alice.
Si Alice y Bob hacen elecciones diferentes, entonces vemos
y en este punto de la evolución del contrato estamos a la espera de la elección de Carol para arbitrar el resultado.
Simulación de Oráculo
Como hemos señalado anteriormente en la sección de Oráculos, el Playground proporciona valores de oráculo a las simulaciones para el rol "kraken". Cuando la simulación llega al punto de simular esta construcción
entonces el valor se pre-llena en la simulación así:
Guardar y Abrir Proyectos
Los proyectos se pueden guardar en github, por lo que la primera vez que guardes un proyecto se te pedirá lo siguiente:
y, si eliges Login allí, serás llevado a una pantalla de acceso a github:
Cuando optes por Open Project te aparecerá una opción como esta:
Marlowe Playground no proporciona un mecanismo para borrar proyectos, pero esto se puede hacer directamente en github.
Analizar un contrato
El análisis estático de un contrato se realiza seleccionando la pestaña Static analysis en el panel del pie de página.
Al hacer clic en el botón Analyse for warnings se analiza el contrato en el estado actual. El resultado es o bien decir que el contrato ha pasado todas las pruebas, o bien explicar cómo falla, y dar la secuencia de transacciones que llevan al error. Como ejercicio, prueba esto con el contrato Escrow , cambiando el depósito inicial de Alice a algo menor que 450 lovelace. Más detalles en la sección de análisis estático más abajo.
El botón Analyse reachability comprobará si alguna de las partes de un contrato no se ejecutará nunca, independientemente de cómo interactúen los participantes con él.
Utiliza el Marlowe Playground para interactuar con el contrato escrow en los distintos escenarios tratados en el tutorial sobre el uso de Marlowe.
Explora la realización de algunos cambios en el contrato y las interacciones con esos contratos modificados.
Utiliza el Marlowe Playground para explorar los otros ejemplos que allí se presentan: el contrato de incentivo de depósito, y el ejemplo de crowdfunding.
© Copyright 2020, IOHK Revision b1894eb4.
Encuentra una copia oficial de este documento aquí:
https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/playground-overview.html
https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/playground-overview.html
Más traducciones de Cardano en: Cardano For The World