【CryptZombies】レッスン3チャプター7:Public関数とセキュリティ
ここで、feedAndMultiply関数を見てみます。
前のレッスンではpublicで作成しています。
publicやexternalの関数では、onlyOwnerのような修飾子をつけない限り、誰でも関数を実行して好きなデータを渡すことができてしまいます。
この関数では、ユーザーが直接関数を呼び出して、好き勝手な_targetDnaや_speciesを渡せてしまいます。
しかし、この関数はfeedOnKitty()だけが呼び出しているものです。なので、internalで宣言すればOKです。
テストの実行
①feedAndMultiplyはpublic関数になっている。これをinternalに変更し、コントラクトを安全なものにせよ。ユーザーにこの関数を勝手なDNAで呼び出してもらいなくないからな。
publicと書いてある部分をinternalに変更します。
②feedAndMultiplyにcooldownTimerを実装するのだ。まずmyZombieを参照したあと、myZombieを渡したisRedady()をチェックするrequireステートメントを書き加えよ。こうすれば、クールダウン時間が過ぎている場合のみ関数を呼び出すことができるようになるぞ。
isReady関数は、Zombie構造体を引数にしていて、ポインタとして_zombieをとっています。
ここでは、myZombieをisReady関数の引数(Zombie構造体のポインタ)として渡します。
③関数の最後で_triggerCooldown(myZombie)を呼び出して、捕食がクールダウンタイマーのトリガーになるようにせよ。
_triggerCooldown関数も、②と同様にZombie構造体を引数にしています。
ここでは、myZombieを_triggerCooldown関数の引数(Zombie構造体のポインタ)として渡します。
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network