【Ethereum・Solidity】状態修飾子(view, pure)について

Ethereum

今日はSolidityの状態修飾子について解説していきます。

Solidity v0.4.16から view と pure という状態修飾子が新たに追加されました。
これは、関数に付与するもので、関数がブロックチェーンとどのように作用し合うのかを示すことができます。
→ https://solidity.readthedocs.io/en/v0.4.16/contracts.html?highlight=view%20pure#view-functions

状態修飾子の特徴

大きな特徴として、view, pure 共にトランザクションを発行するものではないため、呼び出しの際にガス(手数料)が必要ないことが挙げられます。

ただし、同コントラクト内の別関数から呼び出された場合はガスを消費します。
状態修飾子を付けたからといって、必ずしもガスが不要ではないので注意が必要です。

view 修飾子

関数が動作しても、データの保存や変更は一切行わず、データの閲覧のみを行うと宣言します。

そのため、値のセットのようなデータの変更を行おうとすると、以下のWarningが表示されます。

browser/test.sol:7:9: Warning: Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
userAge[_address] = 10;

サンプルソース

pure 修飾子

view と同じように、関数が動作してもデータの保存や変更を行わないだけでなく、読み取りすらも行わないことを宣言します。

そのため、ブロックチェーン上から値の取得を行おうとすると、以下のコンパイルエラーが発生します。

browser/test.sol:20:25: TypeError: Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires “view”.
uint test = a * userAge[_address];

サンプルソース

状態修飾子まとめ

状態修飾子は使用するのにガス(手数料)が発生しないというところが最大の特徴だと思います。

ガスを支払うのはコントラクトを使用する人、つまりユーザーが支払わなければならないものなので、DAppsを開発する上でガスをいかに節約できるかは重要なポイントとなります。
そのためにも状態修飾子は必ず抑えておくべきポイントとなるでしょう。

Solidityにおける他の修飾子については、こちらで記載しているので合わせて見てみてください。
→ 【Solidity】アクセス修飾子(public, private, internal, external)について

Scroll to top