今日はEthereumのスマートコントラクト開発時に利用する言語「Solidity」のmodifierについて説明していきます。
Contents
modifierとは?
Solidityにおけるmodifierとは、一言で言うと修飾子を意味しています。(そのまんまですね)
modifierを関数に付与することで、その関数を実行する前に任意の処理を実行することができます。
modifierの使い方
modifierの定義
modifierは引数を使う場合と使わない場合で、通常の関数のように書き分けることが可能です。
通常の関数と違う点は以下の2点です。
- functionではなく、modifierで開始される
- 処理を続行する場合、_;で終了する
他の点については基本的には関数を書く場合と何ら変わりはありません。
また、関数の中に複数のmodifierを定義することは可能で、その場合はスペース区切りで定義を行えばOKです。
利用シーン
modifierは「特定の条件下のみで実行可能な関数の実行条件を満たしているかどうかを判定する」際によく利用されます。
以下で詳しく記載しますが、例えば所有者だけが実行できる関数を用意する際に、関数ごとに毎回、所有者かどうかを判定するロジックを加えるのは同じ処理が複数あるという意味で、良いソースコードとは言えないでしょう。
そういったバリデーションチェックのような部分をシンプルに実装するために、modifierは使われるのです。
よく使われるmodifier
onlyOwner
先程、記述した通り、コントラクトの所有者のみが実行可能な関数を作成する際に利用します。
こちらのmodifierはOpenZeppelin(スマートコントラクトを安全に実装するためのフレームワーク)でも実装されているため、OpenZeppelin使用時はコントラクトをデプロイしたアドレスを所有者とし、そのアドレスによる実行時に関数を走らせることができるものとして用意されています。
payable
payableを関数に付与した場合、その関数の呼び出し時にコントラクトがEther(トークン)を受け取ることができるようになります。
payableは予約語となっていて、予め定義されているため自分で定義することはできないものとなっています。