¿Cómo/dónde se almacena el mapeo de una transacción a un bloque en particular?

Según el libro blanco de Bitcoin, un bloque contiene los campos "Anterior Hash", "Nonce" y "Root Hash". El hash raíz es un nodo raíz del árbol Merkle de todas las transacciones que se han confirmado en ese bloque en particular.

Leí en el quinto párrafo de la respuesta superior sobre ¿ Qué es la raíz de Merkle? :

Si tenemos una transacción que afirma haber sido del bloque #234133, podemos obtener las transacciones de ese bloque, verificar el árbol de Merkle y saber que la transacción es válida.

Digamos que un bloque ben algún lugar de la cadena de bloques contiene ttransacciones. ¿Dónde y cómo se almacena el mapeo de un conjunto particular de transacciones a un bloque particular? Porque la propia cadena de bloques solo contiene el hash raíz de todas las transacciones para ahorrar espacio. Entonces, ¿hay otros componentes ocultos que no se han publicado en el libro blanco y hay recursos para obtener una idea completa sobre ellos?

Gracias.

El documento técnico no se parece en nada a una declaración de cómo está diseñado el sistema; en el mejor de los casos, es una descripción general de los conceptos. La implementación real ni siquiera sigue estrictamente lo que se dice, y no debe esperar que lo haga un documento de 9 páginas.

Respuestas (3)

El árbol Merkle se recrea dinámicamente para validarlo en un bloque, el orden de las transacciones en el bloque describe implícitamente cómo debería verse el árbol Merkle cuando se reconstruye. Las transacciones se almacenan como parte del bloque, literalmente el encabezado, un número que indica el número de transacciones a seguir, y luego sigue una lista de todas las transacciones.

Pero, ¿cómo encuentra una transacción en particular o un bloque que tiene la transacción en particular cuando desea verificar que la transacción haya tenido lugar?
O lee todos los bloques y mantiene un índice de las transacciones, o solicita un servicio que sí lo sepa.

El documento técnico solo brinda una descripción general conceptual de Bitcoin, pero ciertamente no es una especificación completa. De todos modos, más allá de la cadena de bloques en sí, hacer un seguimiento de las transacciones y los UTXO es más un detalle de implementación que una preocupación de protocolo. Varios exploradores, nodos y billeteras diferirán en sus enfoques, pero generalmente hay algunas asignaciones diferentes entre transacciones y bloques para diferentes propósitos:

Blockchain: mapeo de bloques a transacciones

En primer lugar, los bloques incluidos en la cadena de bloques incluyen las transacciones que confirmaron. La cadena de bloques completa se conserva en los nodos completos de archivo. Como ya explicó Anónimo , el árbol merkle solo se almacena implícitamente en la cadena de bloques por cada bloque, simplemente enumerando su conjunto completo de transacciones en orden. Los nodos completos recrean el árbol de Merkle completo a pedido al repetir las transacciones del bloque durante la validación del bloque, así como cuando se les solicita una prueba de Merkle.

Intereses específicos: Transacción a mapeo de bloques

Las billeteras generalmente conservan copias de las transacciones que involucran sus direcciones. Estos objetos de transacción generalmente deben mantener la altura del bloque y el hash del bloque, de modo que la billetera pueda lidiar con las reorganizaciones de la cadena y realizar un seguimiento del recuento de confirmaciones. Sospecho que algunas implementaciones de billetera también pueden mantener la prueba de Merkle si, por ejemplo, quieren poder probar la existencia de fondos en otros dispositivos.

Bitcoin Core mantendrá un índice de transacciones completo cuando se configure con el índice de inicio -tindex=1.

Conjunto UTXO: Salida a transacción/mapeo de bloques

Los nodos completos mantienen el libro mayor de todos los fondos de Bitcoin en forma de conjunto de salida de transacción no gastada (UTXO). Los UTXO se identifican de forma única a través de sus puntos de salida ([txid:vout]), lo que significa que hacen referencia inherente a la transacción correspondiente. Un objeto UTXO generalmente también debe incluir una referencia directa o indirecta al bloque que confirmó la transacción que creó el UTXO.

Exploradores

Los exploradores generalmente mantienen bases de datos más completas de transacciones, bloques, direcciones y UTXO.

No estoy seguro de que esté preguntando como un ser humano que quiere verificar una determinada transacción, o como un desarrollador que quiere escribir un código para verificar una determinada transacción dado su número de bloque, dirección, etc.

1-En general, si el usuario A hubiera dicho "n Btc" como un UTXO que cambió a "n' Btc" después de la transacción X en el bloque B; entonces desea validar el gasto de la UTXO "n" (verificando la prueba/testigo de Merkle) y la creación de la UTXO "n'" en el bloque B.

2- O como usuario, sin ningún tipo de codificación, puede ir a uno de estos sitios https://m.btc.com/ https://www.blockchain.com https://blockchair.com

-o comience por el bloque # (si hay más de 1000 TX en el bloque, sería difícil verificarlo de esta manera) ej. Estas fotos muestran cómo comprobé que la base de monedas UTXO del bloque 100 000 se gastó en el bloque 266 668ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

-o por la dirección de usuario dada, obtienes algo como esto Luego buscas el valor UTXO en el TX dado (ya sea entrada o salida desde la dirección de la flecha y el color como ves aquí) Cuando haces clic en él ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí, te llevará al TX que lo creó con block no & all info; digamos que hice clic en el enlace de arriba, obtengo los detalles de la transacción y el bloque noingrese la descripción de la imagen aquí

(Sí, probablemente estas sean direcciones de billetera, pero tal vez sería más fácil verificarlas ya que hay un orden cronológico mientras que dentro de un bloque no sabes cuál es el índice/orden relativo de tu TX; quiero decir que no dijiste que está dado )

3 -Si estás preguntando como desarrollador , supongo que este código central de Bitcoin te dice cómo se almacenan realmente las cosas encuéntrelo "casualmente" ayer al verificar esto https://github.com/mit-dci/utreexo/issues/277

Espero que esto ayude...