CONCEPTO DE UTXO
o
COMENZANDO A ENTENDER LA BLOCKCHAIN
Explicaré aquí (lo mejor que pueda) que es un UTXO (del inglés “unspended transaction output” o “transacción de salida no gastada” en español). Es un concepto importante en las blockchain tipo Bitcoin.
Conocerlo nos permitirá entender algunas características o funciones avanzadas de este tipo de blockchain y sus monederos. Entre ellas: el mecanismo de cambio, la función “coincontrol”, el cálculo de comisiones de envío, el problema del polvo…
Empezamos con algún ejemplo.
Imaginaos que vivimos en la Edad Media. El dinero utilizado es el oro, en forma de monedas. Monedas de muy distintos tipos, de emisores diferentes, pero todas son de oro puro. Además todos tenemos una balanza de precisión, y por tanto compramos y vendemos cosas a cambios de gramos de oro.
Por tanto, cuando vas a comprar algo, que pongamos que vale 8 gramos de oro, gastarás monedas de tu bolsa, una o varias, que pesen 8 gramos o más. No siempre podrás gastar 8 gramos justos (las monedas no se pueden partir). Si solo tienes monedas de 5 gramos, tendrás que gastar dos monedas y obtener 2 gramos de cambio. Y si solo tienes moneditas muy pequeñas, tendrás que gastar muchas.
Bien, ahora supongamos que los vendedores no quieren que les paguen con muchísimas monedas muy pequeñas, porque no les da la gana. Te exigen que les pagues con una única moneda, del valor exacto de lo que estas comprando. Los vendedores en aquella época eran así.
¿Que podrías hacer?. Pues usar los servicios de un artesano “fundidor de monedas”. Los fundidores de monedas cogen varias monedas que tú les das, y las funden en una sola moneda de valor equivalente a la suma. O como mucho en dos monedas, eso sí, de la cantidad que tú les digas (que sumen el total de lo entregado, claro).
En nuestro ejemplo, iríamos al fundidor con nuestras dos monedas de 5 gramos, y le diríamos que nos las fundiese en dos de 8 y 2 gramos respectivamente. Luego ya podemos pagar al vendedor con la de 8 gramos, y quedarnos la de 2.
Gracias a los fundidores, al vendedor no le importa que gastes muchísimas monedas pequeñas o pocas grandes, el siempre recibe una única moneda con el valor justo, y tu obtienes como cambio (si lo hubiese) una única moneda, independientemente de las monedas que tenga el vendedor para darte el cambio (en realidad no existiría el concepto de cambio que entrega el vendedor, aquí se paga siempre “justo” gracias a los fundidores).
Para terminar ¿como obtengo mis monedas de oro?. Pues trabajando, y que un tercero te pague con ellas, o buscando oro en la naturaleza y fundiendo tus propias monedas.
Parecido funciona la blockchain.
Pensemos ahora que las monedas de oro son los UTXOs. Tendrás en tu monedero (bolsa) un conjunto UTXOs (monedas de oro), cada UTXO tendrá un valor concreto cualquiera en la crypto en cuestión (el peso en gramos de oro de cada moneda), y para pagar algo deberás escoger una parte de tus UTXOs (monedas), y dividirlos en dos para pagar justo y quedarte con el cambio.
¿De donde salen mis UTXOs?. Pues se forma uno cada vez que recibes una cantidad en tu monedero, y el valor del UTXO será precisamente lo que has recibido. Imagina que eres minero de BTC, y que tu pool de minería te hace un envió todas las semanas con lo que has minado esa semana (aprox 0,1 BTC). Pues acabarás el año con 52 UTXOs, que sumarán más o menos 5.2 BTC, en tu monedero.
Destacar que en NINGÚN MOMENTO se suma o se acumula el total de tu saldo (suma de valores de tus UTXOs) en la blockchain. Calcular tus saldos es una función que hacen los monederos, no la blockchain.
Otro ejemplo, ahora con Bitcoin.
Bob y Alice son usuarios de Bitcoin y quieren hacer una compra/venta entre ambos. Bob le compra a Alice “algo” por 5 BTC. Bob inicia su monedero, le introduce la dirección de recepción propiedad de Alice (que le entrego Alice anteriormente) y le indica que transfiera 5 BTC a esa dirección.
¿Como construye el monedero de Bob la transacción para ese envío de 5 BTC?. ¿Que UTXOs se usarían?. Pues el monedero de BOB actuará así (igual que nosotros cuando compramos con las monedas de oro y el fundidor):
-
Primero busca en los UTXOs (entradas no gastadas) de Bob, y selecciona un subconjunto, cuyo valor sumado sea igual o superior a los 5 BTC a transferir. Pueden ser uno, unos pocos o cientos. Estos pasarán a estar ya gastados y dejan de ser útiles (Bob no podrá gastarlos dos veces, dejan de ser UTXOs). Supongamos que se escogen uno de 3 BTC y otros dos de 1,5 BTC (6 BTC en total).
-
Si hay suerte y el monedero encuentra un/unos UTXOs que sumasen exactamente 5 BTC, pues el monedero ya podría generar la transacción, que en este caso no tendría cambio. Esa transacción generaría solo un UTXO de salida de 5 BTC y la vincularía a la dirección de Alice.
-
Si la suma de UTXOs escogidos es mayor que lo que hay que enviar (lo más habitual), el monedero genera una transacción que crea 2 nuevos UTXO. Un UTXO con la cantidad justa a entregar (5 BTC) y la vincula a la dirección de Alice, y también crea otro UTXO con el cambio (1 BTC) que vincula a una dirección de Bob. Así Alice recibe solo un UTXO con 5 BTC, y Bob pierde un grupo de 3 UTXOs con 6 BTC (IMPORTANTE, REPETIMOS: pasan a gastados, y dejan de ser UTXOs) pero gana un UTXO con 1 BTC (el cambio) que puede gastar.
O sea, que si tú tienes por ejemplo 13 Bitcoins en tu monedero, no tienes en realidad una “unidad” que vale 13 BTC (ni tampoco 13 unidades de un Bitcoin, no funciona así), si no que tendrás una serie de “UTXOs”, de cualquier valor, en una o más direcciones, que sumados dan 13 BTC. Los UTXOs serían las monedas de oro del ejemplo anterior.
Espero que se entienda algo
.
En otros artículos explicaremos como este elemento, los UTXOs, están en el núcleo del funcionamiento de la blockchain y de los monederos que interactúan con ella.