【Solidity基礎】modifier修飾子について




modifierとは

modifierは関数につける修飾子でその関数を実行する前に任意の処理を実行させることができます。

下記は公式ドキュメントのサンプルコードです。modifierを先頭につけるだけであとはfunctionと同じ要領で{ }内に処理を記述するだけです。onlyOwnerには引数がありませんが引数を取ることもできます。{ }内の最後だけ少し特殊で_;を最後に書かないといけません。

使い方はownedコントラクトをisを使って継承させてfunction定義に追加するだけです。こうすることでclose()関数を実行する前にonlyOwnerの処理を実行することができます。

pragma solidity ^0.4.11;

contract owned {
    function owned() public { owner = msg.sender; }
    address owner;

    // This contract only defines a modifier but does not use
    // it: it will be used in derived contracts.
    // The function body is inserted where the special symbol
    // _; in the definition of a modifier appears.
    // This means that if the owner calls this function, the
    // function is executed and otherwise, an exception is
    // thrown.
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
}

contract mortal is owned {
    // This contract inherits the onlyOwner modifier from
    // owned and applies it to the close function, which
    // causes that calls to close only have an effect if
    // they are made by the stored owner.
    function close() public onlyOwner {
        selfdestruct(owner);
    }
}

よく使われるmodifierの紹介

payable

payable修飾子が付いた関数にのみEtherを送ることができます。payable修飾子をつけていない場合、関数はEtherを受け取ることができないため誤った送金を防ぐことができます。またpayableは予約後なのでこの名称でmodifierを定義することはできません。

viewとpure

viewとpureも修飾子です。viewはstorageの読み込みはできるけど書き込みができません。pureはstorageへの読み込みも書き込みもできないようにする修飾子です。この2つの修飾子を使うことでガスコストを抑えることができます。詳しくは下記リンクを記載しています。

関連記事:【Solidity基礎】view、pure関数修飾子

ownable

公式ドキュメントに記載されているonlyOwnerはOpenZeppelinでも実装されています。コントラクトを最初にデプロイしたアドレスからのみ実行できる関数を定義することができます。この権限はtransferOwnership()関数で移譲することもできます。詳しくは下記記事を読んでみてください。

関連記事:【Solidity基礎】OpenZeppelinのOwnableについて

まとめ

超基本的なmodifierについてしか説明していないので今後増やしていきたいと思います。OpenZeppelinにもたくさん実装されているのでみてみるといいと思います。

おすすめ書籍

Ethereumを使ったDApps開発を学びたいなら今だとこの1冊が1番良いです!開発環境の構築から使うべきツール、フレームワーク、実装方法・注意点まで網羅的に解説されている書籍なのでおすすめです。出版も2018年1月ということでかなり新しい本で、DMM Bitcoinを作っているネクストカレンシー所属の方が書いているので信頼できます。

ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です