🧟‍♂️

【solidity初心者向け】CryptoZombiesをもっと丁寧に解説!(レッスン1-13〜1-15)

2022/04/12に公開

前回に続いてCryptoZombiesを「より詳しく」解説していこうと思う。

「CryptoZombies難しい・・・」と悩んでいる人を見かけたら、本記事のシリーズを紹介してもらえると嬉しい。

そして、悩んでいるあなたにも有益な記事となることを願っている。

この記事の対象者

この記事の対象は以下のような方である。

  • solidityを始めてみたけど、CryptoZombies難しい
  • なんとなく分かったが、ちゃんと理解できてない部分もある

あくまで理解がなかなか追いついていない人向けの記事だということを理解いただきたい。

解説するチャプター

今回解説するのは、レッスン1のチャプター9とチャプター10である。

▼ チャプター13のURL
https://cryptozombies.io/jp/lesson/1/chapter/13

この記事で得られること

この記事ではざっくりと以下のことが学べる。

  • イベントとは何かについて理解できる
  • イベントの実装が理解できる

それではさっそくやっていこう。


チャプター 13: イベント

このチャプターでは、ゾンビが作成された時のイベントを作成していく。

先にこのチャプターでの答えを載せておくので、参考にして頂きたい。

pragma solidity ^0.4.19;

contract ZombieFactory {

    // イベントと呼ばれる"箱"を作っておく
    event NewZombie(uint zombieId, string name, uint dna);

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function _createZombie(string _name, uint _dna) private {
        // .push()は配列に入っている数(長さ)を返すため、その-1番目(後ろから1番目)をidとする
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
	// イベントを発行
        NewZombie(id, _name, _dna);
    }

    function _generateRandomDna(string _str) private view returns (uint) {
        uint rand = uint(keccak256(_str));
        return rand % dnaModulus;
    }

    function createRandomZombie(string _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }
}

✅ イベントとは何か?

イベントとは、何かの事象が発生した時に送られるメッセージのことである。

例として、Amazonで注文をすると自動で返信メールが送られてくるイメージ。
注文という事象が発生した時に送られる「メール」がここでいう「イベント」だ。

CryptoZombiesでは、「ゾンビが作成」された時に「イベントが発行」される。

ちなみに、このイベントの受け取り手はフロントエンドのJavascriptなどになるので、ここでは発行するだけである。
次のチャプター14のWeb3.jsの処理で、受け取り側が記載されているので確認してみると良いだろう。


チャプター 14: Web3.js

CryptoZombiesの中でも紹介だけになっているので、本記事でも説明を省略する。

これはまた別記事として作成予定。


レッスン1が終了

ここまでで、レッスン1が完了!!

お疲れ様でした。

続いてレッスン2。

頑張っていきましょう💪


まとめ

今回は

  • イベントとは何か
  • イベントをどうやって実装するのか

を紹介しました。
いかがだったでしょうか?

また、間違っていたり追加した方がいいことがあったらコメントをして頂きたいです!
皆さんにより良い情報を届けたいので、必要に応じて修正していきます。

それでは引き続き解説出すので、そちらも参考にしてください!!

Discussion