最初に
この記事は私がCryptZombiesを進めていく上で自分なりにまとめたものです。
前回の記事
https://qiita.com/daichi77/items/c494fc23652a476b63ba
参考にしたサイト
サイト名: イーサリアム上のDApp開発をゲームを作って学びましょう
URL: https://cryptozombies.io/jp/
前の記事までは問題文と答えを書いておきましたがよく考えたらcryptzombiesの方に問題も答えも書いてあるので割愛します。
チャプター1
特に何もないので割愛。
チャプター2 マッピング(Mapping)とアドレス(Addresses)
用語
アドレス
イーサリアムのブロックチェーン場にある口座。
仮想通貨の取引をしているとよく目にする。通貨(ethreumとか)を送金したり、受け取ったりする。
銀行口座のデジタル版みたいな認識。
マッピング
配列や構造体のようにデータを格納するときに使える便利なやつ。
mapping (key => value) public mapping名;
実際に使うときはkeyとvalueのところにはuintやstringなどの型を書いておく。
今回したこと(テスト)
- zombieToOwnerというマッピングの作成 これによりゾンビのIDを元にゾンビを参照できるようになった。 keyはID,valueはaddress
- ownerZombieCountというマッピングの作成。 これはownerのaddressをkey、uintをvalueにすることでそのアドレスのゾンビの数を数えれるようにするためのやつ。(多分)
チャプター3 Msg.sender
用語
msg.sender
この関数を呼び出したユーザー(またはスマートコントラクト)のaddressを参照できる。
関数を呼び出すまでは、コントラクトはブロックチェーン上で何もせずに、ただそこにあるだけなのでこれを呼び出すためにmsg.senderが使われる。
今回したこと(テスト)
- keyをゾンビのid、valueをmsg.sender(アドレス)にしzombieToOwnerマッピングを更新した。
- OwnerZombieCountのkeyがmsg.sender(自分のアドレス)のvalueを+1した。
まとめ
今回新たにできるようにしたことは、ゾンビが作られた時点で
1.そのゾンビがownerのアドレスに紐付けられる。
2.ownerの持っているゾンビのカウントが+1される。
ということである。
これでいつでもゾンビのownerのアドレスを参照できるようになり、オーナーに紐づけられているゾンビの数が参照できるようになった。
チャプター4 Require
用語
Require
if文のようなもので関数内で
require(条件);
と書くことで条件を満たしていなかった時にエラーを吐くようにすることができる。
今回したこと(テスト)
今回はcreateRandomZombie関数の中にrequire文を書くことで、自分のアドレスにすでにゾンビが登録されていた場合ゾンビが作られないようにした。
チャプター5 継承
継承
これは他の言語と同様、コントラクトを継承することでコードをリファクタリングできるというやつ。
contract 子contract is 親contract {}
と書くと子コントラクトにアクセスした時に親コントラクトの関数も使えるようになる。
まあこの辺は他の言語のクラスの継承とほぼ同じ認識。
今回したこと(テスト)
ZombieFeedingにZombieFactoryを継承した。以上!