如何使用 abi.encodeWithSignature 调用不带参数的外部合约?

问题描述 投票:0回答:2

我使用的是 Solidity 0.5.16,在合约的函数中,我想调用另一个合约的

initialize()
方法。此方法不接受任何参数。

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

但是上面的方法不能正确编译..

solidity
2个回答
4
投票
  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()"
            )
        );
    }
}

0
投票

以上语法现已弃用,您可以使用以下语法:

pragma solidity ^0.8.0;

contract MyContract {
    function foo() external {
        address externalContract = address(0x123);
        (bool success, bytes memory returnedData) = externalContract.call
            {value: 0}
            (abi.encodeWithSignature("initialize()")
        );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.