Wie erhält man Geschwister-Hash-Werte in einem Merkle-Proof?

Merkle Proofs sind einer der Hauptgründe, warum Menschen die Verwendung von Merkle Trees durch Bitcoin zuschreiben. Aber ich habe Mühe zu verstehen, wie diese in der Praxis funktionieren. Bitte erläutern Sie sowohl theoretisch als auch praktisch.

Da Lightweight Nodes nur Block-Header speichern, um den Speicherplatz zu begrenzen, der für ihre Kopien der BlockChain benötigt wird, haben Nodes keinen Zugriff auf die Transaktionen in einem Block; per Definition eines Block Headers ist die einzige Information, die sie über Transaktionen haben, die Merkle Root.

Aber die Merkle Root reicht nicht aus, um zu beweisen, dass sich eine Transaktion in einem Block befindet. Alle Geschwisterwerte im Merkle-Baum werden benötigt. Woher kommen diese Werte, wenn sie nicht bereits gespeichert sind?

Beispiel. Node 1 hat einen Block auf seiner Blockchain mit Merkle Root = H_ABC...P. Es möchte sehen, ob H_Kes in dem Block ist. Dazu benötigt es die Werte H_L; H_IJK; H_MNOP; H_ABC..H. Wo und wie bekommt er diese?

Geben Sie hier die Bildbeschreibung ein

Given that Nodes only store Block Headers to limit the storage needed for their copies of the BlockChainDas ist falsch. Knoten speichern den gesamten Block.
Korrigierte die Frage zu spezifizierenLightweight Nodes
Sie werden einen vollständigen Knoten fragen

Antworten (1)

Aber die Merkle Root reicht nicht aus, um zu beweisen, dass sich eine Transaktion in einem Block befindet. Alle Geschwisterwerte im Merkle-Baum werden benötigt. Woher kommen diese Werte, wenn sie nicht bereits gespeichert sind?

Jeder vollständige Knoten, der über eine vollständige Kopie des Blocks verfügt, kann einen Merkle-Beweis erstellen , der beweist, dass eine angeforderte Transaktionskennung (txid) mit der Merkle-Wurzel in einem Block-Header verbunden ist. Hier ist eine animierte Grafik, die zeigt, wie Bitcoin Core einen Merkle-Proof erstellt:

Für die txid (H5) für Transaktion 5 wird eine Liste von Hashes erstellt, die für den Beweis plus erforderlich sind, zusammen mit einer Liste von Flags, die der Software mitteilen, die den Beweis auswertet, welche Seite jedes Zweigs den Hash finden würde.

Der Lightweight-Client, der den Beweis auswertet, verwendet diese Flags und Hashes, um zu beweisen, dass die txid wie folgt mit dem Merkle-Stamm verbunden ist:

merkleblockWeitere Informationen finden Sie in der BtcInformation.org-Entwicklerreferenz über die Peer-to-Peer-Netzwerkprotokollnachricht , die diese Abbildungen enthält.