El modelo UTXO de Bitcoin

El modelo de contabilidad que Bitcoin utiliza se denomina modelo utxo, en este artículo vamos a revisar cual es su funcionamiento. | Decentralized

El modelo UTXO de Bitcoin

¿Cómo sabe Bitcoin que puede utilizar las “monedas que quieres enviar?

Autor: @decentralized

Bitcoin es un sistema distribuido que permite a los usuarios recibir, almacenar y enviar dinero.

El modelo de contabilidad usado dentro de Bitcoin se denomina modelo UTXO, el cual proviene de la abreviatura en inglés de Unspent Transaction Output, y que significa transacción de salida no gastada, sin embargo es ampliamente conocido como utxo.

Este modelo de contabilidad tiene por objetivo establecer la forma en que se realizará todo el registro contable dentro de Bitcoin, es decir, como se van a registrar todas las transacciones de transferencia de valor dentro de Bitcoin.

Por diseño, toda transacción de Bitcoin cuenta con una entrada, que es de donde provienen los bitcoin y una salida que es hacía donde se destina el bitcoin de una transacción.

Por lo que un utxo, siempre es el resultado de una transacción previa, y la entrada o inicio de una siguiente transacción. Es debido a esta forma de registro que Bitcoin es altamente trazable ya que toda utxo proviene de una transacción que es registrada y conocida.

Otro objetivo de este modelo es el de facilitar la verificación de la validez de cada transacción, un utxo nunca podrá ser mayor en saldo que el input origen.

¿Y qué es una Transacción?

Las transacciones son declaraciones certificadas criptográficamente que instruyen a los participantes de la red para que actualicen su copia del libro contable de saldos, la cual se mantiene de forma independiente (UTXOSET).

Así que cuando se desea gastar bitcoin, se crea una transacción, la cual establece explícitamente qué utxos se están gastando y además, la transacción define cómo se deben asignar esos fondos al nuevo propietario en forma de nuevos utxos.

Consideraciones sobre los utxos:

Los utxos están denominados en Satoshis, la unidad nativa del protocolo Bitcoin. 100,000,000 Satoshis son un bitcoin.

No pueden gastarse parcialmente, se crean una vez y luego se gastan en su totalidad por otra transacción.

Vamos a poner un ejemplo:

  • Tienes 5000 satoshis en un utxo (0.00005000 bitcoin) y envías 1000,
  • se creará una transacción que gastará completamente esos 5000 satoshis generando una entrada por los 5000 satoshis y dos salidas (utxo):
  • una por 1000 satoshis, que son los que se envían,
  • y la otra utxo por 4000 satoshis, que es el cambio que corresponde a los 5000 – 1000 satoshis

No vamos a entrar en el detalle técnico de cómo se hace la transacción, pero basta que sepas que para ello puedes usar una cartera o wallet y que son estas piezas de software las que se encarga de hacerlo por ti, entonces una Transacción es la transferencia de bitcoin de una cartera a otra u otras (simplificando).

Aquí empieza el proceso, una vez que envías la transacción a través de una cartera, se debe validar que cada entrada de la transacción se corresponde con una utxo válida que exista en la red, a manera de ejemplo vamos a decir que cada utxo es cada moneda que vas a enviar.

Solo mientras están disponibles para ser gastados, es que nos referimos a ellos como salidas de transacción «no gastadas», pero la cadena o blockchain, mantiene un registros de todas las transacción realizadas.

Cada utxo se identifica de manera única mediante la combinación de, la transacción que lo creó (guarda el ID de transacción) y el índice de salida de la transacción (cuantos utxos se generaron en esa salida y su posición).

Ahora damos un salto a los Nodos para poder entender que es lo que se hace dentro de el. Por ello es importante que sepas que cada Nodo Completo mantienen una base de datos totalmente autónoma de todas las utxo válidas en la red y es contra esa base de datos que se cotejan las transacciones que van llegando al nodo.

Así que para validar una transacción, un nodo completo sólo buscará en la Base de Datos utxo la moneda que estas intentando gastar (valida utxo a utxo aunque la transacción tenga más de una «moneda»), asegurándose de que existe y está siendo utilizada válidamente, es decir que vienen del ID de transacción correcto.

Esto se hace en todos y cada uno de los nodos y para todas y cada una de las transacciones.

De esta forma es como el nodo determina que la transacción que esta llegando o entrando al nodo es valida en cuanto al gasto de las monedas, es decir, valida que esas monedas existen y vienen del ID de transacción adecuado, se validan otras cosas pero para efectos de este artículo basta con saber esto.

Posteriormente, cuando una transacción es confirmada dentro de un bloque, las monedas de esa transacción se eliminan de la base de datos utxo, es importante que entiendas que se eliminan como parte de esa transacción, por decir a manera de ejemplo, esas monedas son eliminadas de tu propiedad y las nuevas salidas de esa transacción (las monedas que han llegado a su nuevo dueño) se añaden a la base de datos, ahora como nuevas monedas que están relacionadas con su nuevo ID.

Por último decirte que esa Base de Datos se le conoce como UTXO Set (conjunto de salidas no gastadas).

Es gracias a este UTXO Set (junto con otras consideraciones de más bajo nivel) que se puede tener una aproximación para conocer cuantos Bitcoins hay en circulación (el supply).  La estimación es aproximada y si te interesa conocer más sobre el tema te invito a leer el siguiente hilo de twitter.

¿Dónde se almacena la UTXO?

Hablando terminología de Bitcoin, TIP sería el último bloque de la cadena activa, se mantiene una base de datos con el conjunto de salidas de transacciones no gastadas (UTXOs), y se almacena en $DATADIR/chainstate, y en memoria.


Y cuando se recibe un nuevo bloque, se eliminan los UTXOs gastados por las transacciones en el bloque, de esa Base de Datos y se añaden las nuevas salidas de esas transacciones.

Si hubiera una reorganización de la cadena (reorg), se utilizan los datos almacenados en $DATADIR/bloques/rev*.dat para deshacer los cambios en la Base de Datos de UTXO y dejar la Base de Datos de UTXO acorde a la nueva cadena (la reoganizada).

¿Qué sucede con las transacciones después de que se incluyen en un bloque recién extraído? ¿Se eliminan de la Base de Datos?

La mempool es un conjunto de transacciones que son válidas pero que aún no están en un bloque, es decir aún no se han confirmado, por lo que  no son tratadas como parte de la Base de Datos UTXO. Más bien, es sólo un grupo de transacciones que son internamente consistentes y coherentes con la cadena activa. Esto significa que cualquier transacción de mempool sólo gasta las salidas que están en el UTXO Set, o de otras transacciones de mempool.

Cada vez que entra un nuevo bloque, se eliminan sus transacciones de la mempool (suponiendo que estuvieran allí), y se elimina cualquier transacción de la mempool y sus dependencias que entren en conflicto con el nuevo UTXO Set.


Este artículo fué publicado originalmente en Dinero Sin Reglas