UTXO o Unspent transaction output (transacción de salida no gastada) es uno de los conceptos centrales que permiten el correcto funcionamiento de la tecnología blockchain que Satoshi Nakamoto desarrolló para Bitcoin, la primera criptomoneda del mundo.
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 qué 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 ¿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, 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, esta 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, ya verás más adelante en qué consisten.
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 dónde enviamos nuestro dinero.
- Además, 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 que se usa el dinero y en qué condiciones se puede gastar. En primer lugar, para poder usar un saldo en Bitcoin este 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 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 saldos, é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 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 hacer es tomar la dirección de Bitcoin, junto a 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 la 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 los nodos que quieren formar parte del protocolo interpretan las reglas de la misma forma.
Todas las transacciones son revisadas por todos los nodos, siendo validadas 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.
Curiosidades de las UTXO en Bitcoin
Ahora bien, en el ejemplo anterior seguramente habrás visto algunas cosas curiosas sobre las UTXO y su funcionamiento en Bitcoin, y le daremos explicación en esta sección.
Transacciones que no vienen de un UTXO
Como te indicábamos anteriormente, existen unas transacciones especiales, unas que no se generan con unos UTXO, pues las monedas aparecen “mágicamente”. Este particular caso se da en las transacciones coinbase, que son creadas por los mineros en el momento de minar un bloque y sirven para obtener la recompensa del bloque.
¿Por qué no realizar un pago fraccionado usando los saldos en BTC?
Leyendo el ejemplo anterior seguramente te has preguntado ¿Por qué el monedero de Bitcoin de Daniel no ha realizado un pago exacto de 1 BTC usando una sola entrada? La respuesta para esto es que los UTXO representan el saldo dentro de Bitcoin de forma 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.
Para hacerlo más sencillo veamos este ejemplo: si queremos pagar 1 BTC con nuestro monedero, pero dicha cantidad está repartida en 100 UTXO diferentes que tienen 0,01 BTC cada una, entonces nuestro monedero tomará las 100 direcciones como entradas de nuestra transacción y con ello realizará el pago. Es decir, el protocolo Bitcoin marca esas 100 UTXO como “Gastadas”. De allí, genera una transacción nueva con un UTXO nuevo que es a dónde hemos enviado el pago de 1 BTC, y nos deja sin control de saldo en esas direcciones usadas.
Relación con las comisiones en Bitcoin
Otra utilidad de las UTXO tiene que ver con las comisiones o fee en Bitcoin. En el ejemplo anterior explicamos que cada vez que realizamos una transacción, la comisión de dicha operación es igual a la diferencia entre las entradas y las salidas. Es decir:
Entrada total — Salida total = Comisiones
Esto nos indica que la construcción de una transacción tiene desde un primer momento previsto un saldo de comisiones. La comisión a los mineros no se asocia a ninguna salida, por lo que los mineros se quedan aquello que queda sin asociar. Es decir, la entrada total siempre deberá ser superior a la salida total asociada.
La comisión a los mineros no es fija, cada uno decide cuanto desea pagar en función de la prisa que tenga, pero es algo que vemos en todas las transacciones dentro de Bitcoin y tiene como finalidad dos cosas:
- Incentivar el trabajo de los mineros que al generar un bloque no solo reciben la recompensa del mismo, sino también también las comisiones de todas las transacciones confirmadas por dicho bloque.
- 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.
UTXO en otras blockchains y criptomonedas
El esquema de UTXO es tan bueno que el resto de criptomonedas han decidido usarlo para sus sistemas. Por supuesto, cada blockchain puede ajustar este concepto de distintas. De esta forma, puede adaptarse a las funciones adicionales que pueda presentar cada protocolo blockchain donde se ejecutan. Sin embargo, el funcionamiento básico es el mismo. De allí que incluso monedas de privacidad como Monero o Zcash, usen este esquema ajustado a las particularidades de su protocolo.
Curso Bitcoin Avanzado
Nivel avanzadoEn Bit2Me Academy te traemos este curso avanzado de Bitcoin gratuito para que te conviertas en el próximo Satoshi Nakamoto.