ChainlinkOracleImpl
Inherits: OracleError, ChainlinkStructs
This contract is used to get the exchange rate via up to 3 hops at Chainlink price feeds. The rate is multiplied with the previous rate at each hop. E.g. to go from wBTC to USDC (assuming rates for example):
- wBTC -> BTC https://data.chain.link/ethereum/mainnet/crypto-other/wbtc-btc, rate: 0.92.
- BTC -> USD https://data.chain.link/ethereum/mainnet/crypto-usd/btc-usd rate: 30,000.
- USD -> USDC https://data.chain.link/ethereum/mainnet/stablecoins/usdc-usd rate: 0.98. Must invert feed: 1.02 finale rate would be: 0.92 * 30,000 * 1.02 = 28,152
State Variables
_CHAINLINK_FEED1
Chainlink price feed 1 to check for the exchange rate
IChainlinkAggregatorV3 internal immutable _CHAINLINK_FEED1;
_CHAINLINK_FEED2
Chainlink price feed 2 to check for the exchange rate
IChainlinkAggregatorV3 internal immutable _CHAINLINK_FEED2;
_CHAINLINK_FEED3
Chainlink price feed 3 to check for the exchange rate
IChainlinkAggregatorV3 internal immutable _CHAINLINK_FEED3;
_CHAINLINK_INVERT_RATE1
Flag to invert the price or not for feed 1 (to e.g. for WETH/USDC pool return prive of USDC per 1 WETH)
bool internal immutable _CHAINLINK_INVERT_RATE1;
_CHAINLINK_INVERT_RATE2
Flag to invert the price or not for feed 2 (to e.g. for WETH/USDC pool return prive of USDC per 1 WETH)
bool internal immutable _CHAINLINK_INVERT_RATE2;
_CHAINLINK_INVERT_RATE3
Flag to invert the price or not for feed 3 (to e.g. for WETH/USDC pool return prive of USDC per 1 WETH)
bool internal immutable _CHAINLINK_INVERT_RATE3;
_CHAINLINK_PRICE_SCALER_MULTIPLIER1
constant value for price scaling to reduce gas usage for feed 1
uint256 internal immutable _CHAINLINK_PRICE_SCALER_MULTIPLIER1;
_CHAINLINK_INVERT_PRICE_DIVIDEND1
constant value for inverting price to reduce gas usage for feed 1
uint256 internal immutable _CHAINLINK_INVERT_PRICE_DIVIDEND1;
_CHAINLINK_PRICE_SCALER_MULTIPLIER2
constant value for price scaling to reduce gas usage for feed 2
uint256 internal immutable _CHAINLINK_PRICE_SCALER_MULTIPLIER2;
_CHAINLINK_INVERT_PRICE_DIVIDEND2
constant value for inverting price to reduce gas usage for feed 2
uint256 internal immutable _CHAINLINK_INVERT_PRICE_DIVIDEND2;
_CHAINLINK_PRICE_SCALER_MULTIPLIER3
constant value for price scaling to reduce gas usage for feed 3
uint256 internal immutable _CHAINLINK_PRICE_SCALER_MULTIPLIER3;
_CHAINLINK_INVERT_PRICE_DIVIDEND3
constant value for inverting price to reduce gas usage for feed 3
uint256 internal immutable _CHAINLINK_INVERT_PRICE_DIVIDEND3;
Functions
constructor
constructor sets the Chainlink price feed and invertRate flag for each hop.
E.g. invertRate_
should be true if for the USDC/ETH pool it's expected that the oracle returns USDC per 1 ETH
constructor(ChainlinkConstructorParams memory params_);
_getChainlinkExchangeRate
Get the exchange rate from Chainlike oracle price feed(s)
function _getChainlinkExchangeRate() internal view returns (uint256 rate_);
Returns
Name | Type | Description |
---|---|---|
rate_ | uint256 | The exchange rate in OracleUtils.RATE_OUTPUT_DECIMALS |
_readFeedRate
reads the exchange rate_
from a Chainlink price feed_
taking into account scaling and invertRate_
function _readFeedRate(
IChainlinkAggregatorV3 feed_,
bool invertRate_,
uint256 priceMultiplier_,
uint256 invertDividend_
) private view returns (uint256 rate_);
chainlinkOracleData
returns all Chainlink oracle related data as utility for easy off-chain use / block explorer in a single view method
function chainlinkOracleData()
public
view
returns (
uint256 chainlinkExchangeRate_,
IChainlinkAggregatorV3 chainlinkFeed1_,
bool chainlinkInvertRate1_,
uint256 chainlinkExchangeRate1_,
IChainlinkAggregatorV3 chainlinkFeed2_,
bool chainlinkInvertRate2_,
uint256 chainlinkExchangeRate2_,
IChainlinkAggregatorV3 chainlinkFeed3_,
bool chainlinkInvertRate3_,
uint256 chainlinkExchangeRate3_
);
- State Variables
- _CHAINLINK_FEED1
- _CHAINLINK_FEED2
- _CHAINLINK_FEED3
- _CHAINLINK_INVERT_RATE1
- _CHAINLINK_INVERT_RATE2
- _CHAINLINK_INVERT_RATE3
- _CHAINLINK_PRICE_SCALER_MULTIPLIER1
- _CHAINLINK_INVERT_PRICE_DIVIDEND1
- _CHAINLINK_PRICE_SCALER_MULTIPLIER2
- _CHAINLINK_INVERT_PRICE_DIVIDEND2
- _CHAINLINK_PRICE_SCALER_MULTIPLIER3
- _CHAINLINK_INVERT_PRICE_DIVIDEND3
- Functions