Msg.sender在稳固中有什么用处? [英] What is the use of msg.sender in solidity?

查看:21
本文介绍了Msg.sender在稳固中有什么用处?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

msg.sender下更新favoriteNumber到存储的_myNumber映射是什么意思,我知道我们在更新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(执行代码的Etherum虚拟机)都知道 帐户执行每个操作。在Solidity中,您可以通过以下方式访问呼叫帐户 引用msg.sender

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

favoriteNumber是一个映射。把它想像成一个Java脚本对象。它会将帐户地址映射到他们最喜欢的数字。

 0x9C6520Dd9F8d0af1DA494C37b64D4Cea9A65243C -> 10 

因此,当您调用setMyNumber(_myNumber)时,您正在传递您最喜欢的号码。因此,该数字将存储在favoriteNumber映射中,如下所示:

 yourAccountAdress -> yourFavouriteNumber

因此,当您调用whatIsMyNumber函数时,因为EVM已经获得了您的帐号,所以会签入映射并向您返回您喜欢的号码。

这篇关于Msg.sender在稳固中有什么用处?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆