struct User {
bool isActive;
uint256 userAge;
}
mapping(userId => User) public users;
method 1;
function example(uint256 userId) public {
User memory user = users[userId];
bool active = user.isActive;
uint256 age = user.userAge;
users[userId].isActive = false;
}
method 2;
function example(uint256 userId) public {
User storage user = users[userId];
bool active = user.isActive;
uint256 age = user.userAge;
user.isActive = false;
}
Why method 2 cost less gas even we used storage keyword and get the all values from storage?
which one should I use?
Best Answer
What method 1 does:
method 2 does:
Storage operations are most costly, then memory, (then calldata), then stack. Method 2 bypasses memory altogether and thus is cheaper.