mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	merge and add helper contracts
This commit is contained in:
		
						commit
						cbc188e62a
					
				
							
								
								
									
										89
									
								
								contracts/deployments/DeployATokensAndRates.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								contracts/deployments/DeployATokensAndRates.sol
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,89 @@ | |||
| // SPDX-License-Identifier: agpl-3.0 | ||||
| pragma solidity ^0.6.8; | ||||
| pragma experimental ABIEncoderV2; | ||||
| 
 | ||||
| import {LendingPool} from '../lendingpool/LendingPool.sol'; | ||||
| import {LendingPoolAddressesProvider} from '../configuration/LendingPoolAddressesProvider.sol'; | ||||
| import {LendingPoolConfigurator} from '../lendingpool/LendingPoolConfigurator.sol'; | ||||
| import {AToken} from '../tokenization/AToken.sol'; | ||||
| import { | ||||
|   DefaultReserveInterestRateStrategy | ||||
| } from '../lendingpool/DefaultReserveInterestRateStrategy.sol'; | ||||
| 
 | ||||
| contract DeployATokensAndRates { | ||||
|   address payable private pool; | ||||
|   address private addressesProvider; | ||||
|   address private poolConfigurator; | ||||
|   event deployedContracts(address aToken, address strategy); | ||||
| 
 | ||||
|   constructor( | ||||
|     address payable _pool, | ||||
|     address _addressesProvider, | ||||
|     address _poolConfigurator | ||||
|   ) public { | ||||
|     pool = _pool; | ||||
|     addressesProvider = _addressesProvider; | ||||
|     poolConfigurator = _poolConfigurator; | ||||
|   } | ||||
| 
 | ||||
|   function concat(string memory a, string memory b) internal pure returns (string memory) { | ||||
|     return string(abi.encodePacked(a, ' ', b)); | ||||
|   } | ||||
| 
 | ||||
|   function initDeployment( | ||||
|     address[] calldata tokens, | ||||
|     string[] calldata symbols, | ||||
|     uint256[5][] calldata rates, | ||||
|     address incentivesController | ||||
|   ) external { | ||||
|     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( | ||||
|           new AToken( | ||||
|             LendingPool(pool), | ||||
|             tokens[i], | ||||
|             address(0), | ||||
|             concat('Aave interest bearing ', symbols[i]), | ||||
|             concat('a', symbols[i]), | ||||
|             incentivesController | ||||
|           ) | ||||
|         ), | ||||
|         address( | ||||
|           new DefaultReserveInterestRateStrategy( | ||||
|             LendingPoolAddressesProvider(addressesProvider), | ||||
|             rates[i][0], | ||||
|             rates[i][1], | ||||
|             rates[i][2], | ||||
|             rates[i][3], | ||||
|             rates[i][4] | ||||
|           ) | ||||
|         ) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function initReserve( | ||||
|     address[] calldata tokens, | ||||
|     address[] calldata stables, | ||||
|     address[] calldata variables, | ||||
|     address[] calldata aTokens, | ||||
|     address[] calldata strategies, | ||||
|     uint8[] calldata reserveDecimals | ||||
|   ) external { | ||||
|     // TODO require(check lenghts) | ||||
| 
 | ||||
|     for (uint256 i = 0; i < tokens.length; i++) { | ||||
|       LendingPoolConfigurator(poolConfigurator).initReserve( | ||||
|         tokens[i], | ||||
|         aTokens[i], | ||||
|         stables[i], | ||||
|         variables[i], | ||||
|         reserveDecimals[i], | ||||
|         strategies[i] | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										53
									
								
								contracts/deployments/DeployStableAndVariableTokens.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								contracts/deployments/DeployStableAndVariableTokens.sol
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | |||
| // SPDX-License-Identifier: agpl-3.0 | ||||
| pragma solidity ^0.6.8; | ||||
| pragma experimental ABIEncoderV2; | ||||
| 
 | ||||
| import {StableDebtToken} from '../tokenization/StableDebtToken.sol'; | ||||
| import {VariableDebtToken} from '../tokenization/VariableDebtToken.sol'; | ||||
| import '@nomiclabs/buidler/console.sol'; | ||||
| 
 | ||||
| contract DeployStableAndVariableTokens { | ||||
|   address payable private pool; | ||||
|   address private addressesProvider; | ||||
|   event deployedContracts(address stableToken, address variableToken); | ||||
| 
 | ||||
|   constructor(address payable _pool, address _addressesProvider) public { | ||||
|     pool = _pool; | ||||
|     addressesProvider = _addressesProvider; | ||||
|   } | ||||
| 
 | ||||
|   function concat(string memory a, string memory b) internal pure returns (string memory) { | ||||
|     return string(abi.encodePacked(a, ' ', b)); | ||||
|   } | ||||
| 
 | ||||
|   function initDeployment( | ||||
|     address[] calldata tokens, | ||||
|     string[] calldata symbols, | ||||
|     address incentivesController | ||||
|   ) external { | ||||
|     require(tokens.length == symbols.length, 'Arrays not same length'); | ||||
|     require(pool != address(0), 'Pool can not be zero address'); | ||||
|     for (uint256 i = 0; i < tokens.length; i++) { | ||||
|       emit deployedContracts( | ||||
|         address( | ||||
|           new StableDebtToken( | ||||
|             pool, | ||||
|             tokens[i], | ||||
|             concat('Aave stable debt bearing ', symbols[i]), | ||||
|             concat('stableDebt', symbols[i]), | ||||
|             incentivesController | ||||
|           ) | ||||
|         ), | ||||
|         address( | ||||
|           new VariableDebtToken( | ||||
|             pool, | ||||
|             tokens[i], | ||||
|             concat('Aave variable debt bearing ', symbols[i]), | ||||
|             concat('variableDebt', symbols[i]), | ||||
|             incentivesController | ||||
|           ) | ||||
|         ) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										35
									
								
								contracts/deployments/ReserveInitializer.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								contracts/deployments/ReserveInitializer.sol
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| // SPDX-License-Identifier: agpl-3.0 | ||||
| pragma solidity ^0.6.8; | ||||
| pragma experimental ABIEncoderV2; | ||||
| 
 | ||||
| import {LendingPoolConfigurator} from '../lendingpool/LendingPoolConfigurator.sol'; | ||||
| 
 | ||||
| contract ReserveInitializer { | ||||
|   address private poolConfigurator; | ||||
| 
 | ||||
|   constructor(address _poolConfigurator) public { | ||||
|     poolConfigurator = _poolConfigurator; | ||||
|   } | ||||
| 
 | ||||
|   function initReserve( | ||||
|     address[] calldata tokens, | ||||
|     address[] calldata stables, | ||||
|     address[] calldata variables, | ||||
|     address[] calldata aTokens, | ||||
|     address[] calldata strategies, | ||||
|     uint8[] calldata reserveDecimals | ||||
|   ) external { | ||||
|     // TODO require(check lenghts) | ||||
| 
 | ||||
|     for (uint256 i = 0; i < tokens.length; i++) { | ||||
|       LendingPoolConfigurator(poolConfigurator).initReserve( | ||||
|         tokens[i], | ||||
|         aTokens[i], | ||||
|         stables[i], | ||||
|         variables[i], | ||||
|         reserveDecimals[i], | ||||
|         strategies[i] | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | @ -1,7 +1,7 @@ | |||
| { | ||||
|   "MintableERC20": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22", | ||||
|       "address": "0xB7d4f04E8dF26d2FEE35D4AeB2A63fEB49451B78", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -15,7 +15,7 @@ | |||
|   }, | ||||
|   "LendingPoolAddressesProvider": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF", | ||||
|       "address": "0xC5f7aC6895DcB76877E71db756433fB0E0478FEB", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -27,13 +27,13 @@ | |||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0xd7e3C4b2CE495066dE1923c268D68A844bD7Ae13", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0xF9a2E6D57c691f3aa5269858178a13Ef06378579", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "LendingPoolAddressesProviderRegistry": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x5A0773Ff307Bf7C71a832dBB5312237fD3437f9F", | ||||
|       "address": "0x4b2c297ba5be42610994974b9543D56B864CA011", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -45,8 +45,8 @@ | |||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0x83c7A0E78e8eee2108a87d7a6770f22BAcb68b5A", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0xf3266d89e6742fAE2C35D05eD549cd4e117300a7", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "FeeProvider": { | ||||
|  | @ -70,13 +70,13 @@ | |||
|   }, | ||||
|   "LendingPoolConfigurator": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x6642B57e4265BAD868C17Fc1d1F4F88DBBA04Aa8" | ||||
|       "address": "0x891E9f1BbD041265856b486DE4F5A5c5659370b6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|       "address": "0x9Ec55627757348b322c8dD0865D704649bFa0c7b" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0x1339f3c1FfF00D0FD8946187fdC61F0ef0fFe786" | ||||
|       "address": "0x1aae278bCcdb95817c7A546d752fC662F09b6DBa" | ||||
|     } | ||||
|   }, | ||||
|   "LendingPoolDataProvider": { | ||||
|  | @ -86,19 +86,18 @@ | |||
|   }, | ||||
|   "LendingPool": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0xBEF0d4b9c089a5883741fC14cbA352055f35DDA2", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|       "address": "0x08ce4E45cD12Ae467fF24A1fd563321De309B613" | ||||
|     }, | ||||
|     "localhost": { | ||||
|       "address": "0x3EE716e38f21e5FC16BFDB773db24D63C637A5d8" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0xB43CCfF1148bb5ab2104E2ee68A7c30cDEBb9A9C" | ||||
|       "address": "0x8E05A3054cb736258FaF4638D07058cE6e294d2C" | ||||
|     } | ||||
|   }, | ||||
|   "PriceOracle": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x0C6c3C47A1f650809B0D1048FDf9603e09473D7E", | ||||
|       "address": "0x951d1CE3CE90D719F5BdeCBbFE6EeA9c7bff948E", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -112,7 +111,7 @@ | |||
|   }, | ||||
|   "MockAggregator": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0xc11f8E173ee67ffA7BBdD185D2399994AAd23Ec6", | ||||
|       "address": "0xff1B1B810F5DCe853a9b1819DE220D532D1CFeF2", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -126,7 +125,7 @@ | |||
|   }, | ||||
|   "ChainlinkProxyPriceProvider": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0xD662fb7FDC7526C79AA4417d2A4415416e057ec4", | ||||
|       "address": "0xf55Af78B3f3059fACF166Aa338FFe059A14e75F6", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -144,7 +143,7 @@ | |||
|   }, | ||||
|   "LendingRateOracle": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0xEC1C93A9f6a9e18E97784c76aC52053587FcDB89", | ||||
|       "address": "0xaD3AdbC18E4AD090034A6C74Eda61f4310dce313", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "localhost": { | ||||
|  | @ -174,8 +173,8 @@ | |||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0xc4e3d83AEd3D3c60Cf4b238F634014cE103F6fa1", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0x47341CE48FfE1cbD91991578B880a18c45cdB5CA", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "LendingPoolLiquidationManager": { | ||||
|  | @ -572,7 +571,7 @@ | |||
|   }, | ||||
|   "AaveProtocolTestHelpers": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" | ||||
|       "address": "0xa89E20284Bd638F31b0011D0fC754Fc9d2fa73e3" | ||||
|     }, | ||||
|     "localhost": { | ||||
|       "address": "0x987223924D2DD6c6efB601756850f3886ECbceF6" | ||||
|  | @ -581,8 +580,8 @@ | |||
|       "address": "0x2cfcA5785261fbC88EFFDd46fCFc04c22525F9e4" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0xE4566ce19626826360f4faD941418e2849fC3685", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0xfF28b837352d9531bAb6dFF3650D7831192117F7", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "StableDebtToken": { | ||||
|  | @ -599,8 +598,8 @@ | |||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0x0043967C1Cf13c4Ff3Bc38109054D5a97C147B4A", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0x0EDc241FdA0dF39EB1B9eB1236217BBe72Ab911D", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "VariableDebtToken": { | ||||
|  | @ -617,8 +616,8 @@ | |||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0xdF75B68c75c30D177f4Dbd47cBcb5E2E4f3cf8F9", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0x293f5BcC66762c28a5d3Bd8512a799D457F5296D", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "AToken": { | ||||
|  | @ -635,8 +634,8 @@ | |||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     }, | ||||
|     "kovan": { | ||||
|       "address": "0x1A23ADa7218e0a66b7368E12E379Ea88d7a68a27", | ||||
|       "deployer": "0x6b40a028d2Ab94e5f6d3793F32D326CDf724Bb1D" | ||||
|       "address": "0xf303Ae6F24C29D94E367fdb5C7aE04D32BEbF13E", | ||||
|       "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" | ||||
|     } | ||||
|   }, | ||||
|   "MockAToken": { | ||||
|  | @ -707,19 +706,19 @@ | |||
|   }, | ||||
|   "ReserveLogic": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x63387deC8C4a0F17Cf0C27Ea3476F03F6a45d3AE", | ||||
|       "address": "0x285671fF5C8172dE63cF5eA264B2e827aDBC6740", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     } | ||||
|   }, | ||||
|   "GenericLogic": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x8280D40C9E9F04229D2435EAad6e0011309ce81B", | ||||
|       "address": "0xb840b4fe440b5E26e1840cd2D6320FAda1C0ca5d", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     } | ||||
|   }, | ||||
|   "ValidationLogic": { | ||||
|     "buidlerevm": { | ||||
|       "address": "0x2B681757d757fbB80cc51c6094cEF5eE75bF55aA", | ||||
|       "address": "0x1a432D97211e8b2CD53DF262c8Da0EfeBa6b6b3D", | ||||
|       "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" | ||||
|     } | ||||
|   }, | ||||
|  |  | |||
|  | @ -2,6 +2,8 @@ version: '3.5' | |||
| 
 | ||||
| services: | ||||
|   contracts-env: | ||||
|     env_file: | ||||
|       - .env | ||||
|     build: | ||||
|       context: ./ | ||||
|     working_dir: /src | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ import {Contract, Signer, utils, ethers} from 'ethers'; | |||
| import {signTypedData_v4} from 'eth-sig-util'; | ||||
| import {fromRpcSig, ECDSASignature} from 'ethereumjs-util'; | ||||
| import BigNumber from 'bignumber.js'; | ||||
| import {getDb, BRE} from './misc-utils'; | ||||
| import {getDb, BRE, waitForTx} from './misc-utils'; | ||||
| import { | ||||
|   tEthereumAddress, | ||||
|   eContractid, | ||||
|  | @ -68,7 +68,7 @@ export const deployContract = async <ContractType extends Contract>( | |||
|   const contract = (await (await BRE.ethers.getContractFactory(contractName)).deploy( | ||||
|     ...args | ||||
|   )) as ContractType; | ||||
| 
 | ||||
|   await waitForTx(contract.deployTransaction); | ||||
|   await registerContractInJsonDb(<eContractid>contractName, contract); | ||||
|   return contract; | ||||
| }; | ||||
|  | @ -79,6 +79,7 @@ export const withSaveAndVerify = async <ContractType extends Contract>( | |||
|   args: (string | string[])[], | ||||
|   verify?: boolean | ||||
| ): Promise<ContractType> => { | ||||
|   await waitForTx(instance.deployTransaction); | ||||
|   await registerContractInJsonDb(id, instance); | ||||
|   if (verify) { | ||||
|     await verifyContract(id, instance.address, args); | ||||
|  |  | |||
|  | @ -1,13 +1,20 @@ | |||
| import {exit} from 'process'; | ||||
| import fs from 'fs'; | ||||
| import globby from 'globby'; | ||||
| import {file} from 'tmp-promise'; | ||||
| import {BRE} 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`, | ||||
| ]; | ||||
| 
 | ||||
| export const SUPPORTED_ETHERSCAN_NETWORKS = ['main', 'ropsten', 'kovan']; | ||||
| 
 | ||||
| export const getEtherscanPath = async (contractName: string) => { | ||||
|   const compilerInput = await BRE.run('compile:get-compiler-input'); | ||||
|   const paths = Object.keys(compilerInput.sources); | ||||
|   const paths = await listSolidityFiles(BRE.config.paths.sources); | ||||
|   const path = paths.find((p) => p.includes(contractName)); | ||||
|   if (!path) { | ||||
|     throw new Error( | ||||
|  | @ -79,12 +86,22 @@ export const runTaskWithRetry = async ( | |||
|       cleanup(); | ||||
|     } else { | ||||
|       cleanup(); | ||||
|       console.error('[ERROR] Errors after all the retries, check the logs for more information.'); | ||||
|       console.error( | ||||
|         '[ETHERSCAN][ERROR] Errors after all the retries, check the logs for more information.' | ||||
|       ); | ||||
|     } | ||||
|   } catch (error) { | ||||
|     counter--; | ||||
|     console.info(`[INFO] Retrying attemps: ${counter}.`); | ||||
|     console.error('[ERROR]', error.message); | ||||
|     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.' | ||||
|       ); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     await runTaskWithRetry(task, params, counter, msDelay, cleanup); | ||||
|   } | ||||
| }; | ||||
|  |  | |||
|  | @ -9,7 +9,13 @@ import { | |||
|   deployVariableDebtToken, | ||||
|   deployGenericAToken, | ||||
| } from './contracts-deployments'; | ||||
| import {getEthersSigners} from './contracts-helpers'; | ||||
| import {waitForTx} from './misc-utils'; | ||||
| import {DeployTokens} from '../types/DeployTokens'; | ||||
| import {ZERO_ADDRESS} from './constants'; | ||||
| import {getFirstSigner} from './contracts-getters'; | ||||
| import {DeployATokensAndRatesFactory} from '../types/DeployATokensAndRatesFactory'; | ||||
| import {DeployStableAndVariableTokensFactory} from '../types/DeployStableAndVariableTokensFactory'; | ||||
| import {getDefaultSettings} from 'http2'; | ||||
| 
 | ||||
| export const enableReservesToBorrow = async ( | ||||
|   reservesParams: iMultiPoolsAssets<IReserveParams>, | ||||
|  | @ -37,7 +43,14 @@ export const enableReservesToBorrow = async ( | |||
|         continue; | ||||
|       } | ||||
| 
 | ||||
|       await lendingPoolConfigurator.enableBorrowingOnReserve(tokenAddress, stableBorrowRateEnabled); | ||||
|       console.log('Enabling borrowing on reserve ', assetSymbol); | ||||
| 
 | ||||
|       await waitForTx( | ||||
|         await lendingPoolConfigurator.enableBorrowingOnReserve( | ||||
|           tokenAddress, | ||||
|           stableBorrowRateEnabled | ||||
|         ) | ||||
|       ); | ||||
|     } catch (e) { | ||||
|       console.log( | ||||
|         `Enabling reserve for borrowings for ${assetSymbol} failed with error ${e}. Skipped.` | ||||
|  | @ -74,11 +87,15 @@ export const enableReservesAsCollateral = async ( | |||
|     } | ||||
| 
 | ||||
|     try { | ||||
|       await lendingPoolConfigurator.enableReserveAsCollateral( | ||||
|         tokenAddress, | ||||
|         baseLTVAsCollateral, | ||||
|         liquidationThreshold, | ||||
|         liquidationBonus | ||||
|       console.log(`Enabling reserve ${assetSymbol} as collateral`); | ||||
| 
 | ||||
|       await waitForTx( | ||||
|         await lendingPoolConfigurator.enableReserveAsCollateral( | ||||
|           tokenAddress, | ||||
|           baseLTVAsCollateral, | ||||
|           liquidationThreshold, | ||||
|           liquidationBonus | ||||
|         ) | ||||
|       ); | ||||
|     } catch (e) { | ||||
|       console.log( | ||||
|  | @ -194,16 +211,115 @@ export const initReserves = async ( | |||
|       } | ||||
| 
 | ||||
|       console.log('- init reserve currency ', assetSymbol); | ||||
|       await lendingPoolConfigurator.initReserve( | ||||
|         tokenAddress, | ||||
|         aToken.address, | ||||
|         stableDebtToken.address, | ||||
|         variableDebtToken.address, | ||||
|         reserveDecimals, | ||||
|         rateStrategyContract.address | ||||
|       await waitForTx( | ||||
|         await lendingPoolConfigurator.initReserve( | ||||
|           tokenAddress, | ||||
|           aToken.address, | ||||
|           stableDebtToken.address, | ||||
|           variableDebtToken.address, | ||||
|           reserveDecimals, | ||||
|           rateStrategyContract.address | ||||
|         ) | ||||
|       ); | ||||
|     } catch (e) { | ||||
|       console.log(`Reserve initialization for ${assetSymbol} failed with error ${e}. Skipped.`); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| export const initReservesByHelper = async ( | ||||
|   lendingPoolProxy: tEthereumAddress, | ||||
|   addressesProvider: tEthereumAddress, | ||||
|   lendingPoolConfigurator: tEthereumAddress, | ||||
|   reservesParams: iMultiPoolsAssets<IReserveParams>, | ||||
|   tokenAddresses: {[symbol: string]: tEthereumAddress}, | ||||
|   helpers: AaveProtocolTestHelpers | ||||
| ) => { | ||||
|   const stableAndVariableDeployer = await new DeployStableAndVariableTokensFactory( | ||||
|     await getFirstSigner() | ||||
|   ).deploy(lendingPoolProxy, addressesProvider); | ||||
|   const stableTx = await waitForTx(stableAndVariableDeployer.deployTransaction); | ||||
|   console.log('GAS', stableTx.gasUsed.toString()); | ||||
|   console.log('- Deployed StableAndVariableDeployer'); | ||||
|   const atokenAndRatesDeployer = await new DeployATokensAndRatesFactory( | ||||
|     await getFirstSigner() | ||||
|   ).deploy(lendingPoolProxy, addressesProvider, lendingPoolConfigurator); | ||||
|   const atokenTx = await waitForTx(atokenAndRatesDeployer.deployTransaction); | ||||
|   console.log('GAS', atokenTx.gasUsed.toString()); | ||||
|   console.log('- Deployed ATokenAndRatesDeployer'); | ||||
|   console.log('doing calls'); | ||||
|   for (let [assetSymbol, {reserveDecimals}] of Object.entries(reservesParams) as [ | ||||
|     string, | ||||
|     IReserveParams | ||||
|   ][]) { | ||||
|     const assetAddressIndex = Object.keys(tokenAddresses).findIndex( | ||||
|       (value) => value === assetSymbol | ||||
|     ); | ||||
|     const [, tokenAddress] = (Object.entries(tokenAddresses) as [string, string][])[ | ||||
|       assetAddressIndex | ||||
|     ]; | ||||
| 
 | ||||
|     const {isActive: reserveInitialized} = await helpers.getReserveConfigurationData(tokenAddress); | ||||
| 
 | ||||
|     if (reserveInitialized) { | ||||
|       console.log(`Reserve ${assetSymbol} is already active, skipping configuration`); | ||||
|       continue; | ||||
|     } | ||||
| 
 | ||||
|     const reserveParamIndex = Object.keys(reservesParams).findIndex( | ||||
|       (value) => value === assetSymbol | ||||
|     ); | ||||
|     const [ | ||||
|       , | ||||
|       { | ||||
|         baseVariableBorrowRate, | ||||
|         variableRateSlope1, | ||||
|         variableRateSlope2, | ||||
|         stableRateSlope1, | ||||
|         stableRateSlope2, | ||||
|       }, | ||||
|     ] = (Object.entries(reservesParams) as [string, IReserveParams][])[reserveParamIndex]; | ||||
|     assetSymbol = assetSymbol === 'WETH' ? 'ETH' : assetSymbol; | ||||
|     const tx1 = await waitForTx( | ||||
|       await stableAndVariableDeployer.initDeployment([tokenAddress], [assetSymbol], ZERO_ADDRESS, { | ||||
|         gasLimit: 9000000, | ||||
|       }) | ||||
|     ); | ||||
|     console.log('call 1', tx1.gasUsed.toString()); | ||||
| 
 | ||||
|     const stableTokens: string[] = tx1.events?.map((e) => e.args?.stableToken) || []; | ||||
|     const variableTokens: string[] = tx1.events?.map((e) => e.args?.variableToken) || []; | ||||
| 
 | ||||
|     const tx2 = await waitForTx( | ||||
|       await atokenAndRatesDeployer.initDeployment( | ||||
|         [tokenAddress], | ||||
|         [assetSymbol], | ||||
|         [ | ||||
|           [ | ||||
|             baseVariableBorrowRate, | ||||
|             variableRateSlope1, | ||||
|             variableRateSlope2, | ||||
|             stableRateSlope1, | ||||
|             stableRateSlope2, | ||||
|           ], | ||||
|         ], | ||||
|         ZERO_ADDRESS | ||||
|       ) | ||||
|     ); | ||||
|     const aTokens: string[] = tx2.events?.map((e) => e.args?.aToken) || []; | ||||
|     const strategies: string[] = tx2.events?.map((e) => e.args?.strategy) || []; | ||||
|     console.log(aTokens.length, strategies.length, stableTokens.length, variableTokens.length); | ||||
|     console.log('call 2', tx2.gasUsed.toString()); | ||||
|     const tx3 = await waitForTx( | ||||
|       await atokenAndRatesDeployer.initReserve( | ||||
|         [tokenAddress], | ||||
|         stableTokens, | ||||
|         variableTokens, | ||||
|         aTokens, | ||||
|         strategies, | ||||
|         [reserveDecimals] | ||||
|       ) | ||||
|     ); | ||||
|     console.log('call 3', tx3.gasUsed.toString()); | ||||
|   } | ||||
| }; | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ export const increaseTime = async (secondsToIncrease: number) => { | |||
|   await BRE.ethers.provider.send('evm_mine', []); | ||||
| }; | ||||
| 
 | ||||
| export const waitForTx = async (tx: ContractTransaction) => await tx.wait(); | ||||
| export const waitForTx = async (tx: ContractTransaction) => await tx.wait(1); | ||||
| 
 | ||||
| export const filterMapBy = (raw: {[key: string]: any}, fn: (key: string) => boolean) => | ||||
|   Object.keys(raw) | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ export const setInitialMarketRatesInRatesOracle = async ( | |||
|     const [, assetAddress] = (Object.entries(assetsAddresses) as [string, string][])[ | ||||
|       assetAddressIndex | ||||
|     ]; | ||||
|     await lendingRateOracleInstance.setMarketBorrowRate(assetAddress, borrowRate); | ||||
|     await waitForTx(await lendingRateOracleInstance.setMarketBorrowRate(assetAddress, borrowRate)); | ||||
|     console.log('added Market Borrow Rate for: ', assetSymbol); | ||||
|   } | ||||
| }; | ||||
|  |  | |||
							
								
								
									
										204
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										204
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							|  | @ -5264,13 +5264,13 @@ | |||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "4.1.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", | ||||
|           "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5279,7 +5279,7 @@ | |||
|         }, | ||||
|         "bindings": { | ||||
|           "version": "1.5.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", | ||||
|           "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5288,7 +5288,7 @@ | |||
|         }, | ||||
|         "bip66": { | ||||
|           "version": "1.1.5", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", | ||||
|           "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5297,19 +5297,19 @@ | |||
|         }, | ||||
|         "bn.js": { | ||||
|           "version": "4.11.8", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", | ||||
|           "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "browserify-aes": { | ||||
|           "version": "1.2.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", | ||||
|           "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5323,25 +5323,25 @@ | |||
|         }, | ||||
|         "buffer-from": { | ||||
|           "version": "1.1.1", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", | ||||
|           "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "camelcase": { | ||||
|           "version": "5.3.1", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", | ||||
|           "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5351,7 +5351,7 @@ | |||
|         }, | ||||
|         "cliui": { | ||||
|           "version": "5.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", | ||||
|           "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5362,7 +5362,7 @@ | |||
|         }, | ||||
|         "color-convert": { | ||||
|           "version": "1.9.3", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", | ||||
|           "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5371,13 +5371,13 @@ | |||
|         }, | ||||
|         "color-name": { | ||||
|           "version": "1.1.3", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", | ||||
|           "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5390,7 +5390,7 @@ | |||
|         }, | ||||
|         "create-hmac": { | ||||
|           "version": "1.1.7", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", | ||||
|           "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5404,7 +5404,7 @@ | |||
|         }, | ||||
|         "cross-spawn": { | ||||
|           "version": "6.0.5", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", | ||||
|           "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5417,13 +5417,13 @@ | |||
|         }, | ||||
|         "decamelize": { | ||||
|           "version": "1.2.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", | ||||
|           "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "drbg.js": { | ||||
|           "version": "1.0.1", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", | ||||
|           "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5434,7 +5434,7 @@ | |||
|         }, | ||||
|         "elliptic": { | ||||
|           "version": "6.5.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", | ||||
|           "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5449,13 +5449,13 @@ | |||
|         }, | ||||
|         "emoji-regex": { | ||||
|           "version": "7.0.3", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": { | ||||
|  | @ -5464,7 +5464,7 @@ | |||
|         }, | ||||
|         "ethereumjs-util": { | ||||
|           "version": "6.1.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", | ||||
|           "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5479,7 +5479,7 @@ | |||
|         }, | ||||
|         "ethjs-util": { | ||||
|           "version": "0.1.6", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", | ||||
|           "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5489,7 +5489,7 @@ | |||
|         }, | ||||
|         "evp_bytestokey": { | ||||
|           "version": "1.0.3", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", | ||||
|           "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5499,7 +5499,7 @@ | |||
|         }, | ||||
|         "execa": { | ||||
|           "version": "1.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", | ||||
|           "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5514,13 +5514,13 @@ | |||
|         }, | ||||
|         "file-uri-to-path": { | ||||
|           "version": "1.0.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", | ||||
|           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5529,13 +5529,13 @@ | |||
|         }, | ||||
|         "get-caller-file": { | ||||
|           "version": "2.0.5", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", | ||||
|           "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5544,7 +5544,7 @@ | |||
|         }, | ||||
|         "hash-base": { | ||||
|           "version": "3.0.4", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", | ||||
|           "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5554,7 +5554,7 @@ | |||
|         }, | ||||
|         "hash.js": { | ||||
|           "version": "1.1.7", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", | ||||
|           "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5564,7 +5564,7 @@ | |||
|         }, | ||||
|         "hmac-drbg": { | ||||
|           "version": "1.0.1", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", | ||||
|           "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5575,43 +5575,43 @@ | |||
|         }, | ||||
|         "inherits": { | ||||
|           "version": "2.0.4", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", | ||||
|           "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "isexe": { | ||||
|           "version": "2.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | ||||
|           "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "keccak": { | ||||
|           "version": "1.4.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", | ||||
|           "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5623,7 +5623,7 @@ | |||
|         }, | ||||
|         "lcid": { | ||||
|           "version": "2.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", | ||||
|           "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5632,7 +5632,7 @@ | |||
|         }, | ||||
|         "locate-path": { | ||||
|           "version": "3.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", | ||||
|           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5642,7 +5642,7 @@ | |||
|         }, | ||||
|         "map-age-cleaner": { | ||||
|           "version": "0.1.3", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", | ||||
|           "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5651,7 +5651,7 @@ | |||
|         }, | ||||
|         "md5.js": { | ||||
|           "version": "1.3.5", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", | ||||
|           "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5662,7 +5662,7 @@ | |||
|         }, | ||||
|         "mem": { | ||||
|           "version": "4.3.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", | ||||
|           "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5673,37 +5673,37 @@ | |||
|         }, | ||||
|         "mimic-fn": { | ||||
|           "version": "2.1.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", | ||||
|           "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "nice-try": { | ||||
|           "version": "1.0.5", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", | ||||
|           "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5712,7 +5712,7 @@ | |||
|         }, | ||||
|         "once": { | ||||
|           "version": "1.4.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | ||||
|           "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5721,7 +5721,7 @@ | |||
|         }, | ||||
|         "os-locale": { | ||||
|           "version": "3.1.0", | ||||
|           "resolved": false, | ||||
|           "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": { | ||||
|  | @ -5732,25 +5732,25 @@ | |||
|         }, | ||||
|         "p-defer": { | ||||
|           "version": "1.0.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", | ||||
|           "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5759,7 +5759,7 @@ | |||
|         }, | ||||
|         "p-locate": { | ||||
|           "version": "3.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", | ||||
|           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5768,25 +5768,25 @@ | |||
|         }, | ||||
|         "p-try": { | ||||
|           "version": "2.2.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", | ||||
|           "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "pump": { | ||||
|           "version": "3.0.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", | ||||
|           "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5796,19 +5796,19 @@ | |||
|         }, | ||||
|         "require-directory": { | ||||
|           "version": "2.1.1", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", | ||||
|           "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5818,7 +5818,7 @@ | |||
|         }, | ||||
|         "rlp": { | ||||
|           "version": "2.2.3", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", | ||||
|           "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5828,13 +5828,13 @@ | |||
|         }, | ||||
|         "safe-buffer": { | ||||
|           "version": "5.2.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", | ||||
|           "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5850,19 +5850,19 @@ | |||
|         }, | ||||
|         "semver": { | ||||
|           "version": "5.7.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", | ||||
|           "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5872,7 +5872,7 @@ | |||
|         }, | ||||
|         "shebang-command": { | ||||
|           "version": "1.2.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", | ||||
|           "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5881,25 +5881,25 @@ | |||
|         }, | ||||
|         "shebang-regex": { | ||||
|           "version": "1.0.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "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": false, | ||||
|           "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": { | ||||
|  | @ -5909,7 +5909,7 @@ | |||
|         }, | ||||
|         "string-width": { | ||||
|           "version": "3.1.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||||
|           "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5920,7 +5920,7 @@ | |||
|         }, | ||||
|         "strip-ansi": { | ||||
|           "version": "5.2.0", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||||
|           "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5929,13 +5929,13 @@ | |||
|         }, | ||||
|         "strip-eof": { | ||||
|           "version": "1.0.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", | ||||
|           "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5944,7 +5944,7 @@ | |||
|         }, | ||||
|         "which": { | ||||
|           "version": "1.3.1", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", | ||||
|           "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5953,13 +5953,13 @@ | |||
|         }, | ||||
|         "which-module": { | ||||
|           "version": "2.0.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", | ||||
|           "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -5970,19 +5970,19 @@ | |||
|         }, | ||||
|         "wrappy": { | ||||
|           "version": "1.0.2", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | ||||
|           "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "y18n": { | ||||
|           "version": "4.0.0", | ||||
|           "resolved": false, | ||||
|           "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": false, | ||||
|           "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", | ||||
|           "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -6001,7 +6001,7 @@ | |||
|         }, | ||||
|         "yargs-parser": { | ||||
|           "version": "13.1.1", | ||||
|           "resolved": false, | ||||
|           "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", | ||||
|           "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|  | @ -21040,18 +21040,16 @@ | |||
|       } | ||||
|     }, | ||||
|     "globby": { | ||||
|       "version": "10.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", | ||||
|       "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", | ||||
|       "version": "11.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", | ||||
|       "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "@types/glob": "^7.1.1", | ||||
|         "array-union": "^2.1.0", | ||||
|         "dir-glob": "^3.0.1", | ||||
|         "fast-glob": "^3.0.3", | ||||
|         "glob": "^7.1.3", | ||||
|         "ignore": "^5.1.1", | ||||
|         "merge2": "^1.2.3", | ||||
|         "fast-glob": "^3.1.1", | ||||
|         "ignore": "^5.1.4", | ||||
|         "merge2": "^1.3.0", | ||||
|         "slash": "^3.0.0" | ||||
|       } | ||||
|     }, | ||||
|  | @ -24247,6 +24245,22 @@ | |||
|             "universalify": "^0.1.0" | ||||
|           } | ||||
|         }, | ||||
|         "globby": { | ||||
|           "version": "10.0.2", | ||||
|           "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", | ||||
|           "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "@types/glob": "^7.1.1", | ||||
|             "array-union": "^2.1.0", | ||||
|             "dir-glob": "^3.0.1", | ||||
|             "fast-glob": "^3.0.3", | ||||
|             "glob": "^7.1.3", | ||||
|             "ignore": "^5.1.1", | ||||
|             "merge2": "^1.2.3", | ||||
|             "slash": "^3.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "pify": { | ||||
|           "version": "4.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", | ||||
|  |  | |||
|  | @ -10,13 +10,13 @@ | |||
|     "buidler:main": "buidler --network main", | ||||
|     "buidler help": "buidler help", | ||||
|     "compile": "SKIP_LOAD=true buidler compile", | ||||
|     "types-gen": "typechain --target ethers-v5 --outDir ./types './artifacts/*.json'", | ||||
|     "types-gen": "npm run compile -- --force && typechain --target ethers-v5 --outDir ./types './artifacts/*.json'", | ||||
|     "test": "buidler test", | ||||
|     "test-scenarios": "buidler test test/__setup.spec.ts test/scenario.spec.ts", | ||||
|     "aave:evm:dev:migration": "buidler aave:dev", | ||||
|     "aave:evm:full:migration": "buidler aave:full", | ||||
|     "aave:kovan:dev:migration": "npm run buidler:kovan -- aave:dev --verify", | ||||
|     "aave:kovan:full:migration": "npm run buidler:kovan -- aave:full", | ||||
|     "aave:kovan:full:migration": "npm run buidler:kovan -- aave:full --verify", | ||||
|     "aave:ropsten:dev:migration": "npm run buidler:ropsten -- aave:dev --verify", | ||||
|     "aave:ropsten:full:migration": "npm run buidler:ropsten -- aave:full --verify", | ||||
|     "aave:main:dev:migration": "npm run buidler:main -- aave:dev --verify", | ||||
|  | @ -34,6 +34,7 @@ | |||
|     "test-transfers": "buidler test test/__setup.spec.ts test/atoken-transfer.spec.ts", | ||||
|     "test-flash": "buidler test test/__setup.spec.ts test/flashloan.spec.ts", | ||||
|     "test-liquidate": "buidler test test/__setup.spec.ts test/liquidation-atoken.spec.ts", | ||||
|     "test-deploy": "buidler test test/__setup.spec.ts test/test-init.spec.ts", | ||||
|     "test-pausable": "buidler test test/__setup.spec.ts test/pausable-functions.spec.ts", | ||||
|     "test-permit": "buidler test test/__setup.spec.ts test/atoken-permit.spec.ts", | ||||
|     "dev:coverage": "buidler coverage --network coverage", | ||||
|  | @ -68,6 +69,7 @@ | |||
|     "ethereum-waffle": "3.0.2", | ||||
|     "ethereumjs-util": "7.0.2", | ||||
|     "ethers": "5.0.8", | ||||
|     "globby": "^11.0.1", | ||||
|     "husky": "^4.2.5", | ||||
|     "lowdb": "1.0.0", | ||||
|     "prettier": "^2.0.5", | ||||
|  |  | |||
							
								
								
									
										187
									
								
								test/test-init.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								test/test-init.spec.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,187 @@ | |||
| import {makeSuite, TestEnv} from './helpers/make-suite'; | ||||
| import { | ||||
|   ProtocolErrors, | ||||
|   TokenContractId, | ||||
|   eContractid, | ||||
|   AavePools, | ||||
|   tEthereumAddress, | ||||
| } from '../helpers/types'; | ||||
| import {getReservesConfigByPool} from '../helpers/configuration'; | ||||
| import { | ||||
|   deployAllMockTokens, | ||||
|   deployLendingPoolAddressesProvider, | ||||
|   deployLendingPoolAddressesProviderRegistry, | ||||
|   deployLendingPool, | ||||
|   deployLendingPoolConfigurator, | ||||
|   deployPriceOracle, | ||||
|   deployChainlinkProxyPriceProvider, | ||||
|   deployLendingRateOracle, | ||||
|   deployAaveProtocolTestHelpers, | ||||
|   deployMockTokens, | ||||
| } from '../helpers/contracts-deployments'; | ||||
| import { | ||||
|   getFirstSigner, | ||||
|   getLendingPool, | ||||
|   getLendingPoolConfiguratorProxy, | ||||
|   getPairsTokenAggregator, | ||||
| } from '../helpers/contracts-getters'; | ||||
| import {insertContractAddressInDb} from '../helpers/contracts-helpers'; | ||||
| import {waitForTx} from '../helpers/misc-utils'; | ||||
| import { | ||||
|   setInitialAssetPricesInOracle, | ||||
|   deployAllMockAggregators, | ||||
|   setInitialMarketRatesInRatesOracle, | ||||
| } from '../helpers/oracles-helpers'; | ||||
| import AaveConfig from '../config/aave'; | ||||
| import {DeployTokensFactory} from '../types'; | ||||
| import {initReservesByHelper} from '../helpers/init-helpers'; | ||||
| 
 | ||||
| const MOCK_USD_PRICE_IN_WEI = AaveConfig.ProtocolGlobalParams.MockUsdPriceInWei; | ||||
| const ALL_ASSETS_INITIAL_PRICES = AaveConfig.Mocks.AllAssetsInitialPrices; | ||||
| const USD_ADDRESS = AaveConfig.ProtocolGlobalParams.UsdAddress; | ||||
| const MOCK_CHAINLINK_AGGREGATORS_PRICES = AaveConfig.Mocks.ChainlinkAggregatorPrices; | ||||
| const LENDING_RATE_ORACLE_RATES_COMMON = AaveConfig.LendingRateOracleRatesCommon; | ||||
| 
 | ||||
| makeSuite('Init helper test', (testEnv: TestEnv) => { | ||||
|   it('Check init', async () => { | ||||
|     const {deployer: deployerGuy} = testEnv; | ||||
|     const deployer = deployerGuy.signer; | ||||
| 
 | ||||
|     const aaveAdmin = await deployer.getAddress(); | ||||
| 
 | ||||
|     const mockTokens = await deployAllMockTokens(); | ||||
| 
 | ||||
|     const addressesProvider = await deployLendingPoolAddressesProvider(); | ||||
|     await waitForTx(await addressesProvider.setAaveAdmin(aaveAdmin)); | ||||
| 
 | ||||
|     const addressesProviderRegistry = await deployLendingPoolAddressesProviderRegistry(); | ||||
|     await waitForTx( | ||||
|       await addressesProviderRegistry.registerAddressesProvider(addressesProvider.address, 1) | ||||
|     ); | ||||
| 
 | ||||
|     const lendingPoolImpl = await deployLendingPool(); | ||||
| 
 | ||||
|     await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address)); | ||||
| 
 | ||||
|     const address = await addressesProvider.getLendingPool(); | ||||
|     const lendingPoolProxy = await getLendingPool(address); | ||||
| 
 | ||||
|     await insertContractAddressInDb(eContractid.LendingPool, lendingPoolProxy.address); | ||||
| 
 | ||||
|     const lendingPoolConfiguratorImpl = await deployLendingPoolConfigurator(); | ||||
|     await waitForTx( | ||||
|       await addressesProvider.setLendingPoolConfiguratorImpl(lendingPoolConfiguratorImpl.address) | ||||
|     ); | ||||
|     const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy( | ||||
|       await addressesProvider.getLendingPoolConfigurator() | ||||
|     ); | ||||
|     await insertContractAddressInDb( | ||||
|       eContractid.LendingPoolConfigurator, | ||||
|       lendingPoolConfiguratorProxy.address | ||||
|     ); | ||||
| 
 | ||||
|     const fallbackOracle = await deployPriceOracle(); | ||||
|     await waitForTx(await fallbackOracle.setEthUsdPrice(MOCK_USD_PRICE_IN_WEI)); | ||||
|     await setInitialAssetPricesInOracle( | ||||
|       ALL_ASSETS_INITIAL_PRICES, | ||||
|       { | ||||
|         WETH: mockTokens.WETH.address, | ||||
|         DAI: mockTokens.DAI.address, | ||||
|         TUSD: mockTokens.TUSD.address, | ||||
|         USDC: mockTokens.USDC.address, | ||||
|         USDT: mockTokens.USDT.address, | ||||
|         SUSD: mockTokens.SUSD.address, | ||||
|         LEND: mockTokens.LEND.address, | ||||
|         BAT: mockTokens.BAT.address, | ||||
|         REP: mockTokens.REP.address, | ||||
|         MKR: mockTokens.MKR.address, | ||||
|         LINK: mockTokens.LINK.address, | ||||
|         KNC: mockTokens.KNC.address, | ||||
|         WBTC: mockTokens.WBTC.address, | ||||
|         MANA: mockTokens.MANA.address, | ||||
|         ZRX: mockTokens.ZRX.address, | ||||
|         SNX: mockTokens.SNX.address, | ||||
|         BUSD: mockTokens.BUSD.address, | ||||
| 
 | ||||
|         USD: USD_ADDRESS, | ||||
| 
 | ||||
|         UNI_DAI_ETH: mockTokens.UNI_DAI_ETH.address, | ||||
|         UNI_USDC_ETH: mockTokens.UNI_USDC_ETH.address, | ||||
|         UNI_SETH_ETH: mockTokens.UNI_SETH_ETH.address, | ||||
|         UNI_LEND_ETH: mockTokens.UNI_LEND_ETH.address, | ||||
|         UNI_MKR_ETH: mockTokens.UNI_MKR_ETH.address, | ||||
|         UNI_LINK_ETH: mockTokens.UNI_LINK_ETH.address, | ||||
|       }, | ||||
|       fallbackOracle | ||||
|     ); | ||||
| 
 | ||||
|     const mockAggregators = await deployAllMockAggregators(MOCK_CHAINLINK_AGGREGATORS_PRICES); | ||||
| 
 | ||||
|     const allTokenAddresses = Object.entries(mockTokens).reduce( | ||||
|       (accum: {[tokenSymbol: string]: tEthereumAddress}, [tokenSymbol, tokenContract]) => ({ | ||||
|         ...accum, | ||||
|         [tokenSymbol]: tokenContract.address, | ||||
|       }), | ||||
|       {} | ||||
|     ); | ||||
|     const allAggregatorsAddresses = Object.entries(mockAggregators).reduce( | ||||
|       (accum: {[tokenSymbol: string]: tEthereumAddress}, [tokenSymbol, aggregator]) => ({ | ||||
|         ...accum, | ||||
|         [tokenSymbol]: aggregator.address, | ||||
|       }), | ||||
|       {} | ||||
|     ); | ||||
| 
 | ||||
|     const [tokens, aggregators] = getPairsTokenAggregator( | ||||
|       allTokenAddresses, | ||||
|       allAggregatorsAddresses | ||||
|     ); | ||||
| 
 | ||||
|     const chainlinkProxyPriceProvider = await deployChainlinkProxyPriceProvider([ | ||||
|       tokens, | ||||
|       aggregators, | ||||
|       fallbackOracle.address, | ||||
|     ]); | ||||
|     await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address)); | ||||
| 
 | ||||
|     const lendingRateOracle = await deployLendingRateOracle(); | ||||
|     await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle.address)); | ||||
| 
 | ||||
|     const {USD, ...tokensAddressesWithoutUsd} = allTokenAddresses; | ||||
|     const allReservesAddresses = { | ||||
|       ...tokensAddressesWithoutUsd, | ||||
|     }; | ||||
|     await setInitialMarketRatesInRatesOracle( | ||||
|       LENDING_RATE_ORACLE_RATES_COMMON, | ||||
|       allReservesAddresses, | ||||
|       lendingRateOracle | ||||
|     ); | ||||
| 
 | ||||
|     const { | ||||
|       UNI_DAI_ETH, | ||||
|       UNI_USDC_ETH, | ||||
|       UNI_SETH_ETH, | ||||
|       UNI_LINK_ETH, | ||||
|       UNI_MKR_ETH, | ||||
|       UNI_LEND_ETH, | ||||
|       ...protoPoolReservesAddresses | ||||
|     } = <{[symbol: string]: tEthereumAddress}>allReservesAddresses; | ||||
| 
 | ||||
|     const reservesParams = getReservesConfigByPool(AavePools.proto); | ||||
| 
 | ||||
|     const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address); | ||||
| 
 | ||||
|     await insertContractAddressInDb(eContractid.AaveProtocolTestHelpers, testHelpers.address); | ||||
| 
 | ||||
|     console.log('Initialize configuration'); | ||||
| 
 | ||||
|     await initReservesByHelper( | ||||
|       lendingPoolProxy.address, | ||||
|       addressesProvider.address, | ||||
|       lendingPoolConfiguratorProxy.address, | ||||
|       reservesParams, | ||||
|       protoPoolReservesAddresses, | ||||
|       testHelpers | ||||
|     ); | ||||
|   }); | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 David Racero
						David Racero