Skip to content

ChainlinkOracleImpl2 ​

Git Source

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):

  1. wBTC -> BTC https://data.chain.link/ethereum/mainnet/crypto-other/wbtc-btc, rate: 0.92.
  2. BTC -> USD https://data.chain.link/ethereum/mainnet/crypto-usd/btc-usd rate: 30,000.
  3. 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 ​

_CHAINLINK2_FEED1 ​

Chainlink price feed 1 to check for the exchange rate

solidity
IChainlinkAggregatorV3 internal immutable _CHAINLINK2_FEED1;

_CHAINLINK2_FEED2 ​

Chainlink price feed 2 to check for the exchange rate

solidity
IChainlinkAggregatorV3 internal immutable _CHAINLINK2_FEED2;

_CHAINLINK2_FEED3 ​

Chainlink price feed 3 to check for the exchange rate

solidity
IChainlinkAggregatorV3 internal immutable _CHAINLINK2_FEED3;

_CHAINLINK2_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)

solidity
bool internal immutable _CHAINLINK2_INVERT_RATE1;

_CHAINLINK2_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)

solidity
bool internal immutable _CHAINLINK2_INVERT_RATE2;

_CHAINLINK2_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)

solidity
bool internal immutable _CHAINLINK2_INVERT_RATE3;

_CHAINLINK2_PRICE_SCALER_MULTIPLIER1 ​

constant value for price scaling to reduce gas usage for feed 1

solidity
uint256 internal immutable _CHAINLINK2_PRICE_SCALER_MULTIPLIER1;

_CHAINLINK2_INVERT_PRICE_DIVIDEND1 ​

constant value for inverting price to reduce gas usage for feed 1

solidity
uint256 internal immutable _CHAINLINK2_INVERT_PRICE_DIVIDEND1;

_CHAINLINK2_PRICE_SCALER_MULTIPLIER2 ​

constant value for price scaling to reduce gas usage for feed 2

solidity
uint256 internal immutable _CHAINLINK2_PRICE_SCALER_MULTIPLIER2;

_CHAINLINK2_INVERT_PRICE_DIVIDEND2 ​

constant value for inverting price to reduce gas usage for feed 2

solidity
uint256 internal immutable _CHAINLINK2_INVERT_PRICE_DIVIDEND2;

_CHAINLINK2_PRICE_SCALER_MULTIPLIER3 ​

constant value for price scaling to reduce gas usage for feed 3

solidity
uint256 internal immutable _CHAINLINK2_PRICE_SCALER_MULTIPLIER3;

_CHAINLINK2_INVERT_PRICE_DIVIDEND3 ​

constant value for inverting price to reduce gas usage for feed 3

solidity
uint256 internal immutable _CHAINLINK2_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

solidity
constructor(ChainlinkConstructorParams memory params_);

_getChainlinkExchangeRate2 ​

Get the exchange rate from Chainlike oracle price feed(s)

solidity
function _getChainlinkExchangeRate2() internal view returns (uint256 rate_);

Returns

NameTypeDescription
rate_uint256The exchange rate in OracleUtils.RATE_OUTPUT_DECIMALS

_readFeedRate2 ​

reads the exchange rate_ from a Chainlink price feed_ taking into account scaling and invertRate_

solidity
function _readFeedRate2(
    IChainlinkAggregatorV3 feed_,
    bool invertRate_,
    uint256 priceMultiplier_,
    uint256 invertDividend_
) private view returns (uint256 rate_);

chainlinkOracleData2 ​

returns all Chainlink oracle related data as utility for easy off-chain use / block explorer in a single view method

solidity
function chainlinkOracleData2()
    public
    view
    returns (
        uint256 chainlinkExchangeRate_,
        IChainlinkAggregatorV3 chainlinkFeed1_,
        bool chainlinkInvertRate1_,
        uint256 chainlinkExchangeRate1_,
        IChainlinkAggregatorV3 chainlinkFeed2_,
        bool chainlinkInvertRate2_,
        uint256 chainlinkExchangeRate2_,
        IChainlinkAggregatorV3 chainlinkFeed3_,
        bool chainlinkInvertRate3_,
        uint256 chainlinkExchangeRate3_
    );