初心者文系主婦がブロックチェーンを学ぶブログ

IT革命のビッグウェーブに乗り遅れた主婦が、ブロックチェーン革命の波にのるべく、ブロックチェーン技術を学ぶブログです。

【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を取得させて更新するので、次のようになります。

f:id:nomadomama:20181122002230p:plain

 

次に、青線を見ていきます。

マッピングにデータを格納するので、次のようになります。

f:id:nomadomama:20181122002436p:plain 

 

②このmsg.senderでownerZombieCountを増やせ。

ownerZombieCountマッピングにmsg.senderを取得させて、uintを増やしていくので、次のようになります。

f:id:nomadomama:20181122002604p:plain

 

※Solidityでは、++を使えばuintを増やせます。

uint number = 0;
number++;
// `number` is now `1`

 

 お疲れさまでした!

 

 

<参考>

CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network