Created
October 7, 2022 14:02
-
-
Save olulofe/13d672362bd84375b51c90b2a7ee5b7b to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.7; | |
import "./OracleInterface.sol"; | |
contract Oracle is OracleInterface { | |
address public nodeAddress; | |
string public adapterId; | |
struct Request { | |
uint requestId; | |
address nodeAddress; | |
string adapterId; | |
bytes4 callbackFunctionId; | |
address callBackContract; | |
bytes32 data; | |
} | |
Request[] public requests; | |
event NewOracleRequest(string adapterId, uint indexed requestId); | |
constructor(address _nodeAddress,string memory _adapterId) { | |
nodeAddress = _nodeAddress; | |
adapterId = _adapterId; | |
} | |
function newOracleRequest( | |
bytes4 callbackFunctionId, | |
string memory adapterID, | |
address callBackContract | |
) external override returns(bool) { | |
uint requestId = requests.length; | |
Request memory request = Request( | |
requestId, | |
nodeAddress, | |
adapterID, | |
callbackFunctionId, | |
callBackContract, | |
bytes32("") | |
); | |
requests.push(request); | |
emit NewOracleRequest(adapterID, requestId); | |
return true; | |
} | |
function fulfillOracleRequest( | |
uint requestId, | |
bytes32 data | |
) external override returns(bool) { | |
require(msg.sender == nodeAddress,"Oracle: Permission needed for node"); | |
Request memory request = requests[requestId]; | |
(bool success, ) = request.callBackContract.call(abi.encodeWithSelector(request.callbackFunctionId, data)); | |
return success; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment