Warum hat A Block einen Merkle-Root-Hash? [Duplikat]

Das ist die Frage, warum ein Block einen Merkle-Root-Hash haben muss, denn wenn ein Block abgebaut ist, wird der Hash-Wert dieses Blocks im Header des nächsten gespeichert, sodass die Kette generiert wird.

Werden einige Daten geändert, ist der Hash nicht derselbe, sodass möglicherweise festgestellt wird, dass einige Daten geändert wurden.

Ich sehe also, dass das Speichern des Merkle-Root-Hashes im Header eines Blocks unnütz ist, da es dasselbe tut wie der Hash-Zeiger des nächsten Blocks der Kette

Antworten (1)

Jeder Transaktion ist ein Hash zugeordnet. In einem Block werden alle Transaktions-Hashes im Block selbst gehasht (manchmal mehrmals – der genaue Prozess ist komplex), und das Ergebnis ist die Merkle-Wurzel.

Mit anderen Worten, die Merkle-Root ist der Hash aller Hashes aller Transaktionen im Block. Die Merkle-Wurzel ist ein Teil des Block-Headers . Mit diesem Schema ist es möglich, sicher zu verifizieren, dass eine Transaktion vom Netzwerk akzeptiert wurde (und die Anzahl der Bestätigungen zu erhalten), indem nur die kleinen Blockheader und der Merkle-Baum heruntergeladen werden – das Herunterladen der gesamten Blockkette ist nicht erforderlich. Diese Funktion wird derzeit in Bitcoin nicht verwendet, wird aber in Zukunft verwendet.

UPDATE: Diese Funktion wird derzeit von leichten Bitcoin-Clients verwendet

"Werden einige Daten geändert, ist der Hash nicht derselbe, sodass es möglich ist, zu bemerken, dass einige Daten geändert wurden."

Ja, wenn einige Daten geändert werden, wird der Merkle-Root-Hash anders sein.

„Diese Funktion wird derzeit in Bitcoin nicht verwendet, wird aber in Zukunft verfügbar sein“ ...? Dies ist falsch, Light-Clients verwenden die Merkle-Root, um die Gültigkeit von Transaktionen zu überprüfen. Die Technologie wird also derzeit tatsächlich weit verbreitet und genutzt.
Ich habe ein bisschen mehr nachgeforscht, und ich denke, dass der Hash des Blocks nur über den Block-Header ausgeführt wird, und im Block-Header gibt es die Merkle-Root (Wenn eine Transaktion geändert wird, ändert sich der Merkle-Root-Wert und als Merkle-Root im Header gespeichert wird, ändert sich der Hash des Headers)