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

cr
Solidityを学ぶ”Cyptozombies”。レッスン5には”ERC721″を
学べるんですね、すごい!!こんにちは、ノリヒロです。
Solidityを学ぶCryptozombies第3回となります。

CryptoZombies レッスン1 その3

目次
①チャプター9:Private・public関数

②チャプター10:さまざまな関数

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

④チャプター12:総合

⑤チャプター13:イベント

⑥チャプター14:Web3.js

①チャプター9:Private・Public関数

ch1
Public・Private関数についてですね。Solidityでは、デフォルトpublicになっていると。なので、自分が使う関数はできるだけ Private することが必要ということですね。
uint[ ] numbers;
function _addToArray(unit _number) private{
   numbers.push( _nomber){
}

関数名の最後に”private”をつけると、Private関数になるんですね。関数名の前にも( _)をつけておくわけですね。ではテストです。
ch2
これは簡単ですね。
function _createzombie(string _name, unit _dna) pribate {
こんな感じですね。
ch3

②さまざまな関数

ch4
ch5
さらに関数が続きます。

string greeting = “what’s up dog”;

function sayhello() public returns (string){
    return greeting;
}

Solidityでは関数を宣言する際に、戻り値の型を指定して
おかなければならない
ようです。
戻り値:関数に処理を依頼した後、呼び出しもとの関数に返す値
例)「料理」という関数に「パスタ、たまねぎ、卵、チーズ、水」という
因数を渡して処理をしてもらい、出来上がった「カルボナーラ」が戻り値になります。

読み取り専用関数 view
読み込みも書き込みも行わない関数 pure
view関数よりもpure関数のほうが制限の度合いが高いという
ことでしょうね。
それではテストです。

test
結構難しくなってきました。

chg

private 関数を作るのですね。
あとは、読み取り専用view,uintを戻り値とする、と。

function _createZombie(string _str) private view returns(uint){

}

機械的に書けるようになってきました。

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

ch
ch2
ハッシュ関数が出てきました。
イーサリアムには、SHA3のバージョンのkeccak256が組み込まれているといってます。

SHA3とは、入力されたデータに対して適当な値を返してくれる関数(ハッシュ関数)のひとつ。SHA2の後釜だけど、SHA2の後継ではない
とりあえず、Keccak256という関数があって、戻り値としてランダムな数字を返してくれるということですね。

次に「型キャスト」。
データ型を自動で変更してくれるということですかね。
例)
uint8 a = 5;
uint b =6;
//a*b はuint8ではなくuintで返すからエラーになる
uint8 c = a*b;
//正しく動作させるために、bをuint8に型キャストさせる
uint8 c = a*uint8(b)

なるほど、同じuint型に直さないとだめなわけですね。
それではテストです。
ch3
おおおっ、なんか専門的になってきました。
test
function _generateRandomDnaの中身を書くのですね。
uint rand の定義が uint(keccak256( _str)で
剰余を戻り値として返すので return rand % dnaModulus
あとは繋げ
て書けばよいですね。

④チャプター12:総合

test2

いよいよ総合まで来ました。
テストです。
test3
createRandomZombieのPublic関数を完成させる。
パラメータは _name (string)です。これは難しくないです。

funciton createRandomZombie(string _name)public{ }

関数の中身{ }には、_nameで _generateRandomDnaを実行
させて、randDnaという名前でuintに格納すると。
これも先ほどやりましたね。

{uint randDna = _generateRandomDna( _name);

最後に、_createZombie関数を実行、_nameと_randDnaへ渡す。
CreateZombie関数に先ほど求めた値を渡せばいいんですね。

_createZombie(_name, randDna);

何となくできました。順序立てて作られていますね。

⑤チャプター13:イベント

終盤戦です。
cha1
Eventを追加すると、アクションを起こすことができるんですね。
event IntegersAdded(uint x, uint y,uint );

function add(uint _x, uint _y) public{
   uint result = _x + _y;

   IntergersAdded(_x, _y, result);
   return result;
}

整数値を足し算するEvent(intergersAdded)ですね。そのEventは、add関数があって、変数_x+_yを戻すという簡単なEventです。分解していけば簡単にわかりますね。
それではテストです。
cha2

eventを作成するチャプターです。
cha3
小さくてすみません。
Newzombieというeventを作成。
渡す値はzomibe id(uint),name(string),dna(uint)です。

event NewZombie(uint zombieid, string name, uint dna)

さらにゾンビのidを作成します。
プログラムでは、最初のインデックスは「0」から始まりますので
現在のインデックス表示は-1になります。
uint id = zombies.push(zombie(_name, _dna)) – 1

⑤Web3.0js

cha4
cha5
cha6
Web3.0js というjavascryptのライブラリがあるということです。
これは次レッスン以降になりますね。
ここでは、このようなものがあるという認識でいましょう。

実際に contract ZombieFactory を動かしてみます。ざっくりこのコントラクトは、入力した名前(_name)を数値化してそれぞれのパラメータ(頭、目シャツの色など)に変換、ゾンビを作成するというコントラクトになります。

名前が「norihiro」のゾンビ。
Norihiro

名前が「KUMACOIN」のゾンビ。
kumacoin

名前が「Cryptopia」のゾンビ。
cryptopia

いかがでしたでしょうか。
きちんとコントラクトできていました。

いかがでしたでしょうか。
ようやくレッスン1が完了です。長かった…。
まだまだレッスンはあります。

本日のまとめです。

Public/Private関数
戻り値、view/pure関数
Keccak256と型キャスト
Eventの作成方法

次回はレッスン2をはじめます。
難しくなってきますが、1つずつこなしていきます。
長文お疲れ様でした。

本日もよきCryptoLifeを。
ありがとうございました。

コメント