Was würde passieren, wenn ich eine modifizierte Version eines früheren Blocks veröffentliche? Würde es sofort von Peer-Knoten abgelehnt werden?

Ich lese gerade das Buch „Mastering Bitcoin“ und habe Kapitel 2 und 10 fertig gelesen, aber ich finde immer noch keine Antwort.

Angenommen, die aktuelle Hauptkette hat 5 Blöcke:

B0 <- B1 <- B2 <- B3 <- B4

Während neue Transaktionen einfließen, schürfen die ehrlichen Miner B5den 6. Block.

Wenn ich beispielsweise eine modifizierte B2, B2'im Bitcoin-Netzwerk veröffentliche, was passiert mit diesem modifizierten Block, wenn er von den anderen Peers empfangen wird? Nehmen wir an B2', dass alle Transaktionen enthalten B2sind, außer dass der Betrag der übertragenen Bitcoins einer Transaktion geringfügig geändert wurde, aber immer noch ein gültiger Betrag ist.

  • Würde B2'sofort abgelehnt werden? Es sieht nicht so aus, weil die geänderte Transaktion immer noch gültig zu sein scheint. Soweit ich gelernt habe, verwendet der Empfängerknoten die früheren Blöcke B0und B1, um zu validieren B2', und ich denke, die Validierung würde erfolgreich sein. Habe ich recht?
  • Wenn B2'nicht sofort abgelehnt wird, würden die Peer-Knoten es B1als sekundäre Kette verknüpfen? Ich denke eigentlich, dass B2'es abgelehnt werden sollte, aber nachdem ich Kapitel 10 von Mastering Bitcoin gelesen habe, scheine ich keinen Grund zu finden, warum es abgelehnt werden sollte.
  • Außerdem, wenn sowieso B2'verlinkt B1ist, was würde passieren, wenn der 6. Block, B5, jetzt abgebaut und veröffentlicht wird? Laut Kapitel 10 „werden die Transaktionen … wieder in den Mempool eingefügt, um in den nächsten Block aufgenommen zu werden, da der Block, in dem sie sich befanden, nicht mehr in der Hauptkette ist.“ Ich denke, jetzt B2'würde es entfernt und seine Transaktionen würden wieder in den Mempool eingefügt. Dann werden alle unveränderten Transaktionen in B2'wieder entfernt, weil sie B2in die Hauptkette aufgenommen wurden, und die modifizierte Transaktion in B2'würde abgelehnt, weil sie mit dem Gegenstück in in Konflikt steht B2.

Danke für jede Hilfe!

Antworten (1)

Knoten würden es sofort ablehnen.

Wenn Sie einfach die Daten von B2 ändern und senden, ist der Block per Definition ungültig, da der Proof of Work und Merkle Tree nicht mehr gültig sind.

Wenn Sie die Daten ändern und den Merkle-Baum neu erstellen und den Proof of Work wiederholen, um eine alternative gültige zu erstellen B2'(beachten Sie, dass alles andere in diesem neuen Block auch gültig sein muss, einschließlich Transaktionen), werden die Knoten ihn immer noch ablehnen, wenn die Kette nach oben geht zu B4 hat einen größeren Arbeitsaufwand.

Knoten betrachten die Kette mit der größten Menge an Gesamtarbeit als gültige Kette. Wenn Sie den Verlauf umschreiben möchten, müssen Sie eine neue Kette abbauen, die zu dem Block zurückgeht, von dem aus Sie mit dem Umschreiben beginnen möchten, und sie bis zu einem Punkt abbauen, an dem ihre Gesamtarbeit die derzeit beste Kette übersteigt. Wenn Sie diese neue Kette von Blöcken dann senden, führt dies dazu, dass die Knoten eine Reorganisation durchführen und die vorherige Kette löschen.

Was Transaktionen betrifft, die in den Mempool zurückkehren, geschieht dies im Falle einer Reorganisation. Alle Transaktionen aus den gelöschten Blöcken werden an den Mempool zurückgegeben. Da Miner in der Regel ähnliche Transaktionen auswählen, bestätigen die neuen Blöcke, die die alten ersetzen, meist ähnliche Transaktionen, sodass der Mempool am Ende normalerweise nur geringfügig anders sein wird.

Danke für die Antwort! Zur Information aller: Ich bin zufällig auf den Artikel "Blockchain: How a 51% attack works (Double Spend Attack)" gestoßen, der besagt, dass der böswillige Benutzer eine ausreichend lange Kette wachsen lassen muss, um die Reorganisation durchzuführen (siehe " Stealth-Mining"-Abschnitt).