初心者文系主婦がブロックチェーンを学ぶブログ

IT革命のビッグウェーブに乗り遅れた主婦が、ブロックチェーン革命の波にのるべく、ブロックチェーン技術を学ぶブログです。

【CryptZombies】レッスン3ャプター3:onlyOwner関数の修飾子

関数修飾子

関数修飾子は一見関数のように見えますが、functionの代わりにmodifierを使います。

また、関数のように直接呼び出すことはできず、代わりに関数定義の最後に修飾子の名前をつけることで、関数の動きを変更します

/**
 * @dev Throws if called by any account other than the owner.
 */
modifier onlyOwner() {
  require(msg.sender == owner);
  _;
}

この修飾子を次のように使います。

 

contract MyContract is Ownable {
  event LaughManiacally(string laughter);

  //`onlyOwner`の使い方を確認せよ:
  function likeABoss() external onlyOwner {
    LaughManiacally("Muahahahaha");
  }
}

likeABoss関数のonlyOwner修飾子を見てください。

likeABossを呼び出すと、onlyOwnerの中のコードが最初に実行されるのがわかります。(likeABoss関数の{}の中よりも先にonlyOwnerが記述されているため。)

それから、onlyOwnerの_;ステートメントにたどり着いた時に、likeABossに戻ってコードを実行するようになっています。

 

修飾子はほかにも色々な使い方ができますが、いちばん一般的なのは関数の実行前にrequireでサクッとチェックする使い方です

onlyOwnerの場合、この修飾子を関数に追加することで、オーナー(実行する人)だけが関数を呼び出せるようになります。

 

テストの実行

setKittyContractAddressへのアクセスを制限して、我々以外のだれも編集できないようにしたい。

①onlyOwner修飾子をsetKittyContractAddressへ追加せよ。

setKittyContractAddress関数定義の最後に修飾子の名前(onlyOwner)をつけます。

f:id:nomadomama:20181206001813p:plain

 

お疲れさまでした!

 

 

<参考>

CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network