如何在没有参数的情况下调用 abi.encodeWithSignature 的外部合同?
How to call external contract with abi.encodeWithSignature with no arguments?
我正在使用 solidity 0.5.16,在一个合约的函数中,我想调用另一个合约的 initialize()
方法。此方法不接受任何参数。
contract.call.value(0)(
abi.encodeWithSignature("initialize()",);
);
但是上面的方法编译不正确..
不要使用保留关键字 contract
- 例如将其替换为 externalContract
。
当您不传递任何参数时,删除 encodeWithSignature()
函数中的逗号 ,
。
去掉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()")
);
}
}
以上语法现已弃用,您可以改用它:
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()"));
}
}
我正在使用 solidity 0.5.16,在一个合约的函数中,我想调用另一个合约的 initialize()
方法。此方法不接受任何参数。
contract.call.value(0)(
abi.encodeWithSignature("initialize()",);
);
但是上面的方法编译不正确..
不要使用保留关键字
contract
- 例如将其替换为externalContract
。当您不传递任何参数时,删除
encodeWithSignature()
函数中的逗号,
。去掉
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()")
);
}
}
以上语法现已弃用,您可以改用它:
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()"));
}
}