Solidity
常量和不可變的 gas 成本是否大致相等?
根據這個問題,Solidity 0.5.0 編譯器無法計算
constant
呼叫函式的狀態變數,但是我在使用ABDKMath64x64 庫的 Solidity 0.8.10 上也遇到了這個問題:pragma solidity ^0.8.10; import { ABDKMath64x64 } from "./ABDKMath64x64.sol"; contract FixedPoint { // TypeError Initial value for constant variable has to be compile-time constant int128 constant someFixedPointInteger = ABDKMath64x64.fromUInt(123); }
所以我選擇
immutable
通過初始化狀態變數來使用constructor
,如下所示:contract FixedPoint { int128 immutable someFixedPointInteger; constructor() { someFixedPointInteger = ABDKMath64x64.fromUInt(123); } }
根據這個答案:
constant
s 不儲存在任何地方;它們在字節碼中被替換這顯然需要節省氣體,因為沒有
SLOAD
執行constant
從儲存中檢索 s 的操作,因為它們直接插入到字節碼中。immutable
對於將導致類似氣體節省的變數也可以這樣說嗎?
是的,情況就是這樣。此處也對此進行了概述。Solidity 中的不可變關鍵字是什麼?並且可以在此處的官方 Solidity 文件中找到:https ://docs.soliditylang.org/en/v0.8.11/contracts.html#constant-and-immutable-state-variables