问题描述
我有以下两个合同:
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()
}
}
如前所述,我想在a.foo
的上下文中用B
调用msg.sender
内的B
,但我想在A的someData
中使用存储。这意味着使用delegatecall
无效,因为它将使用B的存储进行A.foo
调用。
有什么办法可以在这里做我想要的吗?问题与“真实的” A
已经部署在主网上并且我无法更改其编写方式有关。
解决方法
到目前为止,我认为这是不可能的。我只是遇到了同样的问题,但找不到任何解决方案。如果您可以从头开始创建新合同,然后通过将所有令牌转移到新地址来再次将其部署在主网上,将会更好。