首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msg.owner与msg.sender的差异?

msg.owner与msg.sender的差异?
EN

Ethereum用户
提问于 2017-07-12 00:58:32
回答 2查看 30K关注 0票数 10

我很难理解msg.ownermsg.sender之间的区别。在文档中找不到明确解释差异的任何内容。假设我创建并部署了一个契约。我会成为‘主人’吗?这些变量有可能是相同的吗?

这让我感到困惑,因为合同中的第118行。它看起来像它退还发送者,他发送的eth,但这不是它所做的。

EN

回答 2

Ethereum用户

回答已采纳

发布于 2017-07-12 02:22:59

在部署合同时,msg.sender是合同的所有者。如果您在契约中使用"owner“的名称定义了一个变量,则可以使用msg.sender的值(地址)为其赋值。

代码语言:javascript
复制
address owner = msg.sender;

因此,所有者变量将始终具有最初部署合同的人的地址,即合同所有者。

现在到了你分享的合同的第118行-

代码语言:javascript
复制
owner.transfer(msg.value);

在这里,如果调用回退函数,那么msg.value将在所有者的地址进行传输。

在您的合同中,在第9行中定义了"owner“变量。

而且,没有任何东西像msg.owner那样可靠,就像文档那样。

希望这能有所帮助。

票数 22
EN

Ethereum用户

发布于 2017-10-08 22:21:48

契约的msg.sender是当前与契约交互的地址。不管是人类还是其他契约。

因此,如果一个人正在与一个契约交互,msg.sender就是这个人的地址。如果另一个合同(B)与合同相互作用,则合同(B)的S地址成为msg.sender

契约的所有者是将契约部署到块链的地址,即与契约交互的第一个msg.sender。该地址是部署契约的地址,这一事实永远不会改变,这意味着所有者将永远保持所有者身份,除非通过有效的契约函数(例如transferOwnership(newOwner) )进行更改。

所有者地址不是msg.owner,但它可以保存在其他契约将来可以读取的公共变量中。

票数 12
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/21029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档