【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)をつけます。
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network