Das struct address-Feld nimmt bei der Initialisierung den Wert der Vertragsadresse an

Ich weiß nicht, ob dies eine Eigenart in der Remix-IDE ist oder etwas, das Solidity selbst tut, aber ich habe etwas Interessantes gefunden und würde gerne wissen, warum es auftritt.

Ich habe eine Struktur x in einem Vertrag Y, der zwei Felder hat:

Struct X {
   address owner;
   address renter;
}

Wenn ich nun die Struktur initialisiere, indem ich die Funktion createX() in der Remix-IDE aufrufe:

function createX() public {
   X storage x;
   x.owner = msg.sender;
}

Das Adressfeld des Mieters erhält den Wert der Vertragsadresse Y

Beispiel Adressfeld

Warum passiert das? Ich habe erwartet, dass das Feld der Nulladresse entspricht.

Dein Code funktioniert wie erwartet. Ich habe es getestet und dies sind die Ergebnisse: gyazo.com/ae238ed170f44b00b9de61b221dd4935 .

Antworten (1)

Der Solidity-Compiler sollte dafür eine Warnung ausgeben.

X storage x;deklariert eine nicht initialisierte Speicherreferenz. Das heißt, xzeigt auf Slot 0 im Speicher. Wenn Sie msg.senderin speichern x.owner, überschreibt es alles, was sich in Steckplatz 0 befand (die erste Zustandsvariable, die Sie deklariert haben). x.renter, da Sie es nicht geändert haben, sollte immer noch enthalten, was auch immer Ihre zweite deklarierte Zustandsvariable war.