Â
Size: a a a
Â
Â
Â
Â
Â
Â
Â
MD
Â
Â
Â
VK
contract Storage {
struct MyStruct {
uint256 x;
uint256 y;
}
MyStruct public myStruct;
function initStruct(uint256 _x, uint256 _y) public {
myStruct.x = _x;
myStruct.y = _y;
}
function initStructAssembly(uint256 _x, uint256 _y) public {
assembly {
sstore(myStruct.slot, _x)
sstore(add(myStruct.slot, 0x20), _y)
}
}
function getStruct() public view returns(uint256, uint256) {
return (myStruct.x, myStruct.y);
}
function getStructAssembly() public view returns(uint256 x, uint256 y) {
assembly {
x := sload(myStruct.slot)
y := sload(add(myStruct.slot, 0x20))
}
}
}
При инициализации структуры через солидити, геттер ассембли видит только х,K
sstore(add(myStruct.slot, 0x20), _y)
` пишет в 32 слот, вместо 1.sload(add(myStruct.slot, 0x20))
` читает из 32ого слота, вместо 1.add(myStruct.slot, 0x
1)
` для чтения и записи _yDL
D
I
MM