運行#
根據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 |