¿Cómo obtiene un cliente la rama merkle de una transacción?

Cuando el cliente de Bitcoin recibe una transacción, verifica si la transacción está confirmada. Esto se hace verificando que la transacción tiene un hash correcto, en el árbol de merkle, hasta la raíz de merkle en un bloque.

¿Cómo sabe el cliente qué bloque contiene la raíz Merkle de la transacción?

Después de encontrar el bloque correcto, ¿cómo se adquiere la rama Merkle?

Respuestas (1)

No hay forma en el protocolo P2P actual de solicitar una transacción histórica (=confirmada), sin solicitar el bloque en el que se encuentra. Para admitir eso, se requeriría que el par tenga un índice completo de todas las transacciones, lo que no es necesario para el normal operación.

Para solicitar una transacción, deberá:

  • Úselo getdata MSG_TX <txid>para solicitar un grupo de memoria o una transacción retransmitida recientemente. En este caso, no existe información de bloque.
  • Úselo getdata MSG_BLOCK <blkid>para solicitar un bloque completo, en cuyo caso obtiene el bloque con él y necesita verificar el árbol merkle completo de todos modos.
  • Úselo getdata MSG_FILTERED_BLOCK <blkid>para solicitar un bloque filtrado (consulte BIP37), en cuyo caso puede verificar el árbol Merkle parcial para verificar que la transacción sea de hecho parte del bloque.
Entonces, ¿cómo puede un cliente saber qué bloque solicitar?
¿Por qué mi cliente no apoya el getdatamétodo? ¿Es uno nuevo?
@summerbulb Usted solicita bloques sucesivos como parte del proceso de sincronización (no obtiene bloques para obtener transacciones específicas, simplemente forman parte de esos bloques), utilizando un ciclo getblocks// inv.getdatablock
@StevenRoose getdataes un mensaje P2P, no una llamada RPC. Puede usar los comandos getblocky getblockhashRPC para solicitar bloques de la base de datos.