Solidity ゲームで学ぶ CryptoZombies レッスン2その3

Solidity をCryptoZombiesで学ぶ!まだまだレッスン2です。学ぶことが多いですね!pythonも同時に学習していますが、少なくともpythonよりは難しい感じがしますが…。レッスン6まで4つも課題があります…。ゆっくり進んでいきます。前回までは
Solidity ゲームで学ぶ CryptoZombies レッスン2その1

Solidity ゲームで学ぶ CryptoZombies レッスン2その2

Solidity ゲームで学ぶ CryptoZombies レッスン2その3

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

②チャプター8:ゾンビDNA

③チャプター9:別の関数とビジビリティ

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

a1
a2
a3
Solidityには変数を格納する場所が2箇所ある(【strage】【memory】)と。strageはブロックチェーンに永久に格納される変数、状態変数の場合はデフォルトでstrageになる。memoryは関数内で呼び出される変数で関数が呼び出しが終われば消えてしまう変数である。基本的にはSolidityが判別してくれるから問題ないとこと。例外だけを覚えておけばよいのですね。それではテストです。
a4
feedAndMultiplyの関数を作るということですね。その中身で、”require”メソッドでmsg.senderがこのゾンビオーナーであるかどうかを確認し、確認できたら次へ進む。そしてmy Zombieという名前のローカルZombieをstorageの変数として宣言するということですね。”require”は前回でてきました。特定の条件の時のみ先に進んでくれるメソッドでした。

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

a6

②チャプター8:ゾンビDNA

a7
いよいよ新ゾンビのDNAを作成するレッスンにやってきました。今回は元のゾンビとかまれた人間の数値の平均値を出すだけです。簡単ですね。それではテストです。
a8
targetDna(人間側)とmyZombie.Dna(ゾンビ側)のDNAの平均をuint newDnaとして登録する。そして_createZombieを呼び出すと。

_targetDna =  _targetDna % dnaModulus;
uint newDna = (myZombie.dna + _targetDna) / 2;
_createZombie(“NoName”, newDna);

Solidity上でエラーが出ますが、問題ないようですので先に進みます。


③チャプター9:別の関数とビジビリティ

a10
a11
ビジビリティ(visivility)は、表示/非表示ということです。Solidityには【publicとprivate】のほかに、【internalとexternal】というアクセスに関する規制があるということですね。publicはそのコントラクト内でしかアクセスできない(継承先は呼び出しはできない)、linternalは継承先も呼び出しができるができるようにする関数。externalは外部からのみ呼び出し可能、publicは全OKということらしいです。そのような指定ができるということは覚えておきます。難しいので…。なお、宣言方法はprivate/publicの時と同様です。それではテストです。
a12
対象の部分をprivateからinternalに変更すれば終了です。
具体的には
//下の関数定義を編集せよ
function _createZombie(string _name, uint _dna) internal{

pribate部分をinternalに変更しました。
a13

まとめ
チャプター7:storage(ブロックチェーンに永久保存)とmemory(関数終了後消去)の違い
チャプター8:ゾンビのDNA(技術的なものは特になし)
チャプター9:internal(継承先も呼び出せる)とexternal(外部からのみ呼び出せる)

いかがでしたでしょうか。
部分的にご紹介していますので、なかなか分かりづらいとは思いますが…。関数やそうゆう機能があるよっていうところだけでも見ていただけると幸いです。
本日もよきCryptoLifeを。
ありがとうございました。

コメント