Introducción de Marlowe
Este tutorial da una visión general de las ideas detrás de Marlowe, como un lenguaje de dominio específico integrado en Haskell. También introduce los commitments y los timeouts, que son fundamentales para el funcionamiento de Marlowe en un contexto de blockchain.
Lenguajes de Programación y Lenguajes de Dominio Específico
Los primeros ordenadores se programaban en "código máquina". Cada tipo de sistema tenía un código diferente, y estos códigos eran de bajo nivel e inexpresivos: los programas eran largas secuencias de instrucciones muy simples, incomprensibles para cualquiera que no las hubiera escrito. Hoy en día podemos utilizar lenguajes de alto nivel como C, Java y Haskell para programar sistemas. Los mismos lenguajes pueden utilizarse en máquinas muy diferentes, y la estructura de los programas refleja lo que hacen. En blockchain, sus equivalentes son lenguajes como Plutus, Solidity y Simplicity. Estos lenguajes de alto nivel son de propósito general -pueden utilizarse para resolver todo tipo de problemas diferentes-, pero las soluciones que expresan siguen siendo programas, y siguen requiriendo conocimientos de programación para utilizarlos eficazmente.
En cambio, Marlowe es un lenguaje de dominio específico (DSL) que está diseñado para ser utilizado por alguien experto en un campo concreto, en lugar de requerir conocimientos de programación para usarlo. En el caso de Marlowe, el dominio es el campo de los contratos financieros.
Utilizar un DSL tiene muchas ventajas más allá de su uso por parte de los no programadores:
- Podemos asegurarnos de que ciertos tipos de programas malos ni siquiera puedan ser escritos, diseñando esas posibilidades fuera del lenguaje. De este modo, podemos evitar algunas de las vulnerabilidades imprevistas que han sido un problema para las blockchains existentes.
- También podemos comprobar más fácilmente que los programas tienen las propiedades que deseamos: por ejemplo, en el caso de un contrato Marlowe, podemos asegurarnos de que el contrato nunca dejará de realizar un pago que debería.
- Como es un DSL, podemos construir herramientas de propósito especial para ayudar a la gente a escribir programas en el lenguaje. En el caso de Marlowe, podemos emular cómo se comportará un contrato antes de que se ejecute de forma real en la blockchain; esto nos ayuda a asegurarnos de que el contrato que hemos escrito está haciendo lo que pretende.
Marlowe es también un DSL integrado, alojado en el lenguaje de programación Haskell. Aunque es posible utilizar Marlowe "puro" si lo deseamos, el hecho de estar integrado en un lenguaje de propósito general permite a los redactores de contratos explotar selectivamente las características de Haskell al escribir los contratos de Marlowe, facilitando su lectura y apoyando su reutilización. De hecho, Marlowe no está limitado a Haskell, y también hemos desarrollado un entorno JavaScript para Marlowe. Encontrarás un prototipo de esto también en el Playground.
Marlowe en breve
Marlowe sigue el modelo de los DSL de contratos financieros popularizados en la última década por académicos y empresas como LexiFi, que proporciona software de contratos en el sector financiero. Al desarrollar Marlowe, hemos adaptado estos lenguajes para que funcionen en blockchain. Marlowe está implementado en la blockchain de Cardano, pero podría implementarse igualmente en Ethereum u otras plataformas de blockchain; en este sentido, es "agnóstico a la plataforma" al igual que los lenguajes de programación modernos como Java y C++. La simulación en línea de Marlowe Playground te permite experimentar, desarrollar, simular y analizar los contratos de Marlowe en tu navegador web, sin tener que instalar ningún software.
¿Qué aspecto tiene un contrato Marlowe? Se construye combinando un pequeño número de bloques de construcción que describen la realización de un pago, la observación de algo en el "mundo real", la espera hasta que se cumpla una determinada condición, etc..
Timeouts, deposits y commitments
En lo que nos diferenciamos de los enfoques fuera de blockchain es en cómo nos aseguramos de que el contrato se cumpla. Esto significa no sólo que no se desobedezcan las instrucciones del contrato - "no pasa nada malo"-, sino también que los participantes participen y no se marchen antes de tiempo, dejando el dinero bloqueado en el contrato para siempre: "realmente pasan cosas buenas". Para ello utilizamos timeouts.
Un contrato puede pedir a un participante que haga un depósito de algunos fondos, pero obviamente el contrato no puede obligar realmente a un participante a hacer un depósito. En cambio, el contrato puede esperar un periodo de tiempo para que el participante se comprometa con el contrato: cuando ese periodo de tiempo expira, el contrato pasa a seguir unas instrucciones alternativas. Esto evita que un participante detenga el contrato al no participar, asegurando así que "las cosas sucedan".
Todas las construcciones de Marlowe que requieren la participación de los usuarios -incluidos los depósitos y las elecciones de los usuarios- están protegidas por timeouts. Por ello, es fácil ver que el compromiso asumido por un participante en un contrato es finito: podemos predecir cuándo el contrato no tendrá nada más que hacer -cuando puede cerrarse-; en este momento, cualquier fondo no gastado que quede en el contrato se devuelve a los participantes, y el contrato se detiene, o termina. Por lo tanto, los fondos depositados en el contrato por un participante no pueden quedar bloqueados para siempre: en ese momento el compromiso termina efectivamente.
Además, es fácil leer en el contrato cuándo terminará, lo que llamamos la vida del contrato: todos los participantes podrán conocer esta vida antes de participar en el contrato.
En nuestro modelo, un contrato en marcha no puede obligar a realizar un depósito o una elección: todo lo que puede hacer es solicitar un depósito o una elección a un participante. En otras palabras, para estas acciones no puede "empujar", pero puede "tirar". Por otro lado, puede realizar pagos de forma automática, por lo que algunos aspectos de un contrato Marlowe pueden "empujar" para que se produzcan algunas cosas, por ejemplo, garantizar que se realice un pago a un participante mediante la construcción de una salida de transacción adecuada.
Marlowe en acción
Estamos trabajando en una versión de producción de Marlowe en la blockchain Cardano a principios de 2021. A partir de hoy, puedes explorar Marlowe por ti mismo, ya sea descargándolo y utilizando la implementación Haskell directamente, o utilizando la herramienta de simulación en línea Marlowe Playground; ambos son cubiertos en tutoriales posteriores. En ellos también se tratarán los detalles de Marlowe, se presentarán una serie de ejemplos, se profundizará en las herramientas de Marlowe.
También hemos trabajado en el desarrollo de un conjunto de plantillas para instrumentos financieros populares tomados de la norma Actus, y somos capaces de generar contratos particulares a partir de estas plantillas según los diversos parámetros y opciones que se pueden establecer.
Como Marlowe es un DSL, podemos averiguar cómo se comportarán los contratos de Marlowe sin ejecutarlos: esto significa que podemos proporcionar valiosos diagnósticos a los participantes potenciales antes de que se comprometan con un contrato, utilizando el análisis estático. También podemos utilizar herramientas lógicas para demostrar formalmente las propiedades de los contratos de Marlowe, ofreciendo a los usuarios el máximo nivel de garantía de que sus contratos se comportan como es debido.
Dónde ir para saber más
Este tutorial cubre la última versión de Marlowe, mientras que algunos de estos enlaces cubren versiones anteriores del lenguaje y del playground.
© Copyright 2020, IOHK Revision b8f2855c.
Encuentra una copia oficial de este documento aquí:
https://alpha.marlowe.iohkdev.io/doc/marlowe/tutorials/introducing-marlowe.html
https://docs.cardano.org/projects/plutus/en/latest/marlowe/tutorials/introducing-marlowe.html
Más traducciones de Cardano en: http://CardanoForTheWorld.com/es-ES