Mastering Bitcoin
8. La Red Bitcoin » Reservas de Transacciones
Página 57 de 98
Reservas de Transacciones
Casi todos los nodos en la red bitcoin mantienen una lista temporal de las transacciones no confirmadas llamada memory pool, mempool, o transaction pool. Los nodos utilizan esta reserva (en inglés, «pool») para mantener un registro de las transacciones que son conocidas por la red, pero que aún no están incluidas en la cadena de bloques. Por ejemplo, un nodo que tiene la cartera de un usuario utilizará el pool de transacciones para rastrear los pagos entrantes a la cartera del usuario que se han recibido en la red, pero aún no han se confirmado.
Cuando se reciben y se verifican las transacciones, se añaden al pool de transacciones y se retransmiten a los nodos vecinos para que se propaguen en la red.
Algunas implementaciones de nodo también mantienen un pool separado de transacciones huérfanas.
Si las entradas de una transacción se refieren a una transacción que aún no se conoce, tal como un padre que falta, la transacción huérfana será almacenada temporalmente en el pool huérfano hasta que llegue la transacción padre.
Cuando se añade una transacción al pool de transacciones, se comprueba el pool huérfano para cualquier huérfano que haga referencia a las salidas de esta transacción (sus hijos). Se validan los huérfanos que coincidan. Si es válido, se retira del pool huérfano y se añade al pool de transacciones, completando la cadena que comenzó con la transacción padre. A la luz de la transacción que se acaba de agregar, que ya no es huérfana, el proceso se repite recursivamente en busca de descendientes, hasta que no se encuentren más descendientes. A través de este proceso, la llegada de una transacción padre desencadena una reconstrucción en cascada de toda una cadena de transacciones interdependientes por volver a unir a los huérfanos con sus padres hasta el final de la cadena.
Tanto el pool de transacciones como el pool huérfano (en el caso de que esté implementado) se almacenan en la memoria local y no se guardan en almacenamiento persistente; más bien, se llenan dinámicamente de los mensajes entrantes de la red. Cuando se inicia un nodo, los dos pools están vacíos y son progresivamente ocupados con nuevas transacciones recibidas en la red.
Algunas implementaciones del cliente bitcoin también mantienen una base de datos UTXO o pool UTXO, que es el conjunto de todas las salidas no gastadas en la cadena de bloques. Aunque el nombre «pool UTXO» suena similar al pool de transacciones, representa un conjunto diferente de datos. A diferencia de los pools de transacciones y huérfanos, el pool UTXO no se inicializa vacío sino que contiene millones de salidas de transacción no gastadas, incluyendo algunas que datan de 2009. El pool UTXO puede guardarse en la memoria local o como una tabla de base de datos indexada en almacenamiento persistente.
El pool de transacciones y el pool huérfano representan la perspectiva local de un solo nodo y pueden variar significativamente de un nodo a otro, dependiendo de cuando se inicia o reinicia el nodo. Sin embargo, el pool UTXO representa el consenso emergente de la red y por lo tanto va a variar poco entre los nodos. Además, los pools de transacciones y huérfanos solo contienen transacciones no confirmadas, mientras que el pool UTXO solo contiene salidas confirmadas.