{"file_path":"nav-oracle-public/contracts/ReProtocolExchangeRateChainlinkAdapter.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.29;\n\nimport \"./interfaces/MinimalAggregatorV3Interface.sol\";\nimport \"./interfaces/INAVDataProvider.sol\";\n\n/**\n * @title Re Protocol Exchange Rate Chainlink Adapter\n * @notice Adapts NAV data from NAVConsumer to Chainlink's AggregatorV3Interface format\n * @dev This contract acts as a bridge between Re Protocol's NAV system and Chainlink price feed consumers\n */\ncontract ReProtocolExchangeRateChainlinkAdapter is MinimalAggregatorV3Interface {\n    /// @notice The NAV data provider contract\n    INAVDataProvider public immutable navDataProvider;\n    \n    /// @notice Number of decimals for the price feed (matches NAVConsumer)\n    uint8 public constant override decimals = 18;\n    \n    /// @notice Description of the price feed\n    string public description;\n\n    /** \n     * @notice Constructor initializes the adapter with NAV data provider address\n     * @param _navDataProvider Address of the contract implementing INAVDataProvider\n     * @param _description Description of the price feed\n     */\n    constructor(address _navDataProvider, string memory _description) {\n        require(_navDataProvider != address(0), \"Zero address\");\n        navDataProvider = INAVDataProvider(_navDataProvider);\n        description = _description;\n    }\n    \n    /**\n     * @notice Returns the latest NAV data in Chainlink format\n     * @return roundId returns 0\n     * @return answer The NAV value as int256 with 18 decimals\n     * @return startedAt Timestamp when the round started (same as updatedAt)\n     * @return updatedAt Timestamp when the round was updated\n     * @return answeredInRound returns 0\n     */\n    function latestRoundData()\n        external\n        view\n        override\n        returns (\n            uint80 roundId,\n            int256 answer,\n            uint256 startedAt,\n            uint256 updatedAt,\n            uint80 answeredInRound\n        )\n    {\n        // Get current NAV data from the data provider\n        (uint256 nav, uint256 timestamp) = navDataProvider.getCurrentNAV();\n        \n        // Convert NAV to int256 for Chainlink compatibility\n        answer = int256(nav);\n        \n        // For this implementation, all timestamps are the same\n        startedAt = timestamp;\n        updatedAt = timestamp;\n        \n        return (0, answer, startedAt, updatedAt, 0);\n    }\n}","deployed_bytecode":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063313ce567146100515780637284e416146100705780639650e66714610085578063feaf968c146100d1575b600080fd5b610059601281565b60405160ff90911681526020015b60405180910390f35b610078610110565b604051610067919061024b565b6100ac7f00000000000000000000000084d4eaeb10f9e57b67622f667c6c13e22fa4b2b681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610067565b6100d961019e565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610067565b6000805461011d90610299565b80601f016020809104026020016040519081016040528092919081815260200182805461014990610299565b80156101965780601f1061016b57610100808354040283529160200191610196565b820191906000526020600020905b81548152906001019060200180831161017957829003601f168201915b505050505081565b60008060008060008060007f00000000000000000000000084d4eaeb10f9e57b67622f667c6c13e22fa4b2b673ffffffffffffffffffffffffffffffffffffffff1663693de5926040518163ffffffff1660e01b81526004016040805180830381865afa158015610213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023791906102ec565b600099919850965086955088945092505050565b602081526000825180602084015260005b81811015610279576020818601810151604086840101520161025c565b506000604082850101526040601f19601f83011684010191505092915050565b600181811c908216806102ad57607f821691505b6020821081036102e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080604083850312156102ff57600080fd5b50508051602090910151909290915056fea26469706673582212204e2eeeb2b6ece07d656291ed9467de5bd4e79f170db59ff50f725de9de89578d64736f6c634300081d0033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"paris","libraries":{},"optimizer":{"enabled":true,"runs":1000},"outputSelection":{"*":{"":["*"],"*":["*"]}}},"optimization_runs":1000,"sourcify_repo_url":null,"decoded_constructor_args":[["0x84d4eaeb10f9E57b67622f667C6c13E22fA4b2B6",{"internalType":"address","name":"_navDataProvider","type":"address"}],["reUSD/USD exchange rate",{"internalType":"string","name":"_description","type":"string"}]],"compiler_version":"v0.8.29+commit.ab55807c","is_verified_via_verifier_alliance":false,"verified_at":"2026-06-24T16:07:10.808984Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60a060405234801561001057600080fd5b5060405161064938038061064983398101604081905261002f916100af565b6001600160a01b0382166100785760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640160405180910390fd5b6001600160a01b03821660805260006100918282610224565b5050506102e2565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156100c257600080fd5b82516001600160a01b03811681146100d957600080fd5b60208401519092506001600160401b038111156100f557600080fd5b8301601f8101851361010657600080fd5b80516001600160401b0381111561011f5761011f610099565b604051601f8201601f19908116603f011681016001600160401b038111828210171561014d5761014d610099565b60405281815282820160200187101561016557600080fd5b60005b8281101561018457602081850181015183830182015201610168565b506000602083830101528093505050509250929050565b600181811c908216806101af57607f821691505b6020821081036101cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561021f57806000526020600020601f840160051c810160208510156101fc5750805b601f840160051c820191505b8181101561021c5760008155600101610208565b50505b505050565b81516001600160401b0381111561023d5761023d610099565b6102518161024b845461019b565b846101d5565b6020601f821160018114610285576000831561026d5750848201515b600019600385901b1c1916600184901b17845561021c565b600084815260208120601f198516915b828110156102b55787850151825560209485019460019092019101610295565b50848210156102d35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60805161034661030360003960008181608a01526101ab01526103466000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063313ce567146100515780637284e416146100705780639650e66714610085578063feaf968c146100d1575b600080fd5b610059601281565b60405160ff90911681526020015b60405180910390f35b610078610110565b604051610067919061024b565b6100ac7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610067565b6100d961019e565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610067565b6000805461011d90610299565b80601f016020809104026020016040519081016040528092919081815260200182805461014990610299565b80156101965780601f1061016b57610100808354040283529160200191610196565b820191906000526020600020905b81548152906001019060200180831161017957829003601f168201915b505050505081565b60008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663693de5926040518163ffffffff1660e01b81526004016040805180830381865afa158015610213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023791906102ec565b600099919850965086955088945092505050565b602081526000825180602084015260005b81811015610279576020818601810151604086840101520161025c565b506000604082850101526040601f19601f83011684010191505092915050565b600181811c908216806102ad57607f821691505b6020821081036102e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080604083850312156102ff57600080fd5b50508051602090910151909290915056fea26469706673582212204e2eeeb2b6ece07d656291ed9467de5bd4e79f170db59ff50f725de9de89578d64736f6c634300081d003300000000000000000000000084d4eaeb10f9e57b67622f667c6c13e22fa4b2b60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001772655553442f5553442065786368616e67652072617465000000000000000000","name":"ReProtocolExchangeRateChainlinkAdapter","is_blueprint":false,"license_type":"none","is_fully_verified":true,"is_verified_via_eth_bytecode_db":false,"language":"solidity","evm_version":"paris","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[{"file_path":"nav-oracle-public/contracts/interfaces/INAVDataProvider.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.29;\n\n/**\n * @title NAV Data Provider Interface\n * @notice Minimal interface for contracts that provide NAV (Net Asset Value) data\n * @dev This interface defines the minimum required functionality for NAV data sources\n *      Used by adapters and consumers that need to read NAV values without depending\n *      on the full implementation details of specific NAV oracle contracts\n */\ninterface INAVDataProvider {\n    /**\n     * @notice Get the current NAV value and its timestamp\n     * @return nav The latest NAV value with 18 decimal places\n     * @return timestamp The timestamp when this NAV value was last updated\n     */\n    function getCurrentNAV() external view returns (uint256 nav, uint256 timestamp);\n}"},{"file_path":"nav-oracle-public/contracts/interfaces/MinimalAggregatorV3Interface.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity >=0.5.0;\n\n/// @dev Inspired by\n/// https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\n/// @dev This is the minimal feed interface required by `MorphoChainlinkOracleV2`.\ninterface MinimalAggregatorV3Interface {\n    /// @notice Returns the precision of the feed.\n    function decimals() external view returns (uint8);\n\n    /// @notice Returns Chainlink's `latestRoundData` return values.\n    /// @notice Only the `answer` field is used by `MorphoChainlinkOracleV2`.\n    function latestRoundData()\n        external\n        view\n        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\n}"}],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"_navDataProvider","type":"address"},{"internalType":"string","name":"_description","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"navDataProvider","outputs":[{"internalType":"contract INAVDataProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":false,"constructor_args":"0x00000000000000000000000084d4eaeb10f9e57b67622f667c6c13e22fa4b2b60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001772655553442f5553442065786368616e67652072617465000000000000000000"}