From 84d1ed0cb772f00ada5fdb7b5d8cb1efa66d6029 Mon Sep 17 00:00:00 2001 From: David Racero Date: Mon, 31 Aug 2020 12:10:40 +0200 Subject: [PATCH] Added migration scripts for Uniswap and Aave with configuration and common tasks --- Dockerfile | 2 +- buidler.config.ts | 2 +- config/aave.ts | 63 +++++- config/commons.ts | 12 +- config/uniswap.ts | 25 ++- deployed-contracts.json | 14 +- helpers/contracts-helpers.ts | 206 ++++++++++-------- helpers/types.ts | 22 +- package.json | 9 +- tasks/dev/1_mock_tokens.ts | 2 +- tasks/dev/2_address_provider_registry.ts | 2 +- tasks/dev/3_lending_pool.ts | 2 +- tasks/dev/4_oracles.ts | 2 +- tasks/dev/5_initialize.ts | 6 +- tasks/full/1_address_provider_registry.ts | 1 - ...{3_lending_pool.todo => 2_lending_pool.ts} | 7 +- tasks/full/3_oracles.ts | 58 +++++ tasks/full/4_oracles.todo | 74 ------- .../{5_initialize.todo => 5_initialize.ts} | 52 ++--- tasks/migrations/aave.dev.ts | 12 +- tasks/migrations/aave.full.ts | 26 +-- tasks/migrations/uniswap.dev.ts | 24 +- tasks/migrations/uniswap.full.ts | 21 +- 23 files changed, 390 insertions(+), 254 deletions(-) rename tasks/full/{3_lending_pool.todo => 2_lending_pool.ts} (88%) create mode 100644 tasks/full/3_oracles.ts delete mode 100644 tasks/full/4_oracles.todo rename tasks/full/{5_initialize.todo => 5_initialize.ts} (55%) diff --git a/Dockerfile b/Dockerfile index c7b2b9b1..c354ddf5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ FROM ethereum/solc:0.6.8 as build-deps -FROM node:13 +FROM node:14 COPY --from=build-deps /usr/bin/solc /usr/bin/solc diff --git a/buidler.config.ts b/buidler.config.ts index ff45bb5a..bbde50c7 100644 --- a/buidler.config.ts +++ b/buidler.config.ts @@ -28,7 +28,7 @@ const MNEMONICS: {[network: string]: string} = { // Prevent to load scripts before compilation and typechain if (!SKIP_LOAD) { - ['misc', 'migrations', 'dev-deployment'].forEach((folder) => { + ['misc', 'migrations', 'dev', 'full'].forEach((folder) => { const tasksPath = path.join(__dirname, 'tasks', folder); fs.readdirSync(tasksPath) .filter((pth) => pth.includes('.ts')) diff --git a/config/aave.ts b/config/aave.ts index 8058ee64..0512a353 100644 --- a/config/aave.ts +++ b/config/aave.ts @@ -1,6 +1,6 @@ import BigNumber from 'bignumber.js'; import {oneRay} from '../helpers/constants'; -import {IAaveConfiguration} from '../helpers/types'; +import {IAaveConfiguration, EthereumNetwork} from '../helpers/types'; import {CommonsConfig} from './commons'; @@ -13,7 +13,7 @@ export const AaveConfig: IAaveConfiguration = { ConfigName: 'Aave', ProviderId: 1, ReserveSymbols: [ - 'ETH', + 'WETH', 'DAI', 'LEND', 'TUSD', @@ -254,6 +254,65 @@ export const AaveConfig: IAaveConfiguration = { reserveDecimals: '18', }, }, + ReserveAssets: { + [EthereumNetwork.kovan]: { + WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', + DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD', + TUSD: '0x016750AC630F711882812f24Dba6c95b9D35856d', + USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422', + USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4', + SUSD: '0xD868790F57B39C9B2B51b12de046975f986675f9', + LEND: '0x690eAcA024935Aaff9B14b9FF9e9C8757a281f3C', + BAT: '0x2d12186Fbb9f9a8C28B3FfdD4c42920f8539D738', + REP: '0x260071C8D61DAf730758f8BD0d6370353956AE0E', + MKR: '0x61e4CAE3DA7FD189e52a4879C7B8067D7C2Cc0FA', + LINK: '0xAD5ce863aE3E4E9394Ab43d4ba0D80f419F61789', + KNC: '0x3F80c39c0b96A0945f9F0E9f55d8A8891c5671A8', + WBTC: '0x3b92f58feD223E2cB1bCe4c286BD97e42f2A12EA', + MANA: '0x738Dc6380157429e957d223e6333Dc385c85Fec7', + ZRX: '0xD0d76886cF8D952ca26177EB7CfDf83bad08C00C', + SNX: '0x7FDb81B0b8a010dd4FFc57C3fecbf145BA8Bd947', + BUSD: '0x4c6E1EFC12FDfD568186b7BAEc0A43fFfb4bCcCf', + }, + [EthereumNetwork.ropsten]: { + WETH: '0xc778417e063141139fce010982780140aa0cd5ab', + DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108', + TUSD: '0xa2EA00Df6d8594DBc76b79beFe22db9043b8896F', + USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802', + USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084', + SUSD: '0xc374eB17f665914c714Ac4cdC8AF3a3474228cc5', + LEND: '0xB47F338EC1e3857BB188E63569aeBAB036EE67c6', + BAT: '0x85B24b3517E3aC7bf72a14516160541A60cFF19d', + REP: '0xBeb13523503d35F9b3708ca577CdCCAdbFB236bD', + MKR: '0x2eA9df3bABe04451c9C3B06a2c844587c59d9C37', + LINK: '0x1a906E71FF9e28d8E01460639EB8CF0a6f0e2486', + KNC: '0xCe4aA1dE3091033Ba74FA2Ad951f6adc5E5cF361', + WBTC: '0xa0E54Ab6AA5f0bf1D62EC3526436F3c05b3348A0', + MANA: '0x78b1F763857C8645E46eAdD9540882905ff32Db7', + ZRX: '0x02d7055704EfF050323A2E5ee4ba05DB2A588959', + SNX: '0xF80Aa7e2Fda4DA065C55B8061767F729dA1476c7', + BUSD: '0xFA6adcFf6A90c11f31Bc9bb59eC0a6efB38381C6', + }, + [EthereumNetwork.main]: { + WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', + TUSD: '0x0000000000085d4780B73119b644AE5ecd22b376', + USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', + SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51', + LEND: '0x80fB784B7eD66730e8b1DBd9820aFD29931aab03', + BAT: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', + REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862', + MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', + LINK: '0x514910771af9ca656af840dff83e8264ecf986ca', + KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200', + WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', + ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498', + SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', + BUSD: '0x4Fabb145d64652a948d72533023f6E7A623C7C53', + }, + }, }; export default AaveConfig; diff --git a/config/commons.ts b/config/commons.ts index 38f1e41b..969b6b6d 100644 --- a/config/commons.ts +++ b/config/commons.ts @@ -126,9 +126,9 @@ export const CommonsConfig: ICommonConfiguration = { }, LendingPoolManagerAddressIndex: 0, ProviderRegistry: { - [EthereumNetwork.kovan]: '', - [EthereumNetwork.ropsten]: '', - [EthereumNetwork.main]: '', + [EthereumNetwork.kovan]: undefined, + [EthereumNetwork.ropsten]: undefined, + [EthereumNetwork.main]: undefined, }, LendingRateOracle: { [EthereumNetwork.kovan]: '0xdcde9bb6a49e37fa433990832ab541ae2d4feb4a', @@ -227,4 +227,10 @@ export const CommonsConfig: ICommonConfiguration = { UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', }, }, + ReserveAssets: { + [EthereumNetwork.main]: {}, + [EthereumNetwork.kovan]: {}, + [EthereumNetwork.ropsten]: {}, + }, + ReservesConfig: {}, }; diff --git a/config/uniswap.ts b/config/uniswap.ts index ff873f36..ec95f926 100644 --- a/config/uniswap.ts +++ b/config/uniswap.ts @@ -13,7 +13,7 @@ export const UniswapConfig: IUniswapConfiguration = { ConfigName: 'Uniswap', ProviderId: 2, ReserveSymbols: [ - 'ETH', + 'WETH', 'DAI', 'USDC', 'USDT', @@ -158,6 +158,9 @@ export const UniswapConfig: IUniswapConfiguration = { }, ChainlinkAggregator: { [EthereumNetwork.kovan]: { + DAI: '0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90', + USDC: '0x672c1C0d1130912D83664011E7960a42E8cA05D5', + USDT: '0xCC833A6522721B3252e7578c5BCAF65738B75Fc3', UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9', UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC', @@ -166,6 +169,9 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_MKR_ETH: '0x6eBF25AB0A18B8F6243619f1AE6b94373169A069', }, [EthereumNetwork.ropsten]: { + DAI: '0x64b8e49baded7bfb2fd5a9235b2440c0ee02971b', + USDC: '0xe1480303dde539e2c241bdc527649f37c9cbef7d', + USDT: '0xc08fe0c4d97ccda6b40649c6da621761b628c288', UNI_DAI_ETH: '0x16048819e3f77b7112eB033624A0bA9d33743028', UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3', UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1', @@ -174,6 +180,9 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_MKR_ETH: '0x594ae5421f378b8B4AF9e758C461d2A1FF990BC5', }, [EthereumNetwork.main]: { + DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', + USDC: '0xdE54467873c3BCAA76421061036053e371721708', + USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', @@ -182,8 +191,12 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', }, }, - UniAssetsAddresses: { + ReserveAssets: { [EthereumNetwork.kovan]: { + WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', + DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD', + USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422', + USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4', UNI_DAI_ETH: '0x2e0086b5343101203ADeE40160ca1BD91E29fF75', UNI_USDC_ETH: '0x34eA1aB2a43ee696914fc3C0d3e517fA666B9e8D', UNI_SETH_ETH: '0xCF457d8Bb8D8f54Af1ea1B3710231e89bd6CFbfe', @@ -192,6 +205,10 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_MKR_ETH: '0xB31a1c30f38cD68e8177566Ef950d7bc3C81DaCF', }, [EthereumNetwork.ropsten]: { + WETH: '0xc778417e063141139fce010982780140aa0cd5ab', + DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108', + USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802', + USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084', UNI_DAI_ETH: '0xC245A7d35E652Cae438A1FdB13E474DF53DBB81D', UNI_USDC_ETH: '0x2BD65323955D08eb600074291305881d1295c4D2', UNI_SETH_ETH: '0xed4597DCd234867d7A260AD24bAb8253F64940a5', @@ -200,6 +217,10 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_MKR_ETH: '0xd8b7B99a9205FD0D0abFB6D7a2c13Db2681bff43', }, [EthereumNetwork.main]: { + WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', + USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667', UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', diff --git a/deployed-contracts.json b/deployed-contracts.json index 91cb8bd9..f6763551 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -111,7 +111,7 @@ }, "DefaultReserveInterestRateStrategy": { "buidlerevm": { - "address": "0x626FdE749F9d499d3777320CAf29484B624ab84a", + "address": "0xA0AB1cB92A4AF81f84dCd258155B5c25D247b54E", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "localhost": { @@ -166,7 +166,7 @@ }, "MockFlashLoanReceiver": { "buidlerevm": { - "address": "0x2B681757d757fbB80cc51c6094cEF5eE75bF55aA" + "address": "0x2cfcA5785261fbC88EFFDd46fCFc04c22525F9e4" }, "localhost": { "address": "0x3bDA11B584dDff7F66E0cFe1da1562c92B45db60" @@ -174,7 +174,7 @@ }, "WalletBalanceProvider": { "buidlerevm": { - "address": "0xBEF0d4b9c089a5883741fC14cbA352055f35DDA2", + "address": "0xC6bA6049F86d528698B5924B8fC2FE7289D38578", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "localhost": { @@ -414,7 +414,7 @@ }, "AaveProtocolTestHelpers": { "buidlerevm": { - "address": "0xDf73fC454FA018051D4a1509e63D11530A59DE10" + "address": "0xde9595927B00361Ed7987a181Fb09EC6f31b451c" }, "localhost": { "address": "0x3b050AFb4ac4ACE646b31fF3639C1CD43aC31460" @@ -422,7 +422,7 @@ }, "StableDebtToken": { "buidlerevm": { - "address": "0xB660Fdd109a95718cB9d20E3A89EE6cE342aDcB6", + "address": "0x5f7134cd38C826a7649f9Cc47dda24d834DD2967", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "localhost": { @@ -432,7 +432,7 @@ }, "VariableDebtToken": { "buidlerevm": { - "address": "0x830bceA96E56DBC1F8578f75fBaC0AF16B32A07d", + "address": "0xE91bBe8ee03560E3dda2786f95335F5399813Ca0", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "localhost": { @@ -446,7 +446,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "buidlerevm": { - "address": "0xA0AB1cB92A4AF81f84dCd258155B5c25D247b54E", + "address": "0x3870a14c5057f596e385ea21537792fE4fF4C1BE", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index e03bfa8e..b5d05d21 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -333,72 +333,89 @@ export const deployAaveProtocolTestHelpers = async ( export const deployMintableERC20 = async ([name, symbol, decimals]: [string, string, number]) => await deployContract(eContractid.MintableERC20, [name, symbol, decimals]); -export const deployDefaultReserveInterestRateStrategy = async ([ - addressesProvider, - baseVariableBorrowRate, - variableSlope1, - variableSlope2, - stableSlope1, - stableSlope2, -]: [tEthereumAddress, string, string, string, string, string]) => - await deployContract( - eContractid.DefaultReserveInterestRateStrategy, - [ - addressesProvider, - baseVariableBorrowRate, - variableSlope1, - variableSlope2, - stableSlope1, - stableSlope2, - ] - ); +export const deployDefaultReserveInterestRateStrategy = async ( + [ + addressesProvider, + baseVariableBorrowRate, + variableSlope1, + variableSlope2, + stableSlope1, + stableSlope2, + ]: [tEthereumAddress, string, string, string, string, string], + verify: boolean +) => { + const id = eContractid.DefaultReserveInterestRateStrategy; + const args = [ + addressesProvider, + baseVariableBorrowRate, + variableSlope1, + variableSlope2, + stableSlope1, + stableSlope2, + ]; + const instance = await deployContract(id, args); -export const deployStableDebtToken = async ([name, symbol, underlyingAsset, poolAddress]: [ - string, - string, - tEthereumAddress, - tEthereumAddress -]) => { - const token = await deployContract(eContractid.StableDebtToken, [ - poolAddress, - underlyingAsset, - name, - symbol, - ]); - - return token; + if (verify) { + await verifyContract(id, instance.address, args); + } + return instance; }; -export const deployVariableDebtToken = async ([name, symbol, underlyingAsset, poolAddress]: [ - string, - string, - tEthereumAddress, - tEthereumAddress -]) => { - const token = await deployContract(eContractid.VariableDebtToken, [ - poolAddress, - underlyingAsset, - name, - symbol, - ]); +export const deployStableDebtToken = async ( + [name, symbol, underlyingAsset, poolAddress]: [ + string, + string, + tEthereumAddress, + tEthereumAddress + ], + verify: boolean +) => { + const id = eContractid.StableDebtToken; + const args = [poolAddress, underlyingAsset, name, symbol]; + const instance = await deployContract(id, args); - return token; + if (verify) { + await verifyContract(id, instance.address, args); + } + return instance; }; -export const deployGenericAToken = async ([poolAddress, underlyingAssetAddress, name, symbol]: [ - tEthereumAddress, - tEthereumAddress, - string, - string -]) => { - const token = await deployContract(eContractid.AToken, [ - poolAddress, - underlyingAssetAddress, - name, - symbol, - ]); +export const deployVariableDebtToken = async ( + [name, symbol, underlyingAsset, poolAddress]: [ + string, + string, + tEthereumAddress, + tEthereumAddress + ], + verify: boolean +) => { + const id = eContractid.VariableDebtToken; + const args = [poolAddress, underlyingAsset, name, symbol]; + const instance = await deployContract(id, args); - return token; + if (verify) { + await verifyContract(id, instance.address, args); + } + return instance; +}; + +export const deployGenericAToken = async ( + [poolAddress, underlyingAssetAddress, name, symbol]: [ + tEthereumAddress, + tEthereumAddress, + string, + string + ], + verify: boolean +) => { + const id = eContractid.AToken; + const args = [poolAddress, underlyingAssetAddress, name, symbol]; + const instance = await deployContract(id, args); + + if (verify) { + await verifyContract(id, instance.address, args); + } + return instance; }; export const getLendingPoolAddressesProvider = async (address?: tEthereumAddress) => { @@ -664,10 +681,10 @@ export const getPairsTokenAggregator = ( }, aggregatorsAddresses: {[tokenSymbol: string]: tEthereumAddress} ): [string[], string[]] => { - const {ETH, ...assetsAddressesWithoutEth} = allAssetsAddresses; + const {ETH, USD, WETH, ...assetsAddressesWithoutEth} = allAssetsAddresses; const pairs = Object.entries(assetsAddressesWithoutEth).map(([tokenSymbol, tokenAddress]) => { - if (tokenSymbol !== 'ETH') { + if (tokenSymbol !== 'WETH' && tokenSymbol !== 'ETH') { const aggregatorAddressIndex = Object.keys(aggregatorsAddresses).findIndex( (value) => value === tokenSymbol ); @@ -691,7 +708,8 @@ export const initReserves = async ( lendingPoolAddressesProvider: LendingPoolAddressesProvider, lendingPool: LendingPool, lendingPoolConfigurator: LendingPoolConfigurator, - aavePool: AavePools + aavePool: AavePools, + verify: boolean ) => { if (aavePool !== AavePools.proto && aavePool !== AavePools.secondary) { console.log(`Invalid Aave pool ${aavePool}`); @@ -732,35 +750,47 @@ export const initReserves = async ( stableRateSlope2, }, ] = (Object.entries(reservesParams) as [string, IReserveParams][])[reserveParamIndex]; - const rateStrategyContract = await deployDefaultReserveInterestRateStrategy([ - lendingPoolAddressesProvider.address, - baseVariableBorrowRate, - variableRateSlope1, - variableRateSlope2, - stableRateSlope1, - stableRateSlope2, - ]); + const rateStrategyContract = await deployDefaultReserveInterestRateStrategy( + [ + lendingPoolAddressesProvider.address, + baseVariableBorrowRate, + variableRateSlope1, + variableRateSlope2, + stableRateSlope1, + stableRateSlope2, + ], + verify + ); - const stableDebtToken = await deployStableDebtToken([ - `Aave stable debt bearing ${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, - `stableDebt${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, - tokenAddress, - lendingPool.address, - ]); + const stableDebtToken = await deployStableDebtToken( + [ + `Aave stable debt bearing ${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, + `stableDebt${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, + tokenAddress, + lendingPool.address, + ], + verify + ); - const variableDebtToken = await deployVariableDebtToken([ - `Aave variable debt bearing ${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, - `variableDebt${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, - tokenAddress, - lendingPool.address, - ]); + const variableDebtToken = await deployVariableDebtToken( + [ + `Aave variable debt bearing ${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, + `variableDebt${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, + tokenAddress, + lendingPool.address, + ], + verify + ); - const aToken = await deployGenericAToken([ - lendingPool.address, - tokenAddress, - `Aave interest bearing ${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, - `a${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, - ]); + const aToken = await deployGenericAToken( + [ + lendingPool.address, + tokenAddress, + `Aave interest bearing ${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, + `a${assetSymbol === 'WETH' ? 'ETH' : assetSymbol}`, + ], + verify + ); if (process.env.POOL === AavePools.secondary) { if (assetSymbol.search('UNI') === -1) { diff --git a/helpers/types.ts b/helpers/types.ts index 4f961f5e..1a04872a 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -1,4 +1,5 @@ import BigNumber from 'bignumber.js'; +import {MockTokenMap} from './contracts-helpers'; export interface SymbolMap { [symbol: string]: T; @@ -77,6 +78,9 @@ export type tBigNumberTokenBigUnits = BigNumber; export type tStringTokenSmallUnits = string; // 1 wei, or 1 basic unit of USDC, or 1 basic unit of DAI export type tBigNumberTokenSmallUnits = BigNumber; +export interface iAssetCommon { + [key: string]: T; +} export interface iAssetBase { WETH: T; DAI: T; @@ -112,7 +116,6 @@ export type iAssetsWithoutUSD = Omit, 'USD'>; export type iAavePoolAssets = Pick< iAssetsWithoutUSD, - | 'WETH' | 'DAI' | 'TUSD' | 'USDC' @@ -151,7 +154,7 @@ export type iAaveSecondPoolAssets = Pick< | 'UNI_LINK_ETH' >; -export type iMultiPoolsAssets = iAavePoolAssets | iAaveSecondPoolAssets; +export type iMultiPoolsAssets = iAssetCommon | iAavePoolAssets | iAaveSecondPoolAssets; export type iAavePoolTokens = Omit, 'ETH'>; @@ -272,7 +275,7 @@ export interface ICommonConfiguration { ReserveSymbols: string[]; ProtocolGlobalParams: IProtocolGlobalConfig; Mocks: IMocksConfig; - ProviderRegistry: iParamsPerNetwork; + ProviderRegistry: iParamsPerNetwork; LendingRateOracleRatesCommon: iMultiPoolsAssets; LendingRateOracle: iParamsPerNetwork; TokenDistributor: iParamsPerNetwork; @@ -281,19 +284,20 @@ export interface ICommonConfiguration { ChainlinkAggregator: iParamsPerNetwork; LendingPoolManagerAddress: iParamsPerNetwork; LendingPoolManagerAddressIndex: number; + ReserveAssets: iParamsPerNetwork>; + ReservesConfig: iMultiPoolsAssets; } export interface IAaveConfiguration extends ICommonConfiguration { - ReservesConfig: iMultiPoolsAssets; + ReservesConfig: iAavePoolAssets; +} + +export interface IUniswapConfiguration extends ICommonConfiguration { + ReservesConfig: iAaveSecondPoolAssets; } export interface ITokenAddress { [token: string]: tEthereumAddress; } -export interface IUniswapConfiguration extends ICommonConfiguration { - ReservesConfig: iMultiPoolsAssets; - UniAssetsAddresses: iParamsPerNetwork; -} - export type PoolConfiguration = IAaveConfiguration | IUniswapConfiguration; diff --git a/package.json b/package.json index 62c5ee2b..3a2742d7 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,14 @@ "aave:ropsten:full:migration": "npm run buidler:ropsten -- aave:full --verify", "aave:main:dev:migration": "npm run buidler:main -- aave:dev --verify", "aave:main:full:migration": "npm run buidler:main -- aave:full --verify", - "uniswap:evm:dev:migration": "npm run buidler:uniswap -- uniswap:dev", + "uniswap:evm:dev:migration": "buidler uniswap:dev", + "uniswap:evm:full:migration": "buidler uniswap:full", + "uniswap:kovan:dev:migration": "npm run buidler:kovan -- uniswap:dev --verify", + "uniswap:kovan:full:migration": "npm run buidler:kovan -- uniswap:full --verify", + "uniswap:ropsten:dev:migration": "npm run buidler:ropsten -- uniswap:dev --verify", + "uniswap:ropsten:full:migration": "npm run buidler:ropsten -- uniswap:full --verify", + "uniswap:main:dev:migration": "npm run buidler:main -- uniswap:dev --verify", + "uniswap:main:full:migration": "npm run buidler:main -- uniswap:full --verify", "dev:coverage": "buidler coverage", "dev:deployment": "buidler dev-deployment", "dev:deployExample": "buidler deploy-Example", diff --git a/tasks/dev/1_mock_tokens.ts b/tasks/dev/1_mock_tokens.ts index 3251bed4..617071ce 100644 --- a/tasks/dev/1_mock_tokens.ts +++ b/tasks/dev/1_mock_tokens.ts @@ -1,6 +1,6 @@ import {task} from '@nomiclabs/buidler/config'; import {deployAllMockTokens} from '../../helpers/contracts-helpers'; -task('deploy-mock-tokens', 'Deploy mock tokens for dev enviroment') +task('dev:deploy-mock-tokens', 'Deploy mock tokens for dev enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { await localBRE.run('set-bre'); diff --git a/tasks/dev/2_address_provider_registry.ts b/tasks/dev/2_address_provider_registry.ts index f60b9203..c0e658d8 100644 --- a/tasks/dev/2_address_provider_registry.ts +++ b/tasks/dev/2_address_provider_registry.ts @@ -6,7 +6,7 @@ import { import {waitForTx} from '../../helpers/misc-utils'; task( - 'deploy-address-provider', + 'dev:deploy-address-provider', 'Deploy address provider, registry and fee provider for dev enviroment' ) .addOptionalParam('verify', 'Verify contracts at Etherscan') diff --git a/tasks/dev/3_lending_pool.ts b/tasks/dev/3_lending_pool.ts index 2a477ee0..b7c88a19 100644 --- a/tasks/dev/3_lending_pool.ts +++ b/tasks/dev/3_lending_pool.ts @@ -10,7 +10,7 @@ import { import {eContractid} from '../../helpers/types'; import {waitForTx} from '../../helpers/misc-utils'; -task('deploy-lending-pool', 'Deploy lending pool for dev enviroment') +task('dev:deploy-lending-pool', 'Deploy lending pool for dev enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { await localBRE.run('set-bre'); diff --git a/tasks/dev/4_oracles.ts b/tasks/dev/4_oracles.ts index 094c8548..0e2d8ef5 100644 --- a/tasks/dev/4_oracles.ts +++ b/tasks/dev/4_oracles.ts @@ -19,7 +19,7 @@ import {waitForTx} from '../../helpers/misc-utils'; import {getAllAggregatorsAddresses, getAllTokenAddresses} from '../../helpers/mock-helpers'; import {ConfigNames, loadPoolConfig} from '../../helpers/configuration'; -task('deploy-oracles', 'Deploy oracles for dev enviroment') +task('dev:deploy-oracles', 'Deploy oracles for dev enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) .setAction(async ({verify, pool}, localBRE) => { diff --git a/tasks/dev/5_initialize.ts b/tasks/dev/5_initialize.ts index 1907b559..5068b1bf 100644 --- a/tasks/dev/5_initialize.ts +++ b/tasks/dev/5_initialize.ts @@ -18,7 +18,7 @@ import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; import {enableReservesToBorrow, enableReservesAsCollateral} from '../../helpers/init-helpers'; import {getAllTokenAddresses} from '../../helpers/mock-helpers'; -task('initialize-lending-pool', 'Initialize lending pool configuration.') +task('dev:initialize-lending-pool', 'Initialize lending pool configuration.') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { await localBRE.run('set-bre'); @@ -36,14 +36,14 @@ task('initialize-lending-pool', 'Initialize lending pool configuration.') const reservesParams = getReservesConfigByPool(AavePools.proto); - console.log('Initialize configuration'); await initReserves( reservesParams, protoPoolReservesAddresses, addressesProvider, lendingPoolProxy, lendingPoolConfiguratorProxy, - AavePools.proto + AavePools.proto, + verify ); await enableReservesToBorrow( reservesParams, diff --git a/tasks/full/1_address_provider_registry.ts b/tasks/full/1_address_provider_registry.ts index c73ff512..e59924b7 100644 --- a/tasks/full/1_address_provider_registry.ts +++ b/tasks/full/1_address_provider_registry.ts @@ -3,7 +3,6 @@ import { deployLendingPoolAddressesProvider, deployLendingPoolAddressesProviderRegistry, getParamPerNetwork, - getLendingPoolAddressesProvider, getLendingPoolAddressesProviderRegistry, } from '../../helpers/contracts-helpers'; import {waitForTx} from '../../helpers/misc-utils'; diff --git a/tasks/full/3_lending_pool.todo b/tasks/full/2_lending_pool.ts similarity index 88% rename from tasks/full/3_lending_pool.todo rename to tasks/full/2_lending_pool.ts index 2a477ee0..55b609f6 100644 --- a/tasks/full/3_lending_pool.todo +++ b/tasks/full/2_lending_pool.ts @@ -10,16 +10,17 @@ import { import {eContractid} from '../../helpers/types'; import {waitForTx} from '../../helpers/misc-utils'; -task('deploy-lending-pool', 'Deploy lending pool for dev enviroment') +task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { await localBRE.run('set-bre'); const addressesProvider = await getLendingPoolAddressesProvider(); + // Deploy lending pool const lendingPoolImpl = await deployLendingPool(verify); - // Set lending pool impl to Address Provider + // Set lending pool impl to address provider await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address)); const address = await addressesProvider.getLendingPool(); @@ -27,6 +28,7 @@ task('deploy-lending-pool', 'Deploy lending pool for dev enviroment') await insertContractAddressInDb(eContractid.LendingPool, lendingPoolProxy.address); + // Deploy lending pool configurator const lendingPoolConfiguratorImpl = await deployLendingPoolConfigurator(verify); // Set lending pool conf impl to Address Provider @@ -37,6 +39,7 @@ task('deploy-lending-pool', 'Deploy lending pool for dev enviroment') const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy( await addressesProvider.getLendingPoolConfigurator() ); + await insertContractAddressInDb( eContractid.LendingPoolConfigurator, lendingPoolConfiguratorProxy.address diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts new file mode 100644 index 00000000..9f526286 --- /dev/null +++ b/tasks/full/3_oracles.ts @@ -0,0 +1,58 @@ +import {task} from '@nomiclabs/buidler/config'; +import { + getLendingPoolAddressesProvider, + getPairsTokenAggregator, + deployChainlinkProxyPriceProvider, + deployLendingRateOracle, + getParamPerNetwork, +} from '../../helpers/contracts-helpers'; + +import {setInitialMarketRatesInRatesOracle} from '../../helpers/oracles-helpers'; +import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types'; +import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; +import {ConfigNames, loadPoolConfig} from '../../helpers/configuration'; + +task('full:deploy-oracles', 'Deploy oracles for dev enviroment') + .addOptionalParam('verify', 'Verify contracts at Etherscan') + .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) + .setAction(async ({verify, pool}, localBRE) => { + await localBRE.run('set-bre'); + const network = localBRE.network.name; + const poolConfig = loadPoolConfig(pool); + const { + ProtocolGlobalParams: {UsdAddress}, + LendingRateOracleRatesCommon, + ReserveAssets, + ReserveSymbols, + FallbackOracle, + ChainlinkAggregator, + } = poolConfig as ICommonConfiguration; + + const lendingRateOracles = filterMapBy(LendingRateOracleRatesCommon, (key) => + ReserveSymbols.includes(key) + ); + const addressesProvider = await getLendingPoolAddressesProvider(); + + const fallbackOracle = await getParamPerNetwork(FallbackOracle, network); + const reserveAssets = await getParamPerNetwork(ReserveAssets, network); + const chainlinkAggregators = await getParamPerNetwork(ChainlinkAggregator, network); + + const tokensToWatch: SymbolMap = { + ...reserveAssets, + USD: UsdAddress, + }; + const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators); + + await deployChainlinkProxyPriceProvider([tokens, aggregators, fallbackOracle], verify); + await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle)); + + const lendingRateOracle = await deployLendingRateOracle(verify); + await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle.address)); + + const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch; + await setInitialMarketRatesInRatesOracle( + lendingRateOracles, + tokensAddressesWithoutUsd, + lendingRateOracle + ); + }); diff --git a/tasks/full/4_oracles.todo b/tasks/full/4_oracles.todo deleted file mode 100644 index 094c8548..00000000 --- a/tasks/full/4_oracles.todo +++ /dev/null @@ -1,74 +0,0 @@ -import {task} from '@nomiclabs/buidler/config'; -import { - getLendingPoolAddressesProvider, - deployPriceOracle, - getMockedTokens, - getPairsTokenAggregator, - deployChainlinkProxyPriceProvider, - deployLendingRateOracle, - getAllMockedTokens, -} from '../../helpers/contracts-helpers'; - -import { - setInitialAssetPricesInOracle, - setInitialMarketRatesInRatesOracle, - deployAllMockAggregators, -} from '../../helpers/oracles-helpers'; -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'; - -task('deploy-oracles', 'Deploy oracles for dev enviroment') - .addOptionalParam('verify', 'Verify contracts at Etherscan') - .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) - .setAction(async ({verify, pool}, localBRE) => { - await localBRE.run('set-bre'); - const poolConfig = loadPoolConfig(pool); - const { - Mocks: {ChainlinkAggregatorPrices, AllAssetsInitialPrices}, - ProtocolGlobalParams: {UsdAddress, MockUsdPriceInWei}, - LendingRateOracleRatesCommon, - } = poolConfig as ICommonConfiguration; - - const defaultTokenList = { - ...Object.fromEntries(Object.keys(TokenContractId).map((symbol) => [symbol, ''])), - USD: UsdAddress, - } as iAssetBase; - const mockTokens = await getAllMockedTokens(); - const mockTokensAddress = Object.keys(mockTokens).reduce>((prev, curr) => { - prev[curr as keyof iAssetBase] = mockTokens[curr].address; - return prev; - }, defaultTokenList); - const addressesProvider = await getLendingPoolAddressesProvider(); - - const fallbackOracle = await deployPriceOracle(verify); - await waitForTx(await fallbackOracle.setEthUsdPrice(MockUsdPriceInWei)); - await setInitialAssetPricesInOracle(AllAssetsInitialPrices, mockTokensAddress, fallbackOracle); - - const mockAggregators = await deployAllMockAggregators(ChainlinkAggregatorPrices, verify); - - const allTokenAddresses = getAllTokenAddresses(mockTokens); - const allAggregatorsAddresses = getAllAggregatorsAddresses(mockAggregators); - - const [tokens, aggregators] = getPairsTokenAggregator( - allTokenAddresses, - allAggregatorsAddresses - ); - - await deployChainlinkProxyPriceProvider([tokens, aggregators, fallbackOracle.address], verify); - await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address)); - - const lendingRateOracle = await deployLendingRateOracle(verify); - await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle.address)); - - const {USD, ...tokensAddressesWithoutUsd} = allTokenAddresses; - const allReservesAddresses = { - ...tokensAddressesWithoutUsd, - }; - await setInitialMarketRatesInRatesOracle( - LendingRateOracleRatesCommon, - allReservesAddresses, - lendingRateOracle - ); - }); diff --git a/tasks/full/5_initialize.todo b/tasks/full/5_initialize.ts similarity index 55% rename from tasks/full/5_initialize.todo rename to tasks/full/5_initialize.ts index 1907b559..2cab64f7 100644 --- a/tasks/full/5_initialize.todo +++ b/tasks/full/5_initialize.ts @@ -4,56 +4,51 @@ import { initReserves, deployLendingPoolLiquidationManager, insertContractAddressInDb, - deployMockFlashLoanReceiver, deployWalletBalancerProvider, deployAaveProtocolTestHelpers, getLendingPool, getLendingPoolConfiguratorProxy, - getAllMockedTokens, + getParamPerNetwork, } from '../../helpers/contracts-helpers'; -import {getReservesConfigByPool} from '../../helpers/configuration'; +import {loadPoolConfig, ConfigNames} from '../../helpers/configuration'; -import {tEthereumAddress, AavePools, eContractid} from '../../helpers/types'; -import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; +import {AavePools, eContractid, eEthereumNetwork, ICommonConfiguration} from '../../helpers/types'; +import {waitForTx} from '../../helpers/misc-utils'; import {enableReservesToBorrow, enableReservesAsCollateral} from '../../helpers/init-helpers'; -import {getAllTokenAddresses} from '../../helpers/mock-helpers'; -task('initialize-lending-pool', 'Initialize lending pool configuration.') +task('full:initialize-lending-pool', 'Initialize lending pool configuration.') .addOptionalParam('verify', 'Verify contracts at Etherscan') - .setAction(async ({verify}, localBRE) => { + .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) + .setAction(async ({verify, pool}, localBRE) => { await localBRE.run('set-bre'); + const network = localBRE.network.name; + const poolConfig = loadPoolConfig(pool); + const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration; - const mockTokens = await getAllMockedTokens(); + const reserveAssets = await getParamPerNetwork(ReserveAssets, network); const lendingPoolProxy = await getLendingPool(); const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy(); - const allTokenAddresses = getAllTokenAddresses(mockTokens); const addressesProvider = await getLendingPoolAddressesProvider(); - const protoPoolReservesAddresses = <{[symbol: string]: tEthereumAddress}>( - filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI')) - ); - - const reservesParams = getReservesConfigByPool(AavePools.proto); - - console.log('Initialize configuration'); await initReserves( - reservesParams, - protoPoolReservesAddresses, + ReservesConfig, + reserveAssets, addressesProvider, lendingPoolProxy, lendingPoolConfiguratorProxy, - AavePools.proto + AavePools.proto, + verify ); await enableReservesToBorrow( - reservesParams, - protoPoolReservesAddresses, + ReservesConfig, + reserveAssets, lendingPoolProxy, lendingPoolConfiguratorProxy ); await enableReservesAsCollateral( - reservesParams, - protoPoolReservesAddresses, + ReservesConfig, + reserveAssets, lendingPoolProxy, lendingPoolConfiguratorProxy ); @@ -63,15 +58,6 @@ task('initialize-lending-pool', 'Initialize lending pool configuration.') await addressesProvider.setLendingPoolLiquidationManager(liquidationManager.address) ); - const mockFlashLoanReceiver = await deployMockFlashLoanReceiver( - addressesProvider.address, - verify - ); - await insertContractAddressInDb( - eContractid.MockFlashLoanReceiver, - mockFlashLoanReceiver.address - ); - await deployWalletBalancerProvider(addressesProvider.address, verify); const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address, verify); diff --git a/tasks/migrations/aave.dev.ts b/tasks/migrations/aave.dev.ts index 26b01dcf..03bacb94 100644 --- a/tasks/migrations/aave.dev.ts +++ b/tasks/migrations/aave.dev.ts @@ -5,6 +5,8 @@ import {ConfigNames} from '../../helpers/configuration'; task('aave:dev', 'Deploy development enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { + const POOL_NAME = ConfigNames.Aave; + await localBRE.run('set-bre'); // Prevent loss of gas verifying all the needed ENVs for Etherscan verification @@ -15,19 +17,19 @@ task('aave:dev', 'Deploy development enviroment') console.log('Migration started\n'); console.log('1. Deploy mock tokens'); - await localBRE.run('deploy-mock-tokens', {verify}); + await localBRE.run('dev:deploy-mock-tokens', {verify}); console.log('2. Deploy address provider'); - await localBRE.run('deploy-address-provider', {verify}); + await localBRE.run('dev:deploy-address-provider', {verify}); console.log('3. Deploy lending pool'); - await localBRE.run('deploy-lending-pool', {verify}); + await localBRE.run('dev:deploy-lending-pool', {verify}); console.log('4. Deploy oracles'); - await localBRE.run('deploy-oracles', {verify, pool: ConfigNames.Aave}); + await localBRE.run('dev:deploy-oracles', {verify, pool: POOL_NAME}); console.log('5. Initialize lending pool'); - await localBRE.run('initialize-lending-pool', {verify}); + await localBRE.run('dev:initialize-lending-pool', {verify}); console.log('\nFinished migration'); }); diff --git a/tasks/migrations/aave.full.ts b/tasks/migrations/aave.full.ts index b6d16d8c..49e86aad 100644 --- a/tasks/migrations/aave.full.ts +++ b/tasks/migrations/aave.full.ts @@ -5,11 +5,8 @@ import {ConfigNames} from '../../helpers/configuration'; task('aave:full', 'Deploy development enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { - await localBRE.run('set-bre'); - // Prevent loss of gas verifying all the needed ENVs for Etherscan verification - if (verify) { - checkVerification(); - } + const POOL_NAME = ConfigNames.Aave; + await localBRE.run('set-bre'); // Prevent loss of gas verifying all the needed ENVs for Etherscan verification @@ -20,19 +17,16 @@ task('aave:full', 'Deploy development enviroment') console.log('Migration started\n'); console.log('1. Deploy address provider'); - await localBRE.run('full:deploy-address-provider', {verify, pool: ConfigNames.Aave}); + await localBRE.run('full:deploy-address-provider', {verify, pool: POOL_NAME}); - /* - console.log('3. Deploy lending pool'); - await localBRE.run('deploy-lending-pool', {verify}); + console.log('2. Deploy lending pool'); + await localBRE.run('full:deploy-lending-pool', {verify}); - console.log('4. Deploy oracles'); - await localBRE.run('deploy-oracles', {verify, pool: ConfigNames.Aave}); + console.log('3. Deploy oracles'); + await localBRE.run('full:deploy-oracles', {verify, pool: POOL_NAME}); - console.log('5. Initialize lending pool'); - await localBRE.run('initialize-lending-pool', {verify}); + console.log('4. Initialize lending pool'); + await localBRE.run('full:initialize-lending-pool', {verify, pool: POOL_NAME}); - // console.log('\nFinished migration'); - */ - console.log('TODO: Pending to migrate'); + console.log('\nFinished migrations'); }); diff --git a/tasks/migrations/uniswap.dev.ts b/tasks/migrations/uniswap.dev.ts index d6d47723..e6c5b3e8 100644 --- a/tasks/migrations/uniswap.dev.ts +++ b/tasks/migrations/uniswap.dev.ts @@ -1,13 +1,35 @@ import {task} from '@nomiclabs/buidler/config'; import {checkVerification} from '../../helpers/etherscan-verification'; +import {ConfigNames} from '../../helpers/configuration'; task('uniswap:dev', 'Deploy development enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { + const POOL_NAME = ConfigNames.Uniswap; + await localBRE.run('set-bre'); + // Prevent loss of gas verifying all the needed ENVs for Etherscan verification if (verify) { checkVerification(); } - console.log('TODO: Pending to migrate'); + + console.log('Migration started\n'); + + console.log('1. Deploy mock tokens'); + await localBRE.run('dev:deploy-mock-tokens', {verify}); + + console.log('2. Deploy address provider'); + await localBRE.run('dev:deploy-address-provider', {verify}); + + console.log('3. Deploy lending pool'); + await localBRE.run('dev:deploy-lending-pool', {verify}); + + console.log('4. Deploy oracles'); + await localBRE.run('dev:deploy-oracles', {verify, pool: POOL_NAME}); + + console.log('5. Initialize lending pool'); + await localBRE.run('dev:initialize-lending-pool', {verify}); + + console.log('\nFinished migration'); }); diff --git a/tasks/migrations/uniswap.full.ts b/tasks/migrations/uniswap.full.ts index 1145057a..d2656086 100644 --- a/tasks/migrations/uniswap.full.ts +++ b/tasks/migrations/uniswap.full.ts @@ -1,13 +1,32 @@ import {task} from '@nomiclabs/buidler/config'; import {checkVerification} from '../../helpers/etherscan-verification'; +import {ConfigNames} from '../../helpers/configuration'; task('uniswap:full', 'Deploy development enviroment') .addOptionalParam('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, localBRE) => { + const POOL_NAME = ConfigNames.Uniswap; + await localBRE.run('set-bre'); + // Prevent loss of gas verifying all the needed ENVs for Etherscan verification if (verify) { checkVerification(); } - console.log('TODO: Pending to migrate'); + + console.log('Migration started\n'); + + console.log('1. Deploy address provider'); + await localBRE.run('full:deploy-address-provider', {verify, pool: POOL_NAME}); + + console.log('2. Deploy lending pool'); + await localBRE.run('full:deploy-lending-pool', {verify}); + + console.log('3. Deploy oracles'); + await localBRE.run('full:deploy-oracles', {verify, pool: POOL_NAME}); + + console.log('4. Initialize lending pool'); + await localBRE.run('full:initialize-lending-pool', {verify, pool: POOL_NAME}); + + console.log('\nFinished migrations'); });