//SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol"; import "@chainlink/contracts/src/v0.8/ConfirmedOwner.sol"; contract OFCaller is ChainlinkClient, ConfirmedOwner { using Chainlink for Chainlink.Request; uint256 constant private ORACLE_PAYMENT = 1 * LINK_DIVISIBILITY; string public lastResponse; string public jobId; address public oracle; event StartedExecution(); event FinishedExecution( bytes32 indexed requestId, string indexed response ); constructor(address _link, address _oracle, string memory _jobId) ConfirmedOwner(msg.sender){ setChainlinkToken(_link); oracle = _oracle; jobId = _jobId; } function invokeApp(string memory url, string memory data) public onlyOwner { emit StartedExecution(); Chainlink.Request memory req = buildOperatorRequest(stringToBytes32(jobId), this.fulfillInvokeApp.selector); req.add("id", "0"); req.add("url", url); req.add("data", data); sendOperatorRequestTo(oracle, req, 0); } function fulfillInvokeApp(bytes32 requestId, string memory response) public { emit FinishedExecution(requestId, response); lastResponse = response; } function stringToBytes32(string memory source) private pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(source); if (tempEmptyStringTest.length == 0) { return 0x0; } assembly {// solhint-disable-line no-inline-assembly result := mload(add(source, 32)) } } }
0.4.18