Contract-Development
單個儲存常數會為合約增加多少額外的氣體?
我正在考慮在我的 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。