Marlowe paso a paso
Marlowe tiene seis formas de construir contratos. Cinco de estas – Pay, Let, If, When y Assert – construyen un contrato complejo a partir de contratos más sencillos, y la sexta, Close, es un contrato simple. En cada paso de la ejecución, además de devolver un nuevo estado y un contrato de continuación, es posible que se generen también efectos -pagos- y avisos.
Al explicar estos contratos también explicaremos los valores, las observaciones y las acciones de Marlowe, que se utilizan para suministrar información externa y entradas a un contrato en curso para controlar su evolución.
Pay
Un contrato de pago Pay a p t v cont hará un pago de valor v de token t desde la cuenta a a un beneficiario p, que será uno de los participantes del contrato u otra cuenta del mismo. Se generarán advertencias si el valor v es negativo, o si no hay suficiente en la cuenta para realizar el pago en su totalidad (aunque haya saldos positivos de otros tokens en la cuenta). En este último caso se realiza un pago parcial (de todo el dinero disponible). El contrato de continuación es el que se da en el contrato: cont.
Close
El contrato Close permite el cierre (o la terminación) del contrato. La única acción que se realiza es proporcionar reembolsos a los propietarios de las cuentas que contienen un saldo positivo. Esto se realiza una cuenta por paso, pero todas las cuentas serán reembolsadas en una sola transacción.
Antes de hablar de otras formas de contrato, debemos describir los valores, las observaciones y las acciones.
Valores, observaciones y acciones
Valores incluyen algunas cantidades que cambian con el tiempo, incluyendo "el número del slot actual", 1 "el saldo actual de algún token en una cuenta", y cualquier elección que ya se haya hecho; a éstos los llamamos valores volátiles. Los valores también pueden combinarse mediante la suma, la resta y la negación, y pueden ser condicionales a una observación.
Observaciones son valores booleanos derivados de la comparación de valores, y pueden combinarse utilizando los operadores booleanos estándar. También es posible observar si se ha realizado alguna elección (para una determinada elección identificada).
Las observaciones tendrán un valor en cada paso de la ejecución. Por otro lado, las acciones ocurren en puntos concretos de la ejecución. Como se ha señalado anteriormente, las acciones pueden ser
- depositar dinero,
- elegir entre varias alternativas, incluyendo un valor de oráculo (véase la sección siguiente), o
- notificar un valor externo de algún tipo.
Oráculos
Se están desarrollando oráculos para la blockchain de Cardano en general, y estarán disponibles para su uso dentro de Marlowe en Cardano. Mientras tanto, hemos introducido un prototipo de oráculo, que se implementa en el Marlowe Playground.
Modelamos los Oráculos como elecciones que realiza un participante con un rol específico de Oráculo, "kraken".
Si un rol en un contrato es "kraken", y ese rol hace una elección como "dir-adausd" entonces, en la simulación de Playground, esta opción se rellenará previamente, basándose en los datos de Cryptowat.ch, con el valor actual del tipo de conversión directo ADA/USD. Puede encontrar todos los pares de divisas soportados aquí https://api.cryptowat.ch/markets/kraken
También es posible obtener los tipos inversos de los pares de divisas enumerados añadiendo el prefijo inv- en su lugar. Por ejemplo, "inv-adausd" devolvería el valor del tipo de conversión USD/ADA.
Ten en cuenta que sólo admitimos números enteros como entradas de elección. ¿Cómo utilizamos entonces el precio actual de ADA/USD, que es de 0,098924 dólares? Simplemente multiplicamos el precio por 108, por lo que el precio aparecerá como 9892400. Puedes Scale el valor después de hacer tus cálculos.
Por ejemplo, deseas comprar USDT por 12 ADA, utilizando el precio de Oráculo.
Obtén el precio:
Calcula la cantidad de USDT
Reduce el resultado por 106 para obtener la cantidad en centavos de USDT.
If
El condicional If obs cont1 cont2 continuará como cont1 ó cont2, en función del valor booleano de la observación obs cuando se ejecuta esta construcción.
When
Este es el constructor más complejo para los contratos, con la forma When cases timeout cont. Se trata de un contrato que se activa en función de las acciones, que pueden ocurrir o no en un momento determinado: lo que ocurre cuando se producen varias acciones se describe en los casos del contrato.
En el contrato When cases timeout cont, la lista cases contiene una colección de casos. Cada caso tiene la forma Case ac co donde ac es una acción y co una continuación (otro contrato). Cuando una acción concreta, por ejemplo ac, ocurre, el estado se actualiza en consecuencia y el contrato continuará como la continuación correspondiente co.
Para asegurarse de que el contrato progresa eventualmente, el contrato When cases timeout cont continuará como cont una vez que el timeout, un número de slot, se alcanza.
Let
Un contrato let Let id val cont permite que un contrato nombre un valor utilizando un identificador. En este caso, la expresión val es evaluada y almacenada con el nombre id. El contrato continúa entonces como cont.
Además de permitirnos utilizar abreviaturas, este mecanismo también nos permite capturar y guardar valores volátiles que puedan estar cambiando con el tiempo, por ejemplo, el precio actual del petróleo, o el número de slot actual, en un momento determinado de la ejecución del contrato, para utilizarlo posteriormente en la ejecución del mismo.
Assert
Un contrato assert Assert obs cont no tiene ningún efecto sobre el estado del contrato, continúa inmediatamente como cont, pero emite una advertencia cuando la observación obs es falsa. Se puede utilizar para asegurar que una propiedad se mantiene en cualquier punto del contrato, ya que el análisis estático fallará si alguna ejecución hace que un assert (una afirmación) sea falso.
1
La presentación aquí es una simplificación de la implementación concreta, en la que las transacciones se asocian con un intervalo de slots durante el cual es válido añadirlas a la blockchain. La razón de esto es que en general es difícil predecir el slot preciso en el que una transacción será aceptada para su inclusión en la blockchain; por lo tanto, es más robusto especificar un intervalo en el que la transacción debe ser aceptada. El punto de vista presentado aquí es una simplificación en el sentido de que efectivamente sólo consideramos intervalos de longitud uno. Así, un contrato Marlowe es capaz de acceder a los límites superior e inferior del intervalo actual, en lugar de al valor específico del intervalo actual. Ejecutar un contrato puede, en algunas circunstancias, llevar a un "error de intervalo de slot ambiguo", pero no cubrimos eso aquí.
© Copyright 2020, IOHK Revision 34aa9c32
.
Encuentra una copia oficial de este documento aquí:
https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/marlowe-step-by-step.html
https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/marlowe-step-by-step.html
Más traducciones de Cardano en: Cardano For The World