我刚开始学习Solidity,这是我个人的挑战。我不是一名开发者,所以我还有很长的路要走。
我正在按照Ethereum.org的教程进行学习,以下是我对其中的一点有疑问:什么是[msg.sender]
?我猜它是触发合约的钱包地址,但我不确定。
我刚开始学习Solidity,这是我个人的挑战。我不是一名开发者,所以我还有很长的路要走。
我正在按照Ethereum.org的教程进行学习,以下是我对其中的一点有疑问:什么是[msg.sender]
?我猜它是触发合约的钱包地址,但我不确定。
msg.sender
(address
):消息的发送者(当前调用)
msg.sender
是当前与合约进行连接的人。
以后,您可能会处理涉及到合约互相连接的情况。在这种情况下,创建调用的合约将成为msg.sender
。
msg.sender
通常可以描述为当前与该合约交互的“实体”的地址吗? - c0mr4t让我们简单明了地说。
There are two types of accounts in the Ethereum Chain
1). Externally Owned Accounts(EOA) [Person]
2). Contracts Accounts [Contracts on Chain]
两个账户都有它们自己的地址。
personA
的钱包地址是 (EOA)
0x0cE446987406E92DF41614C46F1d6df9Cc925847
。
Math.sol
的合约地址是 0x0cE446987406E92DF41614C46F1d6df9Cc753869
,
并且 Math.sol
包含 ContractA
Addition.sol
的合约地址是 0x0cE446987406E92DF41614C46F1d6df9Cc357241
,
并且 Addition.sol
包含 ContractB
这里,ContractA
中的一个函数从 ContractB
中调用。
所以,当 personA
调用 ContractA
的任何函数时。
In this scenario, if you print or get `msg.sender` and `tx.origin` inside function of `ContractB` then the result would be like this
msg.sender = `0x0cE446987406E92DF41614C46F1d6df9Cc753869` // You will get address of `ContractA`
tx.origin = `0x0cE446987406E92DF41614C46F1d6df9Cc925847` // personA's (EOA) Wallet Address
在这里,
msg.sender (address)
:表示消息的发送者(当前调用)
另一方面
address owner = msg.sender;
msg.sender
是调用或启动函数或创建交易的地址。现在,这个地址可以是合同的地址,也可以是像你和我这样的人。
这就是为什么您可以使用 msg.sender
而不是 msg.sender()
的原因。