Benötigen Sie Hilfe beim Verständnis — web3.eth.getStorageAt

Geben Sie hier die Bildbeschreibung ein

Nehmen wir an, ich habe drei Zustandsvariablen in meinem Vertrag

contract A {
    uint private x = 255;
    uint[] y; 
    uint z;
}

Wie ich es verstehe, hat x den Index 0, den y-Index 1 und den z-Index 2? Ist es so einfach?

Wie viele Indizes gibt es?

Gibt es spezielle Indizes?

Zeigt der Index auf eine einzelne Speicherzelle, die eine Variable enthält (unabhängig von ihrer Größe), oder zeigt er auf eine Zelle mit einem Limit (wie 32 Byte)?

Ich versuche nur, auf private Zustandsvariablen an Vertragsadressen zuzugreifen, und habe keine Ahnung, wie. Ich glaube, es wird durch diese App-Methode gemacht. Vielen Dank!

Antworten (1)

Ein Index ruft nur einen einzelnen Speicherslot ab, der 32 Byte groß ist.

yist ein Array mit dynamischer Größe, daher befindet es sich nicht auf Index 1.

Die Informationen, die Sie suchen, sind:

https://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage

Variablen mit statischer Größe (alles außer Mapping und Array-Typen mit dynamischer Größe) werden fortlaufend im Speicher angeordnet, beginnend bei Position 0.

...

Aufgrund ihrer unvorhersehbaren Größe verwenden Mapping und Array-Typen mit dynamischer Größe eine sha3-Berechnung, um die Startposition des Werts oder der Array-Daten zu finden. Diese Startpositionen sind immer volle Stack-Slots.

(Stapel sollte in den Dokumenten gespeichert werden.)

Verwandte Themen: Wie erhalte ich die Speicherindizes/-schlüssel?