mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Merge branch 'feat/117-oracle-weth' into 'master'
Added management of WETH to ChainlinkProxyPriceProvider. Closes #117 See merge request aave-tech/protocol-v2!128
This commit is contained in:
commit
7d4dd6d0e0
|
@ -18,11 +18,13 @@ import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
|
||||||
contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable {
|
contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable {
|
||||||
using SafeERC20 for IERC20;
|
using SafeERC20 for IERC20;
|
||||||
|
|
||||||
|
event WethSet(address indexed weth);
|
||||||
event AssetSourceUpdated(address indexed asset, address indexed source);
|
event AssetSourceUpdated(address indexed asset, address indexed source);
|
||||||
event FallbackOracleUpdated(address indexed fallbackOracle);
|
event FallbackOracleUpdated(address indexed fallbackOracle);
|
||||||
|
|
||||||
mapping(address => IChainlinkAggregator) private assetsSources;
|
mapping(address => IChainlinkAggregator) private assetsSources;
|
||||||
IPriceOracleGetter private _fallbackOracle;
|
IPriceOracleGetter private _fallbackOracle;
|
||||||
|
address public immutable WETH;
|
||||||
|
|
||||||
/// @notice Constructor
|
/// @notice Constructor
|
||||||
/// @param assets The addresses of the assets
|
/// @param assets The addresses of the assets
|
||||||
|
@ -32,10 +34,13 @@ contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable {
|
||||||
constructor(
|
constructor(
|
||||||
address[] memory assets,
|
address[] memory assets,
|
||||||
address[] memory sources,
|
address[] memory sources,
|
||||||
address fallbackOracle
|
address fallbackOracle,
|
||||||
|
address weth
|
||||||
) public {
|
) public {
|
||||||
_setFallbackOracle(fallbackOracle);
|
_setFallbackOracle(fallbackOracle);
|
||||||
_setAssetsSources(assets, sources);
|
_setAssetsSources(assets, sources);
|
||||||
|
WETH = weth;
|
||||||
|
emit WethSet(weth);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice External function called by the Aave governance to set or replace sources of assets
|
/// @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
|
/// @param asset The asset address
|
||||||
function getAssetPrice(address asset) public override view returns (uint256) {
|
function getAssetPrice(address asset) public override view returns (uint256) {
|
||||||
IChainlinkAggregator source = assetsSources[asset];
|
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);
|
return _fallbackOracle.getAssetPrice(asset);
|
||||||
} else {
|
} else {
|
||||||
int256 price = IChainlinkAggregator(source).latestAnswer();
|
int256 price = IChainlinkAggregator(source).latestAnswer();
|
||||||
|
|
|
@ -189,7 +189,7 @@ export const deployMockAggregator = async (price: tStringTokenSmallUnits, verify
|
||||||
);
|
);
|
||||||
|
|
||||||
export const deployChainlinkProxyPriceProvider = async (
|
export const deployChainlinkProxyPriceProvider = async (
|
||||||
args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress],
|
args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress, tEthereumAddress],
|
||||||
verify?: boolean
|
verify?: boolean
|
||||||
) =>
|
) =>
|
||||||
withSaveAndVerify(
|
withSaveAndVerify(
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {
|
||||||
import {ICommonConfiguration, iAssetBase, TokenContractId} from '../../helpers/types';
|
import {ICommonConfiguration, iAssetBase, TokenContractId} from '../../helpers/types';
|
||||||
import {waitForTx} from '../../helpers/misc-utils';
|
import {waitForTx} from '../../helpers/misc-utils';
|
||||||
import {getAllAggregatorsAddresses, getAllTokenAddresses} from '../../helpers/mock-helpers';
|
import {getAllAggregatorsAddresses, getAllTokenAddresses} from '../../helpers/mock-helpers';
|
||||||
import {ConfigNames, loadPoolConfig} from '../../helpers/configuration';
|
import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration';
|
||||||
import {
|
import {
|
||||||
getAllMockedTokens,
|
getAllMockedTokens,
|
||||||
getLendingPoolAddressesProvider,
|
getLendingPoolAddressesProvider,
|
||||||
|
@ -58,7 +58,10 @@ task('dev:deploy-oracles', 'Deploy oracles for dev enviroment')
|
||||||
allAggregatorsAddresses
|
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));
|
await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address));
|
||||||
|
|
||||||
const lendingRateOracle = await deployLendingRateOracle(verify);
|
const lendingRateOracle = await deployLendingRateOracle(verify);
|
||||||
|
|
|
@ -7,7 +7,7 @@ import {
|
||||||
import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers';
|
import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers';
|
||||||
import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types';
|
import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types';
|
||||||
import {waitForTx, filterMapBy} from '../../helpers/misc-utils';
|
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 {exit} from 'process';
|
||||||
import {
|
import {
|
||||||
getLendingPoolAddressesProvider,
|
getLendingPoolAddressesProvider,
|
||||||
|
@ -46,7 +46,7 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment')
|
||||||
const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators);
|
const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators);
|
||||||
|
|
||||||
const chainlinkProviderPriceProvider = await deployChainlinkProxyPriceProvider(
|
const chainlinkProviderPriceProvider = await deployChainlinkProxyPriceProvider(
|
||||||
[tokens, aggregators, fallbackOracle],
|
[tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)],
|
||||||
verify
|
verify
|
||||||
);
|
);
|
||||||
await waitForTx(
|
await waitForTx(
|
||||||
|
|
|
@ -205,6 +205,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
|
||||||
tokens,
|
tokens,
|
||||||
aggregators,
|
aggregators,
|
||||||
fallbackOracle.address,
|
fallbackOracle.address,
|
||||||
|
mockTokens.WETH.address
|
||||||
]);
|
]);
|
||||||
await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address));
|
await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user