【Solidity】状態変数とは?

Solidityにおける状態変数について解説します。

そもそも状態変数とは?

Solidityにおける状態変数ですが、「コントラクト内に保存されている変数」のことです。

コントラクト内に保存されているため、コントラクト実行後も、データは保持されます。

反対に、状態変数の対であるメモリ変数については、コントラクト実行後に破棄されます。

関数外で宣言された変数は状態変数

関数外で宣言された変数は、デフォルトで状態変数となります。

つまり、関数外で変数を宣言すると、それはコントラクトに永久保存されることになります。

状態変数にはアクセスレベルが存在

状態変数にはアクセスレベル(変数の公開範囲)が存在します。

以下のアクセスレベルがあります。

  • public:外部から直接アクセス可
  • private:同じスマートコントラクト内からのみアクセス可(継承先からは不可)
  • internal:同じスマートコントラクト内からのみアクセス可(継承先からも可)

サンプルコード

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Test {
    
    /* 状態変数(関数外で宣言された変数はデフォルトで状態変数) */
    // Public
    uint256 public publicVariable = 10;
    // Private
    uint256 private privateVariable = 10;
    // Internal
    uint256 internal internalVariable = 10;

    function sampleFunction(uint num) public pure returns(uint) {
        return num;
    }

}

普段何気なく使っている変数ですが、“状態変数”と“メモリ変数”があることを覚えておきましょう。前者はコントラクト実行後もコントラクト(ブロックチェーン)にずっと保存される変数、後者はコントラクト実行後に破棄される変数です。関数外で宣言されたものは状態変数に、関数内で宣言されたものはメモリ変数になります。

タイトルとURLをコピーしました