diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index f6e266e5..ca987419 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -24,14 +24,17 @@ contract UiPoolDataProvider is IUiPoolDataProvider { using ReserveConfiguration for DataTypes.ReserveConfigurationMap; using UserConfiguration for DataTypes.UserConfigurationMap; - address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96; - IChainlinkAggregator public _networkBaseTokenPriceInUsdProxyAggregator; - uint256 public constant USD_PRICE = 100000000; - uint256 public constant ETH_CURRENCY_DECIMALS = 18; + IChainlinkAggregator public networkBaseTokenPriceInUsdProxyAggregator; + IChainlinkAggregator public marketReferenceCurrencyPriceInUsdProxyAggregator; + uint256 public constant ETH_CURRENCY_UNIT = 1 ether; - constructor(IChainlinkAggregator networkBaseTokenPriceInUsdProxyAggregator) public { - _networkBaseTokenPriceInUsdProxyAggregator = networkBaseTokenPriceInUsdProxyAggregator; + constructor( + IChainlinkAggregator _networkBaseTokenPriceInUsdProxyAggregator, + IChainlinkAggregator _marketReferenceCurrencyPriceInUsdProxyAggregator + ) public { + networkBaseTokenPriceInUsdProxyAggregator = _networkBaseTokenPriceInUsdProxyAggregator; + marketReferenceCurrencyPriceInUsdProxyAggregator = _marketReferenceCurrencyPriceInUsdProxyAggregator; } function getInterestRateStrategySlopes(DefaultReserveInterestRateStrategy interestRateStrategy) @@ -136,19 +139,15 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } BaseCurrencyInfo memory baseCurrencyInfo; - baseCurrencyInfo.networkBaseTokenPriceInUsd = _networkBaseTokenPriceInUsdProxyAggregator.latestAnswer(); - baseCurrencyInfo.networkBaseTokenDecimals = _networkBaseTokenPriceInUsdProxyAggregator.decimals(); + baseCurrencyInfo.networkBaseTokenPriceInUsd = networkBaseTokenPriceInUsdProxyAggregator.latestAnswer(); + baseCurrencyInfo.networkBaseTokenPriceDecimals = networkBaseTokenPriceInUsdProxyAggregator.decimals(); - try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) { - baseCurrencyInfo.baseCurrencyDecimals = baseCurrencyUnit; - if (address(0) == oracle.BASE_CURRENCY()) { - baseCurrencyInfo.baseCurrencyPriceInUsd = USD_PRICE; - } else { - baseCurrencyInfo.baseCurrencyPriceInUsd = oracle.getAssetPrice(MOCK_USD_ADDRESS); - } + try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) { + baseCurrencyInfo.marketReferenceCurrencyUnit = baseCurrencyUnit; + baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = int256(baseCurrencyUnit); } catch (bytes memory /*lowLevelData*/) { - baseCurrencyInfo.baseCurrencyDecimals = ETH_CURRENCY_DECIMALS; - baseCurrencyInfo.baseCurrencyPriceInUsd = oracle.getAssetPrice(MOCK_USD_ADDRESS); + baseCurrencyInfo.marketReferenceCurrencyUnit = ETH_CURRENCY_UNIT; + baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator.latestAnswer(); } return (reservesData, baseCurrencyInfo); diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 84661992..056ffc56 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -54,10 +54,10 @@ interface IUiPoolDataProvider { } struct BaseCurrencyInfo { - uint256 baseCurrencyDecimals; - uint256 baseCurrencyPriceInUsd; + uint256 marketReferenceCurrencyUnit; + int256 marketReferenceCurrencyPriceInUsd; int256 networkBaseTokenPriceInUsd; - uint8 networkBaseTokenDecimals; + uint8 networkBaseTokenPriceDecimals; } function getReservesList(ILendingPoolAddressesProvider provider) diff --git a/helpers/constants.ts b/helpers/constants.ts index fe743fa2..126a29e6 100644 --- a/helpers/constants.ts +++ b/helpers/constants.ts @@ -75,3 +75,21 @@ export const MOCK_CHAINLINK_AGGREGATORS_PRICES = { WAVAX: oneEther.multipliedBy('0.006051936629').toFixed(), USD: '5848466240000000', }; + +export const chainlinkAggregatorProxy = { + mainnet: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419', + kovan: '0x9326BFA02ADD2366b30bacB125260Af641031331', + matic: '0xAB594600376Ec9fD91F8e885dADF0CE036862dE0', + mumbai: '0xd0D5e3DB44DE05E9F294BB0a3bEEaF030DE24Ada', + avalanche: '0x0A77230d17318075983913bC2145DB16C7366156', + fuji: '0x5498BB86BC934c8D34FDA08E81D444153d0D06aD', +}; + +export const chainlinkEthUsdAggregatorProxy = { + mainnet: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419', + kovan: '0x9326BFA02ADD2366b30bacB125260Af641031331', + matic: '0xF9680D99D6C9589e2a93a78A04A279e509205945', + mumbai: '0x0715A7794a1dc8e42615F059dD6e406A6594651A', + avalanche: '0x976B3D034E162d8bD72D6b9C989d545b839003b0', + fuji: '0x86d67c3D38D2bCeE722E601025C25a575021c6EA', +}; diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index 32d2fc92..31231251 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -81,12 +81,16 @@ export const deployUiIncentiveDataProvider = async (verify?: boolean) => export const deployUiPoolDataProvider = async ( chainlinkAggregatorProxy: string, + chainlinkEthUsdAggregatorProxy: string, verify?: boolean ) => withSaveAndVerify( - await new UiPoolDataProviderFactory(await getFirstSigner()).deploy(chainlinkAggregatorProxy), + await new UiPoolDataProviderFactory(await getFirstSigner()).deploy( + chainlinkAggregatorProxy, + chainlinkEthUsdAggregatorProxy + ), eContractid.UiPoolDataProvider, - [chainlinkAggregatorProxy], + [chainlinkAggregatorProxy, chainlinkEthUsdAggregatorProxy], verify ); diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 94a15717..879e226e 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -1,6 +1,7 @@ import { task } from 'hardhat/config'; import { eContractid } from '../../helpers/types'; import { deployUiPoolDataProvider } from '../../helpers/contracts-deployments'; +import { chainlinkAggregatorProxy, chainlinkEthUsdAggregatorProxy } from '../../helpers/constants'; task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider contract`) .addFlag('verify', 'Verify UiPoolDataProvider contract via Etherscan API.') @@ -10,21 +11,19 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider throw new Error('INVALID_CHAIN_ID'); } - const chainlinkAggregatorProxy = { - mainnet: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419', - kovan: '0x9326BFA02ADD2366b30bacB125260Af641031331', - matic: '0xAB594600376Ec9fD91F8e885dADF0CE036862dE0', - mumbai: '0xd0D5e3DB44DE05E9F294BB0a3bEEaF030DE24Ada', - avalanche: '0x0A77230d17318075983913bC2145DB16C7366156', - fuji: '0x5498BB86BC934c8D34FDA08E81D444153d0D06aD', - }; console.log( `\n- UiPoolDataProvider price aggregator: ${chainlinkAggregatorProxy[localBRE.network.name]}` ); + console.log( + `\n- UiPoolDataProvider eth/usd price aggregator: ${ + chainlinkAggregatorProxy[localBRE.network.name] + }` + ); console.log(`\n- UiPoolDataProvider deployment`); const uiPoolDataProvider = await deployUiPoolDataProvider( chainlinkAggregatorProxy[localBRE.network.name], + chainlinkEthUsdAggregatorProxy[localBRE.network.name], verify ); diff --git a/tasks/full/6-initialize.ts b/tasks/full/6-initialize.ts index b1fd7601..b5ff4515 100644 --- a/tasks/full/6-initialize.ts +++ b/tasks/full/6-initialize.ts @@ -16,7 +16,11 @@ import { getAaveProtocolDataProvider, getLendingPoolAddressesProvider, } from '../../helpers/contracts-getters'; -import { ZERO_ADDRESS } from '../../helpers/constants'; +import { + chainlinkAggregatorProxy, + chainlinkEthUsdAggregatorProxy, + ZERO_ADDRESS, +} from '../../helpers/constants'; task('full:initialize-lending-pool', 'Initialize lending pool configuration.') .addFlag('verify', 'Verify contracts at Etherscan') @@ -100,7 +104,11 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.') await deployWalletBalancerProvider(verify); - const uiPoolDataProvider = await deployUiPoolDataProvider(verify); + const uiPoolDataProvider = await deployUiPoolDataProvider( + chainlinkAggregatorProxy[localBRE.network.name], + chainlinkEthUsdAggregatorProxy[localBRE.network.name], + verify + ); console.log('UiPoolDataProvider deployed at:', uiPoolDataProvider.address); const lendingPoolAddress = await addressesProvider.getLendingPool();