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


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

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

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

この記事の対象者

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

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

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

解説するチャプター

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

▼ チャプター3のURL

https://cryptozombies.io/jp/lesson/1/chapter/3

この記事で得られること

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

  • 符号なし整数とは何か?
  • 四則演算の書き方

Discordコミュニティ「Solidity DAO」

初心者が気兼ねなく質問できるコミュニティ 「Solidity DAO」 をDiscordで作成したので、これからsolidityを始める人はコミュニケーションの場として使ってもらいたい。
もちろん"DAO"なので、ここから面白いプロジェクトが生まれたら嬉しいと思っている。

https://discord.gg/qSh6Jk8E

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


チャプター 3: 状態変数と整数

このチャプターでは、ゾンビの持つ数字(ゾンビDNA)の桁数を指定していく。

dnaDigits(DNAの桁数)を16に指定するコードを書く。

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

pragma solidity ^0.4.19;

contract ZombieFactory {
    // ゾンビDNAの桁数
    uint dnaDigits = 16;
}

✅ 状態変数とは何か?

状態変数とは、コントラクト内(ブロックチェーン上)に永遠に保管され続けるものである。
アプリケーションのDBのようなものだ。

contract ZombieFactory {
    // このdnaDigitsが状態変数
    uint dnaDigits = 16;
}

ただし、DBと違ってこれは永遠に保管され続けるものである。

中の値は書き換えることができるが、定義した変数自体を消すことはできない

仮に状態変数に個人情報を入れ、それを変更できる関数を用意せずにデプロイしてしまうと、その情報は永遠に残ることになってしまう。
(改ざんができれば話は別だが、、、)

✅ 符号なし整数とは何か?

"符号なし"というのは、"マイナスの符号が付かない"と同義である。
言い換えれば0以上の数ということである。

int a = -100; // int型はマイナスの値もOK
uint b = -100 // 【コンパイルエラー】 uint型にマイナスは入れることができない

uintuint256の違いは何か

結論、同じである。
uintと書けば勝手にuint256と判定してくれる。

uint8uint16uint32などもあるが、これは基本的に使うことはないでしょう。
忘れても問題なし。

ちなみに、値を何も入れない場合(初期値)は0である。

uint16 a = 10;  // 16bitの符号付き整数型を宣言し「10」を格納。
uint b = 100;    // 256bitの符号付整数型を宣言し「100」を格納。
uint c;  //代入を行わないとデフォルト値「0」が格納される。

チャプター 4: 数式演算

ここでは四則演算のやり方を解説する。

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

pragma solidity ^0.4.19;

contract ZombieFactory {
    uint dnaDigits = 16;
    // 10の16乗を算出している
    uint dnaModulus = 10 ** dnaDigits;
}

ここでの演習は、この時点ではよく分からないと思うが、10の16乗を算出している。

--- ちょっと余談 ---

10の16乗は、

10000000000000000

である。
今後のチャプターでDNAをランダムに作成する処理があるが、DNAは必ず16桁にしなければならない。

そんな時にこの10の16乗の数字が役に立つ。
10のn乗で割った余りはn桁になる。(詳しい話は省略)

試しに簡単な数字で試してみよう。
10の3乗(1000)で割った余りは3桁の数字になるのか?

123456 % 1000 // 余り456(3桁)

これを利用して、16桁より大きい数字をランダムで発行して、16桁に縮める処理が今後発生してくるため、現時点で10の16乗というよく分からない数式を組んでいる。

--- 余談終わり ---

それでは続いて解説していこう。

✅ 四則計算の書き方

これは他の言語でも必ずあるので、説明がなくても分かるかと思う。
※CryptoZombiesをそのまま引用

加算(足し算): x + y
減算(引き算): x - y,
乗算(掛け算): x * y
除算(割り算): x / y
剰余(余り): x % y (例えば、13 % 53になる。なぜかというと、135で割ると、余りが3だからだ.)

ここまでできたらOK。

お疲れ様でした。


まとめ

今回は

  • uintについて
  • 四則演算の書き方

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

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

さいごに、Discordサーバー「Solidity DAO」を立ち上げたので、参加お待ちしてます!
有益な情報と、気軽に質問できる環境が整っていると思います。

https://discord.gg/qSh6Jk8E

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