通过一个 gas 挑战,理解 Gas 优化技巧。
本文我们来尝试进行 RareSkills Gas 优化的一个挑战,完成这个挑战可以学习到更多 Gas 技巧。
以下是 Distribute 合约,合约的作用是向 4 个贡献者平均分配 1 ETH, 代码如下:
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.15;
contract Distribute {
address[4] public contributors;
uint256 public createTime;
constructor(address[4] memory _contributors) payable {
contributors = _contributors;
createTime = block.timestamp;
}
function distribute() external {
require(
block.timestamp > createTime + 1 weeks,
"cannot distribute yet"
);
uint256 amount = address(this).balance / 4;
payable(contributors[0]).transfer(amount);
payable(contributors[1]).transfer(amount);
payable(contributors[2]).transfer(amount);
payable(contributors[3]).transfer(amount);
}
}
合约代码:https://github.com/RareSkills/gas-puzzles/blob/main/contracts/Distribute.sol
这个合约默认情况下,所需 GAS 是 71953, 需要优化到 57044, 以便通过测试用例,测试用例代码在这里。
这是默认运行的截图:
在原始合约上运行测试结果
挑战的要求是仅修改合约Solidity代码来使 distribute
下降到57044, 因此不可以修改优化器或solidity版本、不可以修改测试文件,也不使用huff/yul/bytecode 层面的优化,也不变更函数属性(不能使函...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!