Wie speichere ich Speicherversuche in Leveldb?

Ich möchte die Struktur von Speichertrie und seine Datenstruktur in leveldb wissen, und ich lese solidity storage .

Ich habe noch Fragen?

  1. Im gelben Papier heißt es, dass der Speicherstamm eine Zuordnung zwischen 256-Bit-Ganzzahl und 256-Bit-Ganzzahl ist. Wird dieses Schlüsselwertpaar in leveldb gespeichert?

  2. Wenn wir einen Wert V im Speicherversuch eines Vertrags speichern wollen. Nach solidity storage zähle ich den Schlüssel K für V und füge V mit K in den Speichertrie ein (so wie K die Kontoadresse und V der Kontostatus im Statustrie ist). Aktualisieren Sie dann den Speicherstamm wie bei State Trie. Habe ich recht?

  3. Wenn Frage 1 richtig ist, was ist der wahre Schlüssel, den wir verwenden, um V in leveldb zu speichern, ist es K oder K und etwas nach SHA3? Wie können wir den übergeordneten Hash einiger Blattwertknoten erhalten, verwenden Sie einfach SHA3 (Wert1, Wert2, ...)?

Antworten (1)

Ich bin kein Experte, aber lassen Sie mich mein Verständnis teilen. Überprüfen Sie auch diese Frage: Ethereum Merkle Patricia Trie and Hashes

  1. Der Trie wird als Schlüssel-Wert-Paare in levelDB gespeichert. Jeder Hash (256-Bit-Ganzzahl) ermöglicht Ihnen den Zugriff auf einen Knoten. Der Wert entspricht einem RLP-codierten Knoten (siehe Anhang D im gelben Papier für verschiedene Knotentypen).
  2. Wenn Sie einen neuen Wert v speichern möchten, codieren Sie den Wert in RLP und bestimmen den Schlüssel, wie in getStorageAt erklärt . Dann fügen Sie einen neuen Blattknoten ein oder aktualisieren einen vorhandenen. Natürlich müssen alle abhängigen Knoten-Hashes auf höherer Ebene bis zur Wurzel aktualisiert werden.
  3. Wie in solidity storage erklärt , ist der echte Schlüssel ein SHA3-Hash, basierend auf dem Speicherindex der Variablen, die Sie speichern (für statische Daten der Speicherindex, für Mappings ist es keccak256(k . p))

Ich empfehle auch einen Blick auf die folgenden Links:

Referenzen: https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/ https://wanderer.github.io/ethereum/nodejs/code/2014/05/21/using- ethereums-tries-with-node/ https://github.com/medvedev1088/ethereum-merkle-patricia-trie-example https://medium.com/cybermiles/diving-into-ethereums-world-state-c893102030ed