Verwenden der Merkle Root, um die Integrität der Transaktionen eines Blocks zu beweisen

Ich verstehe, dass ein Merkle Root der Hash von Hashes von Hashes (usw.) von Transaktionspaaren innerhalb eines Blocks ist, der letztendlich zu einem 'Root'-Hash führt. Wenn Sie irgendetwas an einem der ursprünglichen Transaktions-Hashes ändern, würde dies zu einem völlig anderen Root-Hash führen.

Was mich immer noch verwirrt, ist, rückwärts zu arbeiten, beginnend mit dem Root-Hash, um zu beweisen, dass eine bestimmte Transaktion in den Block aufgenommen wurde. Aus dem Thread „Was ist die Merkle-Root?“ verstehe ich das Beispiel, dass nur 4 Hashes benötigt werden, um zu beweisen, dass Tk im Block enthalten war (16-Transaktionsblock).

Meine Fragen sind:

  1. Wenn jede Transaktion überprüft werden soll, ob sie im Block enthalten ist, müssten Sie dann nicht sowieso alle Hashes kennen, wenn Sie jede Transaktion separat zurückverfolgen wollen?

  2. Erfolgen diese Überprüfungen nur auf Anfrage? oder ist es automatisch, bevor der Block zur Blockchain hinzugefügt wird?

  3. Wenn Sie eine bestimmte Transaktion verifizieren, woher gehen Sie, um die verschiedenen Sub-Hashes für die erforderlichen Merkle-Zweige zu erhalten?

Antworten (1)

Wenn jede Transaktion überprüft werden soll, ob sie im Block enthalten ist, müssten Sie dann nicht sowieso alle Hashes kennen, wenn Sie jede Transaktion separat zurückverfolgen wollen?

Ein vollständiger Knoten lädt den gesamten Inhalt des Blocks herunter, der alle Transaktionen enthält. Danach kann der Knoten problemlos die Merkle-Wurzel für den Block berechnen (dies ist erforderlich, um sicherzustellen, dass der Block gültig ist). Beachten Sie, dass die Zwischenebenen-Hashes im Merkle-Baum (zwischen den Blättern und der Wurzel) nicht kommuniziert werden müssen, ein Knoten mit der vollständigen tx-Liste kann den gesamten Merkle-Baum selbst generieren und gegen die im Block-Header aufgeführte Merkle-Wurzel verifizieren .

Erfolgen diese Überprüfungen nur auf Anfrage? oder ist es automatisch, bevor der Block zur Blockchain hinzugefügt wird?

Ein vollständiger Knoten überprüft den Inhalt eines Blocks und akzeptiert nur gültige Blöcke. Eine Brieftasche, die spv verwendet, führt keine vollständige Blockverifizierung durch (was das Herunterladen des vollständigen Blocks erfordern würde) und vertraut stattdessen darauf, dass die gültigen Block-Header, die sie von vollständigen Knoten im Netzwerk erhält, tatsächlich repräsentativ für die längste gültige Kette sind.

Wenn Sie eine bestimmte Transaktion verifizieren, woher gehen Sie, um die verschiedenen Sub-Hashes für die erforderlichen Merkle-Zweige zu erhalten?

Eine Brieftasche, die spv verwendet, fordert die relevanten Informationen von den vollständigen Knoten an, von denen sie Netzwerkdaten abruft.