msg.sender 在 solidity 中有什么用?
What is the use of msg.sender in 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
favoriteNumber
是一个映射。把它想象成一个 javascript 对象。它将帐户地址映射到他们最喜欢的号码。
0x9C6520Dd9F8d0af1DA494C37b64D4Cea9A65243C -> 10
因此,当您拨打 setMyNumber(_myNumber)
时,您传递的是您喜欢的号码。所以这个数字将存储在 favoriteNumber
映射中,如下所示:
yourAccountAdress -> yourFavouriteNumber
因此,当您调用 whatIsMyNumber
函数时,由于 EVM 已经获取了您的帐号,因此会检查映射并 returns 您最喜欢的号码。
solidity 中存在 3 种类型的变量:状态、局部和全局。
全局变量示例:
- msg.sender(邮件发件人)
- msg.value(随消息发送的wei数量)
来自 favoriteNumber[msg.sender] = _myNumber;
的伪代码
- given a favoriteNumber list,
- select the address of the account calling this function,
- assign _myNumber to that address
注意:全局变量默认在所有合约中可用。在此处查看更多信息:solidity docs - global variable
在这篇文章中,我发现很难弄清楚 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
favoriteNumber
是一个映射。把它想象成一个 javascript 对象。它将帐户地址映射到他们最喜欢的号码。
0x9C6520Dd9F8d0af1DA494C37b64D4Cea9A65243C -> 10
因此,当您拨打 setMyNumber(_myNumber)
时,您传递的是您喜欢的号码。所以这个数字将存储在 favoriteNumber
映射中,如下所示:
yourAccountAdress -> yourFavouriteNumber
因此,当您调用 whatIsMyNumber
函数时,由于 EVM 已经获取了您的帐号,因此会检查映射并 returns 您最喜欢的号码。
solidity 中存在 3 种类型的变量:状态、局部和全局。 全局变量示例:
- msg.sender(邮件发件人)
- msg.value(随消息发送的wei数量)
来自 favoriteNumber[msg.sender] = _myNumber;
- given a favoriteNumber list,
- select the address of the account calling this function,
- assign _myNumber to that address
注意:全局变量默认在所有合约中可用。在此处查看更多信息:solidity docs - global variable