使用接口和委托调用调用外部 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与调用外部函数的"接口方式"一起使用?

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

最新更新