馃嚜馃嚫 Validaci贸n de transacciones en Cardano, sin sorpresas

:cuba: :es: Traducci贸n de No-surprises transaction validation on Cardano publicada en el blog de IOG.

El modelo EUTXO de Cardano permite la naturaleza determinista de la ejecuci贸n de los scripts de Plutus

image

A medida que el hard fork de Alonzo aporta la capacidad de los contratos inteligentes de Plutus a Cardano, la blockchain evoluciona para satisfacer la creciente necesidad de despliegue de soluciones descentralizadas. El dise帽o de la blockchain Cardano se centra en la alta garant铆a, la seguridad y la verificaci贸n formal probada. En consonancia con esta estrategia, tambi茅n es importante garantizar que el procesamiento de las transacciones sea determinista, es decir, que un usuario pueda predecir su impacto y resultado antes de la ejecuci贸n real.

La capacidad de garantizar el coste de la ejecuci贸n de la transacci贸n, y c贸mo se comporta la transacci贸n en la blockchain antes de ser enviada, se vuelve a煤n m谩s prominente con la introducci贸n del soporte de contratos inteligentes. Las blockchain basadas en transacciones no gastadas (UTXO), como Cardano, proporcionan estas capacidades. Las cadenas de bloques basadas en cuentas, como Ethereum, son indeterministas, lo que significa que no pueden garantizar la previsibilidad del efecto de la transacci贸n on-chain. Esto presenta riesgos de p茅rdidas monetarias, comisiones impredecibles y oportunidades adicionales de comportamiento adverso.

En esta entrada del blog, damos un vistazo m谩s de cerca a los beneficios del dise帽o determinista de Cardano que permite una transacci贸n segura y la evaluaci贸n del script antes de la ejecuci贸n. En la siguiente publicaci贸n del blog, que se publicar谩 a finales de esta semana, hablaremos de las dos fases de la validaci贸n de transacciones en Cardano.

驴Qu茅 es el determinismo de las transacciones y por qu茅 es importante?

El determinismo, en el contexto del procesamiento de transacciones y scripts, es un sin贸nimo de previsibilidad. Esto significa que un usuario puede predecir localmente (off-chain) c贸mo su transacci贸n afectar谩 al estado on-chain de la blockchain, sin:

  • Resultados o fallos inesperados de validaci贸n de scripts
  • Comisiones inesperadas
  • Actualizaciones inesperadas del estado de la blockchain o del script.

Una transacci贸n en un sistema determinista podr铆a ser rechazada, incluso si se construye correctamente. Rechazada significa que la transacci贸n no pudo ser aplicada en absoluto a la blockchain, por lo que no tuvo ning煤n efecto sobre su estado, por lo que no se pag贸 ninguna comisi贸n. La raz贸n de que esto ocurra es debido a los cambios en la blockchain causados por otras transacciones procesadas entre el momento en que se construye la transacci贸n inicial y el momento en que se procesa. Esto puede ocurrir incluso con transacciones simples. Por ejemplo, otra transacci贸n podr铆a gastar un UTXO que un usuario tambi茅n ten铆a previsto gastar. El determinismo garantiza que, siempre que se acepte una transacci贸n, esta s贸lo tendr谩 efectos predecibles en el estado de la blockchain.

Resolviendo el problema del indeterminismo

El indeterminismo significa que no podemos predecir qu茅 efectos tendr谩 una transacci贸n en la blockchain antes de su ejecuci贸n. Al dise帽ar una blockchain, as铆 como un int茅rprete de contratos inteligentes, es importante prever las condiciones en las que podr铆a producirse el indeterminismo, y tomar decisiones de dise帽o para evitarlas. Uno de los principales peligros en este caso es el acceso a datos mutables de la blockchain, es decir, datos que pueden ser cambiados o alterados. El indeterminismo podr铆a convertirse en una problema, cuando los cambios realizados por una transacci贸n o un contrato inteligente sobre el estado de la blockchain ocurren en el momento del procesamiento, en vez de ocurrir seg煤n el contenido de la transacci贸n.

Ethereum es notablemente susceptible a este problema. Por ejemplo, los precios del gas, o la tasa de un mercado descentralizado (DEX) pueden fluctuar entre el momento en que un usuario env铆a una transacci贸n y el momento en que se procesa. Esto da lugar a comisiones de gas inesperadas, o a cambios en el precio de los activos que se compran. O bien, un script puede simplemente fallar, dando lugar a altos costes de ejecuci贸n (cientos de d贸lares) y ning煤n otro efecto. Esto podr铆a ocurrir, por ejemplo, si los fondos disponibles para cubrir los costes de gas se agotan a mitad de la ejecuci贸n. El dise帽o determinista de una blockchain elimina estas posibilidades.

Otras posibles fuentes de indeterminismo son permitir que los scripts vean:

  • Datos en el bloque que contiene la transacci贸n, pero que no est谩n incluidos en ninguna transacci贸n, por ejemplo, la aleatoriedad del sistema, la cabecera del bloque o el n煤mero de slot actual

  • Datos alterados o sustituidos por un adversario, que podr铆an cambiar el resultado de la validaci贸n del script, mientras que la transacci贸n en s铆 sigue siendo procesable.

En la mayor铆a de los sistemas, hay formas de mitigar estos problemas con pr谩cticas mejoradas de escritura de scripts, o soluciones de capa 2. Cardano est谩 dise帽ado para garantizar resultados predecibles para todos los scripts y transacciones.

C贸mo se beneficia el modelo b谩sico UTXO en t茅rminos de determinismo

La blockchain Cardano se basa en un modelo de contabilidad UTXO, lo que significa que los activos se almacenan en la blockchain en salidas no gastadas (UTXO), en lugar de en cuentas. Cada una de estas salidas especifica las cantidades de activos almacenados en ella, junto con su direcci贸n. Las salidas no gastadas son inmutables, por lo que una transacci贸n puede consumir toda la salida, pero no puede alterarla.

Para transferir activos, una transacci贸n consume una o varias salidas y crea otras nuevas que, en total, contienen las mismas cantidades de activos que las consumidas. Estas cantidades -y sus direcciones UTXO- se especifican en las salidas de la transacci贸n. La 煤nica forma en que una transacci贸n puede influir en el efecto de otra transacci贸n aplicada a la blockchain es gastando el mismo UTXO que la transacci贸n posterior intenta gastar, haciendo as铆 que el nodo la rechace. Esta es la caracter铆stica clave en la que se basa el modelo UTXO para mantener el determinismo.

Un libro de contabilidad UTXO tiene tanto ventajas como inconvenientes respecto al modelo basado en cuentas. Por ejemplo, este 煤ltimo encontrar谩 menos casos de transacciones que se bloqueen entre s铆. A diferencia de los UTXO, las cuentas son datos mutables del libro mayor. As铆, una transacci贸n puede ver, por ejemplo, una cantidad diferente de activos en una cuenta, dependiendo de si se proces贸 antes o despu茅s de otra transacci贸n que actualiza esa misma cuenta. Esta circunstancia podr铆a no provocar el rechazo de la transacci贸n, pero podr铆a dar lugar a cambios diferentes -e imprevisibles- en la blockchain.

Gastar un UTXO es s贸lo un ejemplo de una acci贸n que puede realizar una transacci贸n. A continuaci贸n, explicamos qu茅 son las acciones de transacci贸n y c贸mo se pueden validar. El conjunto m谩s significativo de cambios introducidos en Alonzo son los cambios en el proceso de validaci贸n de acciones.

Validaci贸n de acciones con firmas y scripts

Un aspecto importante del procesamiento de una transacci贸n es la validaci贸n de las acciones que est谩 realizando. Una transacci贸n est谩 realizando una acci贸n cuando contiene datos en el campo espec铆fico de esa acci贸n. Por ejemplo, una transacci贸n est谩 gastando el UTXO U cuando contiene una referencia a U en su campo de entrada, y est谩 acu帽ando un token X cuando su campo de acu帽aci贸n contiene X.

Cuando el nodo procesa una transacci贸n, verifica si puede realizar la acci贸n que pretende. Para ello, el autor de la transacci贸n debe proporcionar datos relevantes, por ejemplo, scripts, canjes o firmas. Un ejemplo com煤n de una acci贸n que requiere validaci贸n es gastar un UTXO bloqueado con una clave p煤blica. La transacci贸n debe proporcionar una firma de la clave privada correspondiente para realizar esta acci贸n.

Cardano utiliza scripts para validar las acciones. Estos scripts, que son piezas de c贸digo, implementan funciones puras con salidas Verdaderas o Falsas. La validaci贸n de scripts es el proceso de invocar al int茅rprete de scripts para ejecutar un determinado script con los argumentos adecuados.

La validaci贸n de scripts puede realizarse para las siguientes acciones:

  • Gastar un UTXO bloqueado por una direcci贸n de script: el script que se ejecuta es aquel cuyo hash forma la direcci贸n.

  • Acu帽ar un token: el script que se ejecuta es aquel cuyo hash forma el ID de la pol铆tica del token que se est谩 acu帽ando.

  • Retirada de recompensas: el script que se ejecuta es aquel cuyo hash forma la direcci贸n de stake.

  • Aplicaci贸n de un certificado: el script que se ejecuta es aquel cuyo hash forma la credencial del autor del certificado.

Adem谩s de permitir que el nodo sepa qu茅 script debe ejecutar, todas las acciones de transacci贸n indican c贸mo ensamblar los argumentos pasados a ese script.

La blockchain multiactivo Cardano (Mary) admite lenguajes sencillos de scripting multifirma y timelock. Estos permiten a los usuarios especificar las firmas necesarias para realizar una acci贸n (como gastar un UTXO o acu帽ar un token no fungible (NFT)), y el intervalo de tiempo en el que se puede realizar. Un script de Timelock nunca puede ver el n煤mero de slot real de la transacci贸n que lo incluye. Timelock s贸lo puede ver el intervalo de validez de la transacci贸n que lo incluye. Permitir que un script de timelock vea el n煤mero de slot actual (es decir, los datos procedentes del bloque, en lugar del autor) romper铆a el determinismo. Esto est谩 garantizado por el hecho de que un usuario no puede conocer el slot exacto en el que se procesa la transacci贸n, y por lo tanto no puede predecir c贸mo se comportar谩 el script.

Los scripts de Mary, a diferencia de los contratos de Plutus en Alonzo, est谩n muy limitados en lo que pueden expresar. El hard fork de Alonzo da paso a una nueva era m谩s potente y con contratos de estado que no comprometen la propiedad determinista de la blockchain.

Scripts de Plutus

Alonzo introduce un nuevo enfoque para la validaci贸n de transacciones en Cardano debido a la implementaci贸n de scripts Plutus. El modelo extendido de salida de transacciones no utilizadas (EUTXO), desplegado como parte de Alonzo, proporciona la infraestructura de la blockchain para soportar los contratos de Plutus. A continuaci贸n, proporcionamos una visi贸n general de alto nivel de los cambios en la blockchain y las transacciones. Para obtener m谩s detalles sobre el trabajo con la blockchain y los scripts de Plutus, consulte el programa Plutus Pioneer.

Alonzo cambia los datos en la blockchain de la siguiente manera:

  1. Los scripts de Plutus pueden bloquear los UTXOs.

  2. Un nuevo componente, a帽adido al contenido de las partes de salida de los UTXOs, permite una funcionalidad similar a la de los scripts. Adem谩s de los activos y una direcci贸n, un UTXO bloqueado por los scripts de Plutus tambi茅n contiene un datum. Un datum es una pieza de datos que puede considerarse como una interpretaci贸n del estado del script.

  3. Hay una serie de nuevos par谩metros de protocolo que se utilizan para imponer requisitos de validaci贸n adicionales a las transacciones. Entre ellos se encuentran los l铆mites m谩ximos de recursos computacionales que pueden consumir los scripts.

Para dar soporte a los scripts de Plutus, las transacciones se han actualizado de la siguiente manera:

  1. Para cada una de sus acciones, la transacci贸n lleva ahora un argumento especificado por el usuario, llamado canjeador. Dependiendo del script, un canjeador puede servir para un prop贸sito diferente. Por ejemplo, puede actuar como la oferta que el usuario hace en una subasta, o como la respuesta del usuario en un juego de adivinanzas, entre otras muchas funciones.

  2. La transacci贸n especifica los presupuestos de ejecuci贸n computacional para cada script.

  3. Para garantizar que una transacci贸n pueda pagar su presupuesto de ejecuci贸n, Alonzo introduce datos adicionales, de los que hablaremos en una pr贸xima entrada del blog.

  4. Las transacciones contienen un hash de integridad, necesario para asegurar que no ha sido comprometido, obsoleto, etc.

Tambi茅n hay algunos cambios en los aspectos espec铆ficos de la validaci贸n de transacciones de Alonzo en comparaci贸n con Mary. Para cada acci贸n, el nodo ensambla los argumentos de script esperados por el int茅rprete de Plutus, incluyendo

  • El datum
  • El canjeador
  • El presupuesto de ejecuci贸n
  • Un resumen de la transacci贸n.

El nodo realiza nuevas comprobaciones, espec铆ficas de Alonzo, que aseguran que la transacci贸n se construye correctamente. Por ejemplo, no debe superar el presupuesto m谩ximo de recursos de ejecuci贸n. Tambi茅n invoca el int茅rprete de scripts Plutus para ejecutar los scripts.

Objetos datum vs estado del script

Al igual que las cuentas mutables, el estado de scripts mutables entra de lleno en la categor铆a de fuentes de indeterminismo de los 鈥渄atos mutables de la blockchain鈥. Ya hemos visto que el modelo UTXO evita el problema del indeterminismo de las cuentas mutables. Tambi茅n puede ayudarnos a reimaginar el concepto de estado del script de forma que se mantenga el determinismo. Si un UTXO est谩 bloqueado por un script de Plutus, el c贸digo de script de ese UTXO est谩 asociado a su direcci贸n. El estado-an谩logo de este script es el datum almacenado en ese UTXO. Cuando una transacci贸n gasta ese UTXO, se borra de la blockchain, incluyendo el datum. Sin embargo, el contenido del script Plutus podr铆a obligar a que la transacci贸n que lo lleva tambi茅n cree un UTXO que contenga un datum espec铆fico que pueda ser visto como el estado actualizado del script.

Presupuesto de ejecuci贸n de scripts

El modelo de gas no determinista puede cobrar a los usuarios comisiones imprevisiblemente grandes. En los scripts de Cardano, esta fuente de indeterminismo se aborda requiriendo que el presupuesto de recursos en s铆 mismo, as铆 como la comisi贸n requerida para cubrir este presupuesto, se incluyan en la transacci贸n. En Alonzo, un usuario puede predecir ambos localmente al construir la transacci贸n. La ejecuci贸n de los scripts devuelve necesariamente tanto Verdadero como Falso, y no har谩 un bucle indefinido. La raz贸n de esto es que cada operaci贸n que realiza un script toma una cantidad no nula de recursos, que son rastreados por el int茅rprete. Si se supera el presupuesto especificado por la transacci贸n, la ejecuci贸n del script termina y devuelve Falso.

Validaci贸n de transacciones en Alonzo

Abordando las posibles fuentes de indeterminismo, los siguientes puntos claves hacen que los resultados de la validaci贸n de scripts y transacciones sean predecibles:

  • El int茅rprete de scripts siempre terminar谩 y devolver谩 el mismo resultado de validaci贸n cuando se aplique a los mismos argumentos

  • Una transacci贸n fija necesariamente todos los argumentos que se pasar谩n al int茅rprete de scripts durante la validaci贸n

  • Una transacci贸n especifica todas las acciones que realiza y que requieren la validaci贸n del script

  • Las firmas obligatorias en una transacci贸n garantizan que no pueda ser alterada por un adversario de manera que haga fallar los scripts

  • La aplicaci贸n de una transacci贸n en el modelo de blockchain EUTXO es determinista.

Este 煤ltimo punto se hereda en gran medida del modelo UTXO, ya que las actualizaciones del protocolo de la blockchain Alonzo siguen siendo, en su mayor parte, coherentes con las actualizaciones de eras anteriores (incluido el esquema de delegaci贸n, etc.). Despu茅s de la actualizaci贸n de Alonzo, el fracaso o el 茅xito de la validaci贸n de la secuencia de comandos afecta a c贸mo se procesa una transacci贸n (隆m谩s sobre esto en la parte 2!). Sin embargo, el resultado Verdadero o Falso, as铆 como los cambios en la blockchain asociados a cualquiera de los dos resultados, son predecibles para una transacci贸n determinada.

El comportamiento determinista de la validaci贸n de scripts y transacciones de Cardano no es un resultado natural del uso del modelo EUTXO. Para asegurar esta propiedad, el equipo del IOG tuvo que rastrear cuidadosamente la fuente de cada pieza de datos que un script tiene permitido ver.

La propiedad de evaluaci贸n determinista se especifica formalmente en la especificaci贸n de Alonzo, y el equipo del IOG tambi茅n ha esbozado la prueba de que el int茅rprete obtiene s贸lo aquellos argumentos que no romper铆an la propiedad.

*En nuestra segunda entrada del blog, echaremos un vistazo m谩s de cerca al proceso de validaci贸n en dos fases de las transacciones de Cardano. As铆 que, mantente atento a finales de esta semana para la segunda parte.*emphasised text

2 Likes