Contract-Development

單個儲存常數會為合約增加多少額外的氣體?

  • October 14, 2021

我正在考慮在我的 Solidity 合約中添加一個儲存變數,它代表該合約的“版本”。

但是,我不確定增加的 gas 成本是否值得。單個儲存常量會增加多少額外的 gas 部署成本?

假設常量的類型為uint256

讓我們通過Remix憑經驗找出答案。拿這個契約:

// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.9;

contract SingleConstant {
   uint256 internal foo;
   
   function getFoo() external view returns (uint256) {
       return foo;
   }
   
   function getFoo(uint256 newFoo) external {
       foo = newFoo;
   }
}

編譯器版本為 0.8.9 且優化器設置為 200 次執行,部署合約需要花費90,551 gas 。

現在,在添加常量之後:

uint256 public constant version = 1;

進行部署花費了 94,443 gas 。因此,儲存單個 uint256 常量所需的額外氣體為 94,443 - 90,551 = 3,892。這應該是為使用版本控制系統增加清晰度而付出的合理代價。

請注意,gas 成本取決於 的值version。數值越高,gas 價格越高,儘管成本應該線性增長。例如設置version為 3141592653589793238(PI 乘以 10^18),gas 成本上升到 95,961。

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