Solidity

常量和不可變的 gas 成本是否大致相等?

  • January 10, 2022

根據這個問題,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);
   }
}

根據這個答案

constants 不儲存在任何地方;它們在字節碼中被替換

這顯然需要節省氣體,因為沒有SLOAD執行constant從儲存中檢索 s 的操作,因為它們直接插入到字節碼中。immutable對於將導致類似氣體節省的變數也可以這樣說嗎?

是的,情況就是這樣。此處也對此進行了概述。Solidity 中的不可變關鍵字是什麼?並且可以在此處的官方 Solidity 文件中找到:https ://docs.soliditylang.org/en/v0.8.11/contracts.html#constant-and-immutable-state-variables

引用自:https://ethereum.stackexchange.com/questions/118547