我很难理解msg.owner和msg.sender之间的区别。在文档中找不到明确解释差异的任何内容。假设我创建并部署了一个契约。我会成为‘主人’吗?这些变量有可能是相同的吗?
这让我感到困惑,因为这合同中的第118行。它看起来像它退还发送者,他发送的eth,但这不是它所做的。
发布于 2017-07-12 02:22:59
在部署合同时,msg.sender是合同的所有者。如果您在契约中使用"owner“的名称定义了一个变量,则可以使用msg.sender的值(地址)为其赋值。
address owner = msg.sender;因此,所有者变量将始终具有最初部署合同的人的地址,即合同所有者。
现在到了你分享的合同的第118行-
owner.transfer(msg.value);在这里,如果调用回退函数,那么msg.value将在所有者的地址进行传输。
在您的合同中,在第9行中定义了"owner“变量。
而且,没有任何东西像msg.owner那样可靠,就像文档那样。
希望这能有所帮助。
发布于 2017-10-08 22:21:48
契约的msg.sender是当前与契约交互的地址。不管是人类还是其他契约。
因此,如果一个人正在与一个契约交互,msg.sender就是这个人的地址。如果另一个合同(B)与合同相互作用,则合同(B)的S地址成为msg.sender。
契约的所有者是将契约部署到块链的地址,即与契约交互的第一个msg.sender。该地址是部署契约的地址,这一事实永远不会改变,这意味着所有者将永远保持所有者身份,除非通过有效的契约函数(例如transferOwnership(newOwner) )进行更改。
所有者地址不是msg.owner,但它可以保存在其他契约将来可以读取的公共变量中。
https://ethereum.stackexchange.com/questions/21029
复制相似问题