msg.sender在solidity中有什么用



在这个代码段中,我发现很难弄清楚msg.sender是什么以及它在内部是如何工作的。

我所理解的是,我们有一个映射favoriteNumber,键是一个地址,值是一个uint。

评论的含义是什么;更新我们的favoriteNumber映射以将_myNumber存储在msg.sender下,我知道我们正在更新favoriteNumber,但在msg.sender下这意味着什么。这个方法的作用是什么,它是如何工作的?

mapping (address => uint) favoriteNumber;
function setMyNumber(uint _myNumber) public {
// Update our `favoriteNumber` mapping to store `_myNumber` under `msg.sender`
favoriteNumber[msg.sender] = _myNumber;
// ^ The syntax for storing data in a mapping is just like with arrays
}
function whatIsMyNumber() public view returns (uint) {
// Retrieve the value stored in the sender's address
// Will be `0` if the sender hasn't called `setMyNumber` yet
return favoriteNumber[msg.sender];
}

每个智能合约调用都有一个调用方地址。每个EVM(执行代码的以太坊虚拟机(都知道帐户执行每个操作。在Solidity中,您可以通过以下方式访问调用帐户参考msg.sender

所以当你调用solidity合约的函数时,你的合约已经得到了你账户的信息,所以你的账户就是msg.sender

CCD_ 7是映射。把它想象成一个javascript对象。它将帐户地址映射到他们最喜欢的号码。

0x9C6520Dd9F8d0af1DA494C37b64D4Cea9A65243C -> 10 

因此,当你拨打setMyNumber(_myNumber)时,你正在传递你最喜欢的号码。所以这个数字将被存储在favoriteNumber映射中,如下所示:

yourAccountAdress -> yourFavouriteNumber

因此,当您调用whatIsMyNumber函数时,由于EVM已经获取了您的帐号,因此会检查映射并返回您最喜欢的号码。

在solidity中存在三种类型的变量:状态、局部和全局。全局变量示例:

  • msg.sender(邮件的发件人(
  • msg.value(随消息发送的wei数(

来自favoriteNumber[msg.sender] = _myNumber;的伪代码

  • 给定一个收藏夹编号列表
  • 选择调用此函数的帐户的地址
  • 为该地址分配_myNumber

注意:默认情况下,全局变量在所有合同中都可用。点击此处查看更多信息:solidity文档-全局变量

相关内容

  • 没有找到相关文章

最新更新