🇪🇸 La concurrencia y todo lo demás: Los contratos inteligentes de Cardano y el modelo eUTXO

:cuba: :es: Traducción de Concurrency and all that: Cardano smart contracts and the eUTXO model publicado en el blog de IOG.

El modelo eUTXO de Cardano proporciona un entorno seguro y versátil para procesar múltiples operaciones sin fallos del sistema

image

Cardano es una blockchain basada en UTXO, que utiliza un paradigma de programación para aplicaciones descentralizadas (DApps) diferente de otras blockchains basadas en cuentas como Ethereum. La especificación que utiliza Cardano es el modelo Extended Unspent Transaction Output (eUTXO) introducido por la actualización de Alonzo. El modelo eUTXO ofrece una mayor seguridad que permite la predictibilidad de los costes de ejecución de los contratos inteligentes (sin sorpresas desagradables) y, como resultado, ofrece un enfoque diferente de la paralelización.

eUTXO hereda el diseño por ramas del modelo UTXO (Bitcoin), donde una rama es por definición una secuencia de transacciones que requiere una secuencia de validaciones. Para dividir la lógica en diferentes ramas y aplicar más paralelismo, es esencial construir DApps y otras soluciones utilizando múltiples UTXOs. Esto proporciona beneficios en términos de escalado, al igual que el desarrollo de los servicios de Bitcoin requiere dividir una billetera en sub-billeteras.

Las DApps construidas sobre Cardano no están limitadas a una transacción por bloque. De hecho, el presupuesto del bloque (es decir, el número máximo de transacciones que puede contener) permite la ejecución de cientos de transacciones simples y de varios scripts complejos. Sin embargo, el modelo eUTXO permite gastar la salida de una transacción sólo una vez. Dado que los usuarios pueden enfrentarse a problemas de contención al intentar acceder al mismo UTXO, es importante utilizar muchos UTXO diferentes. Tenga en cuenta que esto es importante a menos que un diseño de este tipo se beneficie de un ordenamiento estricto de los clientes. Los conjuntos de UTXOs pueden utilizarse para implementar patrones de diseño que incluyan semáforos. Además, diferentes usuarios pueden interactuar con un contrato inteligente sin ningún fallo de concurrencia. Esto se debe a que un contrato inteligente puede manejar un número de UTXOs diferentes que conforman su estado actual y metadatos off-chain que permiten interpretar esos UTXOs.

Hacer las cosas en paralelo

Las blockchain logran la inmutabilidad y la transparencia del procesamiento de las transacciones de manera diferente. Cualquier sistema de blockchain debe tener un conjunto de propiedades para satisfacer la necesidad cada vez mayor de procesar las operaciones de forma segura y a la vez rápida, llamadas:

  • Procesamiento: el número de operaciones que un sistema puede realizar en un periodo de tiempo determinado. Esto se refiere, por ejemplo, al número de transacciones o contratos inteligentes procesados en un segundo.

  • Rendimiento: la rapidez con la que funciona el sistema. El rendimiento mide el tiempo de ejecución de las transacciones o de los contratos inteligentes.

  • Escalabilidad - la capacidad del sistema para realizar múltiples operaciones sin sobrecargar la red o influir en las propiedades de rendimiento.

Aumentando el paralelismo, podemos en última instancia mejorar el rendimiento del sistema manteniendo el rendimiento de las operaciones individuales, pero este tipo de escalabilidad siempre estará limitada por el grado de contención.

En cuanto a la escalabilidad, también distinguimos propiedades del sistema como la concurrencia, el paralelismo y la contención. La concurrencia es esencial para permitir que varios actores progresen en una determinada tarea sin interferir entre sí. El paralelismo permite ese progreso al mismo tiempo sin ninguna interferencia. La contención se produce cuando esos múltiples actores interfieren entre sí mientras trabajan de forma concurrente o paralela.

Entendiendo la concurrencia

La concurrencia puede o no mejorar el rendimiento, el procesamiento, o la capacidad de respuesta de un sistema. La cantidad de concurrencia limita el número máximo de operaciones simultáneas que se pueden realizar.

Para obtener mejoras reales de rendimiento en una blockchain basada en UTXO, los procesadores u otros actores deben ser capaces de realizar múltiples acciones simultáneamente. Cuanto mayor sea el nivel de concurrencia, mayor será el máximo paralelismo posible. Este enfoque se traduce entonces en una mejora del rendimiento y de la producción. También proporciona ventajas significativas sobre los sistemas basados en cuentas (como Ethereum).

El despliegue de DApps en las blockchain UTXO es diferente

El enfoque de Cardano para el despliegue de DApps es diferente y por lo tanto requiere una curva de aprendizaje y un enfoque diferente. Esto es como trabajar con diferentes lenguajes de programación: hay un objetivo - desplegar una solución, pero, muchos lenguajes de programación a utilizar para este propósito.

Maximizar la concurrencia es una habilidad que hay que aprender: los desarrolladores tienen que escribir el código de manera que se restrinjan mucho las oportunidades de contención (por ejemplo, evitando los estados compartidos y las dependencias accidentales). A continuación, el sistema debe traducir esta concurrencia en paralelismo. Algunos desarrolladores ya han identificado formas de abordar esto, mientras que otros todavía están desarrollando soluciones. Trasplantar simplemente las lecciones aprendidas en otra blockchain no funcionará; aunque la curva de aprendizaje es un poco más pronunciada, los resultados hacen que merezca la pena.

En cualquier caso, es importante entender que para desplegar una DApp escalable en Cardano, un desarrollador no puede limitarse a utilizar un contrato adaptado de Ethereum. Cardano se basa en el modelo UTXO; no está basado en cuentas. Y esto significa que un único estado en la cadena no cumplirá con la propiedad de concurrencia en Cardano. En su lugar, las DApps deben dividir su estado on-chain entre muchos UTXOs. Esto aumentará la concurrencia en su aplicación, permitiendo así un mayor rendimiento.

Nuestro equipo de educación ha compartido previamente una implementación simple de DEX de estilo AMM en el curso Plutus Pioneer. Si bien esto es útil para fines de enseñanza, esta arquitectura no soportaría directamente una DEX comercial donde se requiere un enfoque de libro de órdenes y concurrencia adicional. Un desarrollador que quiera desplegar en la red principal de Cardano tendría que mejorar la escalabilidad de la arquitectura en consecuencia.

Propusimos una solución en nuestro reciente documento sobre la stablecoin Djed. Para la implementación de Djed en Cardano, se favorece un patrón de modelado de libro de órdenes en el que un creador de órdenes es responsable de enviar cualquier orden de acuñación o quema al contrato inteligente de stablecoin, con una tarifa de incentivo adicional impuesta a cada posible comprador o vendedor de stablecoins y monedas de reserva. También se utilizan varios mecanismos de seguridad -mediante el uso extensivo de tokens no fungibles (NFT)- para garantizar la unicidad de las transacciones, la corrección de cada orden enviada, y para evitar ataques frontales. Los tokens NFT también se utilizan para informar de las órdenes de acuñación y quema exitosas o fallidas. En breve publicaremos un artículo más completo sobre este tema.

Para aprender más sobre la escalabilidad, puedes leer cómo diseñar una aplicación Plutus escalable y descubrir cómo organizar DApps en Cardano utilizando patrones de libro de órdenes. Los desarrolladores también han presentado enfoques concurrentes y deterministas para la arquitectura de contratos inteligentes eUTXO que podrían considerarse como una generalización de los pasos de la máquina de estado paralela introducidos en el documento Hydra para realizar máquinas de estado de varios pasos. Otros desarrolladores y miembros de la comunidad también han publicado documentos, vídeos, artículos e hilos útiles en Twitter que describen sus enfoques. Es una brillante lección de cómo la comunidad seguirá desarrollando sus propias soluciones innovadoras, a medida que los enfoques se estandarizan con la madurez de la plataforma.

Avanzando

El evento del hardfork de Alonzo introducirá la producción principal de bloques de Plutus 1.0. Este es el comienzo del crecimiento del ecosistema. Aunque todavía es pronto, la red de pruebas Alonzo permite a nuestros desarrolladores evaluar las propiedades del sistema y construir DApps escalables por adelantado, preparando su lanzamiento en la red principal. Decenas de proyectos ya han estado trabajando con instancias locales de entornos Plutus. Dado que la red de pruebas pública principal pronto soportará contratos inteligentes, esperamos un aumento significativo de la actividad en las próximas semanas y en los meses venideros. A finales de este mes, la cumbre de Cardano (25 y 26 de septiembre) mostrará muchos de estos proyectos, además de proporcionar importantes actualizaciones sobre la hoja de ruta de los contratos inteligentes y la continua evolución de la tecnológica. Los eventos para desarrolladores, los hackathons y, por supuesto, los resultados del Proyecto Catalyst seguirán aportando nuevas herramientas y abstracciones a este ecosistema de desarrolladores en rápido crecimiento.

Si eres un desarrollador, asegúrate de unirte a nuestra comunidad de Discord y participa en el Proyecto Catalyst si quieres financiar tu proyecto.

Me gustaría agradecer a Lars Brünjes, Jann Müller y Manuel Chakravarty, por su aportación técnica y su apoyo durante la preparación de este blog.