Solidity言語

噛み付いちゃうぞCryptoZombies④

午後の部、遅くなりましたが更新いたします。
今日は娘を見ながらの更新になりますので、遅くなってしまったら申し訳ないです。
後ろで爆睡しておりますww

CryptoZombies | イーサリアムでのゲーム開発を学ぶ

それではいってみよう!!

チャプター7:ストレージ vs メモリ 

このチャプター名面白いですよねw

ストレージは保存できる場所であって、メモリは作業する机みたいなイメージ、CPUはその机を使って作業する脳みたいなイメージ、とパソコンを触る時に覚えましたw

43

イメージ的には同じような感じだけど、、、
Storageはブロックチェーン上に永久に刻まれる(格納される)変数で、Memoryは一時的にしか使われないもののための変数、ってことね。

ちなみにRAMはRandom Access Memoryだから、作業領域として使われるメモリってこと。頻繁にデータは書き換えられ、電源を落とすと作業してた一時的なデータも消えるんですな。違う処理を始めたら前の情報は書き換えられちゃうよって事で、保存としては使えないってイメージですね。

ついでにRomはReed Only Memoryだから、読み出ししかできないメモリの事を言います。書き込むことはできないメモリなので参照しかできませんよ、ということですね。ファミコンのソフトはこのROMに当たりますね。そしてパスワードを入れると、その続きからできるという、、、懐かしいw

脱線しちゃいましたね、続きに戻りますw

ここでは、StorageかMemoryかの判定はSolidityが判定してくれるとのことなので別段使う必要はないとの事!

関数外で宣言された変数に関しては、Storageで、ブロックチェーン状に格納される

関数で宣言された変数はMemoryとして扱われるので、呼び出しが終わったら消えると。

判定は必要ないけど、使う例があるとの事でこちらに添付!
07
17

説明文長いため、尻切れとんぼちゃん、、

Sandwichは今までやってきたので言うとZombieという事になりますね。
sandwichesはZombiesですね。

最初の//の文章は、このコードを入力してもいいけど、Solidityがストレージなの?メモリなの?と聞いてくるのでどっちかはっきり宣言してよ!という警告を出してくるとの事。

そう聞いてきたら換えてやればいいのですが、そうなる前に指定してやりましょう。
入れ方は名前の前にstoragememoryを入れてやるだけですね。

最後のコードはmemoryのデータをstorageに変更したい場合の方法が書いてます。まだ使わなそうなので流す程度で読んでいます。

28

こうやって言ってくれてますし、、、宣言する必要がある時がある、とだけ覚えておきましょうw

それではテストに挑戦しましょ!!
16

1では、feedAndMultiplyという関数を作成せよ。と言っているので、functionからスタートするのはもう理解できましたね!パラメーターの指定があり、publicで作成せよ、と言っているので、それを入力すると、、、

function feedAndMultiply(uint _zombieId, uint _targetDna) public {
}

となりますね。

2では、requireステートメントを追加してmsg.senderがこのゾンビのオーナーであるかを確認せよ。との事ですので、requireの使い方を思い出してくださいね。
そもそも関数内で何かしらの確認をする場合はrequireを使う、と思い出しましょう。
サンプルとしてはこちらを参照してとの事ですので、こちらを確認ください↓↓
37

確認いしたいのはmsg.senderがZombieToOwnerであるかどうか、、なので、

require(msg.sender == zombieToOwner[_zombieId]);

となる。。注意書きにもありますが、本来であれば逆にして「== msg.sender」でもOKですが、回答としては不正解になってしまいますので、上記のように入力してください。CryptoZombies上では不正解ですが、Solidityとしては正解って事です。

25

3の文章ですが、このまま読むと私みたいな頭の弱い人だと何が何だかわからなくなるので、何個かに分けて考えてみましょう。

myZombieという名前のローカルZombie(storageポインタとする)を関数で宣言する。なので、

Zombie storage myZombie

になりますね。例を参照してこのような形にするというのを覚えましょう。

次に、、
この変数をzombies配列内_zombieIdインデックスと同じにせよ。なので、

= zombies[_zombieId]

となるので、①と②を組み合わせると、、

Zombie storage myZombie = zombies[_zo
mbieId];

となる!
全部を繋げると、、、

function feedAndMultiply(uint _zombieId, uint _targetDna) public {
require(msg.sender == zombieToOwner[_zombieId]);
Zombie storage myZombie = zombies[_zombieId];
}

となります!

ふぅ〜無事にクリアできましたね!!

やっていくうちに少しずつではありますが、理解が深まってきているような気がします。
この調子で頑張って行きましょう!!

途中、娘がう◯こをしてしまったので、オムツ交換したら、またすぐこれでもかってくらいの、巨大なう◯こをした事もあり、だいぶ遅くなってしまった、、、w

集中してできないけど、後ろでテクテク歩いたり、ドタバタしているのを感じながらやるのって、なかなか幸せを感じれますw

こんなところで今日のところは終了したいと思います。

次回も引き続き、「CryptoZombiesの続きをします!

個人的にはそろそろクリアに近づいております!!

それではまた明日!!

ABOUT ME
shidayuu
元バンドマンで読書・書評をしている函館在住32歳、しだゆうと申します! このブログでは主に読書した内容を元に、「ヒラメキを発信する」をテーマとして毎日更新しています。 書評をメインに、たまに元バンドマンの知識を発信していきます! あなたの役に立てる記事を書いていきます!