title | actions | material | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
マッピング(Mapping)とアドレス(Addresses) |
|
|
それじゃあ、データベースのゾンビをオーナーに与えるやり方でマルチプレーヤーゲームを作っていくから、しっかりついてこい。
まず、この作業には新しいデータ型が必要になる。 mapping
と address
だ。
イーサリアムのブロックチェーンが銀行口座と同じように**アカウント(口座)で構成されているのは知っているな。このアカウント(口座)には、Ether(イーサ)**の残高が記録されていて、Ether(イーサリアムブロックチェーンで使用される通貨)を送金したり受け取ったり、別のアカウントに支払うこともできるのだ。銀行口座から送金するのと全く同じだと思っていい。
それぞれのアカウントにはアドレス
がある。これは銀行口座番号だと思えばいい。これはアカウントのためのユニークな識別番号になっていて、次のような番号で表示されるのだ:
0x0cE446255506E92DF41614C46F1d6df9Cc969183
(このアドレスはCryptoZombiesチームのものだ。CryptoZombiesが気に入ったら、Etherを送ってくれ! 😉 )
アドレスの一番重要な部分は後で説明してやるから、今はアドレスは特定のユーザー(またはスマートコントラクトで)が所有するものだとだけ理解しておけばいい
つまり、この数字をゾンビの番号として使用することができるということだ。このアプリで新しいゾンビを作ったら、関数を呼び出して、イーサリアムのアドレスをそのゾンビに設定していくぞ。
レッスン 1では、構造体 と **配列**を教えたな。 **Mappings(マッピング)**は、それと同じで、データを格納するときにSolidityで使える方法の一つだ。
mapping
は次のように定義するのだ:
// 金融系のアプリの場合、ユーザーのアカウントの残高にuintを格納する:
mapping (address => uint) public accountBalance;
// もしくは、ユーザーIdを基にユーザー名を参照・格納するために使用するぞ:
mapping (uint => string) userIdToName;
マッピングは本質的にはデータの保管と参照のためのキーバリューストアだ。最初の例で言えば、キーはaddress
で、バリュー(値)はuint
だ。2番目の例だと、キーは uint
で、バリューは string
だ。ここまで理解できたか?
ゾンビのオーナーシップを格納したいので、2つのマッピングを使用する:一つはゾンビを所有するアドレスをトラッキングし、もう一つはオーナーが持つゾンビをトラッキングするものだ。
-
zombieToOwner
という名前のマッピングを作成せよ。キーはuint
とし(idを基にゾンビを参照・保管するぞ)、バリューはaddress
とする。マッピングはpublic
で作成せよ。 -
ownerZombieCount
という名前のマッピングを作成し、キーはaddress
、バリューはuint
を設定せよ。