如何在Solidity中使用无参数abi.encodeWithSignature调用外部合约
问题原因及修复方案
你当前的代码存在3处编译错误,按如下说明修正即可:
- 错误1:
abi.encodeWithSignature("initialize()",)末尾多了悬空逗号,无参函数不需要传入额外参数,不能保留多余的逗号 - 错误2:
contract是 Solidity 内置保留关键字,不能直接用作目标合约的变量名 - 错误3:Solidity 0.5.x 版本的低级调用
call会返回两个值(bool success, bytes memory returnData),必须主动接收返回值,否则会触发编译报错
正确实现代码
// 假设targetContract是你要调用的目标合约地址变量,类型为address (bool success, ) = targetContract.call.value(0)(abi.encodeWithSignature("initialize()")); // 建议增加调用成功校验,避免静默失败 require(success, "Initialize call failed");
如果不需要校验调用结果,也可以直接忽略返回值占位,但不推荐这么做:
targetContract.call.value(0)(abi.encodeWithSignature("initialize()"));
注:value(0) 可以省略,默认调用时不会向目标合约转ETH
内容的提问来源于stack exchange,提问作者doctopus
相关产品推荐
相关产品推荐

