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

 

Para ello, antes comentar qué, en el contexto de Bitcoin, toda transacción consume o recibe entradas y genera salidas, esas salidas son llamadas salidas de transacción no gastadas o UTXO (por su abreviatura en inglés: unspent transaction output).

 

¿Y qué es una Transacción?: Cuando vas a enviar Bitcoin, lo primero que debes hacer es preparar una Transacción, ahora no vamos a entrar en el detalle técnico de cómo hacerla, 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).

 

Ahora, 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.

 

Además, para efectos de seguridad y verificación, una transacción siempre va a hacer referencia (va a guardar información) a la transacción que la creó, mediante el ID de transacción y el índice de salida (cuantas monedas se generaron en esa salida).

 

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 (la 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?

Para lo que se denomina Tip, hablando terminología de Bitcoin 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 no en un bloque. 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.

¿Te resultó útil este contenido? Déjanos un comentario por favor.
5/5


Puedes dejarme una propina vía Lightning network

 

o vía Paynyms de Samourai Wallet:

PM8TJR2yPtx5JS8e8CuwXBZMay67mg1RKrtVptBRZQD5qCyZc1rosVCbScFmzgYYrQtVmc6cJZ2hCK2nBra3KAXxXCKPU4K4vRPjnBqGCYKYRUwimKnA +crimsontruth10e

Deja un comentario

A %d blogueros les gusta esto: