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)?
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.
anis herbadji
Ugam Kamat