No sé si esto es una peculiaridad en el IDE de remix o algo que solidez hace por sí mismo, pero encontré algo interesante y me gustaría saber por qué ocurre.
Tengo una estructura x en un contrato Y que tiene dos campos:
Struct X {
address owner;
address renter;
}
Ahora, cuando inicializo la estructura llamando a la función createX() en el IDE de remezcla:
function createX() public {
X storage x;
x.owner = msg.sender;
}
El campo de dirección del arrendatario obtiene el valor de la dirección del contrato Y
¿Por qué pasó esto? Esperaba que el campo fuera igual a la dirección cero.
El compilador de Solidity debería emitir una advertencia por esto.
X storage x;
declara una referencia de almacenamiento no inicializada . Eso significa x
que apunta a la ranura 0 en el almacenamiento. Cuando almacena msg.sender
en x.owner
, sobrescribe lo que haya en la ranura 0 (la primera variable de estado que declaró). x.renter
, ya que no lo ha modificado, aún debe contener cualquiera que sea su segunda variable de estado declarada.
Gabe