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

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

【CryptZombies】レッスン1チャプター13:イベント

イベント

eventsは、ブロックチェーンで何かが生じたときに、コントラクトがアプリのフロントエンドに伝えることができるものです。

しかも特定のイベントを”listening"状態にして、何かあったときにアクションを起こすこともできます。

// イベントの宣言
event IntegersAdded(uint x, uint y, uint result);

function add(uint _x, uint _y) public {
  uint result = _x + _y;
  // 関数が呼ばれたことをアプリに伝えるためにイベントを発生させる:
  IntegersAdded(_x, _y, result);
  return result;
}

 

テストの実行

①NewZombieという名前のeventを宣言せよ。zombieId(uint)、name(stirng)、dna(uint)の値を渡すのだ。

f:id:nomadomama:20181118235017p:plain

 

②_createZombie関数を編集し、zombies配列に新しいゾンビを追加したらNewZombieイベントを発生させよ。

NewZombieイベントの引数はzombieId、name、dnaですが、zombies配列に新しいゾンビを追加した場合、_nameと_dnaが渡されるので、次のようになります。

f:id:nomadomama:20181118235259p:plain

ちなみに、NewZombieイベントの引数のひとつであるzombieIdが、なぜか本問の答えではidになっていました。

なんでこうなるのかにゃ?

分かる人いたら教えてください。

 

③ゾンビのidが必要だ。array.push()は新しい長さのuint配列を返し、配列の最初のインデックスは0であるから、array.push() -1が追加したゾンビのインデックスだ。そこで、zombies.push() -1結果idという名前のuintに格納し、次の行で作成するNewZombieイベントで使用できるようにせよ。

本問の前半は、配列(array)のインデックスについての説明です。

まず、赤線から見ていきます。

array.push() -1が追加したゾンビのインデックスになるので、次のようになります。

f:id:nomadomama:20181119000625p:plain

 

次に青線を見ます。

上の結果をidという名前のuintに格納します。

f:id:nomadomama:20181118235406p:plain

 

お疲れさまでした!

 

 

<参考>

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