Solidity Gas 优化 - 理解不同变量 Gas 差异
- 原文链接: https://mirror.xyz/vicnaum.eth/gZPBJoJm4Ne3eXhxR-x7bbh8oFLnJ2JyVzczq2n9H8M
- 译文出自:登链翻译计划
- 译者:翻译小组 校对:Tiny 熊
- 本文永久链接:learnblockchain.cn/article…
本文我们来尝试进行 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 层面的优化,也不变更函数属性(不能使函...
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
上一篇:进阶篇-闭包 下一篇:验证者必读:ETH 提款 FAQ
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。