通过接口和委托调用外部Solidity合同

时间:2018-06-23 09:27:41

标签: blockchain ethereum solidity

通常,我通过导入外部合同的接口并在需要时生成合同的“局部变量”来调用外部合同。像这样:

import "./CalleeInterface";

contract Caller {

  function callExternalFunction(address _calleeAddr){
    CalleeInternface callee = CalleeInterface(_calleeAddr);
    callee.someExternalFunction();
}

我的问题是,以上方法似乎隐式使用了功能call。 现在,我面临一种情况,外部函数将检查发送者的地址。当我以上述方式使用时,msg.sender是合同Caller的地址。由于我想“转发”实际调用者的地址,因此需要使用delegatecall来调用外部函数:

contract Caller {
  function callExternalFunction(address _calleeAddr){
    _calleeAddr.delegatecall(bytes4(keccak256("someExternalFunction()")));
}

如您所见,在这种情况下不需要接口,但是代码有点复杂。 现在我的问题是,是否可以通过调用外部函数的“接口方式”使用delegatecall

1 个答案:

答案 0 :(得分:1)

我终于找到了解决我问题的答案: 可悲的是,人们无法从delegatecall函数调用中接收值。