blockchain - 使用 interface 和 delegateCall 调用外部 Solidity 合约

标签 blockchain ethereum solidity

通常我通过导入外部契约(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/

相关文章:

bit-manipulation - 如何在 Solidity 中将 bytes3 转换为 HEX 字符串

solidity - 调用 remix.ethereum 中的外部函数

rust - 如何在 Substrate 特定类型和 Rust 原始类型之间进行转换?

docker - 使用docker swarm连接2台单独的笔记本电脑吗?

blockchain - 如何在solidity中将uint转换为字符串?

ethereum - 使用unchecked有什么好处?

ethereum - 有没有办法根据以太坊 GitHub 提交者的提交合并频率对他们进行排序?

blockchain - Aeternity 中的跨合约调用

ethereum - Solidity:如何将 bytes32 表示为字符串

python - 如何自动化 Python Dash 应用程序数据拉取?