Help us understand the problem. What is going on with this article?

CryptZombiesレッスン1(チャプター11~14)の自分なりのまとめ

More than 1 year has passed since last update.

最初に

この記事は私がCryptZombiesを進めていく上で自分なりにまとめたものです。
前回の記事
https://qiita.com/daichi77/items/3ae60fab23634f340e6e
参考にしたサイト
サイト名: イーサリアム上のDApp開発をゲームを作って学びましょう
URL: https://cryptozombies.io/jp/ 
この記事の問題文と答えについては上の参考にしたサイトから引用しています。

チャプター11 Keccak256と型キャスト

用語・新しく出てきた便利なやつ

便利なやつ

keccak256("文字列");

これでかっこの中にある文字列をランダムな256ビットの16進数にマッピングしてくれる。
ただブロックチェーン上で使うにはこれは安全とは言い切れない。
型キャスト

uint a = 5;
uint8 b = uint8(a) 

このようにaをuint8で囲むとuint8に型を変更できる。
型キャストについては他の言語と似ている。

チャプター11のテスト

問題文
_generateRandomDna関数の中身を書いてみよ!以下の点に従って書くように

  1. コードの最初の行は _strのkeccak256ハッシュを取得し、擬似乱数の16進数を生成し、それをuintに型キャストして、 randというuintに格納せよ。

  2. DNAは16桁になるようにしたい(dnaModulusを覚えているか?)。そこで次の行では上で求めた値のdnaModulusによる剰余(%)を returnするようにせよ。

答え

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

まとめ

テストの2番目でdnaModulusで割ることでなぜ16桁になるのか分からないが、それ以外はとくに難しいことはない。

チャプター12 統合

今回は演習のみ
問題文

  1. createRandomZombieという名前の public 関数を作成せよ。そこに_name (string)というパラメーターを設定せよ。 (注: public 関数を宣言する方法は、 private関数を宣言したのと同じです)
  2. 関数の最初の行で_nameで_generateRandomDnaを実行させ、それをrandDnaという名前で uintに格納せよ。
  3. 次の行で、 _createZombie 関数を実行し、_nameとrandDnaを引数として渡せ。
  4. ソリューションは4行以内とする(関数を閉じる}を含む)。

答え

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

まとめ

今回の演習で今まで作ってきた関数をcreateRandomZombie関数の中で呼び出した。
これでゾンビを作れるようになった。

チャプター13 イベント

用語

イベント
Events は、ブロックチェーンで何かが生じたときに、コントラクトがアプリのフロントエンドに伝えることができるもの。特定のイベントを'listening'状態にして、何かあった時にアクションを起こすこともできる。

テストのまとめ(答えは省略)

今回のテストでは
1. eventの定義
2. createZombieが呼ばれるたびにイベントが呼ばれるようにする
といったことをやった。

チャプター14 Web3.js

ここでまさかのjavascriptライブラリweb3.jsの解説。
ただし解説はcryptZombiesの方に載っているので割愛します。
チャプター14はのまとめは特になし。web3.jsは後のチャプターで説明されるらしい。

レッスン1終わっての感想

すごく分かりやすく、基本的な文の書き方が一通りわかるサイトでした。
初心者にはおすすめです。
記事に間違いなどありましたらコメントください。

次の記事

https://qiita.com/daichi77/items/edf41bdf2b9953a71fd7

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away