首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msg.sender在内部呼叫中不同

msg.sender在内部呼叫中不同
EN

Stack Overflow用户
提问于 2017-12-21 01:36:40
回答 1查看 2.6K关注 0票数 1

我是solidityethereum开发的新手。

假设我有以下结构(我的结构更复杂,但我认为现在可以用了):

代码语言:javascript
复制
contract A {
  address public owner;
  function A() public {
      owner = msg.sender;
  }

  isOwner(address _addr) {
      return _addr == owner;
  }
}

contract Base is A { 
     ....
     someMethod(address _addr) {
        require(isOwner(msg.sender))

        // do something with _addr
     }
}

contract SomeContract{
     Base public baseContract;
     function SomeContract(Base _base) { 
        baseContract = _base
     }
     callingMethod() {
        ....
        require(baseContract.someMethod(msg.sender))
        ....
     }
}

通过从truffle调用callingMethod,它会因为require(isOwner(msg.sender))而失败。我能够看到msg.sender与owner使用Event并将其结果打印到控制台是不同的,但我不明白为什么。

有人知道为什么会这样吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-22 05:23:50

原因是msg.sender更改为调用契约的地址,即您的示例中的SomeContract。例如,可以考虑使用基本合约作为library。在这种情况下,不会更改msg.sender,因为将在幕后使用DELEGATECALL,但不会使用常规消息调用。

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

https://stackoverflow.com/questions/47911527

复制
相关文章

相似问题

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