Introducción

Uno de los conceptos que solemos ver en el mundo de Bitcoin y ligado al funcionamiento de sus transacciones es el de UTXO. UTXO son las siglas de Unspent Transaction Output, que en español es, Transacciones de Salida no Gastadas. Pero ¿Qué son las UTXO y qué papel juegan en Bitcoin? ¿Cuál es su funcionamiento? ¿Por qué se crearon? Pues bien, esto y más lo explicaremos de forma sencilla a continuación.

UTXO, las salidas no gastadas de Bitcoin

En Bitcoin, cada vez que realizas una transacción, podemos ver que la misma está compuesta (en su forma más básica) por una entrada (input) y por dos salidas (outputs). Esta construcción básica de las transacciones de Bitcoin, tiene como objetivo facilitar la contabilidad de los bitcoins usados dentro del sistema. Pero también sirve para clasificar la forma en cómo se usan las monedas en distintos momentos.

Así tenemos que las entradas (inputs) son el dinero que usamos para generar una transacción y con la que pagamos por un bien o servicio adquirido. Mientras que las salidas (outputs) indican dos puntos a los que se dirige la transacción. La primera salida de nuestra transacción va dirigida a la dirección de la persona a la que realizamos la transacción de pago. De esta forma, nuestra salida (output) se convierte en la entrada (input) de esa persona.

Mientras que la segunda, es una transacción dirigida a una dirección de cambio. Esta transacción nos regresa el cambio o resto que nos queda por la operación realizada. Es decir, una salida que se convierte en una entrada para nosotros mismos devolviéndonos el cambio de la transacción que hacemos.

Con esto podemos ver que las UTXO son parte esencial de las transacciones de Bitcoin y sin ellas, su funcionamiento sería imposible. Pero ¿Por qué Bitcoin no podría funcionar sin este concepto? Sencillo, recuerda que Bitcoin y su cadena de bloques funciona como una enorme base de datos que narra una historia. Historia que enlaza cada una de las transacciones que se suceden de forma única e inequívoca. Y el lazo entre esas transacciones, entre esos saldos movilizados de forma histórica, es dado por las UTXO.

Ejemplo de cómo funciona una UTXO

Para ver esto de forma más sencilla hagamos un ejemplo de cómo funciona una UTXO

Imaginemos que Laura tiene 10 BTC en su monedero. Laura realiza un pago de 5 BTC a Daniel, y al generar la transacción se crea una entrada (de los 10 BTC de Laura) y dos salidas (5 BTC para Daniel y 5 BTC que son el cambio de Laura). Así tenemos que al confirmarse la transacción de Laura, ella ha generado una transacción que queda almacenada de forma histórica e inalterable en la blockchain. Como resultado tenemos que Laura ha pasado de tener 10 BTC, a tener 5 BTC confirmados por la transacción de cambio y la UTXO que da origen a esta. Y vemos también que Daniel ha pasado a tener 5 BTC (una entrada al monedero de Daniel) gracias a las UTXO de Laura. Estos 5 BTC de Daniel, ahora son sus propias UTXO que podrá usar y gastar como desee.

Este sencillo ejemplo resume bastante bien el funcionamiento general de las transacciones en Bitcoin, pero puede ser más complicado. En Bitcoin, es posible que nuestro saldo total está conformado por varias entradas apuntando a varias direcciones. Es decir, es posible que Laura tenga 10 BTC como saldo total en su monedero, pero que dicho saldo está repartido en 10 direcciones distintas propias con 1 Bitcoin cada una. Ante este nuevo panorama ¿Cómo funciona el sistema descrito anteriormente de las entradas y salidas?

Pues bien la verdad es la misma forma, pero con un pequeño cambio. En lugar de existir una sola entrada, existirían 5 entradas. Cada una de ellas correspondientes a las direcciones de Laura que tienen 1 BTC. Así tenemos que las 5 entradas suman los 5 BTC que se enviarán a Daniel, mientras que en la dirección de cambio no tenemos nada al no quedar nada que devolver. Por supuesto, el sistema se adaptaría a esquemas distintos, pero el resultado siempre será el mismo.

Este tipo de comportamiento se debe a que las UTXO y el saldo que describen es indivisible, es decir, no podemos transformar ese saldo en valores más pequeños, a menos que gastemos el saldo creando una nueva transacción.

Relacionado: ¿Cómo funciona una transacción de Bitcoin?

UTXO y su relación con las comisiones en Bitcoin

Otra utilidad de las UTXO tiene que ver con las comisiones o fee en Bitcoin. Si has visto las transacciones en Bitcoin, seguramente has notado que existe una pequeña diferencia entre el saldo total de las entradas y las salidas. Pues bien, esta pequeña diferencia es el saldo que se paga en las comisiones de Bitcoin. Básicamente la formulación de las comisiones pagadas en una transacción es la siguiente:

Entrada total — Salida total = Comisiones

https://lh3.googleusercontent.com/4L3iiV3nRoKaMLbY0Uf2yhp_gZjYlUQY2Zr63cym7QhCe88nmsgRs__c8v0atqHZywKmtEdDpGLsiDS2pfjOlIIZmwX8YkNXuYxTeFGV8gC4YDt05LcIXX3ZQZS_ygOM641zXqmAEsto nos indica que la construcción de una transacción tiene desde un primer momento previsto un saldo de comisiones. Y la estructura de la transacción pone dicho saldo a disposición de los mineros. Esto es algo que vemos en todas las transacciones dentro de Bitcoin y tiene como finalidad dos cosas:

  1. Incentivar el trabajo de los mineros que al generar un bloque no solo reciben la recompensa del mismo, sino también las comisiones de todas las transacciones confirmadas por dicho bloque.
  2. Evitar que la red sea vulnerable a ataques maliciosos como los DDoS, dusting attack, entre otros. Esto debido a que cada transacción tiene un costo y hacer transacciones en números masivos tiene un alto costo para el atacante.

Como ves las UTXO no son solo una herramienta del tipo contable, también son una poderosa herramienta para mantener la seguridad dentro de Bitcoin.

Gastando UTXO, la magia de los Bitcoin Scripts

Ahora bien seguramente te preguntarás ¿Cómo garantiza Bitcoin que las UTXO y el dinero que representan no pueda ser gastado de forma fraudulenta? Pues esta tarea recae en los Bitcoin Script.

Cada vez que creamos una transacción en Bitcoin, lo que hacemos es crear un script especial que realiza dos importantes acciones:

  1. Validar que realmente el saldo usado es nuestro.
  2. Garantizar que los saldos enviados solo puedan ser gastados por la persona a quien se lo enviamos.

Validando el saldo

En primer lugar, lo primero que debemos hacer es demostrar que el saldo que estamos usando es nuestro. Para lograr esto, recordemos que el saldo que tenemos (entradas) son en realidad la salida de una transacción anterior. Es decir, todo saldo en Bitcoin tienen una UTXO asociada al mismo, y dicha UTXO tiene asociada un script de bloqueo.

Este script de bloqueo es una especie de candado digital que debemos abrir para entonces poder hacer uso del saldo de dicha UTXO. Los scripts de bloqueo en Bitcoin son variados, pero el más común es el que se usa dentro de las transacciones del tipo P2PKH (Pay to Public Key Hash). Este script de bloqueo indica que la llave para abrirlo es una llave criptográfica en la que queremos demostrar dos cosas:

  1. Que somos dueños de la clave privada y pública que generó la dirección de Bitcoin donde está el saldo (UTXO).
  2. Que tenemos en nuestro poder la firma digital válida que certifica que dichas claves son nuestras.

Así que para poder desbloquear dicho script lo que debemos es tomar la dirección de Bitcoin, tomar nuestra clave privada y generar la clave pública de dicha dirección. Al final estampamos nuestra firma digital y con todos esos datos verificados, se desbloquea el saldo de dicha dirección para que podamos usarlo. Si fallamos en hacer este procedimiento, simplemente no podremos usar el saldo.

Por supuesto, este proceso criptográfico es automático y transparente para nosotros, además de ser estándar, pues casi todas las transacciones de Bitcoin siguen este esquema (el script P2PKH). En dicho esquema, esta parte del funcionamiento está descriat en el scriptSig de cada Bitcoin Script.

Creando el script de bloqueo

Al demostrar que podemos gastar nuestras UTXOs, seguimos con el proceso de creación de la transacción, creando un script de bloque para la nueva UTXO dirigida a destino. Este script recibe el nombre de scriptPubKey y básicamente lo que hace es crear un candado digital criptográfico que solo podrá ser desbloqueado por la persona que recibirá el dinero.

En una transacción del tipo P2PKH, básicamente este script de bloqueo lo que hace es tomar la dirección del destino e incluirla junto a una serie de instrucciones que protegerán dichos bitcoins para que solo el dueño de esa dirección pueda usarlos.

De esta forma, lo que se crea es una cadena de validación, donde los bitcoins al pasar de una dirección a otra, quedan bloqueados para ser utilizados por la última persona que toma posesión de ellos. Dicha persona deberá pasar por el mismo proceso acá descrito para poder usar dichos bitcoins cuando lo desee.

Relacionado: ¿Qué es el Bitcoin Script? El lenguaje de programación de Bitcoin

Las UTXO en otras blockchains

Ahora bien ¿Las UTXO son una construcción única de Bitcoin? La respuesta corta a esto es, No. En todas las blockchains y criptomonedas existentes en la actualidad podemos ver este tipo de funcionamiento. En todas ellas, las UTXO son parte esencial del funcionamiento de las transacciones y en la creación de su historial dentro de la blockchain.

https://lh4.googleusercontent.com/dJVAw77dHRaI2q_xnBLiikQ5AcOkZdz06fNAYLvRECv3DZ-9XZlnOYjE3GHMXeaH_OPK1ycEj5Qx5jxenYoHiosIHFN7X_6pk02CiXkhawfNhyON3dgXEOUwq4nbt68XN-thhYuZ

Por supuesto, cada blockchain puede ajustar este concepto de distintas formas para adaptarse a las funciones adicionales que pueda presentar el protocolo blockchain donde se ejecutan, pero en definitiva el funcionamiento básico es el mismo. Un ejemplo de esto podemos verlo en Monero. En dicha criptomoneda y blockchain podemos "ver" las UTXO de sus usuarios, pero dicha información está ofuscada y cifrada. Pero esto no significa que las UTXO y toda su funcionalidad no estén allí, lo están, solo que bajo un concepto de alta privacidad y anonimato, a diferencia de Bitcoin.

De esta forma podemos estar seguro que las UTXO son parte esencial y un concepto difícilmente reemplazable de las criptomonedas y las blockchains.