diff --git a/buidler.config.ts b/buidler.config.ts index 9547d3e3..6e15ca7f 100644 --- a/buidler.config.ts +++ b/buidler.config.ts @@ -14,7 +14,6 @@ usePlugin('buidler-typechain'); usePlugin('solidity-coverage'); usePlugin('@nomiclabs/buidler-waffle'); usePlugin('@nomiclabs/buidler-etherscan'); -usePlugin('buidler-gas-reporter'); const SKIP_LOAD = process.env.SKIP_LOAD === 'true'; const DEFAULT_BLOCK_GAS_LIMIT = 12450000; diff --git a/config/aave.ts b/config/aave.ts index 9de88a14..5b4a9a0c 100644 --- a/config/aave.ts +++ b/config/aave.ts @@ -34,100 +34,100 @@ export const AaveConfig: IAaveConfiguration = { ConfigName: 'Aave', ProviderId: 1, ReservesConfig: { - DAI: stablecoinStrategyDAI, - TUSD: stablecoinStrategyTUSD, - USDC: stablecoinStrategyUSDC, - USDT: stablecoinStrategyUSDT, - SUSD: stablecoinStrategySUSD, AAVE: strategyAAVE, BAT: strategyBase, - WETH: strategyWETH, - LINK: strategyLINK, - WBTC: strategyWBTC, - KNC: strategyKNC, - REP: strategyREP, - MKR: strategyMKR, - MANA: strategyMANA, - ZRX: strategyBase, - SNX: strategySNX, - YFI: strategyYFI, - UNI: strategyUNI, BUSD: stablecoinStrategyBUSD, - REN: strategyREN, + DAI: stablecoinStrategyDAI, ENJ: strategyREN, + KNC: strategyKNC, + LINK: strategyLINK, + MANA: strategyMANA, + MKR: strategyMKR, + REN: strategyREN, + REP: strategyREP, + SNX: strategySNX, + SUSD: stablecoinStrategySUSD, + TUSD: stablecoinStrategyTUSD, + UNI: strategyUNI, + USDC: stablecoinStrategyUSDC, + USDT: stablecoinStrategyUSDT, + WBTC: strategyWBTC, + WETH: strategyWETH, + YFI: strategyYFI, + ZRX: strategyBase, }, ReserveAssets: { [eEthereumNetwork.buidlerevm]: {}, [eEthereumNetwork.hardhat]: {}, [eEthereumNetwork.coverage]: {}, [EthereumNetwork.kovan]: { - WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', - DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD', - TUSD: '0x016750AC630F711882812f24Dba6c95b9D35856d', - USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422', - USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4', - SUSD: '0xD868790F57B39C9B2B51b12de046975f986675f9', AAVE: '0xB597cd8D3217ea6477232F9217fa70837ff667Af', BAT: '0x2d12186Fbb9f9a8C28B3FfdD4c42920f8539D738', - REP: '0x260071C8D61DAf730758f8BD0d6370353956AE0E', - MKR: '0x61e4CAE3DA7FD189e52a4879C7B8067D7C2Cc0FA', - LINK: '0xAD5ce863aE3E4E9394Ab43d4ba0D80f419F61789', - KNC: '0x3F80c39c0b96A0945f9F0E9f55d8A8891c5671A8', - WBTC: '0xD1B98B6607330172f1D991521145A22BCe793277', - MANA: '0x738Dc6380157429e957d223e6333Dc385c85Fec7', - ZRX: '0xD0d76886cF8D952ca26177EB7CfDf83bad08C00C', - SNX: '0x7FDb81B0b8a010dd4FFc57C3fecbf145BA8Bd947', BUSD: '0x4c6E1EFC12FDfD568186b7BAEc0A43fFfb4bCcCf', - REN: '0x5eebf65A6746eed38042353Ba84c8e37eD58Ac6f', - YFI: '0xb7c325266ec274fEb1354021D27FA3E3379D840d', - UNI: '0x075A36BA8846C6B6F53644fDd3bf17E5151789DC', + DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD', ENJ: '0xC64f90Cd7B564D3ab580eb20a102A8238E218be2', + KNC: '0x3F80c39c0b96A0945f9F0E9f55d8A8891c5671A8', + LINK: '0xAD5ce863aE3E4E9394Ab43d4ba0D80f419F61789', + MANA: '0x738Dc6380157429e957d223e6333Dc385c85Fec7', + MKR: '0x61e4CAE3DA7FD189e52a4879C7B8067D7C2Cc0FA', + REN: '0x5eebf65A6746eed38042353Ba84c8e37eD58Ac6f', + REP: '0x260071C8D61DAf730758f8BD0d6370353956AE0E', + SNX: '0x7FDb81B0b8a010dd4FFc57C3fecbf145BA8Bd947', + SUSD: '0xD868790F57B39C9B2B51b12de046975f986675f9', + TUSD: '0x016750AC630F711882812f24Dba6c95b9D35856d', + UNI: '0x075A36BA8846C6B6F53644fDd3bf17E5151789DC', + USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422', + USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4', + WBTC: '0xD1B98B6607330172f1D991521145A22BCe793277', + WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', + YFI: '0xb7c325266ec274fEb1354021D27FA3E3379D840d', + ZRX: '0xD0d76886cF8D952ca26177EB7CfDf83bad08C00C', }, [EthereumNetwork.ropsten]: { - WETH: '0xc778417e063141139fce010982780140aa0cd5ab', - DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108', - TUSD: '0xa2EA00Df6d8594DBc76b79beFe22db9043b8896F', - USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802', - USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084', - SUSD: '0xc374eB17f665914c714Ac4cdC8AF3a3474228cc5', AAVE: '', BAT: '0x85B24b3517E3aC7bf72a14516160541A60cFF19d', - REP: '0xBeb13523503d35F9b3708ca577CdCCAdbFB236bD', - MKR: '0x2eA9df3bABe04451c9C3B06a2c844587c59d9C37', - LINK: '0x1a906E71FF9e28d8E01460639EB8CF0a6f0e2486', - KNC: '0xCe4aA1dE3091033Ba74FA2Ad951f6adc5E5cF361', - WBTC: '0xa0E54Ab6AA5f0bf1D62EC3526436F3c05b3348A0', - MANA: '0x78b1F763857C8645E46eAdD9540882905ff32Db7', - ZRX: '0x02d7055704EfF050323A2E5ee4ba05DB2A588959', - SNX: '0xF80Aa7e2Fda4DA065C55B8061767F729dA1476c7', BUSD: '0xFA6adcFf6A90c11f31Bc9bb59eC0a6efB38381C6', - REN: ZERO_ADDRESS, - YFI: ZERO_ADDRESS, - UNI: ZERO_ADDRESS, + DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108', ENJ: ZERO_ADDRESS, + KNC: '0xCe4aA1dE3091033Ba74FA2Ad951f6adc5E5cF361', + LINK: '0x1a906E71FF9e28d8E01460639EB8CF0a6f0e2486', + MANA: '0x78b1F763857C8645E46eAdD9540882905ff32Db7', + MKR: '0x2eA9df3bABe04451c9C3B06a2c844587c59d9C37', + REN: ZERO_ADDRESS, + REP: '0xBeb13523503d35F9b3708ca577CdCCAdbFB236bD', + SNX: '0xF80Aa7e2Fda4DA065C55B8061767F729dA1476c7', + SUSD: '0xc374eB17f665914c714Ac4cdC8AF3a3474228cc5', + TUSD: '0xa2EA00Df6d8594DBc76b79beFe22db9043b8896F', + UNI: ZERO_ADDRESS, + USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802', + USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084', + WBTC: '0xa0E54Ab6AA5f0bf1D62EC3526436F3c05b3348A0', + WETH: '0xc778417e063141139fce010982780140aa0cd5ab', + YFI: ZERO_ADDRESS, + ZRX: '0x02d7055704EfF050323A2E5ee4ba05DB2A588959', }, [EthereumNetwork.main]: { - WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', - TUSD: '0x0000000000085d4780B73119b644AE5ecd22b376', - USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', - SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51', AAVE: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', BAT: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', - REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862', - MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', - LINK: '0x514910771af9ca656af840dff83e8264ecf986ca', - KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200', - WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', - MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', - ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498', - SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', BUSD: '0x4Fabb145d64652a948d72533023f6E7A623C7C53', - REN: '0x408e41876cCCDC0F92210600ef50372656052a38', - YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', - UNI: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', + DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', ENJ: '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c', + KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200', + LINK: '0x514910771af9ca656af840dff83e8264ecf986ca', + MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', + MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', + REN: '0x408e41876cCCDC0F92210600ef50372656052a38', + REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862', + SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', + SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51', + TUSD: '0x0000000000085d4780B73119b644AE5ecd22b376', + UNI: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', + USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', + WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', + ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498', }, }, }; diff --git a/config/commons.ts b/config/commons.ts index 41f737fa..5030a923 100644 --- a/config/commons.ts +++ b/config/commons.ts @@ -4,28 +4,28 @@ import {oneEther, oneRay, RAY, ZERO_ADDRESS} from '../helpers/constants'; import {ICommonConfiguration, EthereumNetwork, eEthereumNetwork} from '../helpers/types'; const MOCK_CHAINLINK_AGGREGATORS_PRICES = { - DAI: oneEther.multipliedBy('0.00369068412860').toFixed(), - TUSD: oneEther.multipliedBy('0.00364714136416').toFixed(), - USDC: oneEther.multipliedBy('0.00367714136416').toFixed(), AAVE: oneEther.multipliedBy('0.003620948469').toFixed(), BAT: oneEther.multipliedBy('0.00137893825230').toFixed(), - USDT: oneEther.multipliedBy('0.00369068412860').toFixed(), - SUSD: oneEther.multipliedBy('0.00364714136416').toFixed(), - MKR: oneEther.multipliedBy('2.508581').toFixed(), - REP: oneEther.multipliedBy('0.048235').toFixed(), - ZRX: oneEther.multipliedBy('0.001151').toFixed(), - WBTC: oneEther.multipliedBy('47.332685').toFixed(), - LINK: oneEther.multipliedBy('0.009955').toFixed(), - KNC: oneEther.multipliedBy('0.001072').toFixed(), - MANA: oneEther.multipliedBy('0.000158').toFixed(), - SNX: oneEther.multipliedBy('0.00442616').toFixed(), BUSD: oneEther.multipliedBy('0.00736484').toFixed(), - WETH: oneEther.toFixed(), - USD: '5848466240000000', - YFI: oneEther.multipliedBy('22.407436').toFixed(), - REN: oneEther.multipliedBy('0.00065133').toFixed(), - UNI: oneEther.multipliedBy('0.00536479').toFixed(), + DAI: oneEther.multipliedBy('0.00369068412860').toFixed(), ENJ: oneEther.multipliedBy('0.00029560').toFixed(), + KNC: oneEther.multipliedBy('0.001072').toFixed(), + LINK: oneEther.multipliedBy('0.009955').toFixed(), + MANA: oneEther.multipliedBy('0.000158').toFixed(), + MKR: oneEther.multipliedBy('2.508581').toFixed(), + REN: oneEther.multipliedBy('0.00065133').toFixed(), + REP: oneEther.multipliedBy('0.048235').toFixed(), + SNX: oneEther.multipliedBy('0.00442616').toFixed(), + SUSD: oneEther.multipliedBy('0.00364714136416').toFixed(), + TUSD: oneEther.multipliedBy('0.00364714136416').toFixed(), + UNI: oneEther.multipliedBy('0.00536479').toFixed(), + USDC: oneEther.multipliedBy('0.00367714136416').toFixed(), + USDT: oneEther.multipliedBy('0.00369068412860').toFixed(), + WETH: oneEther.toFixed(), + WBTC: oneEther.multipliedBy('47.332685').toFixed(), + YFI: oneEther.multipliedBy('22.407436').toFixed(), + ZRX: oneEther.multipliedBy('0.001151').toFixed(), + USD: '5848466240000000', UNI_DAI_ETH: oneEther.multipliedBy('2.1').toFixed(), UNI_USDC_ETH: oneEther.multipliedBy('2.1').toFixed(), UNI_SETH_ETH: oneEther.multipliedBy('2.1').toFixed(), @@ -65,6 +65,7 @@ export const CommonsConfig: ICommonConfiguration = { ...MOCK_CHAINLINK_AGGREGATORS_PRICES, }, }, + // TODO: reorg alphabetically, checking the reason of tests failing LendingRateOracleRatesCommon: { WETH: { borrowRate: oneRay.multipliedBy(0.03).toFixed(), @@ -196,91 +197,91 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.hardhat]: {}, [eEthereumNetwork.buidlerevm]: {}, [EthereumNetwork.kovan]: { - DAI: '0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90', - TUSD: '0x02424c54D78D48179Fd12ebFfB11c16f9CA984Ad', - USDC: '0x672c1C0d1130912D83664011E7960a42E8cA05D5', - USDT: '0xCC833A6522721B3252e7578c5BCAF65738B75Fc3', - SUSD: '0xa353F8b083F7575cfec443b5ad585D42f652E9F7', AAVE: '0xd04647B7CB523bb9f26730E9B6dE1174db7591Ad', - BAT: '0x2c8d01771CCDca47c103194C5860dbEA2fE61626', - REP: '0x09F4A94F44c29d4967C761bBdB89f5bD3E2c09E6', - MKR: '0x14D7714eC44F44ECD0098B39e642b246fB2c38D0', - LINK: '0xf1e71Afd1459C05A2F898502C4025be755aa844A', - KNC: '0x0893AaF58f62279909F9F6FF2E5642f53342e77F', - WBTC: '0x33E5085E92f5b53E9A193E28ad2f76bF210550BB', - MANA: '0x3c30c5c415B2410326297F0f65f5Cbb32f3aefCc', - ZRX: '0x2636cfdDB457a6C7A7D60A439F1E5a5a0C3d9c65', - SNX: '0x775E76cca1B5bc903c9a8C6f77416A35E5744664', - BUSD: '0x63294A05C9a81b1A40CAD3f2ff30617111630393', - USD: '0xD21912D8762078598283B14cbA40Cb4bFCb87581', - YFI: '0xe45f3ed2218E7e411bf8DFdE66069e57F46b26eF', - REN: '0xF1939BECE7708382b5fb5e559f630CB8B39a10ee', - UNI: '0x17756515f112429471F86f98D5052aCB6C47f6ee', + BAT: '0x0e4fcEC26c9f85c3D714370c98f43C4E02Fc35Ae', + BUSD: '0xbF7A18ea5DE0501f7559144e702b29c55b055CcB', + DAI: '0x22B58f1EbEDfCA50feF632bD73368b2FdA96D541', ENJ: '0xfaDbe2ee798889F02d1d39eDaD98Eff4c7fe95D4', + KNC: '0xb8E8130d244CFd13a75D6B9Aee029B1C33c808A7', + LINK: '0x3Af8C569ab77af5230596Acf0E8c2F9351d24C38', + MANA: '0x1b93D8E109cfeDcBb3Cc74eD761DE286d5771511', + MKR: '0x0B156192e04bAD92B6C1C13cf8739d14D78D5701', + REN: '0xF1939BECE7708382b5fb5e559f630CB8B39a10ee', + REP: '0x3A7e6117F2979EFf81855de32819FBba48a63e9e', + SNX: '0xF9A76ae7a1075Fe7d646b06fF05Bd48b9FA5582e', + SUSD: '0xb343e7a1aF578FA35632435243D814e7497622f7', + TUSD: '0x7aeCF1c19661d12E962b69eBC8f6b2E63a55C660', + UNI: '0x17756515f112429471F86f98D5052aCB6C47f6ee', + USDC: '0x64EaC61A2DFda2c3Fa04eED49AA33D021AeC8838', + USDT: '0x0bF499444525a23E7Bb61997539725cA2e928138', + WBTC: '0xF7904a295A029a3aBDFFB6F12755974a958C7C25', + YFI: '0xC5d1B1DEb2992738C0273408ac43e1e906086B6C', + ZRX: '0xBc3f28Ccc21E9b5856E81E6372aFf57307E2E883', + USD: '0x9326BFA02ADD2366b30bacB125260Af641031331', UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9', - UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', - UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC', UNI_LEND_ETH: '0xB996b1a11BA0aACc4deA57f7f92d1722428f2E90', UNI_LINK_ETH: '0x267490eE9Ad21dfE839aE73A8B1c8C9A36F60d33', UNI_MKR_ETH: '0x6eBF25AB0A18B8F6243619f1AE6b94373169A069', + UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC', + UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', }, [EthereumNetwork.ropsten]: { + AAVE: ZERO_ADDRESS, + BAT: '0xafd8186c962daf599f171b8600f3e19af7b52c92', + BUSD: '0x0A32D96Ff131cd5c3E0E5AAB645BF009Eda61564', DAI: '0x64b8e49baded7bfb2fd5a9235b2440c0ee02971b', + ENJ: ZERO_ADDRESS, + KNC: '0x19d97ceb36624a31d827032d8216dd2eb15e9845', + LINK: '0xb8c99b98913bE2ca4899CdcaF33a3e519C20EeEc', + MANA: '0xDab909dedB72573c626481fC98CEE1152b81DEC2', + MKR: '0x811B1f727F8F4aE899774B568d2e72916D91F392', + REN: ZERO_ADDRESS, + REP: '0xa949ee9ba80c0f381481f2eab538bc5547a5ac67', + SNX: '0xA95674a8Ed9aa9D2E445eb0024a9aa05ab44f6bf', + SUSD: '0xe054b4aee7ac7645642dd52f1c892ff0128c98f0', TUSD: '0x523ac85618df56e940534443125ef16daf785620', + UNI: ZERO_ADDRESS, USDC: '0xe1480303dde539e2c241bdc527649f37c9cbef7d', USDT: '0xc08fe0c4d97ccda6b40649c6da621761b628c288', - SUSD: '0xe054b4aee7ac7645642dd52f1c892ff0128c98f0', - AAVE: '', - BAT: '0xafd8186c962daf599f171b8600f3e19af7b52c92', - REP: '0xa949ee9ba80c0f381481f2eab538bc5547a5ac67', - MKR: '0x811B1f727F8F4aE899774B568d2e72916D91F392', - LINK: '0xb8c99b98913bE2ca4899CdcaF33a3e519C20EeEc', - KNC: '0x19d97ceb36624a31d827032d8216dd2eb15e9845', WBTC: '0x5b8B87A0abA4be247e660B0e0143bB30Cdf566AF', - MANA: '0xDab909dedB72573c626481fC98CEE1152b81DEC2', - ZRX: '0x1d0052e4ae5b4ae4563cbac50edc3627ca0460d7', - SNX: '0xA95674a8Ed9aa9D2E445eb0024a9aa05ab44f6bf', - BUSD: '0x0A32D96Ff131cd5c3E0E5AAB645BF009Eda61564', - USD: '0x8468b2bDCE073A157E560AA4D9CcF6dB1DB98507', YFI: ZERO_ADDRESS, - REN: ZERO_ADDRESS, - UNI: ZERO_ADDRESS, - ENJ: ZERO_ADDRESS, + ZRX: '0x1d0052e4ae5b4ae4563cbac50edc3627ca0460d7', UNI_DAI_ETH: '0x16048819e3f77b7112eB033624A0bA9d33743028', - UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3', - UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1', UNI_LEND_ETH: '0x43c44B27376Afedee06Bae2A003e979FC3B3Da6C', UNI_LINK_ETH: '0xb60c29714146EA3539261f599Eb30f62904108Fa', UNI_MKR_ETH: '0x594ae5421f378b8B4AF9e758C461d2A1FF990BC5', + UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1', + UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3', + USD: '0x8468b2bDCE073A157E560AA4D9CcF6dB1DB98507', }, [EthereumNetwork.main]: { - DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', - TUSD: '0x73ead35fd6A572EF763B13Be65a9db96f7643577', - USDC: '0xdE54467873c3BCAA76421061036053e371721708', - USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', - SUSD: '0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea', AAVE: '0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012', BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129', - REP: '0xb8b513d9cf440C1b6f5C7142120d611C94fC220c', - MKR: '0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3', - LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07', - KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152', - WBTC: '0x0133Aa47B6197D0BA090Bf2CD96626Eb71fFd13c', - MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97', - ZRX: '0xA0F9D94f060836756FFC84Db4C78d097cA8C23E8', - SNX: '0xE23d1142dE4E83C08bb048bcab54d50907390828', BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888', - USD: '0x59b826c214aBa7125bFA52970d97736c105Cc375', - YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4', - REN: '0x3147D7203354Dc06D9fd350c7a2437bcA92387a4', - UNI: '0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e', + DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', ENJ: '0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B', + KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152', + LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07', + MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97', + MKR: '0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3', + REN: '0x3147D7203354Dc06D9fd350c7a2437bcA92387a4', + REP: '0xb8b513d9cf440C1b6f5C7142120d611C94fC220c', + SNX: '0xE23d1142dE4E83C08bb048bcab54d50907390828', + SUSD: '0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea', + TUSD: '0x73ead35fd6A572EF763B13Be65a9db96f7643577', + UNI: '0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e', + USDC: '0xdE54467873c3BCAA76421061036053e371721708', + USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', + WBTC: '0x0133Aa47B6197D0BA090Bf2CD96626Eb71fFd13c', + YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4', + ZRX: '0xA0F9D94f060836756FFC84Db4C78d097cA8C23E8', UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', - UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', - UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E', UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3', UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', + UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', + UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', + USD: '0x59b826c214aBa7125bFA52970d97736c105Cc375', }, }, ReserveAssets: { @@ -296,9 +297,9 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.coverage]: '0x95b73a72c6ecf4ccbbba5178800023260bad8e75cdccdb8e4827a2977a37c820', [eEthereumNetwork.hardhat]: - '0x92d0d54f437b6e70937ecba8ac80fc3b6767cf26bc725820e937d5a78427c2d1', + '0xa14895ab432a9d0712a041fdcea77f7f65826945dc90bf29ea819c2a01e7c5f9', [eEthereumNetwork.buidlerevm]: - '0x92d0d54f437b6e70937ecba8ac80fc3b6767cf26bc725820e937d5a78427c2d1', + '0xa14895ab432a9d0712a041fdcea77f7f65826945dc90bf29ea819c2a01e7c5f9', [eEthereumNetwork.kovan]: '', [eEthereumNetwork.ropsten]: '', [eEthereumNetwork.main]: '', diff --git a/config/reservesConfigs.ts b/config/reservesConfigs.ts index bc2f62ab..984be809 100644 --- a/config/reservesConfigs.ts +++ b/config/reservesConfigs.ts @@ -16,6 +16,20 @@ export const strategyBase: IReserveParams = { reserveDecimals: '18', }; +export const stablecoinStrategyBase: IReserveParams = { + baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), + variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(), + stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(), + baseLTVAsCollateral: '7500', + liquidationThreshold: '8000', + liquidationBonus: '10500', + borrowingEnabled: true, + stableBorrowRateEnabled: true, + reserveDecimals: '18', +}; + export const stablecoinStrategyCentralized: IReserveParams = { baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), @@ -30,34 +44,10 @@ export const stablecoinStrategyCentralized: IReserveParams = { reserveDecimals: '6', }; -export const stablecoinStrategyBase: IReserveParams = { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '7500', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: true, - reserveDecimals: '18', -}; - -export const stablecoinStrategyDAI: IReserveParams = { - ...stablecoinStrategyBase, -}; - -export const stablecoinStrategyTUSD: IReserveParams = { - ...stablecoinStrategyCentralized, - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - borrowingEnabled: true, - stableBorrowRateEnabled: false, - reserveDecimals: '18', +export const strategyGovernanceTokens: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '4000', + liquidationBonus: '11500', }; export const stablecoinStrategyBUSD: IReserveParams = { @@ -73,20 +63,65 @@ export const stablecoinStrategyBUSD: IReserveParams = { stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(), stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), }; -export const stablecoinStrategyUSDC: IReserveParams = { - ...stablecoinStrategyBase, - variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - reserveDecimals: '6', + +export const strategyAAVE: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '5000', + liquidationThreshold: '6500', + liquidationBonus: '11000', + borrowingEnabled: false, + stableBorrowRateEnabled: false, + reserveDecimals: '18', }; -export const stablecoinStrategyUSDT: IReserveParams = { +export const stablecoinStrategyDAI: IReserveParams = { ...stablecoinStrategyBase, - baseLTVAsCollateral: '-1', +}; + +export const strategyENJ: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '5500', + stableBorrowRateEnabled: false, +}; + +export const strategyKNC: IReserveParams = { + ...strategyBase, + variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), +}; + +export const strategyLINK: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '6500', liquidationThreshold: '7000', - liquidationBonus: '0', +}; + +export const strategyMANA: IReserveParams = { + ...strategyBase, + variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), +}; + +export const strategyMKR: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '3500', +}; + +export const strategyREN: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '5000', + liquidationThreshold: '6500', + liquidationBonus: '11000', + borrowingEnabled: true, + stableBorrowRateEnabled: false, +}; + +export const strategyREP: IReserveParams = { + ...strategyBase, + baseLTVAsCollateral: '3500', + variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(), borrowingEnabled: false, - stableBorrowRateEnabled: true, - reserveDecimals: '6', }; export const stablecoinStrategySUSD: IReserveParams = { @@ -103,34 +138,47 @@ export const stablecoinStrategySUSD: IReserveParams = { reserveDecimals: '18', }; -export const strategyAAVE: IReserveParams = { +export const strategySNX: IReserveParams = { ...strategyBase, - baseLTVAsCollateral: '5000', - liquidationThreshold: '6500', - liquidationBonus: '11000', - borrowingEnabled: false, + baseLTVAsCollateral: '1500', + liquidationThreshold: '4000', + baseVariableBorrowRate: new BigNumber(0.03).multipliedBy(oneRay).toFixed(), + variableRateSlope1: new BigNumber(0.12).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(), + stableBorrowRateEnabled: false, +}; + +export const stablecoinStrategyTUSD: IReserveParams = { + ...stablecoinStrategyCentralized, + baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), + variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(), + stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), + borrowingEnabled: true, stableBorrowRateEnabled: false, reserveDecimals: '18', }; -export const strategyWETH: IReserveParams = { - baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '7500', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: true, - reserveDecimals: '18', +export const strategyUNI: IReserveParams = { + ...strategyGovernanceTokens, + stableBorrowRateEnabled: false, }; -export const strategyLINK: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '6500', +export const stablecoinStrategyUSDC: IReserveParams = { + ...stablecoinStrategyBase, + variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), + reserveDecimals: '6', +}; + +export const stablecoinStrategyUSDT: IReserveParams = { + ...stablecoinStrategyBase, + baseLTVAsCollateral: '-1', liquidationThreshold: '7000', + liquidationBonus: '0', + borrowingEnabled: false, + stableBorrowRateEnabled: true, + reserveDecimals: '6', }; export const strategyWBTC: IReserveParams = { @@ -147,66 +195,20 @@ export const strategyWBTC: IReserveParams = { reserveDecimals: '8', }; -export const strategyKNC: IReserveParams = { - ...strategyBase, +export const strategyWETH: IReserveParams = { + baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), -}; - -export const strategyREP: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '3500', - variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(), - borrowingEnabled: false, -}; - -export const strategyMKR: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '3500', -}; - -export const strategyMANA: IReserveParams = { - ...strategyBase, - variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), -}; - -export const strategySNX: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '1500', - liquidationThreshold: '4000', - baseVariableBorrowRate: new BigNumber(0.03).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.12).multipliedBy(oneRay).toFixed(), variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(), - stableBorrowRateEnabled: false, -}; - -export const strategyENJ: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '5500', - stableBorrowRateEnabled: false, -}; - -export const strategyREN: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '5000', - liquidationThreshold: '6500', - liquidationBonus: '11000', + stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(), + baseLTVAsCollateral: '7500', + liquidationThreshold: '8000', + liquidationBonus: '10500', borrowingEnabled: true, - stableBorrowRateEnabled: false, + stableBorrowRateEnabled: true, + reserveDecimals: '18', }; -export const strategyGovernanceTokens: IReserveParams = { - ...strategyBase, - baseLTVAsCollateral: '4000', - liquidationBonus: '11500', -}; export const strategyYFI: IReserveParams = { ...strategyGovernanceTokens, }; - -export const strategyUNI: IReserveParams = { - ...strategyGovernanceTokens, - stableBorrowRateEnabled: false, -}; diff --git a/config/uniswap.ts b/config/uniswap.ts index 79adb71f..84a9612f 100644 --- a/config/uniswap.ts +++ b/config/uniswap.ts @@ -13,19 +13,6 @@ export const UniswapConfig: IUniswapConfiguration = { ConfigName: 'Uniswap', ProviderId: 2, ReservesConfig: { - WETH: { - baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '-1', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, DAI: { baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), @@ -65,6 +52,19 @@ export const UniswapConfig: IUniswapConfiguration = { stableBorrowRateEnabled: false, reserveDecimals: '6', }, + WETH: { + baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), + variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), + stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), + baseLTVAsCollateral: '-1', + liquidationThreshold: '8000', + liquidationBonus: '10500', + borrowingEnabled: true, + stableBorrowRateEnabled: false, + reserveDecimals: '18', + }, UNI_DAI_ETH: { baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), @@ -78,32 +78,6 @@ export const UniswapConfig: IUniswapConfiguration = { stableBorrowRateEnabled: false, reserveDecimals: '18', }, - UNI_USDC_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '6800', - liquidationThreshold: '7300', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_SETH_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '4800', - liquidationThreshold: '6600', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, UNI_LEND_ETH: { baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), @@ -143,6 +117,32 @@ export const UniswapConfig: IUniswapConfiguration = { stableBorrowRateEnabled: false, reserveDecimals: '18', }, + UNI_SETH_ETH: { + baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), + variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), + stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), + baseLTVAsCollateral: '4800', + liquidationThreshold: '6600', + liquidationBonus: '11000', + borrowingEnabled: false, + stableBorrowRateEnabled: false, + reserveDecimals: '18', + }, + UNI_USDC_ETH: { + baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), + variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), + variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), + stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), + stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), + baseLTVAsCollateral: '6800', + liquidationThreshold: '7300', + liquidationBonus: '11000', + borrowingEnabled: false, + stableBorrowRateEnabled: false, + reserveDecimals: '18', + }, }, ChainlinkAggregator: { [eEthereumNetwork.buidlerevm]: {}, @@ -153,33 +153,33 @@ export const UniswapConfig: IUniswapConfiguration = { USDC: '0x672c1C0d1130912D83664011E7960a42E8cA05D5', USDT: '0xCC833A6522721B3252e7578c5BCAF65738B75Fc3', UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9', - UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', - UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC', UNI_LEND_ETH: '0xB996b1a11BA0aACc4deA57f7f92d1722428f2E90', UNI_LINK_ETH: '0x267490eE9Ad21dfE839aE73A8B1c8C9A36F60d33', UNI_MKR_ETH: '0x6eBF25AB0A18B8F6243619f1AE6b94373169A069', + UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC', + UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', }, [EthereumNetwork.ropsten]: { DAI: '0x64b8e49baded7bfb2fd5a9235b2440c0ee02971b', USDC: '0xe1480303dde539e2c241bdc527649f37c9cbef7d', USDT: '0xc08fe0c4d97ccda6b40649c6da621761b628c288', UNI_DAI_ETH: '0x16048819e3f77b7112eB033624A0bA9d33743028', - UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3', - UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1', UNI_LEND_ETH: '0x43c44B27376Afedee06Bae2A003e979FC3B3Da6C', UNI_LINK_ETH: '0xb60c29714146EA3539261f599Eb30f62904108Fa', UNI_MKR_ETH: '0x594ae5421f378b8B4AF9e758C461d2A1FF990BC5', + UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1', + UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3', }, [EthereumNetwork.main]: { DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', USDC: '0xdE54467873c3BCAA76421061036053e371721708', USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', - UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', - UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E', UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3', UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', + UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', + UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', }, }, ReserveAssets: { @@ -187,40 +187,40 @@ export const UniswapConfig: IUniswapConfiguration = { [eEthereumNetwork.buidlerevm]: {}, [eEthereumNetwork.coverage]: {}, [EthereumNetwork.kovan]: { - WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD', USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422', USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4', + WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', UNI_DAI_ETH: '0x2e0086b5343101203ADeE40160ca1BD91E29fF75', - UNI_USDC_ETH: '0x34eA1aB2a43ee696914fc3C0d3e517fA666B9e8D', - UNI_SETH_ETH: '0xCF457d8Bb8D8f54Af1ea1B3710231e89bd6CFbfe', UNI_LEND_ETH: '0x7615cd666F867406C64E558B9CCC3883e7EC9BA8', UNI_LINK_ETH: '0xFb9AAc184e79025f936E9C4EF3047Ad4889Df4a8', UNI_MKR_ETH: '0xB31a1c30f38cD68e8177566Ef950d7bc3C81DaCF', + UNI_SETH_ETH: '0xCF457d8Bb8D8f54Af1ea1B3710231e89bd6CFbfe', + UNI_USDC_ETH: '0x34eA1aB2a43ee696914fc3C0d3e517fA666B9e8D', }, [EthereumNetwork.ropsten]: { - WETH: '0xc778417e063141139fce010982780140aa0cd5ab', DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108', USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802', USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084', + WETH: '0xc778417e063141139fce010982780140aa0cd5ab', UNI_DAI_ETH: '0xC245A7d35E652Cae438A1FdB13E474DF53DBB81D', - UNI_USDC_ETH: '0x2BD65323955D08eb600074291305881d1295c4D2', - UNI_SETH_ETH: '0xed4597DCd234867d7A260AD24bAb8253F64940a5', UNI_LEND_ETH: '0xcD5DE1EDD40aBBD6efE2C306276FF56f81Bc3151', UNI_LINK_ETH: '0x8dcf3c8d4d69ca7C188c0A4cf219A1dcE1e510d7', UNI_MKR_ETH: '0xd8b7B99a9205FD0D0abFB6D7a2c13Db2681bff43', + UNI_SETH_ETH: '0xed4597DCd234867d7A260AD24bAb8253F64940a5', + UNI_USDC_ETH: '0x2BD65323955D08eb600074291305881d1295c4D2', }, [EthereumNetwork.main]: { - WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', + WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667', - UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', - UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', UNI_LEND_ETH: '0xcaa7e4656f6a2b59f5f99c745f91ab26d1210dce', UNI_LINK_ETH: '0xf173214c720f58e03e194085b1db28b50acdeead', UNI_MKR_ETH: '0x2c4bd064b998838076fa341a83d007fc2fa50957', + UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', + UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', }, }, }; diff --git a/contracts/configuration/LendingPoolAddressesProvider.sol b/contracts/configuration/LendingPoolAddressesProvider.sol index ee4435bc..43796d36 100644 --- a/contracts/configuration/LendingPoolAddressesProvider.sol +++ b/contracts/configuration/LendingPoolAddressesProvider.sol @@ -28,24 +28,30 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider bytes32 private constant LENDING_RATE_ORACLE = 'LENDING_RATE_ORACLE'; /** - * @dev Sets an address for an id, allowing to cover it or not with a proxy + * @dev Sets an address for an id by updating a proxy implementation * @param id The id - * @param newAddress The address to set, pass address(0) if a proxy is needed * @param implementationAddress The address of the implementation if we want it covered by a proxy * address(0) if we don't want a proxy covering */ - function setAddress( + function setAddressAsProxy( bytes32 id, - address newAddress, address implementationAddress ) external override onlyOwner { - if (implementationAddress != address(0)) { - _updateImpl(id, implementationAddress); - emit AddressSet(id, implementationAddress, true); - } else { - _addresses[id] = newAddress; - emit AddressSet(id, newAddress, false); - } + _updateImpl(id, implementationAddress); + emit AddressSet(id, implementationAddress, true); + } + + /** + * @dev Sets an address for an id replacing the address saved in the addresses map + * @param id The id + * @param newAddress The address to set, pass address(0) if a proxy is needed + */ + function setAddress( + bytes32 id, + address newAddress + ) external override onlyOwner { + _addresses[id] = newAddress; + emit AddressSet(id, newAddress, false); } /** diff --git a/contracts/deployments/ATokensAndRatesHelper.sol b/contracts/deployments/ATokensAndRatesHelper.sol index f39cdaa2..a44d5071 100644 --- a/contracts/deployments/ATokensAndRatesHelper.sol +++ b/contracts/deployments/ATokensAndRatesHelper.sol @@ -36,7 +36,6 @@ contract ATokensAndRatesHelper is Ownable { ) external onlyOwner { require(tokens.length == symbols.length, 't Arrays not same length'); require(rates.length == symbols.length, 'r Arrays not same length'); - for (uint256 i = 0; i < tokens.length; i++) { emit deployedContracts( address( diff --git a/contracts/interfaces/ILendingPoolAddressesProvider.sol b/contracts/interfaces/ILendingPoolAddressesProvider.sol index c0d180e3..c1a7ab78 100644 --- a/contracts/interfaces/ILendingPoolAddressesProvider.sol +++ b/contracts/interfaces/ILendingPoolAddressesProvider.sol @@ -20,7 +20,11 @@ interface ILendingPoolAddressesProvider { function setAddress( bytes32 id, - address newAddress, + address newAddress + ) external; + + function setAddressAsProxy( + bytes32 id, address impl ) external; diff --git a/contracts/lendingpool/LendingPool.sol b/contracts/lendingpool/LendingPool.sol index b2afa781..dbebc6ef 100644 --- a/contracts/lendingpool/LendingPool.sol +++ b/contracts/lendingpool/LendingPool.sol @@ -389,6 +389,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage ValidationLogic.validateSetUseReserveAsCollateral( reserve, asset, + useAsCollateral, _reserves, _usersConfig[msg.sender], _reservesList, diff --git a/contracts/lendingpool/LendingPoolConfigurator.sol b/contracts/lendingpool/LendingPoolConfigurator.sol index e8f79502..c9a828de 100644 --- a/contracts/lendingpool/LendingPoolConfigurator.sol +++ b/contracts/lendingpool/LendingPoolConfigurator.sol @@ -554,21 +554,6 @@ contract LendingPoolConfigurator is VersionedInitializable { emit ReserveLiquidationBonusChanged(asset, bonus); } - /** - * @dev updates the reserve decimals - * @param asset the address of the reserve - * @param decimals the new number of decimals - **/ - function setReserveDecimals(address asset, uint256 decimals) external onlyPoolAdmin { - ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); - - currentConfig.setDecimals(decimals); - - pool.setConfiguration(asset, currentConfig.data); - - emit ReserveDecimalsChanged(asset, decimals); - } - /** * @dev sets the interest rate strategy of a reserve * @param asset the address of the reserve diff --git a/contracts/libraries/helpers/Errors.sol b/contracts/libraries/helpers/Errors.sol index 43bf1a5b..2dff6ced 100644 --- a/contracts/libraries/helpers/Errors.sol +++ b/contracts/libraries/helpers/Errors.sol @@ -22,7 +22,7 @@ library Errors { string public constant BORROW_ALLOWANCE_NOT_ENOUGH = '59'; // User borrows on behalf, but allowance are too small //contract specific errors - string public constant VL_AMOUNT_NOT_GREATER_THAN_0 = '1'; // 'Amount must be greater than 0' + string public constant VL_INVALID_AMOUNT = '1'; // 'Amount must be greater than 0' string public constant VL_NO_ACTIVE_RESERVE = '2'; // 'Action requires an active reserve' string public constant VL_RESERVE_FROZEN = '3'; // 'Action cannot be performed because the reserve is frozen' string public constant VL_CURRENT_AVAILABLE_LIQUIDITY_NOT_ENOUGH = '4'; // 'The current liquidity is not enough' diff --git a/contracts/libraries/logic/ValidationLogic.sol b/contracts/libraries/logic/ValidationLogic.sol index 47bf3fd8..a08c5420 100644 --- a/contracts/libraries/logic/ValidationLogic.sol +++ b/contracts/libraries/logic/ValidationLogic.sol @@ -36,7 +36,7 @@ library ValidationLogic { function validateDeposit(ReserveLogic.ReserveData storage reserve, uint256 amount) external view { (bool isActive, bool isFrozen, , ) = reserve.configuration.getFlags(); - require(amount > 0, Errors.VL_AMOUNT_NOT_GREATER_THAN_0); + require(amount != 0, Errors.VL_INVALID_AMOUNT); require(isActive, Errors.VL_NO_ACTIVE_RESERVE); require(!isFrozen, Errors.VL_RESERVE_FROZEN); } @@ -62,7 +62,7 @@ library ValidationLogic { uint256 reservesCount, address oracle ) external view { - require(amount > 0, Errors.VL_AMOUNT_NOT_GREATER_THAN_0); + require(amount != 0, Errors.VL_INVALID_AMOUNT); require(amount <= userBalance, Errors.VL_NOT_ENOUGH_AVAILABLE_USER_BALANCE); @@ -139,6 +139,7 @@ library ValidationLogic { require(vars.isActive, Errors.VL_NO_ACTIVE_RESERVE); require(!vars.isFrozen, Errors.VL_RESERVE_FROZEN); + require(amount != 0, Errors.VL_INVALID_AMOUNT); require(vars.borrowingEnabled, Errors.VL_BORROWING_NOT_ENABLED); @@ -232,7 +233,7 @@ library ValidationLogic { require(isActive, Errors.VL_NO_ACTIVE_RESERVE); - require(amountSent > 0, Errors.VL_AMOUNT_NOT_GREATER_THAN_0); + require(amountSent > 0, Errors.VL_INVALID_AMOUNT); require( (stableDebt > 0 && @@ -304,6 +305,7 @@ library ValidationLogic { function validateSetUseReserveAsCollateral( ReserveLogic.ReserveData storage reserve, address reserveAddress, + bool useAsCollateral, mapping(address => ReserveLogic.ReserveData) storage reservesData, UserConfiguration.Map storage userConfig, mapping(uint256 => address) storage reserves, @@ -315,6 +317,7 @@ library ValidationLogic { require(underlyingBalance > 0, Errors.VL_UNDERLYING_BALANCE_NOT_GREATER_THAN_0); require( + useAsCollateral || GenericLogic.balanceDecreaseAllowed( reserveAddress, msg.sender, diff --git a/contracts/misc/AaveProtocolTestHelpers.sol b/contracts/misc/AaveProtocolDataProvider.sol similarity index 99% rename from contracts/misc/AaveProtocolTestHelpers.sol rename to contracts/misc/AaveProtocolDataProvider.sol index 37732e07..cc35f17d 100644 --- a/contracts/misc/AaveProtocolTestHelpers.sol +++ b/contracts/misc/AaveProtocolDataProvider.sol @@ -11,7 +11,7 @@ import {UserConfiguration} from '../libraries/configuration/UserConfiguration.so import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol'; import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol'; -contract AaveProtocolTestHelpers { +contract AaveProtocolDataProvider { using ReserveConfiguration for ReserveConfiguration.Map; using UserConfiguration for UserConfiguration.Map; diff --git a/contracts/misc/WalletBalanceProvider.sol b/contracts/misc/WalletBalanceProvider.sol index bb165624..c3f5dd7f 100644 --- a/contracts/misc/WalletBalanceProvider.sol +++ b/contracts/misc/WalletBalanceProvider.sol @@ -107,7 +107,7 @@ contract WalletBalanceProvider { } balances[j] = balanceOf(user, reservesWithEth[j]); } - balances[reservesWithEth.length] = balanceOf(user, MOCK_ETH_ADDRESS); + balances[reserves.length] = balanceOf(user, MOCK_ETH_ADDRESS); return (reservesWithEth, balances); } diff --git a/coverage.json b/coverage.json index 8eb70735..2b521a35 100644 --- a/coverage.json +++ b/coverage.json @@ -5449,7 +5449,7 @@ } } }, - "contracts/misc/AaveProtocolTestHelpers.sol": { + "contracts/misc/AaveProtocolDataProvider.sol": { "l": { "18": 3, "22": 1, @@ -5466,7 +5466,7 @@ "42": 34, "47": 2 }, - "path": "/src/contracts/misc/AaveProtocolTestHelpers.sol", + "path": "/src/contracts/misc/AaveProtocolDataProvider.sol", "s": { "1": 3, "2": 1, diff --git a/deployed-contracts.json b/deployed-contracts.json index 9e9ce6de..6fb4bcf1 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -251,7 +251,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x688C81eC2A0Be6F287fD8C9c343D299c03A34804", + "address": "0xfD65F43f039832D703fAb8B635C7522d4966f118", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -265,11 +265,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xf189cC1eD07cEFB6e61082104e12673E133163f5", + "address": "0x082dAEDD5Ff6F6Ae58FF83Be57A3F76fC5Feff41", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x8456161947DFc1fC159A0B26c025cD2b4bba0c3e", + "address": "0x12080583C4F0211eC382d33a273E6D0f9fAb0F75", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -279,11 +279,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x757855037B01c45832f8d662D217C766Ba4e8e74", + "address": "0x0ed5565EdDE0cea739c30BD5b56AAaa49611929E", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x5F6CaC05CDF893f029b29F44d368eAeD40e573B6", + "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -293,11 +293,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xBc013D1412E0F4acacAa64CDc1c93e8A3Ecd8fF4", + "address": "0x571270764042E5932C08066e8Da692f05A31153A", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x92cfBAB5A86631e9F1A6126b42E01A74eadA61Df", + "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -307,11 +307,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xba681EfB276237903df60ef92D564610A393Dbd6", + "address": "0xdb3d5013b9f51063D2d934AD717C8e7Ef90A6f19", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x78Aeff0658Fa67735fBF99Ce7CDB01Fe5D520259", + "address": "0xa43Ba00FCA75B805D17f67F9433b971E9a398690", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -321,10 +321,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x59525b17808F0a7eFe62303ca46e596A5a602683" + "address": "0x3F3BA806D66a5F3B03c7f30e94023A74eacE1c8F" }, "hardhat": { - "address": "0x813F07B2100e59ba6555d0D6dBA2660c68514665" + "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd", + "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, "LendingPoolConfigurator": { @@ -332,7 +333,7 @@ "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" }, "kovan": { - "address": "0x0a9bc0ce44e6473a1B0e30b54b7227de6E75Fd83" + "address": "0x2bc505Db38aEA5EfA42e07Fb3855875094E2eB44" }, "hardhat": { "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" @@ -344,11 +345,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x882AD7981FE3d63200A23F5d009A1d0488b5ea7e", + "address": "0xA103ea2B53e53209a4b58E4F2b4cd21958C9e3AA", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0xE4C10Db67595aF2Cb4166c8C274e0140f7E43059", + "address": "0x099d9fF8F818290C8b5B7Db5bFca84CEebd2714c", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -358,11 +359,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x20Bfad73e3A8aA9161b5c553f7825002a175DB23", + "address": "0xdbB044C41a395c2db96a401aFCb4367F6546B893", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x099d9fF8F818290C8b5B7Db5bFca84CEebd2714c", + "address": "0x85bdE212E66e2BAE510E44Ed59116c1eC712795b", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -372,7 +373,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x85bdE212E66e2BAE510E44Ed59116c1eC712795b", + "address": "0xe1B3b8F6b298b52bCd15357ED29e65e66a4045fF", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -382,7 +383,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x8Dd7f10813aC8fCB83ad7ad94e941D53b002fBc7", + "address": "0xfA9dbd706c674801F50169f4B5862cCe045408E6", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -392,7 +393,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0xfA9dbd706c674801F50169f4B5862cCe045408E6", + "address": "0xCeEa6148D75268b6E930AE41d7a31baE1CA318d8", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -402,20 +403,20 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0xbFAD7C67855cc0272CC5ED00dAabeFDB31E7190a", + "address": "0x98B40aAC844674B2287556E75b3ef5530DfCfcB7", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, - "AaveProtocolTestHelpers": { + "AaveProtocolDataProvider": { "buidlerevm": { "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" }, "kovan": { - "address": "0xe875775D75F384944E77086Ea54bAD008ea8004A", + "address": "0x44d78901180FbA093A5495fFE4BcBf922110D241", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" + "address": "0x3392c115Ff2CE1A782B4a965fF770da61e69228E" } }, "LendingPoolCollateralManager": { @@ -424,11 +425,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xc072D8A233C8C52239dcD6ab39954240a0699055", + "address": "0x999ce4Ed17B90A1421f1D6b8891D87Ed61cb2763", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x417fc1038b2AF553D65F4fF2839efE9f93Ec1eac", + "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -437,7 +438,7 @@ "address": "0x0459c841b02Aee8730730C737582c53B20a27288" }, "hardhat": { - "address": "0x0459c841b02Aee8730730C737582c53B20a27288" + "address": "0x2530ce07D254eA185E8e0bCC37a39e2FbA3bE548" } }, "WalletBalanceProvider": { @@ -446,11 +447,11 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xf896A27CDd4E3bC101aCEa86cc1cE6b7C91AEFA1", + "address": "0x06C312C74F047f6009678239ada37BCE7bDC7DDb", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x2530ce07D254eA185E8e0bCC37a39e2FbA3bE548", + "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -460,7 +461,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", + "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -470,7 +471,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", + "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -480,7 +481,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", + "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -489,6 +490,10 @@ "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, + "kovan": { + "address": "0x132D4cdC59981AE25De7F67b17160d78b462d199", + "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" + }, "hardhat": { "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" @@ -500,7 +505,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", + "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -510,7 +515,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", + "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -560,7 +565,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", + "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -570,7 +575,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", + "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -583,5 +588,701 @@ "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } + }, + "LendingPoolImpl": { + "kovan": { + "address": "0x6152D1d883F4C5dA18B47FE45e6eB2Ee79339E78" + }, + "hardhat": { + "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd" + } + }, + "LendingPoolConfiguratorImpl": { + "kovan": { + "address": "0x46c410d5636dF430Ff1a7DDff7683d6CfdBF4A09" + }, + "hardhat": { + "address": "0x1750499D05Ed1674d822430FB960d5F6731fDf64" + } + }, + "LendingPoolCollateralManagerImpl": { + "kovan": { + "address": "0x999ce4Ed17B90A1421f1D6b8891D87Ed61cb2763" + }, + "hardhat": { + "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4" + } + }, + "stableDebtAAVE": { + "kovan": { + "address": "0xc206d99A916A45bAa74663C38F063C5f16d566bb" + }, + "hardhat": { + "address": "0xcFB79d2c986Ca61Dbd288f80108b9e8C4cC6522b" + } + }, + "variableDebtAAVE": { + "kovan": { + "address": "0xCBd4194aB034AcD234400F742Bf3093b917aa581" + }, + "hardhat": { + "address": "0x1073981e3D3Af966a1137a3460dB881AAED7ae7a" + } + }, + "stableDebtBAT": { + "kovan": { + "address": "0x2Af9Ce7274Ca7084abbf0Db313aEFA289D361A12" + }, + "hardhat": { + "address": "0x4c90c5Fa9C907F2C993E66446E022260e2AfC8d1" + } + }, + "variableDebtBAT": { + "kovan": { + "address": "0x2962aCbeDa9d1A258E1cBb99A6435A3D2F1af5eE" + }, + "hardhat": { + "address": "0x86BAB8904c2969DE5EF732F8BC1D805C1aD56ddD" + } + }, + "stableDebtBUSD": { + "kovan": { + "address": "0x58704aB618678c58a11e86f1cf7b3ddACB659114" + }, + "hardhat": { + "address": "0xa279C092B779bD051DA5333978e30647501AA958" + } + }, + "variableDebtBUSD": { + "kovan": { + "address": "0x3903DB7B363A1C0B5272a53cA3B27d9D7759DE53" + }, + "hardhat": { + "address": "0xeB24f8Dff752f099AA106207b8f49818ca78D02e" + } + }, + "stableDebtDAI": { + "kovan": { + "address": "0xe3CD1bbB9041b8c32D1ec96210842Ee1d91872B4" + }, + "hardhat": { + "address": "0x7cc0483c098d4e36f2f0AF72a7B13E40E13cd613" + } + }, + "variableDebtDAI": { + "kovan": { + "address": "0x6207fdDba94b932A73f02a988A760BBd4d942152" + }, + "hardhat": { + "address": "0x38E82417A3b37f7faA75d2DD6260d5C24f529e1e" + } + }, + "aAAVE": { + "kovan": { + "address": "0x84145b267060bf9eE8FCA80324498A7444c8e821" + }, + "hardhat": { + "address": "0x6e5d1a9C405DF46a8503893DBa99c3af5Dc1FB5A" + } + }, + "strategyAAVE": { + "kovan": { + "address": "0x367356225e3BFA34c1cb447CFCdEE7a2D2dB38B5" + }, + "hardhat": { + "address": "0xCDfa18cdFEFCa96D6c79628c6ef941201b63faE4" + } + }, + "aBAT": { + "kovan": { + "address": "0x2490F90399e169381DF8c78F81aC635f4be0d8A3" + }, + "hardhat": { + "address": "0xCaA841b61FfEf4017209311f2B0B2e2f88eBA3bc" + } + }, + "strategyBAT": { + "kovan": { + "address": "0xac86Db376b8255d8FD8e41B092535875471eE311" + }, + "hardhat": { + "address": "0x8225B75F6eed9415D3FEABAa5B53628c6c7D29E2" + } + }, + "aBUSD": { + "kovan": { + "address": "0x6645315FA490C24e7969439EeF4c143ce69B3035" + }, + "hardhat": { + "address": "0x7EebA31C65BCceBF0F2ef6eFf9edf170De96A139" + } + }, + "strategyBUSD": { + "kovan": { + "address": "0xf4F7F30a34FDdB1Fd5B166CF121E2786a62B96Aa" + }, + "hardhat": { + "address": "0x66D0d53519B4A06f007A2Da43599EB844f6F4a7e" + } + }, + "aDAI": { + "kovan": { + "address": "0xb1967F5b6e65705ACF985437f5743a63eDa20F73" + }, + "hardhat": { + "address": "0xf72805fA3E8Bd360bCBA4d069FC3B882001bB017" + } + }, + "strategyDAI": { + "kovan": { + "address": "0x0ffeB139529D3DA091F8239712D25eab404C4421" + }, + "hardhat": { + "address": "0xB79EcFC3ea936e0e904DA3190CD1C8b8cc5F99B5" + } + }, + "stableDebtENJ": { + "kovan": { + "address": "0x59FF56F1bE382464468637e59c5Ae57398B143cF" + }, + "hardhat": { + "address": "0xFE6c73d2880c7F5D2CDfe495C500AF94fECd09E9" + } + }, + "variableDebtENJ": { + "kovan": { + "address": "0xb6DA3a57ea0A5b3C4f1926E9238c6F34b5B61eca" + }, + "hardhat": { + "address": "0x1890c00253FbD4130A4191CDA13e443b8708DEAF" + } + }, + "stableDebtKNC": { + "kovan": { + "address": "0x813863F06b228DAC48ed2E861a3c07eD10e8D2F0" + }, + "hardhat": { + "address": "0xfdAA87AfAF7F617F84480eDc705d8Fd4B78EDEcB" + } + }, + "variableDebtKNC": { + "kovan": { + "address": "0x8B08B2678D105Bf32F8F5A2013382773b2b24733" + }, + "hardhat": { + "address": "0x8A420528eC19177Deb9f1F0e2965964018f896c7" + } + }, + "stableDebtLINK": { + "kovan": { + "address": "0x86A28c4B9Bc2BFc03743b136405B63e6ceB4e963" + }, + "hardhat": { + "address": "0x8a8eB2979316f4F173A97ff91E0e1Dd106039ad4" + } + }, + "variableDebtLINK": { + "kovan": { + "address": "0x7A68F4382419D86c90cc069EF692BaaCfd3301Da" + }, + "hardhat": { + "address": "0xa0207cf18d773Bae5F5d816fc674fF8FFd0D6fE6" + } + }, + "stableDebtMANA": { + "kovan": { + "address": "0xb61c3B1BF95B78eCC327ddcd614ba96FEe8127b0" + }, + "hardhat": { + "address": "0xE5107B38FFB21AD61185785816559f8B3aA54Ac5" + } + }, + "variableDebtMANA": { + "kovan": { + "address": "0x196143A06206c5d47394c114ad5318b85CAC2E88" + }, + "hardhat": { + "address": "0x1259DA780FF797C1a11d534b0BaC534eD2b3F109" + } + }, + "aENJ": { + "kovan": { + "address": "0xF2F9f31FFB0f8d43974B05Bb560f093b441F5B1b" + }, + "hardhat": { + "address": "0xa9DFb142061Ef496F48078d9eA39A2D992236D0f" + } + }, + "strategyENJ": { + "kovan": { + "address": "0x66d0B7Ccd0C9a76A831334e9fE8a71680DD0A9e2" + }, + "hardhat": { + "address": "0xaaE80234037A18Ee462b1727ed0621b54dFcEDA6" + } + }, + "aKNC": { + "kovan": { + "address": "0x5675D816D05cEF2bBF2737EbD55727549D4143e0" + }, + "hardhat": { + "address": "0x8076E5d426aa3B5C4c98570b3a9033EE67aFe849" + } + }, + "strategyKNC": { + "kovan": { + "address": "0x8C7d058c50b241dD01d6a6d4E2a10C6c78e21eB3" + }, + "hardhat": { + "address": "0x87809db6234f27E3AacDEb316c00DbFCA77B11B3" + } + }, + "aLINK": { + "kovan": { + "address": "0x729c933284e8226137cd8a5ec39bD20A9c4c49F9" + }, + "hardhat": { + "address": "0xe90Ad292698ddaE3Dc305Eb98Ff5FD7341c8a637" + } + }, + "strategyLINK": { + "kovan": { + "address": "0xB09a6AB9d32a576e73159083aFE9aBe14c29173E" + }, + "hardhat": { + "address": "0x436d1eE2EDa1F7a98f2418709d10465c98Ed3828" + } + }, + "aMANA": { + "kovan": { + "address": "0xB98571944af08b8698622Ab0A988c59738Cf2AB8" + }, + "hardhat": { + "address": "0x8599378fE42e4FB26Ad214FB1545076EB19b8b0f" + } + }, + "strategyMANA": { + "kovan": { + "address": "0xB44Ca018DB828f67C2BaFb6846AF12c5cCb92122" + }, + "hardhat": { + "address": "0x487E219628bb5227b2B490CaEE2E2b47ec06D204" + } + }, + "stableDebtMKR": { + "kovan": { + "address": "0x536FA5ACA31cA1FE60Ec8a54432bA8E08E86222E" + }, + "hardhat": { + "address": "0x3deF3E7577D5Ddf0ea10fB58730fECdA673711C8" + } + }, + "variableDebtMKR": { + "kovan": { + "address": "0x6BF5055Fe4312194723888875Ce73A9461510344" + }, + "hardhat": { + "address": "0x509B355B5d665a209e888B20B818e53fAdEb47B7" + } + }, + "stableDebtREN": { + "kovan": { + "address": "0x2372E7a3d03e18F6ece2FDcb453c03e609134842" + }, + "hardhat": { + "address": "0x2A7C4a4D6b7db3beF0e277D950192c421aF4BD69" + } + }, + "variableDebtREN": { + "kovan": { + "address": "0x89C3b25C3C4d7f7Fd25B8cCe1De60Af835696C1B" + }, + "hardhat": { + "address": "0x5d1B59460fa295F6B4DEB74C74F4D11f4de60517" + } + }, + "stableDebtREP": { + "kovan": { + "address": "0x9ED2D2d415A262487D7f0a3Ec62E8467fd3CF278" + }, + "hardhat": { + "address": "0x80288A583c216fB0F6a7ccA1Fbc22d7727E2135a" + } + }, + "variableDebtREP": { + "kovan": { + "address": "0xe1333768d0209078254215A131d49E3dE36F4617" + }, + "hardhat": { + "address": "0xd7E287c1B79c7DA0F6fF7cdEA1026f1223c24F8a" + } + }, + "stableDebtSNX": { + "kovan": { + "address": "0xB14dbC77a03703074ed8a95f288413985f996b99" + }, + "hardhat": { + "address": "0x0Aa250b8A76d9228Cc7609013cc77c500Ee802E7" + } + }, + "variableDebtSNX": { + "kovan": { + "address": "0x77E31F2CDC45921156df5288D4dB20D3A5A915f2" + }, + "hardhat": { + "address": "0xf45700a9EAD19BFA6770802E3807E3eE37E8E492" + } + }, + "aMKR": { + "kovan": { + "address": "0xd87c0D428f89D54176808A3e78632c90C44fF5a5" + }, + "hardhat": { + "address": "0x05EDF38bB3D948E96745f39072d59dCc915194Dd" + } + }, + "strategyMKR": { + "kovan": { + "address": "0x349E1B2e94b600Dd09817924207E50A6660fAF2B" + }, + "hardhat": { + "address": "0x90D5cff61508785557eaA45DeED1297809F49371" + } + }, + "aREN": { + "kovan": { + "address": "0x9410999dFA3527317f0Ae3b5D2A54c213A48f9d1" + }, + "hardhat": { + "address": "0xB436Db1757e0c474DaF67666BC35F5fF7062541D" + } + }, + "strategyREN": { + "kovan": { + "address": "0x192638591E5Bb456498E380cf91f456Fef21C4b4" + }, + "hardhat": { + "address": "0x26eC70DcA80E8dBDaAcBff415aCdcF791C89CEBe" + } + }, + "aREP": { + "kovan": { + "address": "0x8C94FE9CE952738C48799326E63294626e1A3C7c" + }, + "hardhat": { + "address": "0xfcD974Cec976c536745bBB30e6C7E083a1Ab82EC" + } + }, + "strategyREP": { + "kovan": { + "address": "0x1D2F67F9bb6db702067Fbb0D400c864a1ffC5594" + }, + "hardhat": { + "address": "0x0E7f0c6Bf3bA63A28e1EFdDb7F3186A24b90566D" + } + }, + "aSNX": { + "kovan": { + "address": "0x2473e6Ed1F9cbcc3141eB04AEd432BaAB575fDD1" + }, + "hardhat": { + "address": "0x21FA83fB5d14301B53Efc6e44C565C80063d1c50" + } + }, + "strategySNX": { + "kovan": { + "address": "0x75cb1cEB23956D20b94fF63ec9dB0990E5920A91" + }, + "hardhat": { + "address": "0x5806cCA75C8fEf151881d93E7e81EB103F23fb7b" + } + }, + "stableDebtSUSD": { + "kovan": { + "address": "0xD59F6350A3a75cfa09Df8A182BF55be37f8A8840" + }, + "hardhat": { + "address": "0xDfD96D3cac8b157176292c547A61eD7586713527" + } + }, + "variableDebtSUSD": { + "kovan": { + "address": "0xcd8b423809eb2565f0e0f2d0435dFBAdcBBdCF18" + }, + "hardhat": { + "address": "0xcc94Ce18B9a7522d12675cA3fFC1A862Ac0373C1" + } + }, + "stableDebtTUSD": { + "kovan": { + "address": "0xA3b22b35DAee9F2E73F2A05eF57799B821513930" + }, + "hardhat": { + "address": "0x2C4ec78AD3Ff19F35e0dbF35837490C4f7b4224E" + } + }, + "variableDebtTUSD": { + "kovan": { + "address": "0x648663CD12F9BCde674c18a1F04A455e23aFc6b3" + }, + "hardhat": { + "address": "0xC9C2c855fA6EAFc5780B661b2CD1c8985c45D720" + } + }, + "stableDebtUNI": { + "kovan": { + "address": "0x30E2aBE48E78646347C3Cf8C437AE965AB6e9303" + }, + "hardhat": { + "address": "0x1a2f37C5Ed6bEA450Ac31E10ED682994C7C77835" + } + }, + "variableDebtUNI": { + "kovan": { + "address": "0x83028921E12c9adB6c7bBa1d6872C9e771bbEC20" + }, + "hardhat": { + "address": "0x83D129a2efFa0ba0d5B09f7CdfBEaDE1F847201E" + } + }, + "stableDebtUSDC": { + "kovan": { + "address": "0xe86554cd90D2d8BF7fd5F3931F833e7c1604CbCE" + }, + "hardhat": { + "address": "0xBb78BcaB8e39C38C6E019fe49E43b2591FAa6a58" + } + }, + "variableDebtUSDC": { + "kovan": { + "address": "0x5d4d415f627a10b20f5B3E8A1bbB4D3190761cE0" + }, + "hardhat": { + "address": "0xF5B3b70cb53852617B1fde19242bED043A885B4B" + } + }, + "aSUSD": { + "kovan": { + "address": "0x6a179aD153474df2af72b963145C1310727F65a7" + }, + "hardhat": { + "address": "0x4bb47D17F31181c8BE088CE21574B4e973212C39" + } + }, + "strategySUSD": { + "kovan": { + "address": "0x570114BcC09d440A7973e406A5c1b55C394c90aD" + }, + "hardhat": { + "address": "0x632a0Cf1e008011CC3185c9989205aa29BF267Df" + } + }, + "aTUSD": { + "kovan": { + "address": "0x0290a0b6B5D249fD98F31Ae887F6d5B4d6C4A56F" + }, + "hardhat": { + "address": "0x2A3CcaB4Fb2A3B34f6A819Cfc50918fe96D64122" + } + }, + "strategyTUSD": { + "kovan": { + "address": "0x9686D4f25eB0E4E72d2Eef22c66a3E1d9a42aca2" + }, + "hardhat": { + "address": "0x8B151819355Bfb7dE62e5b1D7580F43B34ed86e8" + } + }, + "aUNI": { + "kovan": { + "address": "0x3414b75532c400fb983a9fA22d71Cb45A05ADd2c" + }, + "hardhat": { + "address": "0x388e76350476e23A80eA6403B525aDa86ed7af6E" + } + }, + "strategyUNI": { + "kovan": { + "address": "0x9A01E6f57863bb03f7ED2ebad57123476e450FA9" + }, + "hardhat": { + "address": "0xf86115c55192beb063C4c494E2C9CFB990235ecF" + } + }, + "aUSDC": { + "kovan": { + "address": "0xB98DA540268F26Eb3A328F6c183BB3A5dCb1943b" + }, + "hardhat": { + "address": "0xa8d4DF7C220903a4018C3A81BEc702fb54623bd5" + } + }, + "strategyUSDC": { + "kovan": { + "address": "0xF727D07a89C98A5296CcCa71cE3Cda4f027965a9" + }, + "hardhat": { + "address": "0x936b5f546a6405012AC1DC4713f29B7CE43Fb4A2" + } + }, + "stableDebtUSDT": { + "kovan": { + "address": "0xc6b875BAec3472520da7c9755E2bFF98a1DbB89F" + }, + "hardhat": { + "address": "0x47167e26421017FD2a619D99Cf747b5eB58371B2" + } + }, + "variableDebtUSDT": { + "kovan": { + "address": "0x935626db98525589969745e5edc2C9256E380e17" + }, + "hardhat": { + "address": "0xBfd65BbF3fbF0bFB0f0053e092EB690904eC6876" + } + }, + "stableDebtWBTC": { + "kovan": { + "address": "0xD5f7F2A4175B40cbdc53c952103AB427656D9C81" + }, + "hardhat": { + "address": "0xae18C8d1A389E005faBf3234f5F81C35561c1811" + } + }, + "variableDebtWBTC": { + "kovan": { + "address": "0xf11b889cB033a51391181f0180A27489484F832c" + }, + "hardhat": { + "address": "0x7B3CAbCa23FafF9f02382Bc5A7BB73D46c2BE1ee" + } + }, + "stableDebtWETH": { + "kovan": { + "address": "0x06Df93951238B7aBeCBDceE767bF76f0119Ef6dd" + }, + "hardhat": { + "address": "0x1A06De035FA3e4339f1a41C9008Ed6ba6c8f2a15" + } + }, + "variableDebtWETH": { + "kovan": { + "address": "0x920e55564a59967FB7A9cbB52D806FcF9093fda9" + }, + "hardhat": { + "address": "0x61641145904737b907B4e31DBdAd829B606eB111" + } + }, + "stableDebtYFI": { + "kovan": { + "address": "0xFa29EA4a56192B3435D1B44c06c105d6A68934eb" + }, + "hardhat": { + "address": "0x3049AA46A60B4253d6Cf122a25bBd26a0CCb6CAd" + } + }, + "variableDebtYFI": { + "kovan": { + "address": "0x6888B4E246af31Abd68b8809C559dBAe005F3f8C" + }, + "hardhat": { + "address": "0x1Af371fA93aFAB4F461b6f978E7918B79510896A" + } + }, + "aUSDT": { + "kovan": { + "address": "0xcC43E5f28B99359A91241C3C7724329752959315" + }, + "hardhat": { + "address": "0x6A45383E16554222D9AFf39c4deAd7EF598ddb95" + } + }, + "strategyUSDT": { + "kovan": { + "address": "0x258B11Fe8840465aB532672Cae7552E9b9164868" + }, + "hardhat": { + "address": "0x08fd990609A0Ed943858a7493c7105E2CC784784" + } + }, + "aWBTC": { + "kovan": { + "address": "0x5Df7c6D2bC373B5D4401A5Fb53c2ca0c5D54f3D9" + }, + "hardhat": { + "address": "0xEDE8C583A3fB6DcfC1a991E5B1F9C1b0b29ca60d" + } + }, + "strategyWBTC": { + "kovan": { + "address": "0x9499FD7ca03BC886D9D5206Eb13ef49aFAd762D9" + }, + "hardhat": { + "address": "0x763b103B7EFEbb21Acc2b50b134681E0b5ecB247" + } + }, + "aWETH": { + "kovan": { + "address": "0xC304Ee9c505e4Aa890E4738df1cd51eF344AE1af" + }, + "hardhat": { + "address": "0x24aAB62Ae5595aACae2A0fC10aA31006Cb7dC4ef" + } + }, + "strategyWETH": { + "kovan": { + "address": "0x6dcb41D1EA0e01d5b411B51459F14c8DEe0271B1" + }, + "hardhat": { + "address": "0x75e2e836409aF032Fc182F2e9D6212336E2E7026" + } + }, + "aYFI": { + "kovan": { + "address": "0xb88b11E148741c7182e3dF7f50f445174BFA6C80" + }, + "hardhat": { + "address": "0xE4b29Db05C1A3749d085E9eF41dC2378eE530dF0" + } + }, + "strategyYFI": { + "kovan": { + "address": "0x0bDd002c01D54129ef2D258Ce39fEeC63E37d0DF" + }, + "hardhat": { + "address": "0x8c82e998506DCF9ef46518182DaF18ae962d4b3C" + } + }, + "stableDebtZRX": { + "kovan": { + "address": "0x76309814279AbD6bfCA3722Db8dEC502F98012E1" + }, + "hardhat": { + "address": "0x929ef1D4eB03724462e59219506CbD5Bcf2Cce38" + } + }, + "variableDebtZRX": { + "kovan": { + "address": "0x818215a596C8Cc8D27A4dC76c12e8A138570ed9B" + }, + "hardhat": { + "address": "0xDf5E00D37C010cE5FA334234c8E391F82e90fA2e" + } + }, + "aZRX": { + "kovan": { + "address": "0x66Bf0A6886AC7024015C8020B0aFEdacD41b60c3" + }, + "hardhat": { + "address": "0x255AE9d92694fE823D099b42ff8088770B700029" + } + }, + "strategyZRX": { + "kovan": { + "address": "0xC0499607b25dd626DF59343d7fCF246E4D875136" + }, + "hardhat": { + "address": "0xaDF23b1cAa6a7B3b077c432794FfF80A4b935cdF" + } } } diff --git a/hardhat.config.ts b/hardhat.config.ts index 76c6e3c9..c30336fb 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -8,13 +8,14 @@ import {BUIDLEREVM_CHAINID, COVERAGE_CHAINID} from './helpers/buidler-constants' import '@nomiclabs/hardhat-ethers'; import '@nomiclabs/hardhat-waffle'; -import '@nomiclabs/hardhat-etherscan'; +import 'temp-hardhat-etherscan'; import 'hardhat-gas-reporter'; import 'hardhat-typechain'; const SKIP_LOAD = process.env.SKIP_LOAD === 'true'; const DEFAULT_BLOCK_GAS_LIMIT = 12450000; -const DEFAULT_GAS_PRICE = 10; +const DEFAULT_GAS_MUL = 2; +const DEFAULT_GAS_PRICE = 2000000000; const HARDFORK = 'istanbul'; const INFURA_KEY = process.env.INFURA_KEY || ''; const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || ''; @@ -40,7 +41,8 @@ const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number url: `https://${networkName}.infura.io/v3/${INFURA_KEY}`, hardfork: HARDFORK, blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT, - gasMultiplier: DEFAULT_GAS_PRICE, + gasMultiplier: DEFAULT_GAS_MUL, + gasPrice: DEFAULT_GAS_PRICE, chainId: networkId, accounts: { mnemonic: MNEMONIC, diff --git a/helpers/configuration.ts b/helpers/configuration.ts index 25e47c62..68c2db4e 100644 --- a/helpers/configuration.ts +++ b/helpers/configuration.ts @@ -53,7 +53,9 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets { +export const getGenesisPoolAdmin = async ( + config: ICommonConfiguration +): Promise => { const currentNetwork = DRE.network.name; const targetAddress = getParamPerNetwork(config.PoolAdmin, currentNetwork); if (targetAddress) { @@ -66,7 +68,9 @@ export const getGenesisPoolAdmin = async (config: ICommonConfiguration) => { return addressList[addressIndex]; }; -export const getEmergencyAdmin = async (config: ICommonConfiguration) => { +export const getEmergencyAdmin = async ( + config: ICommonConfiguration +): Promise => { const currentNetwork = DRE.network.name; const targetAddress = getParamPerNetwork(config.EmergencyAdmin, currentNetwork); if (targetAddress) { diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index c04284b8..7674f913 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -18,7 +18,7 @@ import {getReservesConfigByPool} from './configuration'; import {getFirstSigner} from './contracts-getters'; import {ZERO_ADDRESS} from './constants'; import { - AaveProtocolTestHelpersFactory, + AaveProtocolDataProviderFactory, ATokenFactory, ATokensAndRatesHelperFactory, ChainlinkProxyPriceProviderFactory, @@ -51,7 +51,12 @@ import { Weth9MockedFactory, WethGatewayFactory, } from '../types'; -import {withSaveAndVerify, registerContractInJsonDb, linkBytecode} from './contracts-helpers'; +import { + withSaveAndVerify, + registerContractInJsonDb, + linkBytecode, + insertContractAddressInDb, +} from './contracts-helpers'; import {StableAndVariableTokensHelperFactory} from '../types/StableAndVariableTokensHelperFactory'; import {MintableDelegationErc20} from '../types/MintableDelegationErc20'; import {readArtifact as buidlerReadArtifact} from '@nomiclabs/buidler/plugins'; @@ -79,13 +84,21 @@ export const deployLendingPoolAddressesProviderRegistry = async (verify?: boolea verify ); -export const deployLendingPoolConfigurator = async (verify?: boolean) => - withSaveAndVerify( - await new LendingPoolConfiguratorFactory(await getFirstSigner()).deploy(), +export const deployLendingPoolConfigurator = async (verify?: boolean) => { + const lendingPoolConfiguratorImpl = await new LendingPoolConfiguratorFactory( + await getFirstSigner() + ).deploy(); + await insertContractAddressInDb( + eContractid.LendingPoolConfiguratorImpl, + lendingPoolConfiguratorImpl.address + ); + return withSaveAndVerify( + lendingPoolConfiguratorImpl, eContractid.LendingPoolConfigurator, [], verify ); +}; export const deployReserveLogicLibrary = async (verify?: boolean) => withSaveAndVerify( @@ -159,12 +172,9 @@ export const deployAaveLibraries = async ( export const deployLendingPool = async (verify?: boolean) => { const libraries = await deployAaveLibraries(verify); - return withSaveAndVerify( - await new LendingPoolFactory(libraries, await getFirstSigner()).deploy(), - eContractid.LendingPool, - [], - verify - ); + const lendingPoolImpl = await new LendingPoolFactory(libraries, await getFirstSigner()).deploy(); + await insertContractAddressInDb(eContractid.LendingPoolImpl, lendingPoolImpl.address); + return withSaveAndVerify(lendingPoolImpl, eContractid.LendingPool, [], verify); }; export const deployPriceOracle = async (verify?: boolean) => @@ -203,8 +213,15 @@ export const deployChainlinkProxyPriceProvider = async ( ); export const deployLendingPoolCollateralManager = async (verify?: boolean) => { + const collateralManagerImpl = await new LendingPoolCollateralManagerFactory( + await getFirstSigner() + ).deploy(); + await insertContractAddressInDb( + eContractid.LendingPoolCollateralManagerImpl, + collateralManagerImpl.address + ); return withSaveAndVerify( - await new LendingPoolCollateralManagerFactory(await getFirstSigner()).deploy(), + collateralManagerImpl, eContractid.LendingPoolCollateralManager, [], verify @@ -241,13 +258,13 @@ export const deployWalletBalancerProvider = async ( verify ); -export const deployAaveProtocolTestHelpers = async ( +export const deployAaveProtocolDataProvider = async ( addressesProvider: tEthereumAddress, verify?: boolean ) => withSaveAndVerify( - await new AaveProtocolTestHelpersFactory(await getFirstSigner()).deploy(addressesProvider), - eContractid.AaveProtocolTestHelpers, + await new AaveProtocolDataProviderFactory(await getFirstSigner()).deploy(addressesProvider), + eContractid.AaveProtocolDataProvider, [addressesProvider], verify ); diff --git a/helpers/contracts-getters.ts b/helpers/contracts-getters.ts index 03b705ba..c42b45b1 100644 --- a/helpers/contracts-getters.ts +++ b/helpers/contracts-getters.ts @@ -1,11 +1,13 @@ import { - AaveProtocolTestHelpersFactory, + AaveProtocolDataProviderFactory, ATokenFactory, ATokensAndRatesHelperFactory, DefaultReserveInterestRateStrategyFactory, GenericLogicFactory, + InitializableAdminUpgradeabilityProxyFactory, LendingPoolAddressesProviderFactory, LendingPoolAddressesProviderRegistryFactory, + LendingPoolCollateralManagerFactory, LendingPoolConfiguratorFactory, LendingPoolFactory, LendingRateOracleFactory, @@ -23,11 +25,13 @@ import { UniswapLiquiditySwapAdapterFactory, UniswapRepayAdapterFactory, VariableDebtTokenFactory, + WalletBalanceProviderFactory, Weth9Factory, Weth9MockedFactory, WethGatewayFactory, } from '../types'; import {Ierc20DetailedFactory} from '../types/Ierc20DetailedFactory'; +import {UpgradeabilityProxy} from '../types/UpgradeabilityProxy'; import {MockTokenMap} from './contracts-helpers'; import {DRE, getDb} from './misc-utils'; import {eContractid, PoolConfiguration, tEthereumAddress, TokenContractId} from './types'; @@ -99,10 +103,10 @@ export const getIErc20Detailed = async (address: tEthereumAddress) => await getFirstSigner() ); -export const getAaveProtocolTestHelpers = async (address?: tEthereumAddress) => - await AaveProtocolTestHelpersFactory.connect( +export const getAaveProtocolDataProvider = async (address?: tEthereumAddress) => + await AaveProtocolDataProviderFactory.connect( address || - (await getDb().get(`${eContractid.AaveProtocolTestHelpers}.${DRE.network.name}`).value()) + (await getDb().get(`${eContractid.AaveProtocolDataProvider}.${DRE.network.name}`).value()) .address, await getFirstSigner() ); @@ -275,6 +279,54 @@ export const getSelfdestructTransferMock = async (address?: tEthereumAddress) => await getFirstSigner() ); +export const getProxy = async (address: tEthereumAddress) => + await InitializableAdminUpgradeabilityProxyFactory.connect(address, await getFirstSigner()); + +export const getLendingPoolImpl = async (address?: tEthereumAddress) => + await LendingPoolFactory.connect( + address || + (await getDb().get(`${eContractid.LendingPoolImpl}.${DRE.network.name}`).value()).address, + await getFirstSigner() + ); + +export const getLendingPoolConfiguratorImpl = async (address?: tEthereumAddress) => + await LendingPoolConfiguratorFactory.connect( + address || + (await getDb().get(`${eContractid.LendingPoolConfiguratorImpl}.${DRE.network.name}`).value()) + .address, + await getFirstSigner() + ); + +export const getLendingPoolCollateralManagerImpl = async (address?: tEthereumAddress) => + await LendingPoolCollateralManagerFactory.connect( + address || + ( + await getDb() + .get(`${eContractid.LendingPoolCollateralManagerImpl}.${DRE.network.name}`) + .value() + ).address, + await getFirstSigner() + ); + +export const getWalletProvider = async (address?: tEthereumAddress) => + await WalletBalanceProviderFactory.connect( + address || + (await getDb().get(`${eContractid.WalletBalanceProvider}.${DRE.network.name}`).value()) + .address, + await getFirstSigner() + ); + +export const getLendingPoolCollateralManager = async (address?: tEthereumAddress) => + await LendingPoolCollateralManagerFactory.connect( + address || + (await getDb().get(`${eContractid.LendingPoolCollateralManager}.${DRE.network.name}`).value()) + .address, + await getFirstSigner() + ); + +export const getAddressById = async (id: string) => + (await getDb().get(`${id}.${DRE.network.name}`).value()).address; + export const getMockUniswapRouter = async (address?: tEthereumAddress) => await MockUniswapV2Router02Factory.connect( address || diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 1b968922..1425485f 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -49,6 +49,13 @@ export const insertContractAddressInDb = async (id: eContractid, address: tEther }) .write(); +export const rawInsertContractAddressInDb = async (id: string, address: tEthereumAddress) => + await getDb() + .set(`${id}.${DRE.network.name}`, { + address, + }) + .write(); + export const getEthersSigners = async (): Promise => await Promise.all(await DRE.ethers.getSigners()); @@ -83,7 +90,7 @@ export const withSaveAndVerify = async ( await waitForTx(instance.deployTransaction); await registerContractInJsonDb(id, instance); if (verify) { - await verifyContract(id, instance.address, args); + await verifyContract(instance.address, args); } return instance; }; diff --git a/helpers/etherscan-verification.ts b/helpers/etherscan-verification.ts index 02fe6c52..902cb2fe 100644 --- a/helpers/etherscan-verification.ts +++ b/helpers/etherscan-verification.ts @@ -1,36 +1,26 @@ import {exit} from 'process'; import fs from 'fs'; -import globby from 'globby'; import {file} from 'tmp-promise'; import {DRE} from './misc-utils'; -const listSolidityFiles = (dir: string) => globby(`${dir}/**/*.sol`); - const fatalErrors = [ `The address provided as argument contains a contract, but its bytecode`, `Daily limit of 100 source code submissions reached`, + `has no bytecode. Is the contract deployed to this network`, + `The constructor for`, ]; +const okErrors = [`Contract source code already verified`]; + +const unableVerifyError = 'Fail - Unable to verify'; + export const SUPPORTED_ETHERSCAN_NETWORKS = ['main', 'ropsten', 'kovan']; -export const getEtherscanPath = async (contractName: string) => { - const paths = await listSolidityFiles(DRE.config.paths.sources); - const path = paths.find((p) => p.includes(contractName)); - if (!path) { - throw new Error( - `Contract path not found for ${contractName}. Check if smart contract file is equal to contractName input.` - ); - } - - return `${path}:${contractName}`; -}; - function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } export const verifyContract = async ( - contractName: string, address: string, constructorArguments: (string | string[])[], libraries?: string @@ -45,14 +35,13 @@ export const verifyContract = async ( `Current network ${currentNetwork} not supported. Please change to one of the next networks: ${SUPPORTED_ETHERSCAN_NETWORKS.toString()}` ); } - const etherscanPath = await getEtherscanPath(contractName); try { console.log( '[ETHERSCAN][WARNING] Delaying Etherscan verification due their API can not find newly deployed contracts' ); const msDelay = 3000; - const times = 15; + const times = 4; // Write a temporal file to host complex parameters for buidler-etherscan https://github.com/nomiclabs/buidler/tree/development/packages/buidler-etherscan#complex-arguments const {fd, path, cleanup} = await file({ prefix: 'verify-params-', @@ -61,10 +50,10 @@ export const verifyContract = async ( fs.writeSync(fd, `module.exports = ${JSON.stringify([...constructorArguments])};`); const params = { - contractName: etherscanPath, address: address, libraries, constructorArgs: path, + relatedSources: true, }; await runTaskWithRetry('verify', params, times, msDelay, cleanup); } catch (error) {} @@ -81,7 +70,12 @@ export const runTaskWithRetry = async ( await delay(msDelay); try { - if (times) { + if (times > 1) { + await DRE.run(task, params); + cleanup(); + } else if (times === 1) { + console.log('[ETHERSCAN][WARNING] Trying to verify via uploading all sources.'); + delete params.relatedSources; await DRE.run(task, params); cleanup(); } else { @@ -92,16 +86,26 @@ export const runTaskWithRetry = async ( } } catch (error) { counter--; - console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`); - console.error('[ETHERSCAN][[ERROR]', error.message); - if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) { - console.error( - '[ETHERSCAN][[ERROR] Fatal error detected, skip retries and resume deployment.' - ); + if (okErrors.some((okReason) => error.message.includes(okReason))) { + console.info('[ETHERSCAN][INFO] Skipping due OK response: ', error.message); return; } + if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) { + console.error( + '[ETHERSCAN][ERROR] Fatal error detected, skip retries and resume deployment.', + error.message + ); + return; + } + console.error('[ETHERSCAN][ERROR]', error.message); + console.log(); + console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`); + if (error.message.includes(unableVerifyError)) { + console.log('[ETHERSCAN][WARNING] Trying to verify via uploading all sources.'); + delete params.relatedSources; + } await runTaskWithRetry(task, params, counter, msDelay, cleanup); } }; diff --git a/helpers/init-helpers.ts b/helpers/init-helpers.ts index c4aa3978..2391f26f 100644 --- a/helpers/init-helpers.ts +++ b/helpers/init-helpers.ts @@ -1,6 +1,6 @@ -import {iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types'; +import {eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types'; import {LendingPoolConfigurator} from '../types/LendingPoolConfigurator'; -import {AaveProtocolTestHelpers} from '../types/AaveProtocolTestHelpers'; +import {AaveProtocolDataProvider} from '../types/AaveProtocolDataProvider'; import { deployATokensAndRatesHelper, deployStableAndVariableTokensHelper, @@ -11,6 +11,7 @@ import { getLendingPoolAddressesProvider, getStableAndVariableTokensHelper, } from './contracts-getters'; +import {insertContractAddressInDb, rawInsertContractAddressInDb} from './contracts-helpers'; export const initReservesByHelper = async ( reservesParams: iMultiPoolsAssets, @@ -89,12 +90,15 @@ export const initReservesByHelper = async ( reservesDecimals.push(reserveDecimals); } - // Deploy stable and variable deployers + // Deploy stable and variable deployers and save implementations const tx1 = await waitForTx( await stableAndVariableDeployer.initDeployment(tokens, symbols, incentivesController) ); - - // Deploy atokens and rate strategies + tx1.events?.forEach((event, index) => { + rawInsertContractAddressInDb(`stableDebt${symbols[index]}`, event?.args?.stableToken); + rawInsertContractAddressInDb(`variableDebt${symbols[index]}`, event?.args?.variableToken); + }); + // Deploy atokens and rate strategies and save implementations const tx2 = await waitForTx( await atokenAndRatesDeployer.initDeployment( tokens, @@ -103,6 +107,11 @@ export const initReservesByHelper = async ( incentivesController ) ); + tx2.events?.forEach((event, index) => { + rawInsertContractAddressInDb(`a${symbols[index]}`, event?.args?.aToken); + rawInsertContractAddressInDb(`strategy${symbols[index]}`, event?.args?.strategy); + }); + console.log(` - Deployed aToken, DebtTokens and Strategy for: ${symbols.join(', ')} `); const stableTokens: string[] = tx1.events?.map((e) => e.args?.stableToken) || []; const variableTokens: string[] = tx1.events?.map((e) => e.args?.variableToken) || []; @@ -173,7 +182,7 @@ export const getPairsTokenAggregator = ( export const enableReservesToBorrowByHelper = async ( reservesParams: iMultiPoolsAssets, tokenAddresses: {[symbol: string]: tEthereumAddress}, - helpers: AaveProtocolTestHelpers, + helpers: AaveProtocolDataProvider, admin: tEthereumAddress ) => { const addressProvider = await getLendingPoolAddressesProvider(); @@ -240,7 +249,7 @@ export const enableReservesToBorrowByHelper = async ( export const enableReservesAsCollateralByHelper = async ( reservesParams: iMultiPoolsAssets, tokenAddresses: {[symbol: string]: tEthereumAddress}, - helpers: AaveProtocolTestHelpers, + helpers: AaveProtocolDataProvider, admin: tEthereumAddress ) => { const addressProvider = await getLendingPoolAddressesProvider(); diff --git a/helpers/types.ts b/helpers/types.ts index 7b24bc42..3b70574b 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -51,7 +51,7 @@ export enum eContractid { DelegationAwareAToken = 'DelegationAwareAToken', MockStableDebtToken = 'MockStableDebtToken', MockVariableDebtToken = 'MockVariableDebtToken', - AaveProtocolTestHelpers = 'AaveProtocolTestHelpers', + AaveProtocolDataProvider = 'AaveProtocolDataProvider', IERC20Detailed = 'IERC20Detailed', StableDebtToken = 'StableDebtToken', VariableDebtToken = 'VariableDebtToken', @@ -64,6 +64,9 @@ export enum eContractid { WETH = 'WETH', WETHMocked = 'WETHMocked', SelfdestructTransferMock = 'SelfdestructTransferMock', + LendingPoolImpl = 'LendingPoolImpl', + LendingPoolConfiguratorImpl = 'LendingPoolConfiguratorImpl', + LendingPoolCollateralManagerImpl = 'LendingPoolCollateralManagerImpl', MockUniswapV2Router02 = 'MockUniswapV2Router02', UniswapLiquiditySwapAdapter = 'UniswapLiquiditySwapAdapter', UniswapRepayAdapter = 'UniswapRepayAdapter', @@ -86,7 +89,7 @@ export enum ProtocolErrors { CALLER_NOT_POOL_ADMIN = '33', // 'The caller must be the pool admin' //contract specific errors - VL_AMOUNT_NOT_GREATER_THAN_0 = '1', // 'Amount must be greater than 0' + VL_INVALID_AMOUNT = '1', // 'Amount must be greater than 0' VL_NO_ACTIVE_RESERVE = '2', // 'Action requires an active reserve' VL_RESERVE_FROZEN = '3', // 'Action requires an unfrozen reserve' VL_CURRENT_AVAILABLE_LIQUIDITY_NOT_ENOUGH = '4', // 'The current liquidity is not enough' diff --git a/package-lock.json b/package-lock.json index 92853268..ca272b63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1115,253 +1115,6 @@ "integrity": "sha512-fIi6XP9PgKqwSNVcLDr6S5hvGlc21PendaLD5eGdXEXc9aYQ0OJX8Mk3evs+p78x7W9n9U3ZcKtTiGc1+YScDw==", "dev": true }, - "@nomiclabs/hardhat-etherscan": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.0.0.tgz", - "integrity": "sha512-bPFxhoyDmhbguhEk2Fco6flXmcV4Cca9V1qEi/hhrTJSxUQf52LcB5WbxLSCPl79oHFKvcRoKVmpK+CUkeYAHA==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.0.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", - "fs-extra": "^7.0.1", - "node-fetch": "^2.6.0", - "semver": "^6.3.0" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz", - "integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz", - "integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" - } - }, - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/base64": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz", - "integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/hash": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.6.tgz", - "integrity": "sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.6", - "@ethersproject/address": "^5.0.5", - "@ethersproject/bignumber": "^5.0.8", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.4", - "@ethersproject/strings": "^5.0.4" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/networks": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.4.tgz", - "integrity": "sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/strings": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz", - "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "@ethersproject/web": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.9.tgz", - "integrity": "sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw==", - "dev": true, - "requires": { - "@ethersproject/base64": "^5.0.3", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, "@nomiclabs/hardhat-waffle": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.0.tgz", @@ -3157,15 +2910,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "buidler-gas-reporter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/buidler-gas-reporter/-/buidler-gas-reporter-0.1.4.tgz", - "integrity": "sha512-objSu/tGggxKDmlpZViM9uEKRSo7vXxBsPv+vXegre1AWapJXQNfJPtBmrNvnT5Ixl8pecWSRXsfO95nJAn4yw==", - "dev": true, - "requires": { - "eth-gas-reporter": "^0.2.18" - } - }, "buidler-typechain": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buidler-typechain/-/buidler-typechain-0.1.1.tgz", @@ -4383,9 +4127,9 @@ } }, "eth-gas-reporter": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.18.tgz", - "integrity": "sha512-P6LQ1QmU9bqU4zmd01Ws/b2EWAD5rT771U0wyJ/c+fKE6RdE9ks8KzjdR1zjosV2uilMfqVTtrBrXveCOnaTyQ==", + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.19.tgz", + "integrity": "sha512-yQmbAa6O9/Yl/syNml2A0R+ZLQnJ9m9jogFXHzjMWVBMUVnAcEskOVyxaMYddkclZdYIMxE99tQy830C2jLsAQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.0.0-beta.146", @@ -4406,9 +4150,9 @@ }, "dependencies": { "@solidity-parser/parser": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.8.1.tgz", - "integrity": "sha512-DF7H6T8I4lo2IZOE2NZwt3631T8j1gjpQLjmvY2xBNK50c4ltslR4XPKwT6RkeSd4+xCAK0GHC/k7sbRDBE4Yw==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.8.2.tgz", + "integrity": "sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ==", "dev": true }, "elliptic": { @@ -5549,13 +5293,13 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { "version": "3.2.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { @@ -5564,7 +5308,7 @@ }, "bindings": { "version": "1.5.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "requires": { @@ -5573,7 +5317,7 @@ }, "bip66": { "version": "1.1.5", - "resolved": "", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", "dev": true, "requires": { @@ -5582,19 +5326,19 @@ }, "bn.js": { "version": "4.11.8", - "resolved": "", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, "brorand": { "version": "1.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, "browserify-aes": { "version": "1.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -5608,25 +5352,25 @@ }, "buffer-from": { "version": "1.1.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-xor": { "version": "1.0.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "camelcase": { "version": "5.3.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "cipher-base": { "version": "1.0.4", - "resolved": "", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { @@ -5636,7 +5380,7 @@ }, "cliui": { "version": "5.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { @@ -5647,7 +5391,7 @@ }, "color-convert": { "version": "1.9.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { @@ -5656,13 +5400,13 @@ }, "color-name": { "version": "1.1.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "create-hash": { "version": "1.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -5675,7 +5419,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -5689,7 +5433,7 @@ }, "cross-spawn": { "version": "6.0.5", - "resolved": "", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { @@ -5702,13 +5446,13 @@ }, "decamelize": { "version": "1.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "drbg.js": { "version": "1.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", "dev": true, "requires": { @@ -5719,7 +5463,7 @@ }, "elliptic": { "version": "6.5.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", "dev": true, "requires": { @@ -5734,13 +5478,13 @@ }, "emoji-regex": { "version": "7.0.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "end-of-stream": { "version": "1.4.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { @@ -5749,7 +5493,7 @@ }, "ethereumjs-util": { "version": "6.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", "dev": true, "requires": { @@ -5764,7 +5508,7 @@ }, "ethjs-util": { "version": "0.1.6", - "resolved": "", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, "requires": { @@ -5774,7 +5518,7 @@ }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { @@ -5784,7 +5528,7 @@ }, "execa": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { @@ -5799,13 +5543,13 @@ }, "file-uri-to-path": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true }, "find-up": { "version": "3.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { @@ -5814,13 +5558,13 @@ }, "get-caller-file": { "version": "2.0.5", - "resolved": "", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { "version": "4.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { @@ -5829,7 +5573,7 @@ }, "hash-base": { "version": "3.0.4", - "resolved": "", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { @@ -5839,7 +5583,7 @@ }, "hash.js": { "version": "1.1.7", - "resolved": "", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { @@ -5849,7 +5593,7 @@ }, "hmac-drbg": { "version": "1.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { @@ -5860,43 +5604,43 @@ }, "inherits": { "version": "2.0.4", - "resolved": "", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "invert-kv": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-hex-prefixed": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", "dev": true }, "is-stream": { "version": "1.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "isexe": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "keccak": { "version": "1.4.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", "dev": true, "requires": { @@ -5908,7 +5652,7 @@ }, "lcid": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { @@ -5917,7 +5661,7 @@ }, "locate-path": { "version": "3.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { @@ -5927,7 +5671,7 @@ }, "map-age-cleaner": { "version": "0.1.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { @@ -5936,7 +5680,7 @@ }, "md5.js": { "version": "1.3.5", - "resolved": "", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { @@ -5947,7 +5691,7 @@ }, "mem": { "version": "4.3.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { @@ -5958,37 +5702,37 @@ }, "mimic-fn": { "version": "2.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimalistic-assert": { "version": "1.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "nan": { "version": "2.14.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true }, "nice-try": { "version": "1.0.5", - "resolved": "", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "npm-run-path": { "version": "2.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { @@ -5997,7 +5741,7 @@ }, "once": { "version": "1.4.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { @@ -6006,7 +5750,7 @@ }, "os-locale": { "version": "3.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { @@ -6017,25 +5761,25 @@ }, "p-defer": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, "p-finally": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-is-promise": { "version": "2.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { "version": "2.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { @@ -6044,7 +5788,7 @@ }, "p-locate": { "version": "3.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { @@ -6053,25 +5797,25 @@ }, "p-try": { "version": "2.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "path-exists": { "version": "3.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-key": { "version": "2.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "pump": { "version": "3.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { @@ -6081,19 +5825,19 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "ripemd160": { "version": "2.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { @@ -6103,7 +5847,7 @@ }, "rlp": { "version": "2.2.3", - "resolved": "", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", "dev": true, "requires": { @@ -6113,13 +5857,13 @@ }, "safe-buffer": { "version": "5.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, "secp256k1": { "version": "3.7.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", "dev": true, "requires": { @@ -6135,19 +5879,19 @@ }, "semver": { "version": "5.7.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "set-blocking": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "sha.js": { "version": "2.4.11", - "resolved": "", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -6157,7 +5901,7 @@ }, "shebang-command": { "version": "1.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { @@ -6166,25 +5910,25 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.12", - "resolved": "", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { @@ -6194,7 +5938,7 @@ }, "string-width": { "version": "3.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { @@ -6205,7 +5949,7 @@ }, "strip-ansi": { "version": "5.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { @@ -6214,13 +5958,13 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-hex-prefix": { "version": "1.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", "dev": true, "requires": { @@ -6229,7 +5973,7 @@ }, "which": { "version": "1.3.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { @@ -6238,13 +5982,13 @@ }, "which-module": { "version": "2.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wrap-ansi": { "version": "5.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { @@ -6255,19 +5999,19 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "y18n": { "version": "4.0.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yargs": { "version": "13.2.4", - "resolved": "", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { @@ -6286,7 +6030,7 @@ }, "yargs-parser": { "version": "13.1.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { @@ -8067,9 +7811,9 @@ }, "dependencies": { "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "optional": true, "requires": { @@ -15353,9 +15097,9 @@ }, "dependencies": { "@types/node": { - "version": "12.12.53", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz", - "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ==", + "version": "12.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.3.tgz", + "integrity": "sha512-8Jduo8wvvwDzEVJCOvS/G6sgilOLvvhn1eMmK3TW8/T217O7u1jdrK6ImKLv80tVryaPSVeKu6sjDEiFjd4/eg==", "dev": true, "optional": true } @@ -16650,118 +16394,6 @@ "dev": true, "requires": { "eth-gas-reporter": "^0.2.19" - }, - "dependencies": { - "@solidity-parser/parser": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.8.1.tgz", - "integrity": "sha512-DF7H6T8I4lo2IZOE2NZwt3631T8j1gjpQLjmvY2xBNK50c4ltslR4XPKwT6RkeSd4+xCAK0GHC/k7sbRDBE4Yw==", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "eth-gas-reporter": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.19.tgz", - "integrity": "sha512-yQmbAa6O9/Yl/syNml2A0R+ZLQnJ9m9jogFXHzjMWVBMUVnAcEskOVyxaMYddkclZdYIMxE99tQy830C2jLsAQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.0.0-beta.146", - "@solidity-parser/parser": "^0.8.0", - "cli-table3": "^0.5.0", - "colors": "^1.1.2", - "ethereumjs-util": "6.2.0", - "ethers": "^4.0.40", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^7.1.1", - "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz", - "integrity": "sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^2.0.0", - "rlp": "^2.2.3", - "secp256k1": "^3.0.1" - } - }, - "ethers": { - "version": "4.0.48", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz", - "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==", - "dev": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.5.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", - "dev": true - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", - "dev": true - } } }, "hardhat-typechain": { @@ -16897,9 +16529,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.42.tgz", - "integrity": "sha512-HElxYF7C/MSkuvlaHB2c+82zhXiuO49Cq056Dol8AQuTph7oJtduo2n6J8rFa+YhJyNgQ/Lm20ZaxqD0vxU0+Q==", + "version": "10.17.44", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz", + "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw==", "dev": true } } @@ -20385,6 +20017,254 @@ } } }, + "temp-hardhat-etherscan": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/temp-hardhat-etherscan/-/temp-hardhat-etherscan-2.0.2.tgz", + "integrity": "sha512-q9+OMPXlsXZ+2fnF+Xmvv0J9vNJChwOXVGJIATiDJr7Qe8LzTwgs55C4l4NKMWPLe4PE9UjcQMVntRfXGTF9vA==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.0.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^5.0.2", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "node-fetch": "^2.6.0", + "semver": "^6.3.0" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", + "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/hash": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz", + "integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/networks": "^5.0.3", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/transactions": "^5.0.5", + "@ethersproject/web": "^5.0.6" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz", + "integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3" + } + }, + "@ethersproject/address": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", + "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/rlp": "^5.0.3", + "bn.js": "^4.4.0" + } + }, + "@ethersproject/base64": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz", + "integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.0.4" + } + }, + "@ethersproject/bignumber": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", + "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/logger": "^5.0.5", + "bn.js": "^4.4.0" + } + }, + "@ethersproject/bytes": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", + "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.0.5" + } + }, + "@ethersproject/constants": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", + "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.0.7" + } + }, + "@ethersproject/hash": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.6.tgz", + "integrity": "sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.0.6", + "@ethersproject/address": "^5.0.5", + "@ethersproject/bignumber": "^5.0.8", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.4", + "@ethersproject/strings": "^5.0.4" + } + }, + "@ethersproject/keccak256": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", + "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.0.4", + "js-sha3": "0.5.7" + } + }, + "@ethersproject/logger": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", + "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", + "dev": true + }, + "@ethersproject/networks": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.4.tgz", + "integrity": "sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.0.5" + } + }, + "@ethersproject/properties": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", + "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.0.5" + } + }, + "@ethersproject/rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", + "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/logger": "^5.0.5" + } + }, + "@ethersproject/signing-key": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", + "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "elliptic": "6.5.3" + } + }, + "@ethersproject/strings": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz", + "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/logger": "^5.0.5" + } + }, + "@ethersproject/transactions": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", + "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/rlp": "^5.0.3", + "@ethersproject/signing-key": "^5.0.4" + } + }, + "@ethersproject/web": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.9.tgz", + "integrity": "sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw==", + "dev": true, + "requires": { + "@ethersproject/base64": "^5.0.3", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" + } + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", + "dev": true + } + } + }, "test-value": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", @@ -20432,9 +20312,9 @@ }, "dependencies": { "@types/node": { - "version": "8.10.65", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.65.tgz", - "integrity": "sha512-xdcqtQl1g3p/49kmcj7ZixPWOcNHA1tYNz+uN0PJEcgtN6zywK74aacTnd3eFGPuBpD7kK8vowmMRkUt6jHU/Q==", + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", "dev": true } } diff --git a/package.json b/package.json index 2dd7138f..e3786fc7 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,10 @@ "print-contracts:kovan": "npm run hardhat:kovan -- print-contracts", "print-contracts:main": "npm run hardhat:main -- print-contracts", "print-contracts:ropsten": "npm run hardhat:main -- print-contracts", - "dev:deployUIProvider": "npm run buidler:kovan deploy-UiPoolDataProvider" + "dev:deployUIProvider": "npm run hardhat:kovan deploy-UiPoolDataProvider", + "kovan:verify": "npm run hardhat:kovan full:verify -- --all --verify --pool Aave", + "ropsten:verify": "npm run hardhat:ropsten full:verify -- --all --verify --pool Aave", + "mainnet:verify": "npm run hardhat:main full:verify -- --all --verify --pool Aave" }, "devDependencies": { "@nomiclabs/buidler": "^1.4.7", @@ -61,7 +64,6 @@ "@nomiclabs/buidler-etherscan": "^2.1.0", "@nomiclabs/buidler-waffle": "2.0.0", "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^2.0.0", "@nomiclabs/hardhat-waffle": "^2.0.0", "@openzeppelin/contracts": "3.1.0", "@typechain/ethers-v4": "1.0.0", @@ -74,7 +76,6 @@ "@types/mocha": "7.0.2", "@types/node": "14.0.5", "bignumber.js": "9.0.0", - "buidler-gas-reporter": "^0.1.4", "buidler-typechain": "0.1.1", "chai": "4.2.0", "chai-bignumber": "3.0.0", @@ -94,6 +95,7 @@ "prettier-plugin-solidity": "^1.0.0-alpha.53", "pretty-quick": "^2.0.1", "solidity-coverage": "0.7.10", + "temp-hardhat-etherscan": "^2.0.2", "ts-generator": "0.0.8", "ts-node": "^8.10.2", "tslint": "^6.1.2", diff --git a/tasks/dev/5_initialize.ts b/tasks/dev/5_initialize.ts index 531d34f0..11d25729 100644 --- a/tasks/dev/5_initialize.ts +++ b/tasks/dev/5_initialize.ts @@ -3,7 +3,7 @@ import { deployLendingPoolCollateralManager, deployMockFlashLoanReceiver, deployWalletBalancerProvider, - deployAaveProtocolTestHelpers, + deployAaveProtocolDataProvider, deployWETHGateway, } from '../../helpers/contracts-deployments'; import { @@ -41,7 +41,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.') filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI_')) ); - const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address, verify); + const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address, verify); const reservesParams = getReservesConfigByPool(AavePools.proto); @@ -77,7 +77,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.') await deployWalletBalancerProvider(addressesProvider.address, verify); - await insertContractAddressInDb(eContractid.AaveProtocolTestHelpers, testHelpers.address); + await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address); const lendingPoolAddress = await addressesProvider.getLendingPool(); const wethAddress = await getWethAddress(poolConfig); diff --git a/tasks/full/5_initialize.ts b/tasks/full/5_initialize.ts index d098e826..99b55f15 100644 --- a/tasks/full/5_initialize.ts +++ b/tasks/full/5_initialize.ts @@ -3,7 +3,7 @@ import {getParamPerNetwork} from '../../helpers/contracts-helpers'; import { deployLendingPoolCollateralManager, deployWalletBalancerProvider, - deployAaveProtocolTestHelpers, + deployAaveProtocolDataProvider, deployWETHGateway, } from '../../helpers/contracts-deployments'; import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration'; @@ -32,7 +32,7 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.') const addressesProvider = await getLendingPoolAddressesProvider(); - const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address, verify); + const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address, verify); const admin = await addressesProvider.getPoolAdmin(); if (!reserveAssets) { diff --git a/tasks/full/6_verify.ts b/tasks/full/6_verify.ts new file mode 100644 index 00000000..e672b2e4 --- /dev/null +++ b/tasks/full/6_verify.ts @@ -0,0 +1,179 @@ +import {zeroAddress} from 'ethereumjs-util'; +import {task} from 'hardhat/config'; +import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration'; +import {ZERO_ADDRESS} from '../../helpers/constants'; +import { + getAaveProtocolDataProvider, + getAddressById, + getLendingPool, + getLendingPoolAddressesProvider, + getLendingPoolAddressesProviderRegistry, + getLendingPoolCollateralManager, + getLendingPoolCollateralManagerImpl, + getLendingPoolConfiguratorImpl, + getLendingPoolConfiguratorProxy, + getLendingPoolImpl, + getWalletProvider, + getWETHGateway, +} from '../../helpers/contracts-getters'; +import {getParamPerNetwork} from '../../helpers/contracts-helpers'; +import {verifyContract} from '../../helpers/etherscan-verification'; +import {eEthereumNetwork, ICommonConfiguration} from '../../helpers/types'; + +task('full:verify', 'Deploy oracles for dev enviroment') + .addFlag('verify', 'Verify proxy contracts at Etherscan') + .addFlag('all', 'Verify all contracts at Etherscan') + .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) + .setAction(async ({verify, all, pool}, localDRE) => { + await localDRE.run('set-DRE'); + const network = localDRE.network.name as eEthereumNetwork; + const poolConfig = loadPoolConfig(pool); + const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration; + + const addressesProvider = await getLendingPoolAddressesProvider(); + const addressesProviderRegistry = await getLendingPoolAddressesProviderRegistry(); + const lendingPoolProxy = await getLendingPool(); + const lendingPoolConfigurator = await getLendingPoolConfiguratorProxy(); + const lendingPoolCollateralManager = await getLendingPoolCollateralManager(); + + if (!verify) { + return; + } + if (all) { + const lendingPoolImpl = await getLendingPoolImpl(); + const lendingPoolConfiguratorImpl = await getLendingPoolConfiguratorImpl(); + const lendingPoolCollateralManagerImpl = await getLendingPoolCollateralManagerImpl(); + const dataProvider = await getAaveProtocolDataProvider(); + const walletProvider = await getWalletProvider(); + const wethGateway = await getWETHGateway(); + + // Address Provider + console.log('\n- Verifying address provider...\n'); + await verifyContract(addressesProvider.address, []); + + // Address Provider Registry + console.log('\n- Verifying address provider registry...\n'); + await verifyContract(addressesProviderRegistry.address, []); + + // Lending Pool implementation + console.log('\n- Verifying LendingPool Implementation...\n'); + await verifyContract(lendingPoolImpl.address, []); + + // Lending Pool Configurator implementation + console.log('\n- Verifying LendingPool Configurator Implementation...\n'); + await verifyContract(lendingPoolConfiguratorImpl.address, []); + + // Lending Pool Collateral Manager implementation + console.log('\n- Verifying LendingPool Collateral Manager Implementation...\n'); + await verifyContract(lendingPoolCollateralManagerImpl.address, []); + + // Test helpers + console.log('\n- Verifying Aave Provider Helpers...\n'); + await verifyContract(dataProvider.address, [addressesProvider.address]); + + // Wallet balance provider + console.log('\n- Verifying Wallet Balance Provider...\n'); + await verifyContract(walletProvider.address, [addressesProvider.address]); + + // WETHGateway + console.log('\n- Verifying WETHGateway...\n'); + await verifyContract(wethGateway.address, [ + await getWethAddress(poolConfig), + lendingPoolProxy.address, + ]); + } + // Lending Pool proxy + console.log('\n- Verifying Lending Pool Proxy...\n'); + await verifyContract(lendingPoolProxy.address, [addressesProvider.address]); + + // LendingPool Conf proxy + console.log('\n- Verifying Lending Pool Configurator Proxy...\n'); + await verifyContract(lendingPoolConfigurator.address, [addressesProvider.address]); + + // Proxy collateral manager + console.log('\n- Verifying Lending Pool Collateral Manager Proxy...\n'); + await verifyContract(lendingPoolCollateralManager.address, []); + + // Tokens verification + const DAI = getParamPerNetwork(ReserveAssets, network).DAI; + const stableDebtDai = await getAddressById('stableDebtDAI'); + const variableDebtDai = await getAddressById('variableDebtDAI'); + const aDAI = await getAddressById('aDAI'); + const { + stableDebtTokenAddress, + variableDebtTokenAddress, + aTokenAddress, + interestRateStrategyAddress, + } = await lendingPoolProxy.getReserveData(DAI); + const { + baseVariableBorrowRate, + variableRateSlope1, + variableRateSlope2, + stableRateSlope1, + stableRateSlope2, + } = ReservesConfig.DAI; + + // Proxy Stable Debt + console.log('\n- Verifying DAI Stable Debt Token proxy...\n'); + await verifyContract(stableDebtTokenAddress, [lendingPoolConfigurator.address]); + + // Proxy Variable Debt + console.log('\n- Verifying DAI Variable Debt Token proxy...\n'); + await verifyContract(variableDebtTokenAddress, [lendingPoolConfigurator.address]); + + // Proxy aToken + console.log('\n- Verifying aDAI Token proxy...\n'); + await verifyContract(aTokenAddress, [lendingPoolConfigurator.address]); + + // Strategy Rate + console.log('\n- Verifying Strategy rate...\n'); + await verifyContract(interestRateStrategyAddress, [ + addressesProvider.address, + baseVariableBorrowRate, + variableRateSlope1, + variableRateSlope2, + stableRateSlope1, + stableRateSlope2, + ]); + + // aToken + console.log('\n- Verifying aToken...\n'); + await verifyContract(aDAI, [ + lendingPoolProxy.address, + DAI, + ZERO_ADDRESS, + 'Aave interest bearing DAI', + 'aDAI', + ZERO_ADDRESS, + ]); + // stableDebtToken + console.log('\n- Verifying StableDebtToken...\n'); + await verifyContract(stableDebtDai, [ + lendingPoolProxy.address, + DAI, + 'Aave stable debt bearing DAI', + 'stableDebtDAI', + ZERO_ADDRESS, + ]); + // variableDebtToken + console.log('\n- Verifying VariableDebtToken...\n'); + await verifyContract(variableDebtDai, [ + lendingPoolProxy.address, + DAI, + 'Aave variable debt bearing DAI', + 'variableDebtDAI', + ZERO_ADDRESS, + ]); + // DelegatedAwareAToken + console.log('\n- Verifying DelegatedAwareAToken...\n'); + const UNI = getParamPerNetwork(ReserveAssets, network).UNI; + const aUNI = await getAddressById('aUNI'); + await verifyContract(aUNI, [ + lendingPoolProxy.address, + UNI, + ZERO_ADDRESS, + 'Aave interest bearing UNI', + 'aUNI', + ZERO_ADDRESS, + ]); + }); diff --git a/tasks/full/7_data-provider.ts b/tasks/full/7_data-provider.ts new file mode 100644 index 00000000..4f0954a5 --- /dev/null +++ b/tasks/full/7_data-provider.ts @@ -0,0 +1,19 @@ +import {task} from 'hardhat/config'; +import {deployAaveProtocolDataProvider} from '../../helpers/contracts-deployments'; +import {exit} from 'process'; +import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters'; + +task('full:data-provider', 'Initialize lending pool configuration.') + .addFlag('verify', 'Verify contracts at Etherscan') + .setAction(async ({verify}, localBRE) => { + try { + await localBRE.run('set-DRE'); + + const addressesProvider = await getLendingPoolAddressesProvider(); + + await deployAaveProtocolDataProvider(addressesProvider.address, verify); + } catch (err) { + console.error(err); + exit(1); + } + }); diff --git a/tasks/migrations/aave.full.ts b/tasks/migrations/aave.full.ts index 502a77ae..17fb92c6 100644 --- a/tasks/migrations/aave.full.ts +++ b/tasks/migrations/aave.full.ts @@ -20,13 +20,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: POOL_NAME}); + await localBRE.run('full:deploy-address-provider', {pool: POOL_NAME}); console.log('2. Deploy lending pool'); - await localBRE.run('full:deploy-lending-pool', {verify}); + await localBRE.run('full:deploy-lending-pool'); console.log('3. Initialize lending pool'); - await localBRE.run('full:initialize-lending-pool', {verify, pool: POOL_NAME}); + await localBRE.run('full:initialize-lending-pool', {pool: POOL_NAME}); + + console.log('4. Veryfing contracts'); + await localBRE.run('full:verify', {verify, all: true, pool: POOL_NAME}); console.log('\nFinished migrations'); printContracts(); diff --git a/tasks/misc/verify-sc.ts b/tasks/misc/verify-sc.ts index 854aa36c..81f0970c 100644 --- a/tasks/misc/verify-sc.ts +++ b/tasks/misc/verify-sc.ts @@ -9,7 +9,6 @@ interface VerifyParams { } task('verify-sc', 'Inits the DRE, to have access to all the plugins') - .addParam('contractName', 'Name of the Solidity smart contract') .addParam('address', 'Ethereum address of the smart contract') .addOptionalParam( 'libraries', @@ -20,16 +19,11 @@ task('verify-sc', 'Inits the DRE, to have access to all the plugins') 'arguments for contract constructor', [] ) - .setAction( - async ( - {contractName, address, constructorArguments = [], libraries}: VerifyParams, - localBRE - ) => { - await localBRE.run('set-DRE'); + .setAction(async ({address, constructorArguments = [], libraries}: VerifyParams, localBRE) => { + await localBRE.run('set-DRE'); - checkVerification(); + checkVerification(); - const result = await verifyContract(contractName, address, constructorArguments, libraries); - return result; - } - ); + const result = await verifyContract(address, constructorArguments, libraries); + return result; + }); diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts index 4ffaf692..ac68f449 100644 --- a/test/__setup.spec.ts +++ b/test/__setup.spec.ts @@ -16,7 +16,7 @@ import { deployLendingPoolCollateralManager, deployMockFlashLoanReceiver, deployWalletBalancerProvider, - deployAaveProtocolTestHelpers, + deployAaveProtocolDataProvider, deployLendingRateOracle, deployStableAndVariableTokensHelper, deployATokensAndRatesHelper, @@ -238,9 +238,9 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => { const reservesParams = getReservesConfigByPool(AavePools.proto); - const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address); + const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address); - await insertContractAddressInDb(eContractid.AaveProtocolTestHelpers, testHelpers.address); + await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address); const admin = await deployer.getAddress(); console.log('Initialize configuration'); diff --git a/test/atoken-permit.spec.ts b/test/atoken-permit.spec.ts index aa680ee3..28c980e1 100644 --- a/test/atoken-permit.spec.ts +++ b/test/atoken-permit.spec.ts @@ -20,7 +20,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => { it('Checks the domain separator', async () => { const DOMAIN_SEPARATOR_ENCODED = getATokenDomainSeparatorPerNetwork( - eEthereumNetwork.buidlerevm, + eEthereumNetwork.hardhat, poolConfig ); diff --git a/test/configurator.spec.ts b/test/configurator.spec.ts index b0db698d..79af55c5 100644 --- a/test/configurator.spec.ts +++ b/test/configurator.spec.ts @@ -48,16 +48,6 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { ).to.be.revertedWith(RC_INVALID_LIQ_BONUS); }); - it('Reverts trying to set an invalid reserve decimals', async () => { - const {configurator, weth} = testEnv; - - const invalidDecimals = 256; - - await expect(configurator.setReserveDecimals(weth.address, invalidDecimals)).to.be.revertedWith( - RC_INVALID_DECIMALS - ); - }); - it('Reverts trying to set an invalid reserve factor', async () => { const {configurator, weth} = testEnv; @@ -508,14 +498,6 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN); }); - it('Check the onlyAaveAdmin on setReserveDecimals', async () => { - const {configurator, users, weth} = testEnv; - await expect( - configurator.connect(users[2].signer).setReserveDecimals(weth.address, '80'), - CALLER_NOT_POOL_ADMIN - ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN); - }); - it('Check the onlyAaveAdmin on setLiquidationBonus', async () => { const {configurator, users, weth} = testEnv; await expect( diff --git a/test/helpers/make-suite.ts b/test/helpers/make-suite.ts index 2cc363dd..d9cf9fc9 100644 --- a/test/helpers/make-suite.ts +++ b/test/helpers/make-suite.ts @@ -3,7 +3,7 @@ import {Signer} from 'ethers'; import { getLendingPool, getLendingPoolAddressesProvider, - getAaveProtocolTestHelpers, + getAaveProtocolDataProvider, getAToken, getMintableErc20, getLendingPoolConfiguratorProxy, @@ -16,7 +16,7 @@ import { } from '../../helpers/contracts-getters'; import {tEthereumAddress} from '../../helpers/types'; import {LendingPool} from '../../types/LendingPool'; -import {AaveProtocolTestHelpers} from '../../types/AaveProtocolTestHelpers'; +import {AaveProtocolDataProvider} from '../../types/AaveProtocolDataProvider'; import {MintableErc20 as MintableERC20} from '../../types/MintableErc20'; import {AToken} from '../../types/AToken'; import {LendingPoolConfigurator} from '../../types/LendingPoolConfigurator'; @@ -49,7 +49,7 @@ export interface TestEnv { pool: LendingPool; configurator: LendingPoolConfigurator; oracle: PriceOracle; - helpersContract: AaveProtocolTestHelpers; + helpersContract: AaveProtocolDataProvider; weth: Weth9Mocked; aWETH: AToken; dai: MintableERC20; @@ -75,7 +75,7 @@ const testEnv: TestEnv = { users: [] as SignerWithAddress[], pool: {} as LendingPool, configurator: {} as LendingPoolConfigurator, - helpersContract: {} as AaveProtocolTestHelpers, + helpersContract: {} as AaveProtocolDataProvider, oracle: {} as PriceOracle, weth: {} as Weth9Mocked, aWETH: {} as AToken, @@ -112,7 +112,7 @@ export async function initializeMakeSuite() { testEnv.addressesProvider = await getLendingPoolAddressesProvider(); testEnv.registry = await getLendingPoolAddressesProviderRegistry(); - testEnv.helpersContract = await getAaveProtocolTestHelpers(); + testEnv.helpersContract = await getAaveProtocolDataProvider(); const allTokens = await testEnv.helpersContract.getAllATokens(); diff --git a/test/helpers/scenarios/set-use-as-collateral.json b/test/helpers/scenarios/set-use-as-collateral.json index e38e8438..53b5128e 100644 --- a/test/helpers/scenarios/set-use-as-collateral.json +++ b/test/helpers/scenarios/set-use-as-collateral.json @@ -222,7 +222,22 @@ "user": "1", "useAsCollateral": "false" }, - "expected": "User deposit is already being used as collateral" + "expected": "revert" + } + ] + }, + { + "description": "User 1 reenables WETH as collateral", + "actions": [ + { + "name": "setUseAsCollateral", + "args": { + "reserve": "WETH", + + "user": "1", + "useAsCollateral": "true" + }, + "expected": "success" } ] } diff --git a/test/helpers/utils/helpers.ts b/test/helpers/utils/helpers.ts index c51a8960..f36a8fdb 100644 --- a/test/helpers/utils/helpers.ts +++ b/test/helpers/utils/helpers.ts @@ -11,10 +11,10 @@ import { import {tEthereumAddress} from '../../../helpers/types'; import BigNumber from 'bignumber.js'; import {getDb, DRE} from '../../../helpers/misc-utils'; -import {AaveProtocolTestHelpers} from '../../../types/AaveProtocolTestHelpers'; +import {AaveProtocolDataProvider} from '../../../types/AaveProtocolDataProvider'; export const getReserveData = async ( - helper: AaveProtocolTestHelpers, + helper: AaveProtocolDataProvider, reserve: tEthereumAddress ): Promise => { const [reserveData, tokenAddresses, rateOracle, token] = await Promise.all([ @@ -74,7 +74,7 @@ export const getReserveData = async ( export const getUserData = async ( pool: LendingPool, - helper: AaveProtocolTestHelpers, + helper: AaveProtocolDataProvider, reserve: string, user: tEthereumAddress, sender?: tEthereumAddress @@ -116,7 +116,7 @@ export const getReserveAddressFromSymbol = async (symbol: string) => { const getATokenUserData = async ( reserve: string, user: string, - helpersContract: AaveProtocolTestHelpers + helpersContract: AaveProtocolDataProvider ) => { const aTokenAddress: string = (await helpersContract.getReserveTokensAddresses(reserve)) .aTokenAddress; diff --git a/test/lending-pool-addresses-provider.spec.ts b/test/lending-pool-addresses-provider.spec.ts index ac70c6a0..97327d4f 100644 --- a/test/lending-pool-addresses-provider.spec.ts +++ b/test/lending-pool-addresses-provider.spec.ts @@ -31,28 +31,61 @@ makeSuite('LendingPoolAddressesProvider', (testEnv: TestEnv) => { await expect( addressesProvider.setAddress( utils.keccak256(utils.toUtf8Bytes('RANDOM_ID')), - mockAddress, - ZERO_ADDRESS + mockAddress ) ).to.be.revertedWith(INVALID_OWNER_REVERT_MSG); + + await expect( + addressesProvider.setAddressAsProxy( + utils.keccak256(utils.toUtf8Bytes('RANDOM_ID')), + mockAddress + ) + ).to.be.revertedWith(INVALID_OWNER_REVERT_MSG); + }); - it('Tests adding both a proxied and non-proxied addres with `setAddress()`', async () => { + it('Tests adding a proxied address with `setAddressAsProxy()`', async () => { const {addressesProvider, users} = testEnv; const {INVALID_OWNER_REVERT_MSG} = ProtocolErrors; const currentAddressesProviderOwner = users[1]; - const mockNonProxiedAddress = createRandomAddress(); - const nonProxiedAddressId = utils.keccak256(utils.toUtf8Bytes('RANDOM_NON_PROXIED')); const mockLendingPool = await deployLendingPool(); const proxiedAddressId = utils.keccak256(utils.toUtf8Bytes('RANDOM_PROXIED')); + const proxiedAddressSetReceipt = await waitForTx( + await addressesProvider + .connect(currentAddressesProviderOwner.signer) + .setAddressAsProxy(proxiedAddressId, mockLendingPool.address) + ); + + if (!proxiedAddressSetReceipt.events || proxiedAddressSetReceipt.events?.length < 1) { + throw new Error('INVALID_EVENT_EMMITED'); + } + + expect(proxiedAddressSetReceipt.events[0].event).to.be.equal('ProxyCreated'); + expect(proxiedAddressSetReceipt.events[1].event).to.be.equal('AddressSet'); + expect(proxiedAddressSetReceipt.events[1].args?.id).to.be.equal(proxiedAddressId); + expect(proxiedAddressSetReceipt.events[1].args?.newAddress).to.be.equal( + mockLendingPool.address + ); + expect(proxiedAddressSetReceipt.events[1].args?.hasProxy).to.be.equal(true); + }); + + + it('Tests adding a non proxied address with `setAddress()`', async () => { + const {addressesProvider, users} = testEnv; + const {INVALID_OWNER_REVERT_MSG} = ProtocolErrors; + + const currentAddressesProviderOwner = users[1]; + const mockNonProxiedAddress = createRandomAddress(); + const nonProxiedAddressId = utils.keccak256(utils.toUtf8Bytes('RANDOM_NON_PROXIED')); + const nonProxiedAddressSetReceipt = await waitForTx( await addressesProvider .connect(currentAddressesProviderOwner.signer) - .setAddress(nonProxiedAddressId, mockNonProxiedAddress, ZERO_ADDRESS) + .setAddress(nonProxiedAddressId, mockNonProxiedAddress) ); expect(mockNonProxiedAddress.toLowerCase()).to.be.equal( @@ -70,22 +103,5 @@ makeSuite('LendingPoolAddressesProvider', (testEnv: TestEnv) => { ); expect(nonProxiedAddressSetReceipt.events[0].args?.hasProxy).to.be.equal(false); - const proxiedAddressSetReceipt = await waitForTx( - await addressesProvider - .connect(currentAddressesProviderOwner.signer) - .setAddress(proxiedAddressId, ZERO_ADDRESS, mockLendingPool.address) - ); - - if (!proxiedAddressSetReceipt.events || proxiedAddressSetReceipt.events?.length < 2) { - throw new Error('INVALID_EVENT_EMMITED'); - } - - expect(proxiedAddressSetReceipt.events[0].event).to.be.equal('ProxyCreated'); - expect(proxiedAddressSetReceipt.events[1].event).to.be.equal('AddressSet'); - expect(proxiedAddressSetReceipt.events[1].args?.id).to.be.equal(proxiedAddressId); - expect(proxiedAddressSetReceipt.events[1].args?.newAddress).to.be.equal( - mockLendingPool.address - ); - expect(proxiedAddressSetReceipt.events[1].args?.hasProxy).to.be.equal(true); }); });