Merge branch 'feat/hardhat-etherscan-dependency-graph' into 'master'

Upload source dependency graph instead of all source code while etherscan verification

See merge request aave-tech/protocol-v2!137
This commit is contained in:
Ernesto Boado 2020-11-10 13:58:38 +00:00
commit 4a836740d0
15 changed files with 1056 additions and 340 deletions

View File

@ -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(

View File

@ -251,7 +251,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0x688C81eC2A0Be6F287fD8C9c343D299c03A34804",
"address": "0xfD65F43f039832D703fAb8B635C7522d4966f118",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -265,7 +265,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0xf189cC1eD07cEFB6e61082104e12673E133163f5",
"address": "0x082dAEDD5Ff6F6Ae58FF83Be57A3F76fC5Feff41",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -279,7 +279,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0x757855037B01c45832f8d662D217C766Ba4e8e74",
"address": "0x0ed5565EdDE0cea739c30BD5b56AAaa49611929E",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -293,7 +293,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0xBc013D1412E0F4acacAa64CDc1c93e8A3Ecd8fF4",
"address": "0x571270764042E5932C08066e8Da692f05A31153A",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -307,7 +307,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0xba681EfB276237903df60ef92D564610A393Dbd6",
"address": "0xdb3d5013b9f51063D2d934AD717C8e7Ef90A6f19",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -321,7 +321,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0x59525b17808F0a7eFe62303ca46e596A5a602683"
"address": "0x3F3BA806D66a5F3B03c7f30e94023A74eacE1c8F"
},
"hardhat": {
"address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd",
@ -333,7 +333,7 @@
"address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238"
},
"kovan": {
"address": "0x0a9bc0ce44e6473a1B0e30b54b7227de6E75Fd83"
"address": "0x2bc505Db38aEA5EfA42e07Fb3855875094E2eB44"
},
"hardhat": {
"address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238"
@ -345,7 +345,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0x882AD7981FE3d63200A23F5d009A1d0488b5ea7e",
"address": "0xA103ea2B53e53209a4b58E4F2b4cd21958C9e3AA",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -359,7 +359,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0x20Bfad73e3A8aA9161b5c553f7825002a175DB23",
"address": "0xdbB044C41a395c2db96a401aFCb4367F6546B893",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -412,7 +412,7 @@
"address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c"
},
"kovan": {
"address": "0xe875775D75F384944E77086Ea54bAD008ea8004A",
"address": "0xA9984C013875f4F6b0276d2EF62fe32934c93530",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -425,7 +425,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0xc072D8A233C8C52239dcD6ab39954240a0699055",
"address": "0x999ce4Ed17B90A1421f1D6b8891D87Ed61cb2763",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -447,7 +447,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0xf896A27CDd4E3bC101aCEa86cc1cE6b7C91AEFA1",
"address": "0x06C312C74F047f6009678239ada37BCE7bDC7DDb",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
@ -490,6 +490,10 @@
"address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
},
"kovan": {
"address": "0x132D4cdC59981AE25De7F67b17160d78b462d199",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": {
"address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
@ -584,5 +588,440 @@
"address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LendingPoolImpl": {
"kovan": {
"address": "0x6152D1d883F4C5dA18B47FE45e6eB2Ee79339E78"
}
},
"LendingPoolConfiguratorImpl": {
"kovan": {
"address": "0x46c410d5636dF430Ff1a7DDff7683d6CfdBF4A09"
}
},
"LendingPoolCollateralManagerImpl": {
"kovan": {
"address": "0x999ce4Ed17B90A1421f1D6b8891D87Ed61cb2763"
}
},
"stableDebtAAVE": {
"kovan": {
"address": "0xc206d99A916A45bAa74663C38F063C5f16d566bb"
}
},
"variableDebtAAVE": {
"kovan": {
"address": "0xCBd4194aB034AcD234400F742Bf3093b917aa581"
}
},
"stableDebtBAT": {
"kovan": {
"address": "0x2Af9Ce7274Ca7084abbf0Db313aEFA289D361A12"
}
},
"variableDebtBAT": {
"kovan": {
"address": "0x2962aCbeDa9d1A258E1cBb99A6435A3D2F1af5eE"
}
},
"stableDebtBUSD": {
"kovan": {
"address": "0x58704aB618678c58a11e86f1cf7b3ddACB659114"
}
},
"variableDebtBUSD": {
"kovan": {
"address": "0x3903DB7B363A1C0B5272a53cA3B27d9D7759DE53"
}
},
"stableDebtDAI": {
"kovan": {
"address": "0xe3CD1bbB9041b8c32D1ec96210842Ee1d91872B4"
}
},
"variableDebtDAI": {
"kovan": {
"address": "0x6207fdDba94b932A73f02a988A760BBd4d942152"
}
},
"aAAVE": {
"kovan": {
"address": "0x84145b267060bf9eE8FCA80324498A7444c8e821"
}
},
"strategyAAVE": {
"kovan": {
"address": "0x367356225e3BFA34c1cb447CFCdEE7a2D2dB38B5"
}
},
"aBAT": {
"kovan": {
"address": "0x2490F90399e169381DF8c78F81aC635f4be0d8A3"
}
},
"strategyBAT": {
"kovan": {
"address": "0xac86Db376b8255d8FD8e41B092535875471eE311"
}
},
"aBUSD": {
"kovan": {
"address": "0x6645315FA490C24e7969439EeF4c143ce69B3035"
}
},
"strategyBUSD": {
"kovan": {
"address": "0xf4F7F30a34FDdB1Fd5B166CF121E2786a62B96Aa"
}
},
"aDAI": {
"kovan": {
"address": "0xb1967F5b6e65705ACF985437f5743a63eDa20F73"
}
},
"strategyDAI": {
"kovan": {
"address": "0x0ffeB139529D3DA091F8239712D25eab404C4421"
}
},
"stableDebtENJ": {
"kovan": {
"address": "0x59FF56F1bE382464468637e59c5Ae57398B143cF"
}
},
"variableDebtENJ": {
"kovan": {
"address": "0xb6DA3a57ea0A5b3C4f1926E9238c6F34b5B61eca"
}
},
"stableDebtKNC": {
"kovan": {
"address": "0x813863F06b228DAC48ed2E861a3c07eD10e8D2F0"
}
},
"variableDebtKNC": {
"kovan": {
"address": "0x8B08B2678D105Bf32F8F5A2013382773b2b24733"
}
},
"stableDebtLINK": {
"kovan": {
"address": "0x86A28c4B9Bc2BFc03743b136405B63e6ceB4e963"
}
},
"variableDebtLINK": {
"kovan": {
"address": "0x7A68F4382419D86c90cc069EF692BaaCfd3301Da"
}
},
"stableDebtMANA": {
"kovan": {
"address": "0xb61c3B1BF95B78eCC327ddcd614ba96FEe8127b0"
}
},
"variableDebtMANA": {
"kovan": {
"address": "0x196143A06206c5d47394c114ad5318b85CAC2E88"
}
},
"aENJ": {
"kovan": {
"address": "0xF2F9f31FFB0f8d43974B05Bb560f093b441F5B1b"
}
},
"strategyENJ": {
"kovan": {
"address": "0x66d0B7Ccd0C9a76A831334e9fE8a71680DD0A9e2"
}
},
"aKNC": {
"kovan": {
"address": "0x5675D816D05cEF2bBF2737EbD55727549D4143e0"
}
},
"strategyKNC": {
"kovan": {
"address": "0x8C7d058c50b241dD01d6a6d4E2a10C6c78e21eB3"
}
},
"aLINK": {
"kovan": {
"address": "0x729c933284e8226137cd8a5ec39bD20A9c4c49F9"
}
},
"strategyLINK": {
"kovan": {
"address": "0xB09a6AB9d32a576e73159083aFE9aBe14c29173E"
}
},
"aMANA": {
"kovan": {
"address": "0xB98571944af08b8698622Ab0A988c59738Cf2AB8"
}
},
"strategyMANA": {
"kovan": {
"address": "0xB44Ca018DB828f67C2BaFb6846AF12c5cCb92122"
}
},
"stableDebtMKR": {
"kovan": {
"address": "0x536FA5ACA31cA1FE60Ec8a54432bA8E08E86222E"
}
},
"variableDebtMKR": {
"kovan": {
"address": "0x6BF5055Fe4312194723888875Ce73A9461510344"
}
},
"stableDebtREN": {
"kovan": {
"address": "0x2372E7a3d03e18F6ece2FDcb453c03e609134842"
}
},
"variableDebtREN": {
"kovan": {
"address": "0x89C3b25C3C4d7f7Fd25B8cCe1De60Af835696C1B"
}
},
"stableDebtREP": {
"kovan": {
"address": "0x9ED2D2d415A262487D7f0a3Ec62E8467fd3CF278"
}
},
"variableDebtREP": {
"kovan": {
"address": "0xe1333768d0209078254215A131d49E3dE36F4617"
}
},
"stableDebtSNX": {
"kovan": {
"address": "0xB14dbC77a03703074ed8a95f288413985f996b99"
}
},
"variableDebtSNX": {
"kovan": {
"address": "0x77E31F2CDC45921156df5288D4dB20D3A5A915f2"
}
},
"aMKR": {
"kovan": {
"address": "0xd87c0D428f89D54176808A3e78632c90C44fF5a5"
}
},
"strategyMKR": {
"kovan": {
"address": "0x349E1B2e94b600Dd09817924207E50A6660fAF2B"
}
},
"aREN": {
"kovan": {
"address": "0x9410999dFA3527317f0Ae3b5D2A54c213A48f9d1"
}
},
"strategyREN": {
"kovan": {
"address": "0x192638591E5Bb456498E380cf91f456Fef21C4b4"
}
},
"aREP": {
"kovan": {
"address": "0x8C94FE9CE952738C48799326E63294626e1A3C7c"
}
},
"strategyREP": {
"kovan": {
"address": "0x1D2F67F9bb6db702067Fbb0D400c864a1ffC5594"
}
},
"aSNX": {
"kovan": {
"address": "0x2473e6Ed1F9cbcc3141eB04AEd432BaAB575fDD1"
}
},
"strategySNX": {
"kovan": {
"address": "0x75cb1cEB23956D20b94fF63ec9dB0990E5920A91"
}
},
"stableDebtSUSD": {
"kovan": {
"address": "0xD59F6350A3a75cfa09Df8A182BF55be37f8A8840"
}
},
"variableDebtSUSD": {
"kovan": {
"address": "0xcd8b423809eb2565f0e0f2d0435dFBAdcBBdCF18"
}
},
"stableDebtTUSD": {
"kovan": {
"address": "0xA3b22b35DAee9F2E73F2A05eF57799B821513930"
}
},
"variableDebtTUSD": {
"kovan": {
"address": "0x648663CD12F9BCde674c18a1F04A455e23aFc6b3"
}
},
"stableDebtUNI": {
"kovan": {
"address": "0x30E2aBE48E78646347C3Cf8C437AE965AB6e9303"
}
},
"variableDebtUNI": {
"kovan": {
"address": "0x83028921E12c9adB6c7bBa1d6872C9e771bbEC20"
}
},
"stableDebtUSDC": {
"kovan": {
"address": "0xe86554cd90D2d8BF7fd5F3931F833e7c1604CbCE"
}
},
"variableDebtUSDC": {
"kovan": {
"address": "0x5d4d415f627a10b20f5B3E8A1bbB4D3190761cE0"
}
},
"aSUSD": {
"kovan": {
"address": "0x6a179aD153474df2af72b963145C1310727F65a7"
}
},
"strategySUSD": {
"kovan": {
"address": "0x570114BcC09d440A7973e406A5c1b55C394c90aD"
}
},
"aTUSD": {
"kovan": {
"address": "0x0290a0b6B5D249fD98F31Ae887F6d5B4d6C4A56F"
}
},
"strategyTUSD": {
"kovan": {
"address": "0x9686D4f25eB0E4E72d2Eef22c66a3E1d9a42aca2"
}
},
"aUNI": {
"kovan": {
"address": "0x3414b75532c400fb983a9fA22d71Cb45A05ADd2c"
}
},
"strategyUNI": {
"kovan": {
"address": "0x9A01E6f57863bb03f7ED2ebad57123476e450FA9"
}
},
"aUSDC": {
"kovan": {
"address": "0xB98DA540268F26Eb3A328F6c183BB3A5dCb1943b"
}
},
"strategyUSDC": {
"kovan": {
"address": "0xF727D07a89C98A5296CcCa71cE3Cda4f027965a9"
}
},
"stableDebtUSDT": {
"kovan": {
"address": "0xc6b875BAec3472520da7c9755E2bFF98a1DbB89F"
}
},
"variableDebtUSDT": {
"kovan": {
"address": "0x935626db98525589969745e5edc2C9256E380e17"
}
},
"stableDebtWBTC": {
"kovan": {
"address": "0xD5f7F2A4175B40cbdc53c952103AB427656D9C81"
}
},
"variableDebtWBTC": {
"kovan": {
"address": "0xf11b889cB033a51391181f0180A27489484F832c"
}
},
"stableDebtWETH": {
"kovan": {
"address": "0x06Df93951238B7aBeCBDceE767bF76f0119Ef6dd"
}
},
"variableDebtWETH": {
"kovan": {
"address": "0x920e55564a59967FB7A9cbB52D806FcF9093fda9"
}
},
"stableDebtYFI": {
"kovan": {
"address": "0xFa29EA4a56192B3435D1B44c06c105d6A68934eb"
}
},
"variableDebtYFI": {
"kovan": {
"address": "0x6888B4E246af31Abd68b8809C559dBAe005F3f8C"
}
},
"aUSDT": {
"kovan": {
"address": "0xcC43E5f28B99359A91241C3C7724329752959315"
}
},
"strategyUSDT": {
"kovan": {
"address": "0x258B11Fe8840465aB532672Cae7552E9b9164868"
}
},
"aWBTC": {
"kovan": {
"address": "0x5Df7c6D2bC373B5D4401A5Fb53c2ca0c5D54f3D9"
}
},
"strategyWBTC": {
"kovan": {
"address": "0x9499FD7ca03BC886D9D5206Eb13ef49aFAd762D9"
}
},
"aWETH": {
"kovan": {
"address": "0xC304Ee9c505e4Aa890E4738df1cd51eF344AE1af"
}
},
"strategyWETH": {
"kovan": {
"address": "0x6dcb41D1EA0e01d5b411B51459F14c8DEe0271B1"
}
},
"aYFI": {
"kovan": {
"address": "0xb88b11E148741c7182e3dF7f50f445174BFA6C80"
}
},
"strategyYFI": {
"kovan": {
"address": "0x0bDd002c01D54129ef2D258Ce39fEeC63E37d0DF"
}
},
"stableDebtZRX": {
"kovan": {
"address": "0x76309814279AbD6bfCA3722Db8dEC502F98012E1"
}
},
"variableDebtZRX": {
"kovan": {
"address": "0x818215a596C8Cc8D27A4dC76c12e8A138570ed9B"
}
},
"aZRX": {
"kovan": {
"address": "0x66Bf0A6886AC7024015C8020B0aFEdacD41b60c3"
}
},
"strategyZRX": {
"kovan": {
"address": "0xC0499607b25dd626DF59343d7fCF246E4D875136"
}
}
}

View File

@ -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,

View File

@ -53,7 +53,9 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets<IRes
pool
);
export const getGenesisPoolAdmin = async (config: ICommonConfiguration) => {
export const getGenesisPoolAdmin = async (
config: ICommonConfiguration
): Promise<tEthereumAddress> => {
const currentNetwork = DRE.network.name;
const targetAddress = getParamPerNetwork(config.PoolAdmin, <eEthereumNetwork>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<tEthereumAddress> => {
const currentNetwork = DRE.network.name;
const targetAddress = getParamPerNetwork(config.EmergencyAdmin, <eEthereumNetwork>currentNetwork);
if (targetAddress) {

View File

@ -48,7 +48,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';
@ -76,13 +81,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(
@ -156,12 +169,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) =>
@ -200,8 +210,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

View File

@ -4,8 +4,10 @@ import {
ATokensAndRatesHelperFactory,
DefaultReserveInterestRateStrategyFactory,
GenericLogicFactory,
InitializableAdminUpgradeabilityProxyFactory,
LendingPoolAddressesProviderFactory,
LendingPoolAddressesProviderRegistryFactory,
LendingPoolCollateralManagerFactory,
LendingPoolConfiguratorFactory,
LendingPoolFactory,
LendingRateOracleFactory,
@ -20,11 +22,13 @@ import {
StableAndVariableTokensHelperFactory,
StableDebtTokenFactory,
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';
@ -271,3 +275,51 @@ export const getSelfdestructTransferMock = async (address?: tEthereumAddress) =>
.address,
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;

View File

@ -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<Signer[]> =>
await Promise.all(await DRE.ethers.getSigners());
@ -83,7 +90,7 @@ export const withSaveAndVerify = async <ContractType extends Contract>(
await waitForTx(instance.deployTransaction);
await registerContractInJsonDb(id, instance);
if (verify) {
await verifyContract(id, instance.address, args);
await verifyContract(instance.address, args);
}
return instance;
};

View File

@ -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);
}
};

View File

@ -1,4 +1,4 @@
import {iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types';
import {eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types';
import {LendingPoolConfigurator} from '../types/LendingPoolConfigurator';
import {AaveProtocolTestHelpers} from '../types/AaveProtocolTestHelpers';
import {
@ -11,6 +11,7 @@ import {
getLendingPoolAddressesProvider,
getStableAndVariableTokensHelper,
} from './contracts-getters';
import {insertContractAddressInDb, rawInsertContractAddressInDb} from './contracts-helpers';
export const initReservesByHelper = async (
reservesParams: iMultiPoolsAssets<IReserveParams>,
@ -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) || [];

View File

@ -64,6 +64,9 @@ export enum eContractid {
WETH = 'WETH',
WETHMocked = 'WETHMocked',
SelfdestructTransferMock = 'SelfdestructTransferMock',
LendingPoolImpl = 'LendingPoolImpl',
LendingPoolConfiguratorImpl = 'LendingPoolConfiguratorImpl',
LendingPoolCollateralManagerImpl = 'LendingPoolCollateralManagerImpl',
}
/*

527
package-lock.json generated
View File

@ -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",
@ -8058,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": {
@ -13843,16 +13596,6 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"scrypt": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz",
"integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=",
"dev": true,
"optional": true,
"requires": {
"nan": "^2.0.8"
}
},
"scrypt-js": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
@ -15354,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
}
@ -19464,6 +19207,16 @@
}
}
},
"scrypt": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz",
"integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=",
"dev": true,
"optional": true,
"requires": {
"nan": "^2.0.8"
}
},
"scrypt-js": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
@ -20264,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",

View File

@ -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",
@ -93,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",

179
tasks/full/6_verify.ts Normal file
View File

@ -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 {
getAaveProtocolTestHelpers,
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 testHelpers = await getAaveProtocolTestHelpers();
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 Helpers...\n');
await verifyContract(testHelpers.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,
]);
});

View File

@ -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();

View File

@ -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;
});