Wie überprüft Ethereum, ob ein Konto existiert, wenn auf diesem Konto keine Transaktion stattfindet?

https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/ :

Dies ermöglicht ein hochentwickeltes Light-Client-Protokoll, mit dem Light-Clients auf einfache Weise verifizierbare Antworten auf viele Arten von Anfragen geben und erhalten können: ... Existiert dieses Konto?

Das wird vom Zustandsbaum gehandhabt, aber die Art und Weise, wie es berechnet wird, ist komplexer. Hier müssen wir einen sogenannten Merkle-Zustandsübergangsbeweis konstruieren. Im Wesentlichen ist es ein Beweis, der die Behauptung aufstellt: „Wenn Sie Transaktion T auf dem Zustand mit Wurzel S ausführen, wird das Ergebnis ein Zustand mit Wurzel S', mit Log L und Ausgabe O sein.“

Wenn wir beginnen, gethoder parityzu verwenden, können wir eine unbegrenzte Anzahl von Konten erstellen, von denen jedes eine eindeutige Adresse hat, z. B.:' 0xe427c111f968fe4ff6593a37454fdd9abf07c490'. Soweit ich weiß, wird diese Adresse nicht im Statusbaum angezeigt, wenn keine Transaktion an diese Adresse erfolgt.

[F] Wenn ein Konto keine Transaktion durchgeführt hat, wird es jetzt im Statusbaum angezeigt. Wie konnte Ethereum also wissen, dass dieses Konto tatsächlich existiert, das jetzt einen Fußabdruck im Staatsbaum hat?

[Q] Außerdem: Somit kann jeder Benutzer eine unbegrenzte Anzahl von Konten erstellen. Wenn ein Benutzer Milliarden von Konten erstellt und jedes eine Non-Stop-Transaktion untereinander durchführt. Werden alle Kontoinformationen im World-State gespeichert? Wenn ja, kann dies auf lange Sicht viel Speicher verbrauchen.

Vielen Dank für Ihre wertvolle Zeit und Hilfe.

Antworten (1)

In Q1 haben Sie Recht, dass das bloße „Erstellen“ eines Kontos in einem Client nicht dazu führt, dass es als Teil des Blockchain-Status verfolgt wird. Alles, was Sie getan haben, ist, einen privaten Schlüssel zu nehmen und die Adresse dafür zu generieren - dies ist vollständig offline und erfordert keine Interaktion mit der Blockchain. In diesem Sinne existieren bereits alle Konten, aber die Blockchain verfolgt nur die Konten, für die mindestens eine eingehende Transaktion vorliegt (und die nicht selbst zerstört wurden). Wenn ein Konto keine Transaktionen hat, muss die Blockchain nichts davon „wissen“; Wenn Sie die erste Transaktion auf dieses Konto vornehmen, wird es dem Blockchain-Status hinzugefügt.

Bei Q2 haben Sie im Prinzip Recht. In der Praxis müssen Sie eine Transaktion an sie senden, damit die Blockchain dem Staat ein Konto hinzufügt. Das kostet etwas Gas, idealerweise genug Gas, um zu verhindern, dass irgendjemand es spammt. Dies war jedoch nicht immer der Fall. Im Spätsommer 2016 nutzte ein Angreifer eine billige Möglichkeit, Konten zu erstellen, und spammte die Blockchain tatsächlich mit „state bloat“ zu. Diese Spam-Konten wurden später aus dem Blockchain-Status gelöscht, und die Gaskosten für die Kontoerstellung wurden neu festgesetzt, um solche Dinge in Zukunft zu verhindern.

Siehe EIP-150 für die Preisanpassung des Opcodes, um dies zu verhindern. Hier ist eine detaillierte Erklärung , wie die State-Bloat-Angriffe durchgeführt wurden. Einige Diskussionen über das Problem und die Bereinigung von Vitalik.