El campo de dirección de estructura toma el valor de la dirección del contrato cuando se inicializa

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

ejemplo de campo de direccion

¿Por qué pasó esto? Esperaba que el campo fuera igual a la dirección cero.

Su código funciona como se esperaba. Lo probé y estos son los resultados: gyazo.com/ae238ed170f44b00b9de61b221dd4935 .

Respuestas (1)

El compilador de Solidity debería emitir una advertencia por esto.

X storage x;declara una referencia de almacenamiento no inicializada . Eso significa xque apunta a la ranura 0 en el almacenamiento. Cuando almacena msg.senderen 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.