実行#
Foundry 公式ドキュメントに従って実行環境を設定した後、このプロジェクトで以下のコマンドを実行すると、実際の gas の違いを確認できます。
forge test --contracts 01_Constant/Constant.t.sol --gas-report
機能の概要#
-
constant:定数を宣言し、宣言時に値を設定する必要があり、後で変更できません。
-
immutable:定数を宣言し、宣言時とコンストラクタで値を設定でき、後で変更できません。
-
変数:変数を宣言し、任意の段階で値を設定でき、後で変更できます。
デモコード#
以下は、異なる修飾子を使用して 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 |