Solidity言語

【プログラミング未経験者でもできる!】CryptoZombiesレッスン④

CryptoZombiesレッスン1チャプター11からの内容となります!

どうも、しだゆう(@araShidayuuKi)です!

意味のわからない用語もたくさん登場してきて調べて噛み砕くのが結構大変ですが、楽しんでいきますよ〜!

前回の記事をご確認したい場合は以下リンクからご確認ください↓↓

あわせて読みたい
【プログラミング未経験者でもできる!】CryptoZombiesレッスン③CryptoZombiesレッスン1の後半戦を進めていきたいと思います! どうも、しだゆう(@araShidayuuKi)です! ...

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

FullSizeRender
今日の親父はスタバのドリップコーヒーを飲みながらお伝えしますね(関係ねぇ〜w)

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

ぎゃー!!出たー!!Keccak256ってそもそもどうやって読むんじゃ〜!!
「けっかくにーごーろく」でいいんじゃろうか?

256に関してはなんとな〜く「uint32」とか「uint256」というワードに触れているので良しとしても、読み方も意味も想像できない「Keccak」ってなんじゃない!

かるーくググっても使い方くらいしか出てこないので、スルーしていきますw

SHA3という言葉でググったらでてきた!!

「分かりそう」で「分からない」でも「分かった」気になれるIT用語集

佐々木真(ささきまこと)さんという方が書いた記事ですね!めちゃわかりやすい!!!!

59

Keccak256の説明のスクショではないのですが、個人的にこの図が気に入りましたw

引数とは、関数に入れる値の事をさします!

Keccak256とは、、引数に対して適当な値を返してくれる関数という事ですな。
ただし、同じ引数に対しては、同じ値を返してくれるという事を理解しておかないといけませんね。

ランダムな値が全てに対して返ってくるわけではなく、Aという引数を入れると、Bという戻り値が返ってくる。またAを入れたら、同じBがちゃんと返ってくるという事ね。

ランダムなものが返ってくるけど、引数が違う値であれば、もちろんランダムな値を返してくる、という事ですな!
1904

この図、めちゃかわいいw

噛み砕いては見たものの、、だいぶ舌噛んでますなw

Keccak256 = SHA-3 = ハッシュ関数である、と理解してよさそうです!

03

こんな感じで乱数が発生するとの事。//から始まるのが結果ですね。
ちょっと違うだけでこんなにも違う結果になるんだよ〜と教えてくれています。

注意書きとして、ブロックチェーンでの安全な乱数の生成は非常に難しい課題であると、、

セキュリティを考慮しない場合はこの関数で構わないので、今回はこれでいきますとの事!

次に、出ました型キャスト!!

52

この例を見てもらえるとなんとなくわかると思いますが、、

ここまで読んだ方だと「uint」をメインで使っていて、uint = 符号のない整数、という事を思い出してみてください!

uintとintは符号があるか、ないかで違う型なので、uintで両方を処理をしようとするとエラーがでます。

なのでその際に、uintの値をintの値に変換する事型キャストと言われる処理になります。

uint a = 5;
int b = -5;
a + b; //型が違うためエラーが出る。

なのでここで型キャストして符号がある型にint aを型キャストします。

int(a) + b; //型キャストしているので、値は「0」が結果として出てきます。型はもちろんint型です。

こんなイメージでよろしいかと!

小数点が入った時点でuintもintもエラー出ちゃうと思うので、あくまでどちらも整数という事を理解しといてくださいね!※その際はdoubleかfloatあたりが、きっとこれから出てくるはず。。w

イメージを掴んだら、いざテストへ!!

テストの考え方としては、格納せよ!と言ってくれていることから始めるようにすると作れるようになりますね!

今回の場合は「randというuintに格納せよ」と言っているので、、

uint rand =

となる。

で始めの文章を読むと「コードの最初の行は_strkeccak256ハッシュを取得し、擬似乱数の16進数を生成し、それをuint型に型キャストして、」という文章があるので、、中身として

uint rand = uint(keccak256(_str));

となる。まずは型キャストして「uint()」、その中にkeccak256関数に_strの値を入れる事で、擬似乱数が発生するので、その値をrandに代入するよ、というプログラムになります。

「擬似乱数の16進数を生成し、」という文言は正直パニックになりますが、keccak256が乱数を出してくれる関数なので、惑わされないようにねw

「DNAは16桁になるようにしたい(dnaModulusを覚えているか?)。そこで次の行では上で求めた値のdnaModulusによる剰余(%)をreturnするようにせよ。」

上で求めたって事なので、randは使うという事ですね。

returnするようにせよ、とわかりやすく言ってくれているので、returnから始まると。。

とすると、、

return rand % dnaModulus;

というプログラムになります!

返り値(return)として、「上で求めた値(rand)」の「dnaModulusによる剰余(%)」という事なので、上記の式となります。

dnaModulusは最初の方で

52

このようにuint型で宣言していますね。どういう事かというと10**16となっているので、

10の16乗の数値が入っているので17桁になっているという事ですね。

10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10 = dnaModulusです。

乱数で出た数値を17桁の数字で割って出た余り(剰余)を結果として出す(return)、という流れですね。

なんとなくですがわかりましたか?(自分に言い聞かせてますw)

17桁の数字 /  それ以上の数字(乱数) =  割り切れた分 + (剰余=16桁)になるんかなぁ、、

気になる方は計算してみてください、、、、

んっ、、、

ここまできて頭の悪さが露呈してしまう、、、w

ようわからんぞ、、、

10の16乗は、0が16個だから頭の1を数えると17桁だよなぁ、、、

オ〜ノ〜、、、、

長くなったし訳わかんなくなってきたので、今日はこの辺でおさらばしますw

そもそも%の計算ってどうやるんだ、、、w

おわりに

次回もCryptoZombies徹底解剖していきます!

難しくなるとチャプターが全然すすまんw

同時進行している方、おりましたらぜひお友達になりましょ!

今日は、義理の姉の子供達の入学式という事で、、市内に1歳児二人のお守り役を頼まれたので、今日の更新はここまでかな、、

このまま続きを読みたい方はこちらからどうぞ↓↓

あわせて読みたい
CryptoZombies徹底解剖⑤さてさて、本日もCryptoZombiesの解説をしていきますよ!雑談ではありますが、先日イケハヤ氏のVoicyを聴いて、ライブドアブロ...
ABOUT ME
shidayuu
元バンドマンで読書・書評をしている函館在住32歳、しだゆうと申します! このブログでは主に読書した内容を元に、「ヒラメキを発信する」をテーマとして毎日更新しています。 書評をメインに、たまに元バンドマンの知識を発信していきます! あなたの役に立てる記事を書いていきます!