🇪🇸 Oráculo Marlowe para Cardano | IOG 7 Jul 2023

:es: Transcripción al español de “Marlowe Oracle for Cardano”

Publicado en el canal de Youtube de IOHK el 7 de Julio 2023

Enlace a la versión doblada al español


Hola, soy Brian del equipo de Marlowe. Voy a realizar una demostración de un Oráculo genérico que se puede utilizar con cualquier contrato Marlowe. Lo que hace este Oráculo es observar la blockchain en busca de oportunidades para informar datos y, cuando encuentra dicha oportunidad, crea una transacción para informar los datos al contrato Marlowe.

Lo primero que hay que analizar es cómo encuentra la oportunidad para contribuir con los datos. Aquí estamos viendo una vista en formato Blockly de un fragmento de un contrato Marlowe. El fragmento del contrato aquí es una opción, que es una entrada al contrato Marlowe. El nombre de la opción es “Ada GBP”, que representa el precio de ADA en libras. El propietario de la opción es la dirección real del Oráculo. También tenemos un rango muy amplio de límites para que se informen los datos. Básicamente, esto es una entrada a un contrato para una conversión de precio de una moneda específica de una parte particular, y se presenta en un rango.

Lo que hace el Oráculo en realidad es buscar bloques que tengan este patrón. Específicamente, busca si se menciona como propietario de la opción. Si el Oráculo se menciona como propietario de la opción, verifica qué símbolo se solicita y, si entiende ese símbolo y conoce una fuente de datos para él, buscará los datos. En el ejemplo que estamos utilizando, vamos a buscar los datos en CoinGecko y luego los informará en el contrato.

Lo que vamos a hacer aquí es poner algunos datos en la blockchain y comenzar el Oráculo. Vamos a enviar un par de transacciones. En el panel superior, se muestra el registro del nodo de Cardano, donde se pueden ver las transacciones que se agregan y eliminan a medida que se confirman. Aquí tenemos un bucle que creará tres contratos Marlowe diferentes que implican entradas de Oráculos. El primero será para la tasa de fondos nocturnos de la Reserva Federal de Nueva York, luego obtendremos el precio de ADA en euros y el precio de Ether en Bitcoin desde CoinGecko. Este pequeño script se encuentra en el repositorio de Marlowe y simplemente crea algunos contratos pasados ​​simples. En un contrato real, lo diseñarías tú mismo e incluirías el bloque que mostré. Todos estos contratos son contratos muy sencillos que toman entradas de un propietario de opción con el símbolo de opción que vimos en el bloque.

Ahora tenemos esos contratos en la blockchain y vamos a cerrar este panel. Luego, vamos a iniciar el Oráculo. Le decimos en qué red estamos trabajando, este es un archivo de configuración, dice que es la red de pre producción. También proporcionamos la dirección del Oráculo, ya que el Oráculo necesita saber con qué está operando, y la clave de pago es la clave de firma de esa dirección. El Oráculo estará observando todos los contratos Marlowe en la blockchain y tratando de encontrar aquellos a los que pueda contribuir. De inmediato vemos un par de cosas. Aquí encontró uno, este primer contrato, 1029, e intentó contribuir a él, pero resulta que ese contrato ya ha expirado, por lo que, aunque lo detectó, no pudo hacerlo. Aquí hay otro caso en el que un contrato está utilizando un símbolo XYZ que no puede entender, ya que no es un par de divisas. Aquí hay otro caso con un error de escritura, en el par de divisas, por lo que a veces ignora cosas y otras veces intenta y falla. Pero si el contrato está realmente listo para recibir datos y el símbolo es conocido por el Oráculo, entonces realiza un informe.

Lo que hizo aquí fue recorrer la cadena de bloques, revisar cientos de contratos Marlowe y encontrar estos contratos. Y este en particular, dijo que estaba listo para el Oráculo, entiende el Oráculo y fue al sitio web de la Reserva Federal de Nueva York para buscar la tasa, que actualmente es de 430 puntos básicos. Luego encontró otro contrato, el del precio de ADA en euros, que es el que acabamos de crear en la otra ventana. Lo mostramos en la misma máquina, pero todo está descentralizado, por lo que podrían estar en máquinas muy distantes y no se necesita ninguna comunicación ni conocimiento de los procesos en ejecución.

El Oráculo buscó el precio en euros de CoinGecko, confirmó esa transacción y se puede ver cómo las transacciones se agregan y eliminan de la memoria a medida que se confirman. El tercer contrato es el precio de Ether y Bitcoin.

Este es un proceso en ejecución, por lo que en realidad podemos ejecutar algunos manualmente. Por ejemplo, podemos obtener el precio de ADA en dólares estadounidenses, por lo que enviaremos esa transacción. Verán cómo se agrega a la memoria y, después de un tiempo, se elimina. Luego, el Oráculo detecta que comprende ese símbolo y lo buscará en CoinGecko. También podemos proporcionarle un símbolo que no conoce, por ejemplo, el precio de Ether denominado en Ada, así. En este momento, el Oráculo no puede servir a ese contrato. Nuevamente, verán cómo se elimina de la memoria una vez que se confirma y aparecerá aquí, pero lo ignorará porque no tiene un precio para eso. El oráculo es personalizable, así que podés agregar un montón de diferentes precios, osea que sigue en la memory pool, en promedio hay 20 segundos entre los nodos, parece que acaba de ser confirmado, ves que no conoce el símbolo, así que va a ignorarlo.

Básicamente, esa es la demostración. Permítanme decir algunas palabras más sobre el contrato que vimos. Como pueden ver, este es un Oráculo centralizado, hay un operador de este Oráculo y se necesita confiar en el propietario de esta clave pública. Sin embargo, dentro del lenguaje Marlowe, se pueden combinar varios Oráculos. Aquí hay un fragmento de un contrato Marlowe donde realmente tenemos tres Oráculos, que podrían ser tres operadores, quizás Stake pools los están operando o algunas partes de confianza, como un exchange u otra entidad los están operando. El contrato Marlowe en realidad tomará la misma entrada de datos de tres fuentes diferentes: Oráculos uno, dos y tres. Luego se pueden realizar cálculos sobre eso. Aquí hay un cálculo muy sencillo donde simplemente se suman los tres valores y se dividen por tres para obtener el precio promedio de las tres fuentes. Una forma más sofisticada y segura de hacerlo sería usar la mediana, que sería el valor intermedio, ya que si uno de los Oráculos intenta manipular y proporciona un valor muy alto o muy bajo para sesgar el resultado, eso se reflejaría en el promedio, pero si uno de los oráculos manipula y estás en el medio, obtenés el valor medio, ese valor atípico que intentó la manipulación no formaría parte. Una variación este oráculo sería una que requiere una tarifa, como ves, estamos ejecutando, haciendo transacciones, cuando encontramos a alguno en la blockchain que tiene un contrato Marlowe que necesita ese oráculo particular, eso puede terminar siendo costoso, porque las tarifas tienen que ser pagadas para las transacciones. Lo que también podés hacer es tener lo que teníamos antes, que es esta opción que realiza el oráculo, pero luego el oráculo recibe un pago, podrías tener una tarifa, quizás el oráculo obtendría uno o dos Ada como compensación por estar ahí, poder informar y dar un valor preciso, y lo que haría el Oráculo en este caso, sería buscar este fragmento en el contrato, y si lo encuentra, si lo encuentra solo así, sin ningún pago en él, no emitiría un informe. Debería encontrar una solicitud para la elección y luego puede revisar el contrato, ya que eso está en la cadena de bloques, y ver si el contrato de Marlowe va a pagar al Oráculo, y puedo ver que la tarifa correcta está pagada, por ejemplo, de esa manera el Oráculo podría ser compensado, y lo bueno de esto es que no hay coordinación, solo tienes que publicar qué símbolos puede proporcionar el Oráculo, cuál es la dirección del Oráculo y luego si hay una tarifa, cuál sería la tarifa requerida.

Entonces, lo que está sucediendo detrás de escena es que tenemos, por supuesto, la cadena de bloques de Cardano, estamos usando Marlowe Runtime, que es el backend para Marlowe que realiza el trabajo fuera de la cadena, y podrías imaginar que terceras partes están utilizando algún tipo de interfaz para Marlowe y tal vez también están usando Marlowe Runtime 2, eso sería probable, pero podrían estar en cualquier lugar y así es como es la arquitectura descentralizada. El Oráculo de Marlowe lo que hace es que tiene su propia instancia de Marlowe Runtime, utiliza protocolos tipados. Lo que va a suceder aquí es que primero, cuando el Oráculo se inicia, crea un cliente de sincronización de descubrimiento de Marlowe, por lo que estará observando cada contrato de Marlowe en la cadena de bloques para ver si hay un nuevo bloque, si hay un nuevo contrato Marlowe que se creó, por lo que esto descubre contratos de Marlowe y está implementado en Haskell, estamos usando canales STM para la comunicación entre estos componentes.

El siguiente paso es, una vez que sabes que hay un contrato, tienes la identificación del contrato, qué está sucediendo en ese contrato, así que abrimos un cliente de sincronización de historial de Marlowe y observamos los contratos. Lo primero que hacemos es mirar la transacción de creación, vemos el contrato y podemos recorrer ese contrato y ver si en algún momento en el futuro necesitará este Oráculo, y si la respuesta es no, entonces simplemente lo ignora y no necesita hacer ningún trabajo adicional porque los contratos Marlowe son inmutables una vez que están en la cadena de bloques, así que si el contrato no va a cambiar de opinión y necesitar entrada del Oráculo.

En los casos en los que el contrato necesitará o podría necesitar entrada del Oráculo más adelante en su historia, el Oráculo lleva un seguimiento de ese contrato y lo observa hasta la punta de la cadena de bloques para ver si es el momento de contribuir datos a este contrato como una elección, como vimos en la demostración. En algún momento, podría alcanzar ese punto y una vez más, a través de un canal STM, pasamos por un proceso de transacción. Lo primero que hacemos es obtener los datos solicitados, así que si estamos solicitando datos de coing gecko o datos de la Reserva Federal de Nueva York, hay un proceso que realmente va a esos sitios web y utiliza sus API para recopilar esos datos.

Luego tenemos un protocolo para las transacciones de Marlowe. Básicamente, esto construirá la transacción, una vez que esté construida, la firmará y luego la enviará, y así es básicamente el ciclo de vida. Así que eso es la demostración del Oráculo y lo básico de lo que está sucediendo bajo el capó. Gracias.