【问题标题】:Is it possible to call a contract in solidity, using its storage but passing along msg.sender?是否可以使用其存储但传递 msg.sender 以可靠的方式调用合约?
【发布时间】:2020-09-27 02:01:10
【问题描述】:

我有以下两份合同:


contract A {
  uint256 someData = 3

  function foo() public view returns (uint256) {
    // return something based on msg.sender and someData
  }
}

contract B {
  A public a;

  function bar() public {
    // I'd like to call a.foo with msg.sender for this context
    uint256 ret = a.foo()  
  }
}

如前所述,我想在B 中使用msg.senderB 的上下文中调用a.foo,但我想在A 的存储中使用someData。这意味着使用 delegatecall 将不起作用,因为它会使用 B 的存储空间来调用 A.foo

有什么办法可以在这里做我想做的事吗?问题在于“真正的”A 已经部署在主网上,我无法更改它的编写方式。

【问题讨论】:

    标签: ethereum solidity evm


    【解决方案1】:

    目前我认为这是不可能的。我刚刚遇到同样的问题,但找不到任何解决方案。如果您可以从头开始创建一个新合约并通过将所有代币转移到新地址将其再次部署到主网上,那就更好了。

    【讨论】:

    • 第二,遇到同样的问题,一直在浏览,没有太多运气。不要认为这可能是ATM。
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2012-05-08
    • 2014-05-26
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多