首页 > 解决方案 > 如何在没有参数的情况下使用 abi.encodeWithSignature 调用外部合约?

问题描述

我正在使用solidity 0.5.16,并且在合同的功能中,我想调用另一个合同的initialize()方法。此方法不接受任何参数。

        contract.call.value(0)(
          abi.encodeWithSignature("initialize()",);
        );

但是上述方法无法正确编译..

标签: solidity

解决方案


  1. 不要使用保留关键字contract- 将其替换externalContract为例如。

  2. 当您不传递任何参数时,请删除函数中的逗号,符号encodeWithSignature()

  3. 去掉;后面的分号encodeWithSignature()。这将导致另一个解析错误,因为您仍在call函数中构建参数。

pragma solidity 0.5.16;

contract MyContract {
    function foo() external {
        address externalContract = address(0x123);
        (bool success, bytes memory returnedData) = externalContract.call.value(0)(
            abi.encodeWithSignature("initialize()")
        );
    }
}

推荐阅读