// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.2; import "./IOracle.sol"; import "./Component.sol"; import "./IComponent.sol"; import "../services/IOracleService.sol"; abstract contract Oracle is IOracle, Component { IOracleService private _oracleService; modifier onlyQuery { require( _msgSender() == _getContractAddress("Query"), "ERROR:ORA-001:ACCESS_DENIED" ); _; } constructor( bytes32 name, address registry ) Component(name, ComponentType.Oracle, registry) { _oracleService = IOracleService(_getContractAddress("OracleService")); emit LogOracleCreated(address(this)); } // default callback function implementations function _afterApprove() internal override { emit LogOracleApproved(getId()); } function _afterPropose() internal override { emit LogOracleProposed(getId()); } function _afterDecline() internal override { emit LogOracleDeclined(getId()); } function _respond(uint256 requestId, bytes memory data) internal { _oracleService.respond(requestId, data); } }