見出し画像

Solidity勉強日誌③msg.senderとは何か?

「msg.sender」これもSolidity特有の文法です。

そもそもSolidityは、Ethereum上でスマートコントラクトを書くことが出来るプログラミング言語です。Bitcoinではビットコインアドレスという口座番号のようなものが割り当てられています。Ethereumではそれぞれのスマートコントラクトにも、アドレスが存在するのです。

そして、「msg.sender」を使うと、関数を呼び出したスマートコントラクトのアドレスを参照できるのです。ある変数のアドレスを参照するときは必ず、「msg.sender」を使うようにしてください。

さて、下記のようにfavoriteNumberという変数があります。

mapping (address => uint) favoriteNumber;

この変数の呼び出したユーザーのアドレスに_myNumberを格納するファンクションが下記になります。

function setMyNumber(uint _myNumber) public {
 favoriteNumber[msg.sender] = _myNumber;
}

そして、格納した_myNumberを参照したい時のファンクションは下記のようになります。

function whatIsMyNumber() public view returns (uint) {
    return favoriteNumber[msg.sender]
}

スマートコントラクトは常にJavascriptなどを使って外部からコントラクトを呼び出して実行しなければいけません。関数を呼び出した人のアドレスを呼び出すときは「msg.sender」を使うことで、アドレスに変な値を入れるようなハッキングを受けるリスクを無くせるのです。

「msg.sender」は、イーサリアムブロックチェーンにセキュリティをもたらすものです。他人のデータを改変したいなら、イーサリアムアドレスに関連づけられている秘密鍵を盗む以外に方法がない状態にすることができます。

参考:CryptoZombies


この記事が気に入ったらサポートをしてみませんか?