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

Vamos a ver como funciona, brevemente, Bitcoin para saber que monedas (UTXO) puedes gastar.

 

Vamos a revisar, a alto nivel cual es el proceso mediante el cual Bitcoin sabe que puede utilizar las “monedas” que quieres gastar.

Bitcoin es un sistema distribuido que permite a los usuarios recibir, almacenar y enviar dinero.
El valor se transmite al enviar una orden de pago a la red llamada transacción.

 

¿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).

 

Todos los fondos en bitcoin existen en forma de salidas de transacción no gastadas o UTXOS por sus siglas en inglés (unspent transaction outputs).

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.

Gracias por tu tiempo y si te resulto útil esta información o quieres comentar cualquier discrepancia que veas, por favor no dejes de hacerlo dejando un comentario, la información del correo que dejes es solo para poder registrar la respuesta pero no es usada para nada más.

 

Te agradezco el tiempo que te has tomado para leerme y espero puedas compartir esta página con la gente que conozcas que este o pueda estar interesada en el tema.

5/5

Puedes dejar una propina con el botón «Invítame un café».

O mediante Lightning network:

[email protected]

También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:

PayNym: +decentralized