🇪🇸 Reducción de los costes de ejecución de Marlowe

Sumario ejecutivo

Las recientes mejoras en la eficiencia del validador Plutus de Marlowe han dado como resultado unos costes de ejecución significativamente más bajos para las transacciones de smart contract de Marlowe en la blockchain Cardano. Esto tiene dos implicaciones importantes para los usuarios de Marlowe, los diseñadores de contratos y los desarrolladores de DApp:

  1. Las transacciones de Marlowe tienen ahora tarifas más bajas y pueden incluir una lógica más compleja que antes. Una nueva versión del compilador PlutusTx reduce los costes de ejecución de los contratos Marlowe en más de un 20%.
  2. Además, el empleo juicioso del nuevo módulo Haskell PlutusTx.AsData en el código fuente del validador semántico de Marlowe ofrece otro 25% de reducción para los contratos Marlowe típicos. Especializar la forma en que el validador compara los valores multiactivos reduce aún más los costes para los contratos que implican tokens nativos.

Estos cambios en el validador semántico de Marlowe no provocan una nueva auditoría externa. Más allá de estas optimizaciones que reducen costes, los desarrolladores expertos pueden personalizar opcionalmente el validador para desactivar algunas de las comprobaciones redundantes previas y posteriores a la condición que realiza. En conjunto, estas actualizaciones permiten hacer más con Marlowe a un coste menor.

Necesidad de reducir los costes de ejecución

Al igual que el resto de validadores de smart contract en Cardano, los validadores de Marlowe están sujetos a la regla del ledger que limita la cantidad de cómputo que puede producirse en una única transacción de Plutus. Las reglas actuales limitan las transacciones a catorce millones de unidades de memoria Plutus y a diez mil millones de unidades de paso Plutus (CPU). El lenguaje Marlowe no impone límites al número de cómputos lógicos, aritméticos y contables en un contrato Marlowe o en una transacción Marlowe, por lo tanto, siempre habrá situaciones en las que un contrato pueda intentar realizar más cómputos de los permitidos en una transacción Cardano. Nuestro artículo en el blog sobre la seguridad de Marlowe ofrece ejemplos de esto, y la Guía de Mejores Prácticas de Marlowe sugiere patrones de diseño para contratos que se mantienen por debajo de estos límites de coste de ejecución. En consecuencia, hacer que el validador de Marlowe sea más eficiente dejará espacio para hacer más computación en cada transacción de Marlowe si un contrato lo requiere. Ese “presupuesto de computación” extra permite a los contratos más complejos

  • gestionar más cuentas en el estado interno de Marlowe
  • pagar a más partes a la vez
  • realizar más acciones en una sola transacción
  • realizar cálculos aritméticos y lógicos más elaborados
  • tomar más decisiones o asignar más variables a lo largo de la vida de un contrato.

Nuevas eficiencias en Marlowe

La última revisión del validador semántico de Marlowe incluye varias actualizaciones que mejoran su eficiencia. Algunos de estos cambios reducen el coste de todas las transacciones de Marlowe, mientras que otros se centran en “puntos calientes” del validador de Marlowe en los que antes resultaba especialmente caro en determinadas situaciones.

Compilar el validador Marlowe utilizando el compilador PlutusTx versión 1.15.0.0 ofrece mejoras “out-of-the-box” para todos los contratos Marlowe. Esa versión de PlutusTx incorpora las lecciones aprendidas en las épocas de Alonzo y Babbage para optimizar la compilación del código Plutus escrito en Haskell (como Marlowe) en el eficiente Untyped Plutus Core (UPLC) que se ejecuta cuando los nodos de Cardano validan las transacciones.

Como se ilustra en el histograma siguiente, para un ejemplo representativo seleccionado al azar de cien transacciones Marlowe, observamos una reducción mínima del coste de memoria del 23%, pero con reducciones superiores al 30% en algunos casos. La reducción del coste por paso es similar.

measured memory benchmark

Las últimas bibliotecas de Plutus también contienen un nuevo módulo PlutusTx.AsData que contiene código Template Haskell (TH) para crear tipos de datos algebraicos (ADT) como objetos Data en Plutus Core, en lugar de términos de sumas de productos. Las capacidades AsData de Plutus están evolucionando y es posible que con el tiempo incluyan tipos PlutusTx como Map y ScriptContext, lo que puede suponer una mejora aún mayor del rendimiento. Envolver una de las ADT clave de Marlowe, Case, con la función TH asData ofrece algunas mejoras espectaculares en la deserialización que convierte los bytes brutos del ledger que representan un contrato Marlowe o una acción sobre él en las estructuras de datos semánticamente significativas del lenguaje Marlowe. Los dos "gráficos de llama’’ siguientes, obtenidos utilizando las herramientas de perfilado de Plutus, para un ejemplo de transacción Marlowe, muestran cómo la “montaña” (1a) de código de deserialización en el lado izquierdo del gráfico más a la izquierda (donde no se emplea asData) se convierte en una pequeña “colina” (1b) en el gráfico más a la derecha (donde se emplea asData). Otros detalles de los gráficos muestran la secuencia de llamadas a funciones y costes dentro de la UPLC. Los beneficios de asData dependen tanto de la implementación Plutus de Marlowe como del contrato Marlowe específico que se esté ejecutando. Aunque al principio del perfil redujo la montaña a una pequeña colina, creó una sobrecarga adicional en partes posteriores del perfil. En general, asData empuja la carga de un cálculo más cerca de donde se utiliza un valor, en un sentido burdo haciendo la evaluación menos estricta y más perezosa.

Uso de memoria antes de la optimización|3840x1487](upload://6PF0AVB1dNP9sZj8leNL50AOHKK.png) Uso de memoria después de la optimización|3840x1695](upload://vuZcTLgq6NpBM3HL2KzA6vGxR79.png)

Los contratos más grandes con más acciones posibles tienden a beneficiarse más de esta optimización, y algunas transacciones se benefician muy poco de ella. Normalmente, la reducción de costes oscila entre el 10% y el 50%.

Comprobar la validez de una transacción Marlowe en la que intervienen varios activos nativos de Cardano implica muchas comparaciones de identificadores y cantidades de activos nativos para garantizar la seguridad y el correcto funcionamiento del smart contract. Acumulativamente, estas comparaciones, que corresponden a la segunda y a la última de las “colinas” (2a y 2b) en los gráficos de llamas anteriores, pueden ser bastante costosas. Muchos contratos de Marlowe pagan un solo activo a la vez, por lo que esta optimización sustituye algunas de las comprobaciones exhaustivas por otras más sencillas en esos casos de un solo activo. Una revisión directa del validador semántico de Marlowe aprovecha este caso especial realizando la comparación más barata en las situaciones en las que se aplica. Para los casos de referencia, esto se traduce en una reducción media de costes de alrededor del 4%, pero hay bastantes de los casos de referencia en los que la reducción es el doble.

Las eficiencias computacionales enumeradas anteriormente también consiguen reducir el tamaño del validador Marlowe de aproximadamente 12 kilobytes a 11 kilobytes. Eso reduce la cantidad de ada almacenada en el UTXO de referencia que contiene la versión en cadena del validador Marlowe.

Impacto global

Combinadas, las últimas verificaciones del validador Marlowe mejoran su rendimiento en el peor de los casos en un 15% y su rendimiento típico en un 50% sin sacrificar la seguridad. Los gráficos siguientes muestran (en escala logarítmica) el coste de memoria antes (eje horizontal) y después (eje vertical) de las revisiones, en relación con los límites del protocolo, para las cien transacciones Marlowe de referencia. Las líneas vertical y horizontal en 1,0 muestran los límites del protocolo. Las transacciones por encima o a la derecha, respectivamente, de estas líneas son demasiado costosas para ejecutarse en la red principal. Dado que todos los puntos caen por debajo de la línea diagonal, todas las transacciones son más baratas con el validador revisado. Los puntos cercanos a la línea diagonal representan transacciones con mejoras relativamente menores, mientras que los puntos situados más a la derecha de la línea diagonal representan mejoras drásticas. Los puntos a la derecha de la línea vertical roja representan transacciones antes imposibles, pero que ahora son posibles dentro de los límites del ledger. El nuevo validador de Marlowe está disponible en la versión 1.0.0 de Marlowe Runtime.

WebsiteTwitterGitHubDiscordCardano ForumCardano Stack Exchange


Traducción al español de “Lower Marlowe execution costs”, escrito por Brian Bush, Ingeniero de software de Marlowe, en enero 25 de 2024.


Notas del traductor

  • Corchetes del traductor.
  • Asuma que todo enlace apunta a un contenido en idioma :uk: inglés.
  • :es: Indica que el enlace apunta a un contenido en idioma español.

Considere suscribirse a las siguientes fuentes de información en español de Cardano según su interés.