运行#
根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令,即可看到实际 gas 差异对比。
forge test --contracts 01_Constant/Constant.t.sol --gas-report
功能简述#
-
constant:声明一个常量,需要在声明时进行赋值,且后期不可变更。
-
immutable:声明一个常量,可以在声明时和 constructor 中进行赋值,且后期不可变更。
-
变量:声明一个变量,可以在任意环节进行赋值,且后期可以变更。
DemoCode#
下面用种不同的修饰符定义了 3 个变量。
contract Constant {
uint256 public constant varConstant = 1000;
uint public immutable varImmutable = 1000;
uint public variable = 1000;
}
以下是 3 种情况下,读取变量消耗的 gas 差异对比。gas 优化建议如下:
-
结合实际情况,应尽量避免使用 variable 对变量进行定义;
-
对于无需修改的常量,建议使用 immutable 进行定义,其在功能性和 gas 上均为最佳。
关键字 | gas 消耗 | 节省 | 结果 |
---|---|---|---|
constant | 183 | 2122 (≈92%)| ✅ 建议 | |
immutable | 161 | 2144 (≈93%) | ✅ 建议 | |
variable | 2305 |