Wie schützt die Verkettung der Blöcke vor der Änderung von Daten?

Ich bin mit der Blockverkettung verwirrt, da ich weiß, dass ein Blockheader einen Verweis auf den vorherigen Blockheader-Hash mit der Merkle-Wurzel und anderen Feldern enthält. Dieser Header-Hash bezieht sich (berechnet) auf den Header und enthält nicht den Transaktionsblock, sodass die Kette fehlschlägt, wenn der Header manipuliert wird. Ich habe das verstanden, aber wenn die Transaktionen im Block bearbeitet werden, wird der Header-Hash nur dann nicht geändert, wenn die Merkle-Root neu berechnet wird.

Meine Frage ist, wann ein Knoten einen Block erhält, wie er ihn verifiziert (einfach den Header erneut hashen oder zuerst die Merkle-Root neu berechnen und dann den Header erneut hashen)?

Antworten (1)

Merkle Root ist ein Teil des Blockheaders und wird basierend auf den im Block enthaltenen Transaktionen berechnet. Wenn Transaktionen im Block geändert werden, würde dies die Merkle-Wurzel im Header ändern. Wenn die Merkle-Root geändert wird, ändert sich der Block-Header und der anfänglich berechnete Header-Hash ist nicht mehr gültig.

Wenn ein Knoten einen Block empfängt, wie überprüft er ihn (einfach den Header erneut aufbereiten oder zuerst die Merkle-Root neu berechnen und dann den Header erneut aufbereiten)?

Wenn ein Full Node einen Block erhält, führt er verschiedene Prüfungen durch, um sicherzustellen, dass der Block den Konsensregeln entspricht. Dazu gehört die Überprüfung, ob alle Transaktionen im Block gültig sind. Wenn eine bestimmte Transaktion nicht gültig ist, wird der gesamte Block vom Full Node abgelehnt. Nach der Verifizierung der Transaktionen würde der vollständige Knoten den Merkle-Hash verifizieren. Dann schaut sich der vollständige Knoten den Block-Header an und überprüft die Zeitstempelregel, den vorherigen Block-Hash und andere Komponenten und berechnet dann den Block-Header-Hash und prüft, ob er kleiner als das Ziel ist. Wenn eine der Verifizierungsregeln fehlschlägt, lehnt der Knoten die Sperre ab. Eine vollständige Liste der Blocküberprüfungsregeln finden Sie hier.

Ok, jetzt habe ich es verstanden, mir haben diese Überprüfungsregeln gefehlt. Sie haben über vollständige Knoten gesprochen, was ist mit anderen einfachen Knoten, führen sie diese Überprüfungen auch durch?
Simple Payment Verification (SPV)-Knoten, die viele Lightweight Wallets verwenden, laden nur die Block-Header herunter und nicht die in jedem Block enthaltenen Transaktionen. SPV-Knoten verlassen sich auf eine etwas andere Verifizierungsmethode und setzen auf Peers, um bei Bedarf Teilansichten der relevanten Teile der Blockchain bereitzustellen. SPV-Knoten verknüpfen die Transaktion und den Block, der sie enthält, unter Verwendung des Merkle-Pfads. Daher hat es keine vollständige Sichtbarkeit der Blockchain, kann jedoch nicht davon ausgehen, dass eine Transaktion in einem Block enthalten ist, obwohl dies in Wirklichkeit nicht der Fall ist.