¿Cómo se obtienen valores hash hermanos en una prueba de Merkle?

Merkle Proofs es una de las principales razones por las que las personas atribuyen el uso de Merkle Trees a Bitcoin. Pero me cuesta entender cómo funcionan en la práctica. Por favor explique tanto teórica como prácticamente.

Dado que los nodos ligeros solo almacenan encabezados de bloque para limitar el almacenamiento necesario para sus copias de BlockChain, los nodos no tienen acceso a las transacciones en un bloque; por definición de un encabezado de bloque, la única información que tienen sobre las transacciones es Merkle Root.

Pero Merkle Root no es suficiente para probar que una transacción está en un bloque. Se necesitan todos los valores de hermanos hasta el árbol de Merkle. ¿De dónde vienen estos valores si aún no están almacenados?

Ejemplo. El nodo 1 tiene un bloque en su cadena de bloques con Merkle Root = H_ABC...P. Desea ver si H_Kestá en el bloque. Para hacerlo, necesita los valores H_L; H_IJK; H_MNOP; H_ABC..H. ¿Dónde y cómo los consigue?

ingrese la descripción de la imagen aquí

Given that Nodes only store Block Headers to limit the storage needed for their copies of the BlockChainEsto es incorrecto. Los nodos almacenan todo el bloque.
Corregida la pregunta para especificarLightweight Nodes
Le pedirán un nodo completo

Respuestas (1)

Pero Merkle Root no es suficiente para probar que una transacción está en un bloque. Se necesitan todos los valores de hermanos hasta el árbol de Merkle. ¿De dónde vienen estos valores si aún no están almacenados?

Cualquier nodo completo que tenga una copia completa del bloque puede construir una prueba de merkle que demuestre que un identificador de transacción solicitado (txid) se conecta a la raíz de merkle en un encabezado de bloque. Aquí hay un gráfico animado que muestra cómo Bitcoin Core construye una prueba Merkle:

Para el txid (H5) para la transacción 5, se crea una lista de hashes necesarios para hacer la prueba plus junto con una lista de banderas que le indican al software que evalúa la prueba en qué lado de cada rama encontrará el hash.

El cliente ligero que evalúa la prueba usa esas banderas y hashes para probar que el txid se conecta a la raíz de merkle de esta manera:

Para obtener más información, puede leer sobre el mensaje del protocolo de red punto a punto merkleblocken la Referencia para desarrolladores de BtcInformation.org , que incluye estas ilustraciones.