1.结合法
结合前面两篇文档,将上篇的 contractC 加入接口定义,并通过接口获取函数签名;
contractD.sol
pragma solidity^0.5.0;
interface ContractInterface {
function setRandomN(uint _limit) external returns(bool);
function getRandomN() view external returns(uint);
}
contract contractD {
uint public randomN;
function callSetRandomN(ContractInterface _contract, uint _limit) public returns(bool) {
bytes memory _calldata = abi.encodeWithSelector(_contract.setRandomN.selector, _limit);
(bool success, bytes memory returnData) = address(_contract).call(_calldata);
require(success == true, "call failure");
return abi.decode(returnData, (bool));
}
function callGetRandomN(ContractInterface _contract) public returns(uint) {
bytes