Встретил в Твиттере код, который якобы призвал сделать более дешевой проверку на нулевой адрес. Забил его в Ремикс, чтобы самому узреть эти гигантскую разницу...
Вот сам код:
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.20;
contract AssemblyAddressZero {
error ZeroAddress();
function expensiveZero(address toCheck) public returns(bool success) {
if(toCheck == address(0)) revert ZeroAddress();
return true;
}
function cheapZero(address toCheck) public returns(bool success) {
assembly {
if iszero(toCheck) {
let ptr := mload(0x40)
mstore(ptr, 0xd92e233d00000000000000000000000000000000000000000000000000000000)
revert(ptr, 0x4)
}
}
return true;
}
}
Разница в одном-двух десятке единиц газа... Хммм... А как вы относитесь к такой переоптимизации? Нужно ли бороться за каждую единицу газа в контракте?
#gas