UTXO
UTxO
UTxO (Unspent Transaction Output) significa "Salida de transacción no gastada", es decir, saldo no gastado de una transacción anterior, que podrá gastarse en el futuro. En las criptomonedas se usan diferentes modelos de libro mayor (ledgers) y uno de ellos es el modelo UTxO, el cual que permite una abstracción de dinero electrónico mediante el uso de criptografía de clave pública para identificar y transferir la propiedad entre los titulares de pares de claves públicas/privadas. El modelo UTxO fue introducido por primera vez con la implementación de Bitcoin con el objetivo de solucionar el problema del doble pago y sigue siendo a día de hoy el modelo utilizado tanto por Bitcoin como por otras blockchains. Como introducción y simplificando enormemente el mecanismo que luego desarrollaremos, podemos decir que cada UTxO es análogo a una "moneda" y cuando dicha moneda se gasta puede requerir cambio de otras "monedas" de menor valor para que la suma total sea el valor de la "moneda" original.
Orígenes
La primera vez que se usó este sistema en una Blockchain fue en Bitcoin y su origen suele atribuirse a la propuesta de RPOW (Prueba de Trabajo Reutilizable) [1] de Hal Finney, que a su vez partió de la propuesta Hashcash [2] de Adam Back de 1997.
Funcionamiento
El modelo de UTxO (salidas de transacciones no gastadas) es un concepto importante porque cada transacción en la Capa de Contabilidad de Cardano (Settlement Layer) tiene al menos una entrada y al menos una salida. La cantidad total de fondos en una billetera es la suma de todos sus UTxOs y esos mismos UTxOs son los que se convertirán en las entradas para transacciones futuras de esa misma billetera. Todos los activos se almacenan en el libro mayor en salidas no gastadas (lista de UTxOs), en lugar de almacenarse en el libro de cuentas.
Este modelo difiere completamente del modelo tradicional usado por las cuentas bancarias tradicionales, donde si quieres enviar a alguien 100 euros, esa cantidad simplemente se resta del saldo total de tu cuenta bancaria y queda registrado como un apunte contable. Este modelo tradicional se conoce como el modelo de cuentas y es utilizado además de por el sistema bancario, por una infinidad de otras criptomonedas, entre ellas la más conocida es Ethereum.
En el modelo UTxO, una entrada contiene un ID de transacción, que es un hash realizado mediante función criptográfica BLAKE2b-256 de la transacción y un índice de las salidas que utilizan la transacción. Una salida contiene la cantidad de dinero que se está enviando, así como una dirección a la que queremos que se envíe dinero, que es también un hash obtenido mediante la función criptográfica BLAKE2b-256 de la clave pública de direcciones de la billetera de destino.
Este sistema es completamente transparente y queda almacenado públicamente en la blockchain. De modo que en la blockchain de Cardano se registra el historial completo y se puede hacer seguimiento de todas las transacciones, aunque sean transacciones a nivel interno de una misma billetera. La documentación oficial de Cardano sobre las transacciones lo resume muy bien: “Las entradas y salidas llevan la información sobre el flujo de dinero: las entradas informan de dónde viene el dinero y las salidas informan a dónde va el dinero”.
Ventajas del modelo UTxO
Gracias al modelo UTxO se puede comprobar y rastrear el tamaño, edad y cantidad de UTXOs transferidos, así se pueden obtener métricas exactas sobre el uso de la blockchain y la actividad financiera de la toda la cadena de bloques tanto del pasado como a tiempo real.
Los modelos UTXO proporcionan otras ventajas. Por ejemplo, una mejor escalabilidad y privacidad. También se simplifica la lógica de las transacciones, debido a que cada UTXO sólo puede gastarse una vez y en su totalidad, lo que hace que la verificación de las transacciones sea mucho más sencilla.
Ejemplo
Una forma simplificada de entenderlo y usando una analogía del dinero fiduciario, es que cada UTxO de una billetera representa un billete físico, cada uno con un valor distinto, y el conjunto de todos esos UTxOs conforman el total de los fondos que tenemos en dicha billetera. Por ejemplo, supongamos que tenemos una billetera nativa de Cardano con 100 ADA y quieres enviar 30 ADA a un amigo, para simplificar este ejemplo utilizaremos números enteros y obviaremos el pago de las tarifas de red (fees) en las que siempre incurren las transacciones. Ahora supongamos que la cantidad total de ADA en tu billetera está compuesta por tres UTxOs que, como decíamos, suman un total de 100 ADA. Para nuestro ejemplo los UTxOs de nuestra billetera serán: el primer UTxO de 40 ADA, el segundo de 20 ADA y el último de otros 40 ADA. Para poder enviar 30 ADA a tu amigo, la transacción necesitará usar uno de los UTxOs con 40 ADA y así poder enviar 30 ADA a tu amigo y también enviar 10 ADA de vuelta a tu billetera, que sería el “cambio" que obtendríamos al usar ese "billete" de 40 ADA. Por lo que la transacción se compondría de un envío de 30 ADA a la dirección de la billetera de tu amigo y otro envío de 10 ADA a la dirección de tu propia billetera. El resultado después de esta transacción sería que tendrías una nueva UTxO con 10 ADA y las otras dos UTxOs que anteriormente tenías, una con 20 ADA y otra de 40 ADA.
Como curiosidad, el proceso para averiguar qué UTxOs utilizar para una transacción se denomina Algoritmo de selección de monedas, creado originalmente para Bitcoin. Alternativamente, si tuviera 10 UTxOs separados, todos ellos con 10 ADA cada uno, sólo tendría que crear una transacción con un índice de entrada que contuviera tres UTxOs para así conseguir los 30 ADA que deseas enviar sin tener que recibir ninguna ADA de vuelta. Por lo que se aprecia que dependiendo de la cantidad de UTxOs y los fondos en cada uno, la propia billetera conformará automáticamente la transacción para realizar el envío correctamente solventando, de este modo, los problemas del doble pago.
eUTxO (Extended UTxO)
IOHK desarrolló el modelo extended UTXO (eUTxO) [3] para Cardano, que es una evolución del modelo UTxO pero permite una forma sustancialmente mayor de expresividad en los scripts de validación, incluyendo scripts que implementan máquinas de estado [4] generales y aplican invariables para todas las transacciones de la cadena. Este modelo ampliado de UTxO se creó con el fin de tener contratos inteligentes expresivos, manteniendo la simplicidad semántica del modelo UTXO.
El modelo eUTxO elude los problemas del modelo de Cuentas (usado por Ethereum, por ejemplo), ya que permite el determinismo de recursos y las transacciones individuales indivisibles, al limitar el alcance de las transacciones de contratos inteligentes a su entorno local inmediato. Sin embargo estas ventajas no están exentas de costos, ya que la construcción de transacciones es una carga por adelantado, debiendo ser incluidas individualmente en cada desarrollo que se ejecute en Cardano. A diferencia de Ethereum es una construcción que debe enfrentar cada desarrollador.
Las transacciones consumen salidas no gastadas de transacciones anteriores y producen nuevas salidas que pueden usarse como entradas para transacciones futuras.
eUTxO modelo ampliado del UTxO
- Generaliza el concepto de ‘dirección’ usando la analogía de la cerradura y la llave. En lugar de restringir los bloqueos a las claves públicas y las claves a las firmas, las direcciones en el modelo eUTxO pueden contener una lógica arbitraria en forma de scripts. Por ejemplo, cuando un nodo valida una transacción, el nodo determina si la transacción puede o no usar una determinada salida como entrada. La transacción buscará la secuencia de comandos proporcionada por la dirección de la salida y ejecutará la secuencia de comandos si la transacción puede usar la salida como entrada.
- La segunda diferencia entre UTxO y eUTxO es que las salidas pueden transportar datos (casi) arbitrarios además de una dirección y un valor. Esto hace que los scripts sean mucho más poderosos al permitirles transportar información de estado.
Ventajas del modelo eUTxO
Este modelo ofrece una mejor escalabilidad y privacidad, así como una lógica de transacción más simplificada, ya que cada UTxO solo se puede consumir una vez y en conjunto, lo que hace que la verificación de transacciones sea mucho más sencilla. También ofrece mayor seguridad, previsión precisa de costes de ejecución de contratos inteligentes y una concurrencia entre transacciones muy potente y todavía sin explotar al 100%.
Otra poderosa funcionalidad del modelo eUTxO es que las tarifas o fees requeridas para una transacción válida pueden predecirse con precisión antes de lanzar la transacción, por lo que se sabe de antemano el costo y si la transacción está bien construida, lo que elimina gasto y trabajo de validación para transacciones inválidas. El éxito o el fracaso de la validación de transacciones depende solo de la transacción en sí y sus entradas, y en ningún dato más de la cadena de bloques. Como consecuencia, la validez de una transacción se puede verificar fuera de la cadena, antes de que la transacción se envíe a la cadena de bloques. Una transacción aún puede fallar si alguna otra transacción consume simultáneamente una entrada que la transacción espera, pero si todas las entradas aún están presentes, se garantiza que la transacción tendrá éxito. Ese determinismo en la creación y validación de las transacciones se trata de una característica única que no se encuentra en los modelos basados en cuentas, como el de Ethereum.
Desventajas del modelo eUTxO
El modelo eUTxO es más complejo para programar para los desarrolladores, ya que ellos deben codificar la integridad del modelo de transacciones en el propio desarrollo, antes de la validación de las transacciones en la red. Además, debido a la juventud del modelo todavía no hay muchos ejemplos donde los desarrolladores pueden inspirarse o verificar su código, lo que de momento no permite explotar todo el potencial que ofrece este modelo y requiere de más trabajo para construir proyectos.
UTxO Alliance
UTXO Alliance o Alianza UTxO es una iniciativa creada por IOHK para impulsar la colaboración entre personas y organizaciones que trabajan para hacer que el modelo UTXO sea más escalable, seguro e interoperable. El sentido de crear esta Alianza colaborativa es definida por la propia organización:
Vivimos en una época de rápidos cambios y avances tecnológicos. En ninguna parte es esto más cierto que en la industria Blockchain. Al alentar a quienes están a la vanguardia de esta tecnología a participar en esfuerzos e iniciativas compartidas, podemos impulsar un mayor desarrollo de la infraestructura crítica necesaria para impulsar una adopción más amplia de la tecnología blockchain. [4]
Referencias
[1]. RPOW: Web original de Reusable Proof Of Work (Prueba de Trabajo Reutilizable) alojada ahora por Nakamoto Institute.
[2]. Hashcash: fue inventado por Adam Back en 1997
[3]. The Extended UTXO Model: Manuel M.T. Chakravarty , James Chapman, Kenneth MacKenzie, Orestis Melkonian, Michael Peyton Jones, and Philip Wadler.
[4]. Máquina de estados: es una representación de un sistema reactivo basado en eventos que pasa de un estado a otro si se cumple la condición que controla el cambio.
[5]. UTxO Alliance: Web oficial de la Alianza UTxO.
v1.0 - Escrito por Quixote Pool, revisado por Amaru - 27-09-2022