馃嚜馃嚫 Tutoriales de Marlowe: 1. Introducci贸n de Marlowe

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 鈥渃贸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 鈥減uro鈥 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 鈥渁gn贸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 鈥渕undo 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 鈥渆mpujar鈥 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: Cardano For The World

1 Like