It’s now or never

IT系の技術ブログです。気になったこと、勉強したことを備忘録的にまとめて行きます。

【Ethereum】【Solidity0.4.16】viewとpure修飾子

Solidity 0.4.16からviewpureという関数の修飾子が新たに追加されました。

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 . blocktxmsgのメンバにアクセスする(msg.sigとmsg.dataを除く)
  • 4 . 関数内部からpure修飾子のつかない関数を呼び出す
  • 5 . opcodeを含むインラインアセンブリを使用する

今までは、状態を変更しない関数にはconstant修飾子を使用していましたが、今後はviewpureを使い分けて使用していくのが良さそうです。
まだまだSolidityは言語のバージョンアップが早いのでキャッチアップが大変です。