【Ethereum】【Solidity0.4.16】viewとpure修飾子
Solidity 0.4.16からview
とpure
という関数の修飾子が新たに追加されました。
view 修飾子
pragma solidity ^0.4.16; contract C { function f(uint a, uint b) view returns (uint) { return a * (b + 42) + now; } }
内部で状態を変更しないことを宣言します。
状態変更の定義は以下となっており、以下の実装が含まれる関数にview修飾子がついていると警告が発生します。
- 1 . 状態変数を書き換える
- 2 . eventwを呼び出す
- 3 . 他のcontractを作成する
- 4 .
selfdestruct
を使ってcontractの破棄を行う - 5 . ethを送る
- 6 . 関数内部から
view
またはpure
修飾子のつかない関数を呼び出す - 7 . low-level callを使用する
- 8 . opcodeを含むインラインアセンブリを使用する
pure 修飾子
pragma solidity ^0.4.16; contract C { function f(uint a, uint b) pure returns (uint) { return a * (b + 42); } }
状態の読み込み、変更を行わないことを宣言します。
view修飾子で記載した状態の変更条件に加え以下を行うことを制限します。
- 1 . 状態変数を読み込む
- 2 .
this.balance
または<address>.balance
へアクセスする - 3 .
block
、tx
、msg
のメンバにアクセスする(msg.sigとmsg.dataを除く) - 4 . 関数内部から
pure
修飾子のつかない関数を呼び出す - 5 . opcodeを含むインラインアセンブリを使用する
今までは、状態を変更しない関数にはconstant
修飾子を使用していましたが、今後はview
とpure
を使い分けて使用していくのが良さそうです。
まだまだSolidityは言語のバージョンアップが早いのでキャッチアップが大変です。