поле адреса структуры принимает значение адреса контракта при инициализации

Я не знаю, является ли это причудой IDE для ремиксов или что-то, что Solidity делает сама, но я нашел кое-что интересное и хотел бы знать, почему это происходит.

У меня есть структура x в контракте Y, который имеет два поля:

Struct X {
   address owner;
   address renter;
}

Теперь, когда я инициализирую структуру, вызвав функцию createX() в IDE remix:

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

Поле адреса арендатора получает значение адреса контракта Y

пример поля адреса

Почему это происходит? Я ожидал, что поле будет равно нулевому адресу.

Ваш код работает так, как ожидалось. Я протестировал его, и вот результаты: gyazo.com/ae238ed170f44b00b9de61b221dd4935 .

Ответы (1)

Компилятор Solidity должен выдать предупреждение об этом.

X storage x;объявляет неинициализированную ссылку на хранилище. Это означает x, что указывает на слот 0 в хранилище. Когда вы сохраняете msg.senderв x.owner, он перезаписывает все, что было в слоте 0 (первая объявленная вами переменная состояния). x.renter, так как вы не изменили его, все равно должен содержать то, что было вашей второй объявленной переменной состояния.