Marlowe

De ALDEA WIKI
Ir a la navegación Ir a la búsqueda
Marlowe Logo

Marlowe es un lenguaje de dominio específico (DSL en inglés) para escribir contratos inteligentes de una forma fácil y segura en la red de Cardano.

Enfoque

Si bien inicialmente está pensado para funcionar en Cardano, también puede ser implementado en otras redes blockchain al ser un lenguaje agnóstico de la plataforma. Marlowe está principalmente enfocado para personas que son expertas en el campo de los contratos financieros, pero que no poseen en igual medida habilidades y experiencia suficientes en el desarrollo de software. Por esta razón, el lenguaje está compuesto por un número acotado de construcciones básicas haciendo que sea sencillo de aprender. Asimismo gran parte de su diseño evita la escritura de errores y fallas en los contratos inteligentes, además cuenta con variadas herramientas que prueban la corrección y simulan el comportamiento del código. Con esto se disminuye la curva de aprendizaje requerida para programar contratos inteligentes con los debidos estándares de seguridad, así instituciones financieras pueden desarrollar y desplegar fácilmente instrumentos personalizados para sus clientes.

El Modelo Marlowe

Resumen de la vida de un contrato Marlowe

Un contrato inteligente es la representación de un acuerdo entre dos o más partes, en este se codifican los resultados posibles para cada uno de los términos y condiciones del pacto. Un contrato describe la serie de pasos que se deben realizar conforme a cómo vaya evolucionando el acuerdo, para el caso de Marlowe, en cada paso se define la acción a realizar junto a un sub-contrato que describe cual es el paso siguiente, siendo un contrato Marlowe en realidad una cadena de sub-contratos mas pequeños. Los usuarios interactúan con el contrato inteligente a través de sus billeteras digitales, el cual genera una cuenta interna para cada parte involucrada. Según sea el estado del contrato se pueden activar como resultado cursos de acción alternativos. Al momento en que una cláusula resulta ser verdadera, el contrato automáticamente ejecuta la acción correspondiente como una transacción en una red blockchain, y así sucesivamente con todas las disposiciones del acuerdo hasta cerrar el contrato. Si por alguna razón alguna condición no se cumple o caduca, cada parte recibe un reembolso de lo que le corresponde y se cierra el contrato.

Un diseño simple: Seis constructores básicos

Marlowe se ha diseñado como un lenguaje sencillo y para que sea de fácil aprendizaje. De este modo, los contratos están compuestos por solo seis elementos básicos llamados "constructores", estos son subcontratos que en su combinación pueden describir una variedad de contratos financieros. Estos constructores en resumen son:

  • Pay: Efectúa un pago desde una cuenta de un participante a otro por un monto determinado. Si el saldo es negativo no se realiza el pago y si es insuficiente se realiza un pago parcial.
  • Close: Finaliza el contrato realizando el reembolso correspondiente de cada parte desde su cuenta interna en el contrato a sus billeteras. Necesariamente todo contrato Marlowe finaliza con este constructor.
  • If: Si una condición del contrato se cumple se ejecuta un subcontrato A, si la condición no se cumple se ejecuta un subcontrato B.
  • When: Es un subcontrato que para ser ejecutado espera por un tiempo determinado una o mas acciones externas, si la acción no ocurre en el tiempo indicado caduca.
  • Assert: Si una condición es falsa emite una alarma.
  • Let: Permite registrar un valor en un tiempo en particular y usando un nombre como identificador.

Como se puede observar un contrato Marlowe está compuesto por una pequeña cantidad de constructores permitiendo que el desarrollo del contrato inteligente se mantenga simple. Una explicación mas detallada de estos constructores pueden verse en la documentación oficial de Cardano.

Un diseño seguro: Propiedades de los contratos Marlowe

Respecto a los contratos inteligentes es importante que estos sean implementados adecuadamente, pues una vez desplegados en la red estos no pueden ser corregidos posteriormente. Algunas de las fallas frecuentes que surgen por una indebida implementación de los contratos inteligentes, puede ser por ejemplo que los fondos bloqueados por siempre, o bien, que un agente ajeno al contrato explote alguna vulnerabilidad presente en este para robar los fondos. Una red blockchain es una base de datos inmutable por lo que verificar la corrección del código es fundamental. Por esta razón, el lenguaje Marlowe por diseño conduce de diversos modos al programador a crear contratos correctamente implementados y provee herramientas para probar la seguridad del código. Existen varias propiedades del lenguaje que ejemplifican lo anterior:

  • Todos los fondos tienen por defecto un dueño: Al finalizar un contrato los fondos siempre se reembolsan a los dueños correspondientes. Evitando la posibilidad de que por error queden los fondos bloqueados en contrato.
  • Preservación del dinero: La cantidad de dinero total que se deposita al contrato debe ser igual a la cantidad total que se reembolsa al contrato.
  • Toda acción que espera caduca: Para evitar que un contrato se mantenga ejecutando por siempre, las acciones que requieren una espera tienen fecha de caducidad. Esta es otra manera de prevenir que los contratos dejen bloqueados los fondos.
  • Los contratos pueden ser usados a lo sumo una vez.

Estas son algunas de las propiedades del lenguaje que conducen a los programadores a escribir contratos inteligentes con ciertas garantías. Estas propiedades se encuentran formalmente demostradas y plasmadas en el diseño de Marlowe, esto quiere decir que un programador nunca podrá implementar contratos que contravengan las propiedades antes mencionadas. Como puede notarse existen varias restricciones que limitan la expresividad que podrán lograr los programadores con Marlowe, sin embargo, estas limitaciones se intercambian por otras ventajas a nivel de seguridad. En la red de Cardano si se necesita crear contratos mas sofisticados se puede utilizar el lenguaje Plutus, este posee muchas mas expresividades pero a diferencia de Marlowe no posee las restricciones que evitan incorrectas implementaciones.

Marlowe Playground

Interfaz Gráfica

Este es un entorno de desarrollo web interactivo para crear contratos inteligentes. Con esta herramienta los usuarios pueden diseñar contratos inteligentes, revisar las propiedades implementadas y simular cómo estos se comportarán una vez desplegados en la red. Las capacidades de esta herramienta busca hacer del desarrollo de contratos inteligentes una tarea sencilla, segura y con el respaldo de pruebas rigurosas en términos de corrección. Una utilidad interesante de Marlowe Playground es su interfaz gráfica basada en la herramienta Blockly; donde cada componente del contrato está representado por bloques que pueden combinarse a modo puzzle por el usuario, la idea es ayudar al programador con elementos visuales para el aprendizaje del lenguaje. Últimamente, el entorno de desarrollo también permite verificar si el contrato satisface las propiedades deseadas por medio de herramientas de análisis estático y verificación formal del código.

Bibliografía

"Cardano Hackathon | Presentación de Marlowe - Creando contratos inteligentes financieros", Hernan Rajchert. https://youtu.be/S94PTPb6SWQ

Cardano Documentation, Learn About Marlowe. https://docs.cardano.org/marlowe/learn-about-marlowe

Cardano documentation, Learn About Marlowe. https://docs.cardano.org/marlowe/marlowe-language-guide

Marlowe documentation. https://play.marlowe-finance.io/doc/marlowe/tutorials/introducing-marlowe.html

Domain specific languages, Jet Brains's Blog. https://www.jetbrains.com/es-es/mps/concepts/domain-specific-languages/


v1.0 - Escrito por ASH, revisado por Martin-ITZA - 27-09-2022