kasoqian

kasoqian

区块链步道师,传播区块链技术

Gas优化专栏:01 constant、immutable、变量

运行#

根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令,即可看到实际 gas 差异对比。

forge test --contracts 01_Constant/Constant.t.sol --gas-report

功能简述#

  1. constant:声明一个常量,需要在声明时进行赋值,且后期不可变更。

  2. immutable:声明一个常量,可以在声明时和 constructor 中进行赋值,且后期不可变更。

  3. 变量:声明一个变量,可以在任意环节进行赋值,且后期可以变更。

DemoCode#

下面用种不同的修饰符定义了 3 个变量。

contract Constant {
    uint256 public constant varConstant = 1000;
    uint public immutable varImmutable = 1000;
    uint public variable = 1000;
}

以下是 3 种情况下,读取变量消耗的 gas 差异对比。gas 优化建议如下:

  1. 结合实际情况,应尽量避免使用 variable 对变量进行定义;

  2. 对于无需修改的常量,建议使用 immutable 进行定义,其在功能性和 gas 上均为最佳。

关键字gas 消耗节省结果
constant1832122 (≈92%)| ✅ 建议
immutable1612144 (≈93%) | ✅ 建议
variable2305
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。