Wie ist es möglich, Zahlungen zu verifizieren, ohne einen vollständigen Netzwerkknoten zu betreiben?

Ich habe die Abhandlung von Nakamoto „Bitcoin: a peer-to-peer electronic cash system“ gelesen. Im Abschnitt Vereinfachte Zahlungsüberprüfung sagte er, dass es möglich sei, Zahlungen zu überprüfen, ohne einen vollständigen Netzwerkknoten zu betreiben.

Ich verstehe nicht, wie man mit einem Markle's Tree Root-Hash die Zahlung verifiziert. Um die Zahlung zu überprüfen, muss ich tatsächlich alle Knoten des rechten oder linken Zweigs kombinieren und hashen, nicht nur die Wurzel.

Wie kann außerdem ausgewählt werden, welcher Root-Hash abgerufen werden muss, ohne in allen Knoten zu sehen?

Antworten (2)

Sie haben Recht, um zu beweisen, dass eine Transaktion in einem Block bestätigt wird, benötigen Sie mehr als nur die Merkle-Root. Die benötigten Informationen werden als Merkle-Pfad bezeichnet und bestehen aus dem linken/rechten Blatt zu Ihrem Transaktionsknoten und dem rechten/linken Elternteil und so weiter bis zur Wurzel.

Hier ist ein Diagramm, das einen Merkle-Pfad darstellt: http://chimera.labs.oreilly.com/books/1234000001802/ch07.html#merkle_tree_path

Der Merkle-Wurzel und -Pfad sowie die Block-Header der Blockchain werden von einer Auswahl zufälliger Bitcoin-Knoten angefordert. Ihr SPV-Client kann nicht überprüfen, ob die Transaktion gültig ist (keine doppelte Ausgabe, korrekte Signaturen usw.), aber da er überprüfen kann, ob die Transaktion in einem Block mit X-Bestätigungen enthalten war, kann er davon ausgehen, dass das Bitcoin-Netzwerk die Transaktion akzeptiert hat . Daher akzeptiert Ihr SPV-Knoten die Transaktion, indem er darauf vertraut, dass das Bitcoin-Netzwerk nur gültige Transaktionen zur Blockchain enthält.

Wie kann ein Knoten die Transaktion verifizieren? Der Knoten muss alle Blockchain-Blöcke ausführen und Merkle's Tree wird nur zum Nachweis der Gültigkeit verwendet?
Der SPV-Knoten verwendet nur die Blockheader, die nicht all die vielen verschiedenen Transaktionsdaten enthalten und daher insgesamt nur wenige Kilobyte groß sind. Die Merkle-Wurzel befindet sich in den Kopfdaten. Um zu überprüfen, ob eine Transaktion vom Netzwerk bestätigt wurde, fordert der SPV-Client eine zufällige Auswahl von vollständigen Knoten heraus, indem er nach einem Merkle-Pfad für die Transaktion fragt. Der Pfad enthält nicht den gesamten Baum, da er nur der Transaktion bis zur Wurzel folgen muss, wie aus dem Diagramm ersichtlich ist. Wenn die Wurzel bekannt ist, ist es nicht möglich, einen "falschen" Merkle-Pfad für eine Transaktion zu konstruieren.

Ich muss alle Knoten des rechten oder linken Zweigs kombinieren und hashen

Oder Sie können die meisten dieser Werte erhalten. Wenn Ihnen jemand den Wert für den rechten Zweig gibt, brauchen Sie keine weiteren Informationen zu dieser ganzen Seite des Baums. Und wenn Sie am Ende den richtigen Wert für den Root-Hash haben, wissen Sie, dass sie Sie nicht angelogen haben.