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
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。