// SPDX-License-Identifier: MIT pragma solidity ^0.8.21; import "@openzeppelin/contracts/access/Ownable.sol"; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; contract NAVISOracle is Ownable { mapping(bytes32 => AggregatorV3Interface) public oracleFeeds; event OracleFeedAdded(bytes32 indexed symbol, address indexed feed); event OracleFeedRemoved(bytes32 indexed symbol); modifier validSymbol(bytes32 symbol) { require(address(oracleFeeds[symbol]) != address(0), "Invalid oracle symbol"); _; } function addOracleFeed(bytes32 symbol, address feedAddress) external onlyOwner { require(feedAddress != address(0), "Invalid oracle feed address"); require(address(oracleFeeds[symbol]) == address(0), "Oracle feed already exists for the symbol"); AggregatorV3Interface aggregator = AggregatorV3Interface(feedAddress); oracleFeeds[symbol] = aggregator; emit OracleFeedAdded(symbol, feedAddress); } function removeOracleFeed(bytes32 symbol) external onlyOwner validSymbol(symbol) { delete oracleFeeds[symbol]; emit OracleFeedRemoved(symbol); } function getOraclePrice(bytes32 symbol) external view validSymbol(symbol) returns (int256) { AggregatorV3Interface aggregator = oracleFeeds[symbol]; (, int256 price, , ,) = aggregator.latestRoundData(); return price; } }