¿Qué es una UTXO?
Desde décadas antes de que se creara Bitcoin, la obsesión por crear un dinero puramente digital rondaba la cabeza de muchas personas. Pero uno de los principales problemas con el que todos se chocaban de frente era el famoso doble gasto.
Fue Satoshi Nakamoto quien, gracias a un conjunto de técnicas, solventó este gran problema, pudiendo crear el primer dinero descentralizado puramente digital. En este artículo te explicaremos que son las UTXO y el gran papel que juegan en la creación de las transacciones para que tus bitcoins puedan viajar de forma segura dentro del protocolo blockchain.
UTXO, un concepto para evitar el doble gasto
Cómo ya hemos explicado en el artículo destinado a ¿Cómo funcionan las transacciones en Bitcoin?, una transacción está compuesta de entradas y salidas. El conjunto de entradas y salidas, junto a monedas a enviar y firmas criptográficas, dan como resultado un hash de transacción, normalmente llamado HASH ID.
Las entradas son HASH ID de una transacción que recibió el monedero y que no han sido usadas previamente, es decir que son UTXO, mientras que la salida es la dirección de destino, a la cual se le crearán UTXO que posteriormente podrá usar en una transacción. Una misma dirección puede tener infinitas UTXO. Es por esto que a las UTXO se las define como un conjunto de transacciones.
Cuando una persona necesita enviar una transacción, ésta ha de nutrirse de UTXO. Es decir, de transacciones que ha recibido y que no han sido gastadas. Esto significa que una persona puede usar para una misma transacción una o más UTXO. De hecho esos UTXO pueden formar parte de una o más direcciones de tu monedero. Y vamos más allá, incluso una transacción podría ser creada con UTXO de direcciones de diferentes monederos, siempre que se firme cada una con su correspondiente clave privada claro.
Todo esto lleva a un lugar: una UTXO solo puede ser usada una vez. Y esto es fundamental dentro del funcionamiento de la tecnología blockchain, pues es parte del conjunto de herramientas que garantiza que unas monedas no sean usadas más de una vez (el famoso doble gasto).
Es tal la fiabilidad de usar este mecanismo para identificar las monedas no gastadas que esta es la forma en la que en Bitcoin puede contarse cuántas monedas existen en circulación. Lo que se hace es sumar todos las monedas que hay en las UTXO, es decir, en las transacciones que no han sido gastadas.
A continuación te dejamos un ejemplo sencillo para que entiendas el flujo:
Imagina que María quiere pagar a Pedro un total de 100 € en bitcoins por un trabajo. María espera recibir el pago de algunas personas que le deben bitcoins y de ese dinero pagará por el trabajo de Pedro.
Al recibir María esos pagos, ella ha tenido unas “Entradas” de dinero, y de esas entradas hará una “Salida” para pagar a Pedro. A María le pagaron las deudas, las cuales eran un pago de 75€ y otro de 50€.
Cuando pague a Pedro, María tiene que usar las dos entradas, dado que con ninguna de ellas tiene suficiente, y pondrá a Pedro como salida.
Tras eso, Pedro tendrá una entrada UTXO (ha recibido el pago).
¿Dónde van las monedas que sobran?
Como has podido observar María tenía un total de 125€ repartido en dos UTXO, pero solo necesitaba mandar 100€. Ha tenido que utilizar las dos UTXO, poniendo como Output o salida la dirección de Pedro, pero su monedero habrá hecho otra cosa de forma transparente a María. Su monedero habrá puesto una dirección de María también como salida, a la que le habrá asignado los 25€ restantes. Es lo que se conoce como dirección de cambio.
Por cierto, existen unas transacciones que se convierten en una UTXO pero no vienen generadas por una UTXO previa. Sigue leyendo para descubrir cuales son.
Con lo descrito anteriormente podrás entender cómo este modelo de “Entradas” y “Salidas”, puede servirnos para establecer relaciones de posesión y concesión del dinero. Una relaciones que en blockchain están marcadas por el uso de criptografía y que nos brindan la seguridad absoluta de que el dinero ha llegado a destino y que está efectivamente bajo el control del destinatario.
UTXO y su importancia en Bitcoin
En Bitcoin todas las transacciones tienen esta estructura de entradas y salidas. En las “Entradas” de una transacción Bitcoin, podemos ver los orígenes del saldo que estamos manejando con nuestra wallet o monedero. Mientras que en las “Salidas”, podemos ver hacía donde enviamos nuestro dinero. Adicional a esto, también podemos ver el dinero restante que es devuelto. Todo ello es visible y trazable por cualquier persona, ya que la blockchain de Bitcoin es pública y transparente.
Si te fijas bien, este modelo permite tener un control total en la forma en como se puede usar el dinero y en qué condiciones se puede usar. En primer lugar, para poder usar un saldo en Bitcoin ese saldo debe estar considerado como una UTXO dentro de tu monedero. Es decir, alguien debe realizarse un pago (una salida o UTXO) para que este pago se transforme en tu entrada y así tengas saldo disponible que gastar.
Este es un proceso es recursivo. Es decir, se repite desde el momento en que la moneda es generada como resultado de un bloque minado. Por ejemplo, una transacción coinbase es en realidad una UTXO creada por el minero para enviar ese saldo a una dirección bajo su control. Así esa transacción de salida se convierte en una entrada de dinero para el minero que posteriormente podrá gastar. El mismo proceso se repite para el resto de usuarios de Bitcoin. Con esto podemos ver que las UTXO son parte esencial de las transacciones de Bitcoin y sin ellas, su funcionamiento sería imposible.
Ampliando el ejemplo de cómo funciona una UTXO en Bitcoin
Podemos ver el funcionamiento de una UTXO en Bitcoin de la siguiente forma:
Daniel quiere pagar por el coche de Luis, valorado en 1 BTC, y en su monedero tiene disponible un total de 1,5 BTC. El saldo de Daniel está dividido en dos direcciones la A con 0,8 BTC y la B con 0,7 BTC.
Así, Daniel va donde Luis y realiza el pago por un 1 BTC. En este punto, el monedero de Daniel no puede enviar 1 BTC de forma directa porque el saldo está dividido en dos direcciones. Así que toma ambos saldos y los convierte en las entradas de la transacción de pago. Seguidamente toma la dirección de Luis y asigna a la misma el envío de 1 BTC, adicional asigna un total de 0,4995 BTC a la dirección de cambio, y el resto queda como la comisión de minería.
Una vez que Daniel envíe su transacción, esta será procesada y confirmada por la red, comenzando su camino a la irreversibilidad. Y en este punto, será fácil ver dónde están las UTXO de la transacción.
Las primeras UTXO que podemos detectar en el ejemplo son los saldos de Daniel. Esas direcciones con 0,8 BTC y 0,7 BTC de saldo, son dos UTXO que están bajo su control y son las que les permiten hacer el pago a Luis. Como Daniel tiene el control de esos saldo, él puede transformar sus UTXO en “Entradas” para un nuevo pago como efectivamente lo hace en este ejemplo.
Inmediatamente después de que la red confirma la transacción de Daniel la situación cambia. Ahora, Daniel ya no tiene bajo su control los saldos que tenía en principio, y en su lugar, su transacción ha generado nuevas UTXO que sobrescriben las anteriores. Las nuevas UTXO en cuestión están representadas primero, por la dirección de Luis y el 1 BTC que ha recibido en ella de parte de Daniel. Y segundo, por la dirección de cambio y los 0,4995 BTC que Daniel ha recibido de la red, porque es lo que le resta del pago que realizó. Como hemos dicho el resto para completar el 1,5 BTC que tenía Daniel en principio quedan como pago de comisión para el minero.
Bitcoin Scripts y su relación con las UTXO
Todo el funcionamiento de las UTXO en Bitcoin está garantizado por los Bitcoin Script, el lenguaje de programación que se usa para escribir todas las operaciones en Bitcoin. Cada transacción tiene un script asociado que nos permite:
- Validar que realmente el saldo usado es nuestro.
- Garantizar que los saldos enviados solo puedan ser gastados por la persona a quien se lo enviamos.
Pero ¿Cómo se realizan estas operaciones? Es lo que explicamos a continuación:
Validando que el saldo es nuestro
La primera tarea para poder usar un saldo en Bitcoin es demostrar que efectivamente ese saldo es nuestro. Para ello, lo primero a tener en cuenta es que cada UTXO que transformamos en una entrada (saldo que vamos a gastar) en realidad es la salida de una transacción anterior que nos dio acceso a esos BTC. Es decir, todo saldo en Bitcoin tienen una UTXO asociada al mismo, y dicho UTXO tiene asociado un script de bloqueo.
Este script de bloqueo es un candado digital que debemos abrir para entonces poder hacer uso del saldo de dicha UTXO. Los script de bloqueo en Bitcoin son variados, pero el más común es el P2PKH (Pay to Public Key Hash). Aunque también existen el P2SH (multisig), el P2PK (el más primitivo de todos). Este script de bloqueo podrá ser abierto con la clave privada que dé como resultado la dirección indicada en la UTXO.
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. Es decir, los nodos aceptarán la transacción y la pondrán en el mempool a espera de los mineros.
Por el contrario, si fallamos al hacer ese procedimiento, simplemente la transacción es rechazada por los nodos y no podremos usar el saldo. A este proceso se llama script de desbloqueo. Por supuesto, este proceso criptográfico es automático y transparente para los usuarios de un monedero, todo el proceso lo realiza el propio monedero, pero ahora ya conoces qué ocurre dentro de él. En dicho esquema, esta parte del funcionamiento está descrita en el scriptSig de cada Bitcoin Script.
Creando el script de bloqueo
Al demostrar que podemos gastar nuestras UTXO, seguimos con el proceso de creación de la transacción, creando un script de bloqueo para la nueva UTXO dirigida a destino. En este caso, lo que hace el monedero es crear un script similar al que nos crearon a nosotros previamente, el cual indique que el único que puede gastar esta nueva UTXO es quien tenga en su poder las claves privadas con controlen las direcciones a donde hemos enviado.
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.
Como puedes ver, en Bitcoin todo tiene un por qué bien definido, y que permite que todas sus partes en conjunto permitan el correcto funcionamiento de la criptomonedas. Al ser un protocolo abierto, todos nodos que quieren formar parte del protocolo interpretan las reglas de la misma forma.
Todas las transacciones son revisadas por todos los nodos, siendo aceptadas aquellas que aceptan la mayoría y confirmadas aquellas que la mayoría del poder de hash (que lo generan los mineros) acepten. Estos controles garantizan de forma democrática el cumplimiento del protocolo.