🇪🇸 Investigación EMURGO - Patrones de Diseño de Alto Nivel | EMURGO 18 Jun 2020

:es: Transcripción al español de “EMURGO Research - High Level Design Patterns

Publicado en el canal de Youtube de EMURGO el 18 de Junio de 2020

Enlace a la versión doblada al español


Hola, este es Roberto Kornacki del departamento de investigación y desarrollo en Emurgo. Hoy vamos a estar mirando nuestra última nueva iniciativa de Emurgo Investigación, que es nuestro empuje para ayudar a desarrollar tanto el código abierto como el ecosistema blockchain en su conjunto. De modo que, como la mayoría de ustedes sabrán, estamos en las pistas de Shelley y luego prontos a tener Goguen, contratos inteligentes completos y recientemente, con nuestro anuncio como Emurgo, de trabajar con Ergo, para poder iniciar nuestra exploración en el mundo de contratos inteligentes basados en UTXO, es realmente un tesoro de diseño, patrones, descubrimiento, nuevos modelos y muchas cosas que aún no han sido tocadas y descubiertas, porque la mayoría del ecosistema blockchain, sin importar el proyecto, todos siguen a Ethereum y Ethereum está basado en Account. Los modelos basados en Account son geniales para contratos inteligentes de alguna manera y la mayoría de las personas ni siquiera pensó que fuera posible tener contratos inteligentes completos en sistemas basados en UTXO, sin embargo ahora, con esta última generación de blockchains, sabemos que es posible y ahora está llegando a su realización. Debido a ello, hay tanto por encontrar y ser descubierto y por lo tanto esta es una de las primeras cosas que realmente estamos impulsando desde Emurgo Investigación, es averiguar, ¿cómo construimos protocolos de contratos inteligentes en sistemas UTXO?, esto puede parecer simple, pero el modelo basado en Account de Ethereum es muy parecido a la programación imperativa, donde cambias de estado mutando, pero el modelo UTXO, en cambio, es mucho más funcional en diseño donde, se destruye un viejo UTXO y luego construyes uno nuevo, así que de esa manera destruyes todo estado viejo y creas un nuevo estado. Esto tiene un montón de implicaciones y por eso no podemos simplemente tomar contratos inteligentes o diseños de contratos inteligentes de Ethereum y sólo pegarlos con nuevo código en Plutus o lo que sea, en el modelo UTXO. Así que uno de los negativos ahí es que se necesitan algunos arreglos, un recableado, un replanteamiento, de cómo hacer un montón de cosas que previamente sabíamos. Sin embargo, también hay muchos beneficios que son imposibles de obtener en el modelo basado en Account.

Así que, con todo eso dicho y hecho, me gustaría presentarles hoy esta primer pieza de investigación que estamos publicando, llamada patrones de diseño de alto nivel en el modelo UTXO extendido o en sistemas UTXO extendidos. Esta fue una pieza que yo escribí y lanzamos el 9 de Junio. Así que ahora que te he dado algo de contexto, lo que este documento de aquí hace es traerte, al nivel más alto, abstrayendo cualquier especificación blockchain y el meollo de la cuestión, pero mirando las bases de cómo los contratos inteligentes basados en UTXO funcionan, lo que es realmente posible y luego qué tipo de protocolos son posibles además de estos patrones de diseño. Así que, para mantener las cosas simples, la introducción va esencialmente a lo que decía aquí, pero también va más en el hecho de que todos estos contratos inteligentes pueden ser Turing Complete a través de las transacciones, un poco de antecedentes de los autómatas y máquinas de estado.

En resumen, cuando estás diseñando un contrato inteligente basado en UTXO, destruyes un UTXO para crear uno nuevo, lo que puedes hacer es bloquear tu UTXO inicial en un contrato y cuando creas el nuevo UTXO, puede estar en el mismo contrato o en un contrato diferente y eso tiene mucha importancia. Así que en esencia, lo que hacen estos patrones de diseño es trazar un número de patrones que te permiten codificar diferentes protocolos, por ejemplo este primero, protocolos lineales, estos te permiten tener un protocolo de contrato inteligente, que va desde la fase 1, o bien vuelve a sí mismo, un UTXO gasta de nuevo en el mismo contrato, en la misma fase o etapa. O potencialmente pasa a una nueva fase, llamada fase 2 y luego la fase 2 puede hacer lo mismo, en la fase 3 o de vuelta a sí mismo y la fase 3 puede gastar en sí misma o el protocolo termina, cuando el protocolo termina, eso significa que las monedas y los datos dentro del UTXO pueden entonces gastarse o repartirse arbitrariamente, con quien sea la persona que tiene el derecho de hacerlo.

Así que esto es un protocolo lineal, y este es esencialmente uno de los tipos más simples de protocolos de contratos inteligentes que son posibles en blockchains basadas en UTXO. Algunos casos de uso para esto, realmente varía, porque hay mucho que puedes hacer con incluso el más simple de estos. La naturaleza recursiva, donde puedes remontar a la misma fase, en cualquiera de estas fases, te permite hacer acumulación de datos, por ejemplo, así en la fase uno, podrías tener esta etapa en que los oráculos presentan datos, así que cada oráculo gasta la caja que lo pone de nuevo en la fase uno. Y luego, cuando tienes dos o tres o cuatro oráculos diferentes, todos presentan sus datos, entonces desde la fase uno podemos ir a la fase dos, así que esto te permite separar cómo funciona tu contrato inteligente en dos fases. Y puedes tener votación o cualquier otro tipo de acumulación de datos de manera secuencial, cualquier tipo de protocolos como ese puede usar un protocolo lineal.

Así que a continuación tenemos protocolos recursivos y estos son similares a los protocolos lineales, sin embargo, tienen la capacidad de recurrir, así que desde cualquier fase del protocolo, tienes la habilidad de ir hacia atrás a una fase previa, así que la naturaleza recursiva, de la recursividad en general o una especie de bucle que puedes conocer de la programación imperativa, esencialmente tienes la habilidad de hacer computación infinita dentro de tu protocolo. En esta sección, lo repaso ligeramente, un ejemplo que te permite proporcionar respuestas sin revelar la respuesta, para que otros no puedan robar tu respuesta. Así que en blockchain públicas, siempre que posteas algo, primero va a la mempool, así que si publicas texto claro, digamos que estás respondiendo a una pregunta, revelando un número de pin o cualquier cosa de ese tipo. Bueno, otros pueden ver tu transacción en la mempool, copiar tu pin, postear otra transacción y luego potencialmente tienen el derecho de gastar el UTXO o cualquiera sea el tipo de protocolo, podrían ser los primeros en proporcionar la respuesta y podrían adelantarse a ti. Así que con protocolos recursivos, lo que es posible, es esencialmente tener un protocolo que primero requiere que las personas publiquen el hash de su respuesta y luego la respuesta que coincide con el hash, esto les permite bloquear su respuesta, antes de que realmente la proporcionen públicamente en la cadena. Entonces con un protocolo recursivo lo que puedes hacer es, por ejemplo, tener una pregunta de matemáticas, cuál es la respuesta de 42 por 42 y por lo tanto tienes, digamos, cien Ada, si alguien afirma que tiene la respuesta, entonces pasan la fase uno UTXO y lo llevan a la fase dos y cuando lo pasan de la fase uno del UTXO, lo que hacen es proporcionar el hash de su respuesta que van a revelar. Así que una vez que publican eso, sólo ellos están bloqueados como la persona que puede proporcionar la respuesta revelada en texto claro, entonces, cuando revelan la respuesta, el contrato inteligente comprueba, ¿esto es lo mismo que el hash?, sí, ¿es la misma persona?, sí, perfecto, entonces la persona puede retirar sus fondos. Sin embargo, si no lo han hecho, entonces todo el protocolo recursa, así que si la persona mintió y dijo que tenía una respuesta, pero la respuesta estaba equivocada o no tenía la respuesta, simplemente publicó un hash aleatorio, entonces, lo que es posible para un protocolo recursivo es ir desde esta fase dos, pudiendo volver a la fase uno y por eso tienes esta naturaleza recursiva para tu protocolo, que te permite sólo seguir yendo en círculos hasta que una cierta declaración “si”, un cierto control, es validado como verdadero. Así esto funciona como recursión, donde se necesita algún tipo de caso en el que la recursión se detiene.

Así que con estos dos, muchas cosas son realmente posibles, con protocolos lineales y protocolos recursivos. Sin embargo hay mucho más, así que a continuación tenemos protocolos de ramificación, que son similares a puertas “o”, que puedes conocer y por lo tanto, esencialmente, desde cualquier protocolo de contrato inteligente puedes tener una fase uno y una fase dos, como aquí, que es un protocolo lineal, pero entonces puedes expandirte en una forma “o”. Así que a partir de la fase dos tendrás algún tipo de declaración que especifica que un protocolo de contrato inteligente puede ir o bien a la fase 3a o a la fase 3b. Esto entonces te permite tener mucho más poder expresivo diseñando y construyendo tus contratos inteligentes. Lo que también es genial, como puedes ver aquí, de la fase 1 a la fase 2, es un protocolo lineal, mientras que aquí en el final tienes un protocolo de ramificación. Así que puedes mezclar y combinar estos protocolos dependiendo de tu contrato inteligente, tu construcción y lo que es incluso más interesante acerca de esto, es que es posible, por ejemplo, para la fase 3a, también recursar de vuelta a la fase 1. Lo que significa que puedes tener un protocolo de ramificación recursivo para tus contratos inteligentes. Esto puede ser útil si tienes una situación en la que alguien requiere una decisión, y su decisión cambia la forma en que el resto del contrato inteligente está destinado a funcionar, así que a menudo esto es para lo que se usan protocolos de ramificación.

A continuación, tenemos protocolos paralelos, los protocolos paralelos son interesantes, porque estos actúan como puertas “y” en lugar de puertas “o”. Con ramificaciones sólo creas un nuevo UTXO y ahí es donde se mueve todo el protocolo. Con los protocolos paralelos creas una puerta “y”, así que creas dos o más UTXOs dentro de esta nueva fase. Así que en nuestro ejemplo aquí, tenemos de la fase 1 a la fase 2 y luego de la fase 2, tienes el protocolo yendo a la fase 3a y fase 3b. Lo que esto hace es que te permite paralelizar la acción de los usuarios en el protocolo. Así que, esto en realidad te permite tener escalabilidad en la capa del contrato inteligente, hasta el rendimiento de la blockchain y esto abre un montón de potencial, puedes usar cosas similares como esta para cadenas laterales o potencialmente canales de estado. Y lo que esto permite es a múltiples personas, en el mismo contrato inteligente, realizar acciones en la exacta misma franja o bloque y luego, después de que realizaron sus sub-protocolos, pueden luego reincorporar sus estados, monedas y tokens de nuevo juntas en un solo UTXO, por lo tanto recogiendo los estados del protocolo de contrato inteligente. Esto es algo que era imposible en el mundo basado en Account de Ethereum, en el que ahora nos estamos moviendo hacia el descubrimiento de nuevas posibilidades como esta en el modelo UTXO extendido. Esto es muy emocionante y hay muchos casos de uso potenciales para paralelizar votación en DAOs por ejemplo, paralelizando la presentación de fondos a una aplicación DeFi, por ejemplo. Hay muchos casos de uso potenciales para esta naturaleza paralela.

Por último, el último de los cinco tipos de protocolos que he esbozado en esta pieza, son protocolos de computación tercerizados. Así que, este es el más complicado de todos y por eso se dejó para el final. Con protocolos de computación tercerizados, esencialmente tienes la misma idea de los protocolos paralelos, sin embargo, mantienes el estado de tu contrato inteligente en un UTXO central, ¿qué significa eso?, digamos que tienes una aplicación DeFi o una DAO y el estado de la aplicación DeFi o la DAO, digamos los votos anteriores para la DAO, se mantienen siempre en este UTXO central, este UXTO central siempre existirá, y en cualquier momento que se gaste, siempre se gastará de nuevo en el mismo contrato. Sin embargo, como en las versiones paralelas, también funcionará como una puerta “y” donde este UTXO central siempre existirá y es posible que otro protocolo tercerizado exista. Así que, por ejemplo, en este primer protocolo tercerizado, este UTXO central gastará en sí mismo y generará este sub protocolo lineal, que tiene tres fases como puedes ver, y esencialmente lo que esto podría ser es, digamos, un comité en la DAO, donde hay tres, cuatro, cinco personas y tienen un proceso de votación que tiene una prioridad más alta que el resto de las personas dentro de la DAO, porque tal vez fueron elegidos, por ejemplo. Así que estos cinco actores que desean votar sobre algún tipo de propuesta, pueden tercerizar su voto en un sub-protocolo como este y puede ser en el primer protocolo tercerizado. Una vez que el protocolo tercerizado llega a su fin, como puedes ver aquí en la fase tres, lo que esto significa es que estos estados, los resultados de la votación de los cinco actores, se llevan de nuevo al UTXO central y actualiza el estado por completo. Esto te permite también tener otros protocolos tercerizados, así que mientras esta votación está en marcha, en la DAO, al mismo tiempo, en los mismos bloques, en sus propios UTXOs, un segundo protocolo tercerizado, sub protocolo, podría ser iniciado para una votación por un comité diferente por ejemplo. Y así de esta manera, puedes tener protocolos tercerizados, lineales, recursivos, ramificados, paralelos en la parte superior de los protocolos de computación tercerizados, que te permiten tener un modelo muy poderoso y expresivo para construir estos protocolos de contratos inteligentes y permitiendo que se paralelicen en el nivel de contrato inteligente, para que mientras que la blockchain permita rendimiento para soportar las transacciones, puedes de hecho, maximizar todos los bloques para un único contrato inteligente. Esto antes nunca había sido realmente posible, debido al modelo basado en Account y su naturaleza mutable. Ahora con UTXOs, estamos empezando a descubrir estos patrones de diseño completamente nuevos, como se puede ver aquí, que proporcionan, no sólo nueva funcionalidad, pero a menudo precios más baratos, porque eres capaz de separar los datos de la computación al tercerizar los datos en su propio UTXO, por ejemplo. Y permitiendo nuevas posibilidades con contratos inteligentes potencialmente funcionando a través de cadenas laterales, en todo tipo de nuevas posibilidades que antes nunca estuvieron realmente disponibles para los desarrolladores de contratos inteligentes.

Así que con todo eso dicho, eso, en un período de tiempo no muy corto, es esta primera pieza de investigación, patrones de diseño de alto nivel en sistemas UTXO extendidos. Si estás interesado en aprender mucho más sobre esto, este documento tiene todo en profundidad razonable y puedes encontrar un enlace a esto en el recuadro de descripción abajo. Así que los animo a hacer clic, mirarlo, leer sobre ello y realmente te animo a que empieces a imaginar lo que es posible. El modelo UTXO para contratos inteligentes es muy naciente y tiene tanto potencial que creo que es casi criminal que nadie haya investigado antes este material. Bitcoin comenzó como un sistema basado en UTXO y por alguna razón Ethereum saltó a una base Account, porque parecía más fácil, parecía mejor. Pero ahora estamos empezando a ver todo los negativos, todos los puntos de tropiezos que Ethereum ha alcanzado debido a este viejo modelo. Y por eso ahora vamos a regresar a las raíces blockchain, regresar al modelo UTXO y estamos descubriendo nuevas posibilidades que nadie antes realmente había imaginado que eran posibles. Así que si eso suena interesante para ti, altamente te animo a que leas este documento y comiences a explorar dentro del mundo de contratos inteligentes basados en UTXO.