Wie explizit kann die Blockchain beschnitten werden?

Wie kann die Blockchain beschnitten werden?

Wenn die Blockchain manipulationssicher ist, also nicht verändert werden kann, wie können die Daten entfernt werden?

Bitte seien Sie so deutlich wie möglich.

Antworten (3)

Die Blockchain selbst kann nicht gekürzt werden.

Jeder Block wird durch Hashing aller seiner Daten und einer zufälligen Nonce verifiziert, um einen Hash zu finden, der eine bestimmte Anzahl führender Nullen hat. Wenn Sie auch nur ein einziges kleines Datenbit aus einem Block entfernen würden, würde sich der resultierende Hash ändern. Da der neue Hash höchstwahrscheinlich die Schwierigkeitsanforderung nicht erfüllen würde, wäre der Arbeitsnachweis vernichtet worden. Sie müssten einen neuen Block erstellen, um seinen Platz einzunehmen. Dann müssten Sie jedoch auch alle nachfolgenden Blöcke neu erstellen, da der Hash des Elternteils (stellen Sie sich das wie einen Fingerabdruck vor) in seinem Kinderblock enthalten ist, dh wenn Sie den Elternteil ändern, wird die gesamte nachfolgende Blockchain ebenfalls ungültig.

Was passieren kann, ist, dass die Datenbank der verifizierten Transaktionen, die Bitcoin-Qt-Clients speichern, beschnitten wird. Bisher behalten vollständige Clients nach der Überprüfung jedes Blocks jede Transaktion, die jemals lokal stattgefunden hat. Stattdessen könnten Sie nur die Transaktionen in Ihrer Datenbank behalten, deren Ausgaben noch nicht ausgegeben wurden.

Danke Mursch! Passiert das also mit Lightweight-Clients, dass ihnen nur Salden gesendet werden, nicht die gesamte Blockchain-/Transaktionsdatenbank? Vielen Dank im Voraus!
Es ist ähnlich, aber nicht dasselbe. Im beschnittenen Client würden Sie immer noch alle Blöcke überprüfen, aber Sie würden nicht alle Daten behalten. AFAIK Lightweight Clients verifizieren selbst keine Blöcke.

Ein Block besteht aus zwei Teilen: einem kurzen Header (Metadaten) und einer (möglicherweise großen) Nutzlast , die die eigentlichen Transaktionen enthält. Der Header enthält alle notwendigen Daten, um das PoW und die Header-Kette seit dem Genesis-Block-Header zu validieren. Zusätzlich enthält jeder Header einen Authentifizierungswert seiner Nutzlast. SPV-Wallets werden sehr schnell synchronisiert, da sie nur Header und nicht die Nutzlast validieren.

Wenn ein Block Transaktionen enthält, deren Ausgaben nicht ausgegeben wurden, müssen Knoten diesen Block speichern, um einem anderen Bootstrapping-Knoten zu beweisen, dass das UTXO-Set tatsächlich ein bestimmtes Element enthält. Wenn andererseits alle in einem Block (z. B. X) generierten Ausgaben ausgegeben wurden, kann ein Knoten Block X verwerfen und zu einem anderen Bootstrapping-Knoten sagen: "Alle UTXO von Block X wurden ausgegeben, validieren Sie einfach den Header und fahren Sie fort." .

Dies ist ein konservativer Ansatz. Während ein Bootstrapping-Knoten nicht dazu verleitet werden kann, ungültige UTXOs zu akzeptieren, können wir diesem Knoten auch nicht beweisen, dass „alle UTXOs von Block X ausgegeben wurden“, ohne die tatsächliche Nutzlast anzuzeigen.

Nun könnte die Frage lauten: Wie erhalten und pflegen SPV-Knoten einen nicht manipulierten UTXO-Satz? Siehe diese Antwort für Details.

SPV-Knoten verwalten überhaupt kein UTXO-Set. Das ist unmöglich, ohne die vollständigen Blöcke zu sehen. Sie pflegen nur eine Kette von Headern.
@PieterWuille Sie unterhalten ein UTXO-Set mit für sie relevanten Ausgaben. Das ist, was die verknüpfte Antwort bespricht; wie ein Knoten für ihn relevante Blöcke erhält.
Ok, ja, ich betrachte das nicht als Teil des Knotens, sondern als Teil der damit verbundenen Brieftasche (eine Brieftasche, die mit einem vollständigen Knoten verbunden ist, hat in diesem Sinne auch ein eigenes UTXO-Set), aber stimme zu.

Es ist ein paar Jahre her, aber ich dachte mir, ich würde das hinzufügen, da anscheinend nicht viel darüber gesprochen wird.

Zunächst ist es wichtig zu beachten, dass Block-Header sakrosankt sind; Sie sind für die Verifizierung der Blockchain unerlässlich.

Ein Großteil der Nutzlast ist jedoch nicht mehr relevant, da die von ihnen generierten Ausgaben bereits ausgegeben wurden.

Es wäre schön, wenn sie aus der Datenbank entfernt werden könnten, nicht wahr? Das Problem dabei ist jedoch die Überprüfung der Integrität des Blocks. Wenn wir ein paar Transaktionen verlieren, wie können wir dann überprüfen, ob der Payload-Hash des Headers richtig ist?

Um dieses Problem zu lösen, schlägt das ursprüngliche Bitcoin-Papier eine Lösung vor, die auf dem Merkle-Baum basiert.

Dieser Baum wird konstruiert, indem eine Reihe genommen wird, jedes Paar von Elementen gehasht wird und dann der Prozess für diese neue Reihe wiederholt wird.

Wie im Originaldokument angegeben, kann uns dies ermöglichen, alte Transaktionen zu entfernen und die verbleibenden weiterhin zu überprüfen:

Blockchain Paper zur Rückgewinnung von Speicherplatz

Diese Antwort erscheint mir nicht sinnvoll. Das Pruning zur Reduzierung des gesamten Node-Festplatten-Footprints ist seit Jahren verfügbar, jedoch ist der im Whitepaper beschriebene On-Chain-Pruning-Vorschlag nicht durchführbar und wurde daher nie implementiert.