【Solidity 超入門】CryptoZombiesを通してdAppを作る【part4】
Block Chainを勉強しようと志す人はスマートコントラクトの実装を避けては通れないと思います。solidityというプログラミング言語でスマートコントラクトを書くのがデファクトスタンダードですので、まずsolidiyを学習することになると思います。
solidityを学習しようと思い、ググってみると大体「CryptoZombies」なるサービスを推している人や記事が多くヒットします。ですが実際にサイトを見ると英語やん...日本語もあまりちゃんと翻訳されないし、取っ付きづらいと思われる方も多いと思います。今回はCryptoZombiesの取っ付きづらさをこの記事で可能な限り払拭でき、solidity学習で躓いていた方の助けになればと思います。
part1の記事はこちら
part2の記事はこちら
part3の記事はこちら
対象読者
JavaScript等の他の言語でのプログラミングの経験がある方。
ですが、そこまで文法的には難しくないのでわからない用語があれば都度ググっていただければ読み進めることはできると思います。
solidityとは
solidityはイーサリアム上で動作するスマートコントラクトを実装する為の開発言語で、JavaScriptと似た性質を持った「コントラクト指向言語」と呼ばれるものです。
CryptoZombiesとは??
CryptoZombiesは、暗号からゾンビを生み出すゲームの開発を通じて、Solidityでスマートコントラクトの構築を学習できる、インタラクティブなオンラインレッスンです。
学習内容
「Solidity: Smart Contractの初級から中級を学ぶ」のセクションでの学習内容を先にピックアップしておきます。
-
Making the Zombie Factory 👈 DONE
-
Zombies Attack Their Victims 👈 イマココ
-
Advanced Solidity Concepts
-
Zombie Battle System
-
ERC721 & Crypto-Collectibles
-
App Front-ends & Web3.js
では本記事からは「Zombies Attack Their Victims」について書いていきたいと思います。
Zombies Attack Their Victims
Making the Zombie Factory編では、名前を受け取り、それを使ってランダムなゾンビを生成し、ブロックチェーン上のアプリのゾンビデータベースにそのゾンビを追加する関数を作成しました。レッスン2である今回は少しづつ作成物をゲームらしくしていきます。ユーザをマルチプレイヤーにし、ゾンビをランダムに生成するだけでなく、ゾンビが他の生命体を "食べる "ことで新たな個体を生成できるようにします。前回はゾンビのDNAを個体識別として使用していましたが今回もこちらは関係しており、新しいゾンビのDNAは前のゾンビのDNAと宿主のDNAから計算されるような仕様になっています。
Chapter1
ゾンビの摂食と言うタイトルですが、ここのChapterは説明回なので読んでdemoを触って終わりです。
ゾンビが餌を食べる時、宿主にウイルスを感染させると言う設定で、ウイルスは宿主を新しいゾンビに変え、あなたの軍隊に参加させることができるそうです。新しいゾンビのDNAは前のゾンビのDNAと宿主のDNAから計算されます。demoで人間を選択すると、新たなミュータントゾンビを生成が確認できます。元のDNA、人間のDNA、そして新たなミュータントゾンビのDNAが生成結果で確認できれば、次に行きましょう。
Chapter2
データベースに登録されたゾンビにオーナーを与えて、ゲームをマルチプレイヤー化しようぜ!と言うChapterです。これを実現するためにマッピングとアドレスという2つの新しいデータ型が必要になります。これらをそれぞれ見ていきましょう。
アドレス
Ethereumのブロックチェーンはアカウントで構成されており、これは銀行口座のように考えることができます。アカウントにはETH(Ethereumブロックチェーンで使用される通貨)の残高があり、銀行口座が他の銀行口座に送金できるように、他のアカウントとイーサの支払いを送受信することができます。各アカウントにはアドレスがあり、これは銀行の口座番号と同じように考えることができます。これは、そのアカウントを指す一意の識別子で、次のようなものです。
0x0cE446255506E92DF41614C46F1d6df9Cc969183
solidityはJavaScriptに似ているのですが、変数の型はTypeScriptと比べて種類が多かったりします。そのうちの一つで上記で説明したアドレスを取り回す型がadress型です。EOA[1]やContractの20バイトの長さのアドレスを格納する型でありaddress句で宣言します。
変数定義としては以下のように書きます。
// "0x0000000000000000000000000000000000000abc"のアドレス値を格納。
address a = 0xabc;
アドレス型の詳細については、後のレッスンで触れるので、今はアドレスが特定のユーザー(またはスマートコントラクト)によって所有されていることだけを理解していれOKです。
つまり、ゾンビの所有権を表すユニークなIDとして使うことができ、ユーザーがこのアプリケーションとやり取りして新しいゾンビを作成すると、関数を呼び出したEthereumアドレスにゾンビの所有権を設定することになります。
マッピング(Mappings)
ref: https://raq-hiphop.com/web3-development-solidity-basic06/
part4の最後に
part1~part nまでお疲れ様でした。
Zombies Attack Their Victims編突入しました。年末年始に書いたpart1~3で Making the Zombie Factory編でsolidityに触れることができたと思います、このZombies Attack Their Victims編の日本語解説記事は意外と少なく、そもそもMaking the Zombie Factory編は沢山あるのにその先の5つのカリキュラムがなかったので、これらの日本語の解説記事ほしい!!と言う人もいるかなぁと思って執筆しました。誰かしらの役に立てば幸いです。
それでは。
References
-
Externally Owned Accountの略。イーサリアム上のアカウントの種類で、ユーザーがETHやERC20トークンなどを保有するアカウント。俗にいうイーサリアムウォレットは、EOAアカウントの残高を参照、送金などを行うインターフェイスを表す。 ↩︎
Discussion