From 5ba8045c89411d83021bd2da121e50190a5ca524 Mon Sep 17 00:00:00 2001 From: David Racero Date: Thu, 5 Nov 2020 15:54:45 +0100 Subject: [PATCH 1/3] Added missing aggregators --- config/commons.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/commons.ts b/config/commons.ts index f4dae080..00588921 100644 --- a/config/commons.ts +++ b/config/commons.ts @@ -205,8 +205,8 @@ export const CommonsConfig: ICommonConfiguration = { BUSD: '0x63294A05C9a81b1A40CAD3f2ff30617111630393', USD: '0xD21912D8762078598283B14cbA40Cb4bFCb87581', YFI: '0xe45f3ed2218E7e411bf8DFdE66069e57F46b26eF', - REN: ZERO_ADDRESS, - UNI: ZERO_ADDRESS, + REN: '0xF1939BECE7708382b5fb5e559f630CB8B39a10ee', + UNI: '0x17756515f112429471F86f98D5052aCB6C47f6ee', ENJ: '0xfaDbe2ee798889F02d1d39eDaD98Eff4c7fe95D4', UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9', UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', From aa354bad5951df6b98c9a94321c0ae74ae322820 Mon Sep 17 00:00:00 2001 From: The3D Date: Fri, 6 Nov 2020 10:16:40 +0100 Subject: [PATCH 2/3] Replaced getAaveAdmin with getPoolAdmin --- tasks/dev/4_oracles.ts | 2 +- tasks/dev/5_initialize.ts | 2 +- tasks/full/3_oracles.ts | 2 +- tasks/full/5_initialize.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tasks/dev/4_oracles.ts b/tasks/dev/4_oracles.ts index 7546bf92..94b679e1 100644 --- a/tasks/dev/4_oracles.ts +++ b/tasks/dev/4_oracles.ts @@ -42,7 +42,7 @@ task('dev:deploy-oracles', 'Deploy oracles for dev enviroment') return prev; }, defaultTokenList); const addressesProvider = await getLendingPoolAddressesProvider(); - const admin = await addressesProvider.getAaveAdmin(); + const admin = await addressesProvider.getPoolAdmin(); const fallbackOracle = await deployPriceOracle(verify); await waitForTx(await fallbackOracle.setEthUsdPrice(MockUsdPriceInWei)); diff --git a/tasks/dev/5_initialize.ts b/tasks/dev/5_initialize.ts index 90368ab5..1d0c4878 100644 --- a/tasks/dev/5_initialize.ts +++ b/tasks/dev/5_initialize.ts @@ -45,7 +45,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.') const reservesParams = getReservesConfigByPool(AavePools.proto); - const admin = await addressesProvider.getAaveAdmin(); + const admin = await addressesProvider.getPoolAdmin(); await initReservesByHelper(reservesParams, protoPoolReservesAddresses, admin, ZERO_ADDRESS); await enableReservesToBorrowByHelper( diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index e7a28329..d5b4c3dc 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -33,7 +33,7 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') Object.keys(ReserveAssets[network]).includes(key) ); const addressesProvider = await getLendingPoolAddressesProvider(); - const admin = await addressesProvider.getAaveAdmin(); + const admin = await addressesProvider.getPoolAdmin(); const fallbackOracle = await getParamPerNetwork(FallbackOracle, network); const reserveAssets = await getParamPerNetwork(ReserveAssets, network); diff --git a/tasks/full/5_initialize.ts b/tasks/full/5_initialize.ts index c9ef9b3b..6ab83af7 100644 --- a/tasks/full/5_initialize.ts +++ b/tasks/full/5_initialize.ts @@ -34,7 +34,7 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.') const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address, verify); - const admin = await addressesProvider.getAaveAdmin(); + const admin = await addressesProvider.getPoolAdmin(); if (!reserveAssets) { throw 'Reserve assets is undefined. Check ReserveAssets configuration at config directory'; } From 3aa5de28b4b59b00b11515b9ee76ccad6bd19092 Mon Sep 17 00:00:00 2001 From: eboado Date: Fri, 6 Nov 2020 12:09:24 +0100 Subject: [PATCH 3/3] - Added management of WETH to ChainlinkProxyPriceProvider. --- contracts/misc/ChainlinkProxyPriceProvider.sol | 13 ++++++++++--- helpers/contracts-deployments.ts | 2 +- tasks/dev/4_oracles.ts | 7 +++++-- tasks/full/3_oracles.ts | 4 ++-- test/__setup.spec.ts | 1 + 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/contracts/misc/ChainlinkProxyPriceProvider.sol b/contracts/misc/ChainlinkProxyPriceProvider.sol index a259ba50..f6516abc 100644 --- a/contracts/misc/ChainlinkProxyPriceProvider.sol +++ b/contracts/misc/ChainlinkProxyPriceProvider.sol @@ -18,11 +18,13 @@ import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol'; contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable { using SafeERC20 for IERC20; + event WethSet(address indexed weth); event AssetSourceUpdated(address indexed asset, address indexed source); event FallbackOracleUpdated(address indexed fallbackOracle); mapping(address => IChainlinkAggregator) private assetsSources; IPriceOracleGetter private _fallbackOracle; + address public immutable WETH; /// @notice Constructor /// @param assets The addresses of the assets @@ -32,10 +34,13 @@ contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable { constructor( address[] memory assets, address[] memory sources, - address fallbackOracle + address fallbackOracle, + address weth ) public { _setFallbackOracle(fallbackOracle); _setAssetsSources(assets, sources); + WETH = weth; + emit WethSet(weth); } /// @notice External function called by the Aave governance to set or replace sources of assets @@ -77,8 +82,10 @@ contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable { /// @param asset The asset address function getAssetPrice(address asset) public override view returns (uint256) { IChainlinkAggregator source = assetsSources[asset]; - // If there is no registered source for the asset, call the fallbackOracle - if (address(source) == address(0)) { + + if (asset == WETH) { + return 1 ether; + } else if (address(source) == address(0)) { return _fallbackOracle.getAssetPrice(asset); } else { int256 price = IChainlinkAggregator(source).latestAnswer(); diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index bc5e7d81..019aff73 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -191,7 +191,7 @@ export const deployMockAggregator = async (price: tStringTokenSmallUnits, verify ); export const deployChainlinkProxyPriceProvider = async ( - args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress], + args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress, tEthereumAddress], verify?: boolean ) => withSaveAndVerify( diff --git a/tasks/dev/4_oracles.ts b/tasks/dev/4_oracles.ts index 94b679e1..aea30974 100644 --- a/tasks/dev/4_oracles.ts +++ b/tasks/dev/4_oracles.ts @@ -13,7 +13,7 @@ import { import {ICommonConfiguration, iAssetBase, TokenContractId} from '../../helpers/types'; import {waitForTx} from '../../helpers/misc-utils'; import {getAllAggregatorsAddresses, getAllTokenAddresses} from '../../helpers/mock-helpers'; -import {ConfigNames, loadPoolConfig} from '../../helpers/configuration'; +import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration'; import { getAllMockedTokens, getLendingPoolAddressesProvider, @@ -58,7 +58,10 @@ task('dev:deploy-oracles', 'Deploy oracles for dev enviroment') allAggregatorsAddresses ); - await deployChainlinkProxyPriceProvider([tokens, aggregators, fallbackOracle.address], verify); + await deployChainlinkProxyPriceProvider( + [tokens, aggregators, fallbackOracle.address, await getWethAddress(poolConfig)], + verify + ); await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address)); const lendingRateOracle = await deployLendingRateOracle(verify); diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index d5b4c3dc..6583523a 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -7,7 +7,7 @@ import { import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers'; import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types'; import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; -import {ConfigNames, loadPoolConfig} from '../../helpers/configuration'; +import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration'; import {exit} from 'process'; import { getLendingPoolAddressesProvider, @@ -46,7 +46,7 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators); const chainlinkProviderPriceProvider = await deployChainlinkProxyPriceProvider( - [tokens, aggregators, fallbackOracle], + [tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)], verify ); await waitForTx( diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts index 738cd0f2..7d5db3e3 100644 --- a/test/__setup.spec.ts +++ b/test/__setup.spec.ts @@ -205,6 +205,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => { tokens, aggregators, fallbackOracle.address, + mockTokens.WETH.address ]); await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address));