通常我通过导入外部契约(Contract)的接口(interface)并生成契约(Contract)的“局部变量”来调用外部契约(Contract),一旦我需要它。像这样的东西:
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()")));
}
如您所见,这种情况下不需要接口(interface),但代码稍微复杂一些。
现在我的问题是,是否有办法使用
delegatecall
用调用外部函数的“接口(interface)方式”?
最佳答案
我终于找到了我的问题的答案:
遗憾的是,无法从 delegatecall
接收值函数调用。
关于blockchain - 使用 interface 和 delegateCall 调用外部 Solidity 合约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999801/