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

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

【CryptZombies】レッスン3チャプター7:Public関数とセキュリティ

ここで、feedAndMultiply関数を見てみます。

f:id:nomadomama:20181209222645p:plain

前のレッスンではpublicで作成しています。

publicやexternalの関数では、onlyOwnerのような修飾子をつけない限り、誰でも関数を実行して好きなデータを渡すことができてしまいます。

この関数では、ユーザーが直接関数を呼び出して、好き勝手な_targetDnaや_speciesを渡せてしまいます。

しかし、この関数はfeedOnKitty()だけが呼び出しているものです。なので、internalで宣言すればOKです。

 

テストの実行

①feedAndMultiplyはpublic関数になっている。これをinternalに変更し、コントラクトを安全なものにせよ。ユーザーにこの関数を勝手なDNAで呼び出してもらいなくないからな。

publicと書いてある部分をinternalに変更します。

f:id:nomadomama:20181209224130p:plain

 

②feedAndMultiplyにcooldownTimerを実装するのだ。まずmyZombieを参照したあと、myZombieを渡したisRedady()をチェックするrequireステートメントを書き加えよ。こうすれば、クールダウン時間が過ぎている場合のみ関数を呼び出すことができるようになるぞ。

isReady関数は、Zombie構造体を引数にしていて、ポインタとして_zombieをとっています。

ここでは、myZombieをisReady関数の引数(Zombie構造体のポインタ)として渡します。

f:id:nomadomama:20181210001749p:plain

 

③関数の最後で_triggerCooldown(myZombie)を呼び出して、捕食がクールダウンタイマーのトリガーになるようにせよ。

_triggerCooldown関数も、②と同様にZombie構造体を引数にしています。

ここでは、myZombieを_triggerCooldown関数の引数(Zombie構造体のポインタ)として渡します。

f:id:nomadomama:20181210002033p:plain

 

お疲れさまでした!

 

 

<参考>

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