【CryptZombies】レッスン2チャプター3:Msg.sender
msg.sender
msg.senderとは、全ての関数で利用できるグローバル変数の一つです。
msg.senderを利用すると、その関数を呼び出したユーザー(またはスマートコントラクト)のaddressを参照できます。
msg.senderの使用例とmappingの更新
mapping (address => uint) favoriteNumber;
function setMyNumber(uint _myNumber) public {
// ここでは`favoriteNumber` mappingを更新して、`msg.sender`下に`_myNumber`を格納するぞ。
favoriteNumber[msg.sender] = _myNumber;
// mappingにデータを格納するのは、こう書くのだ
}
function whatIsMyNumber() public view returns (uint) {
// 送信者のアドレスに格納されている値を受け取る
// もし送信者が`setMyNumber`を呼び出さなかった場合は`0`だ
return favoriteNumber[msg.sender];
}
この例では、誰でもsetMyNumberを呼び出して、アドレスに紐づいたuintをコントラクトに格納することができてしまいます。
そこで、whatIsMyNumberを呼び出せば、格納したuintを戻すこともできます。
テストの実行
①新しいゾンビのidを取得して、id下にmsg.senderを格納してzombieToOwnerマッピングを更新せよ。
まず、赤線から見ていきます。
マッピングにidを取得させて更新するので、次のようになります。
次に、青線を見ていきます。
マッピングにデータを格納するので、次のようになります。
②このmsg.senderでownerZombieCountを増やせ。
ownerZombieCountマッピングにmsg.senderを取得させて、uintを増やしていくので、次のようになります。
※Solidityでは、++を使えばuintを増やせます。
uint number = 0;
number++;
// `number` is now `1`
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network