Kann ich die Integrität des Netzwerks unabhängig nur mit Blockheadern überprüfen?

Abschnitt 7 des offiziellen Bitcoin-Papiers „Reclaiming Disk Space“ erklärt, dass nur Block-Header benötigt werden, um Transaktionen zu verifizieren. Im Wesentlichen, indem sichergestellt wird, dass die Transaktion hinter genügend Blöcken begraben wurde. Warum ist die Blockchain dann so groß? Es scheint, als könnten wir alle nur Header speichern und viel Speicherplatz zurückgewinnen. Kann ich die Integrität des Netzwerks unabhängig nur mit Blockheadern überprüfen?

Antworten (2)

Um einen neuen Block mit einem neuen Satz von Transaktionen zu validieren, muss Ihr Knoten auch sicherstellen, dass das Quellkonto für jede neue Transaktion tatsächlich über ein Guthaben verfügt, das ausgegeben werden kann. Dazu benötigen Sie die gesamte Blockchain.

Danke Greg, das habe ich mir gedacht. Ich habe den Teil vermisst/vergessen, dass die Transaktion vollständig vom Saldo anderer vergangener Transaktionen abhängt. Nichtsdestotrotz können Sie mit dem Merkle Root in den Headern immer noch überprüfen, ob eine bestimmte Transaktion in einem Block vorhanden ist. Sie könnten also den Satz neuer Transaktionen auf diese Weise validieren, nein?
@LucaMatteis Wie können Sie überprüfen, ob es keine Transaktion gab, die diese Gelder ausgegeben hat, es sei denn, Sie überprüfen entweder jede Transaktion oder führen eine Tabelle aller nicht ausgegebenen Ausgaben?
@DavidSchwartz, also können Sie mit Merkle Root nur überprüfen, ob eine Transaktion Teil dieses Blocks ist, aber Sie können nicht überprüfen, ob genügend Geld vorhanden ist, oder?
@LucaMatteis Angenommen, Sie meinen dies, haben Sie Recht: "Sie können überprüfen, ob die vergangenen Transaktionen, von denen eine neue Transaktion abhängt, Teil eines Blocks waren, aber Sie können nicht überprüfen, ob die Mittel, die die neue Transaktion verwendet, von einigen nicht verbraucht wurden andere vergangene Transaktionen."

Die Rückgewinnung von Speicherplatz beschreibt das, was heutzutage als Pruning bezeichnet wird. Nachdem Sie die gesamte Blockchain heruntergeladen haben, können Sie das meiste sicher wegwerfen, da alte ausgegebene Transaktionsausgaben nie wieder benötigt werden. Dies wird in Bitcoin Core noch nicht vollständig unterstützt, wird aber wahrscheinlich in der nächsten Hauptversion möglich sein.

Aus dem Papier (meine Hervorhebung):

Sobald die letzte Transaktion in einer Münze unter genügend Blöcken begraben ist, können die zuvor ausgegebenen Transaktionen verworfen werden, um Speicherplatz zu sparen

Sie sprechen über die vereinfachte Zahlungsüberprüfung (SPV), den nächsten Abschnitt in der Abhandlung. Mit SPV verwenden Sie nur Header und Merkle-Bäume, um zu überprüfen, ob eine Transaktion eine bestimmte Anzahl von Bestätigungen hat. Eine Transaktion mit einer hohen Anzahl von Bestätigungen ist wahrscheinlich sicher, aber Sie können sich nicht 100 % sicher sein, ohne die gesamte Blockchain herunterzuladen und zu verifizieren. SPV-Kunden vertrauen darauf, dass die Mehrheit der Miner ehrlich ist, was Full Nodes in den meisten Fällen nicht tun müssen. Heute wird SPV von vielen leichten Clients wie MultiBit und Bitcoin Wallet für Android verwendet.

Könnte ich nicht nur mit den Headern minen? Wenn ich neue Transaktionen erhalte, könnte ich Transaktionen validieren, indem ich die Eingaben mit der Merkle-Wurzel der Blöcke überprüfe. Ich denke, Sie können nicht berechnen, ob sich die Beträge nur mit der Merkle-Wurzel addieren?
@LucaMatteis Es ist möglich zu minen, ohne ein vollständiger Knoten zu sein (Sie müssen keine Transaktionen einschließen), aber Sie landen auf der falschen Seite von Gabeln in der Kette, die durch ungültige Blöcke verursacht werden, weil Sie nicht wissen, welche Gabel ist gültig. Schon ein einziger ungültiger Block kann Sie viel Geld kosten. Niemand "minet" so, weil es sehr schlecht für das Netzwerk ist, die Gewinne im Durchschnitt wahrscheinlich viel niedriger sind und das Betreiben einer vollständigen Node ziemlich billig ist.