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 { ) external onlyOwner {
require(tokens.length == symbols.length, 't Arrays not same length'); require(tokens.length == symbols.length, 't Arrays not same length');
require(rates.length == symbols.length, 'r Arrays not same length'); require(rates.length == symbols.length, 'r Arrays not same length');
for (uint256 i = 0; i < tokens.length; i++) { for (uint256 i = 0; i < tokens.length; i++) {
emit deployedContracts( emit deployedContracts(
address( address(

View File

@ -251,7 +251,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0x688C81eC2A0Be6F287fD8C9c343D299c03A34804", "address": "0xfD65F43f039832D703fAb8B635C7522d4966f118",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -265,7 +265,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0xf189cC1eD07cEFB6e61082104e12673E133163f5", "address": "0x082dAEDD5Ff6F6Ae58FF83Be57A3F76fC5Feff41",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -279,7 +279,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0x757855037B01c45832f8d662D217C766Ba4e8e74", "address": "0x0ed5565EdDE0cea739c30BD5b56AAaa49611929E",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -293,7 +293,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0xBc013D1412E0F4acacAa64CDc1c93e8A3Ecd8fF4", "address": "0x571270764042E5932C08066e8Da692f05A31153A",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -307,7 +307,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0xba681EfB276237903df60ef92D564610A393Dbd6", "address": "0xdb3d5013b9f51063D2d934AD717C8e7Ef90A6f19",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -321,7 +321,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0x59525b17808F0a7eFe62303ca46e596A5a602683" "address": "0x3F3BA806D66a5F3B03c7f30e94023A74eacE1c8F"
}, },
"hardhat": { "hardhat": {
"address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd", "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd",
@ -333,7 +333,7 @@
"address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238"
}, },
"kovan": { "kovan": {
"address": "0x0a9bc0ce44e6473a1B0e30b54b7227de6E75Fd83" "address": "0x2bc505Db38aEA5EfA42e07Fb3855875094E2eB44"
}, },
"hardhat": { "hardhat": {
"address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238"
@ -345,7 +345,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0x882AD7981FE3d63200A23F5d009A1d0488b5ea7e", "address": "0xA103ea2B53e53209a4b58E4F2b4cd21958C9e3AA",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -359,7 +359,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0x20Bfad73e3A8aA9161b5c553f7825002a175DB23", "address": "0xdbB044C41a395c2db96a401aFCb4367F6546B893",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -412,7 +412,7 @@
"address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c"
}, },
"kovan": { "kovan": {
"address": "0xe875775D75F384944E77086Ea54bAD008ea8004A", "address": "0xA9984C013875f4F6b0276d2EF62fe32934c93530",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -425,7 +425,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0xc072D8A233C8C52239dcD6ab39954240a0699055", "address": "0x999ce4Ed17B90A1421f1D6b8891D87Ed61cb2763",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -447,7 +447,7 @@
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": { "kovan": {
"address": "0xf896A27CDd4E3bC101aCEa86cc1cE6b7C91AEFA1", "address": "0x06C312C74F047f6009678239ada37BCE7bDC7DDb",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
}, },
"hardhat": { "hardhat": {
@ -490,6 +490,10 @@
"address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}, },
"kovan": {
"address": "0x132D4cdC59981AE25De7F67b17160d78b462d199",
"deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
},
"hardhat": { "hardhat": {
"address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
@ -584,5 +588,440 @@
"address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" "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-ethers';
import '@nomiclabs/hardhat-waffle'; import '@nomiclabs/hardhat-waffle';
import '@nomiclabs/hardhat-etherscan'; import 'temp-hardhat-etherscan';
import 'hardhat-gas-reporter'; import 'hardhat-gas-reporter';
import 'hardhat-typechain'; import 'hardhat-typechain';
const SKIP_LOAD = process.env.SKIP_LOAD === 'true'; const SKIP_LOAD = process.env.SKIP_LOAD === 'true';
const DEFAULT_BLOCK_GAS_LIMIT = 12450000; 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 HARDFORK = 'istanbul';
const INFURA_KEY = process.env.INFURA_KEY || ''; const INFURA_KEY = process.env.INFURA_KEY || '';
const ETHERSCAN_KEY = process.env.ETHERSCAN_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}`, url: `https://${networkName}.infura.io/v3/${INFURA_KEY}`,
hardfork: HARDFORK, hardfork: HARDFORK,
blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT, blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT,
gasMultiplier: DEFAULT_GAS_PRICE, gasMultiplier: DEFAULT_GAS_MUL,
gasPrice: DEFAULT_GAS_PRICE,
chainId: networkId, chainId: networkId,
accounts: { accounts: {
mnemonic: MNEMONIC, mnemonic: MNEMONIC,

View File

@ -53,7 +53,9 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets<IRes
pool pool
); );
export const getGenesisPoolAdmin = async (config: ICommonConfiguration) => { export const getGenesisPoolAdmin = async (
config: ICommonConfiguration
): Promise<tEthereumAddress> => {
const currentNetwork = DRE.network.name; const currentNetwork = DRE.network.name;
const targetAddress = getParamPerNetwork(config.PoolAdmin, <eEthereumNetwork>currentNetwork); const targetAddress = getParamPerNetwork(config.PoolAdmin, <eEthereumNetwork>currentNetwork);
if (targetAddress) { if (targetAddress) {
@ -66,7 +68,9 @@ export const getGenesisPoolAdmin = async (config: ICommonConfiguration) => {
return addressList[addressIndex]; return addressList[addressIndex];
}; };
export const getEmergencyAdmin = async (config: ICommonConfiguration) => { export const getEmergencyAdmin = async (
config: ICommonConfiguration
): Promise<tEthereumAddress> => {
const currentNetwork = DRE.network.name; const currentNetwork = DRE.network.name;
const targetAddress = getParamPerNetwork(config.EmergencyAdmin, <eEthereumNetwork>currentNetwork); const targetAddress = getParamPerNetwork(config.EmergencyAdmin, <eEthereumNetwork>currentNetwork);
if (targetAddress) { if (targetAddress) {

View File

@ -48,7 +48,12 @@ import {
Weth9MockedFactory, Weth9MockedFactory,
WethGatewayFactory, WethGatewayFactory,
} from '../types'; } from '../types';
import {withSaveAndVerify, registerContractInJsonDb, linkBytecode} from './contracts-helpers'; import {
withSaveAndVerify,
registerContractInJsonDb,
linkBytecode,
insertContractAddressInDb,
} from './contracts-helpers';
import {StableAndVariableTokensHelperFactory} from '../types/StableAndVariableTokensHelperFactory'; import {StableAndVariableTokensHelperFactory} from '../types/StableAndVariableTokensHelperFactory';
import {MintableDelegationErc20} from '../types/MintableDelegationErc20'; import {MintableDelegationErc20} from '../types/MintableDelegationErc20';
import {readArtifact as buidlerReadArtifact} from '@nomiclabs/buidler/plugins'; import {readArtifact as buidlerReadArtifact} from '@nomiclabs/buidler/plugins';
@ -76,13 +81,21 @@ export const deployLendingPoolAddressesProviderRegistry = async (verify?: boolea
verify verify
); );
export const deployLendingPoolConfigurator = async (verify?: boolean) => export const deployLendingPoolConfigurator = async (verify?: boolean) => {
withSaveAndVerify( const lendingPoolConfiguratorImpl = await new LendingPoolConfiguratorFactory(
await new LendingPoolConfiguratorFactory(await getFirstSigner()).deploy(), await getFirstSigner()
).deploy();
await insertContractAddressInDb(
eContractid.LendingPoolConfiguratorImpl,
lendingPoolConfiguratorImpl.address
);
return withSaveAndVerify(
lendingPoolConfiguratorImpl,
eContractid.LendingPoolConfigurator, eContractid.LendingPoolConfigurator,
[], [],
verify verify
); );
};
export const deployReserveLogicLibrary = async (verify?: boolean) => export const deployReserveLogicLibrary = async (verify?: boolean) =>
withSaveAndVerify( withSaveAndVerify(
@ -156,12 +169,9 @@ export const deployAaveLibraries = async (
export const deployLendingPool = async (verify?: boolean) => { export const deployLendingPool = async (verify?: boolean) => {
const libraries = await deployAaveLibraries(verify); const libraries = await deployAaveLibraries(verify);
return withSaveAndVerify( const lendingPoolImpl = await new LendingPoolFactory(libraries, await getFirstSigner()).deploy();
await new LendingPoolFactory(libraries, await getFirstSigner()).deploy(), await insertContractAddressInDb(eContractid.LendingPoolImpl, lendingPoolImpl.address);
eContractid.LendingPool, return withSaveAndVerify(lendingPoolImpl, eContractid.LendingPool, [], verify);
[],
verify
);
}; };
export const deployPriceOracle = async (verify?: boolean) => export const deployPriceOracle = async (verify?: boolean) =>
@ -200,8 +210,15 @@ export const deployChainlinkProxyPriceProvider = async (
); );
export const deployLendingPoolCollateralManager = async (verify?: boolean) => { export const deployLendingPoolCollateralManager = async (verify?: boolean) => {
const collateralManagerImpl = await new LendingPoolCollateralManagerFactory(
await getFirstSigner()
).deploy();
await insertContractAddressInDb(
eContractid.LendingPoolCollateralManagerImpl,
collateralManagerImpl.address
);
return withSaveAndVerify( return withSaveAndVerify(
await new LendingPoolCollateralManagerFactory(await getFirstSigner()).deploy(), collateralManagerImpl,
eContractid.LendingPoolCollateralManager, eContractid.LendingPoolCollateralManager,
[], [],
verify verify

View File

@ -4,8 +4,10 @@ import {
ATokensAndRatesHelperFactory, ATokensAndRatesHelperFactory,
DefaultReserveInterestRateStrategyFactory, DefaultReserveInterestRateStrategyFactory,
GenericLogicFactory, GenericLogicFactory,
InitializableAdminUpgradeabilityProxyFactory,
LendingPoolAddressesProviderFactory, LendingPoolAddressesProviderFactory,
LendingPoolAddressesProviderRegistryFactory, LendingPoolAddressesProviderRegistryFactory,
LendingPoolCollateralManagerFactory,
LendingPoolConfiguratorFactory, LendingPoolConfiguratorFactory,
LendingPoolFactory, LendingPoolFactory,
LendingRateOracleFactory, LendingRateOracleFactory,
@ -20,11 +22,13 @@ import {
StableAndVariableTokensHelperFactory, StableAndVariableTokensHelperFactory,
StableDebtTokenFactory, StableDebtTokenFactory,
VariableDebtTokenFactory, VariableDebtTokenFactory,
WalletBalanceProviderFactory,
Weth9Factory, Weth9Factory,
Weth9MockedFactory, Weth9MockedFactory,
WethGatewayFactory, WethGatewayFactory,
} from '../types'; } from '../types';
import {Ierc20DetailedFactory} from '../types/Ierc20DetailedFactory'; import {Ierc20DetailedFactory} from '../types/Ierc20DetailedFactory';
import {UpgradeabilityProxy} from '../types/UpgradeabilityProxy';
import {MockTokenMap} from './contracts-helpers'; import {MockTokenMap} from './contracts-helpers';
import {DRE, getDb} from './misc-utils'; import {DRE, getDb} from './misc-utils';
import {eContractid, PoolConfiguration, tEthereumAddress, TokenContractId} from './types'; import {eContractid, PoolConfiguration, tEthereumAddress, TokenContractId} from './types';
@ -271,3 +275,51 @@ export const getSelfdestructTransferMock = async (address?: tEthereumAddress) =>
.address, .address,
await getFirstSigner() 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(); .write();
export const rawInsertContractAddressInDb = async (id: string, address: tEthereumAddress) =>
await getDb()
.set(`${id}.${DRE.network.name}`, {
address,
})
.write();
export const getEthersSigners = async (): Promise<Signer[]> => export const getEthersSigners = async (): Promise<Signer[]> =>
await Promise.all(await DRE.ethers.getSigners()); await Promise.all(await DRE.ethers.getSigners());
@ -83,7 +90,7 @@ export const withSaveAndVerify = async <ContractType extends Contract>(
await waitForTx(instance.deployTransaction); await waitForTx(instance.deployTransaction);
await registerContractInJsonDb(id, instance); await registerContractInJsonDb(id, instance);
if (verify) { if (verify) {
await verifyContract(id, instance.address, args); await verifyContract(instance.address, args);
} }
return instance; return instance;
}; };

View File

@ -1,36 +1,26 @@
import {exit} from 'process'; import {exit} from 'process';
import fs from 'fs'; import fs from 'fs';
import globby from 'globby';
import {file} from 'tmp-promise'; import {file} from 'tmp-promise';
import {DRE} from './misc-utils'; import {DRE} from './misc-utils';
const listSolidityFiles = (dir: string) => globby(`${dir}/**/*.sol`);
const fatalErrors = [ const fatalErrors = [
`The address provided as argument contains a contract, but its bytecode`, `The address provided as argument contains a contract, but its bytecode`,
`Daily limit of 100 source code submissions reached`, `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 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) { function delay(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms));
} }
export const verifyContract = async ( export const verifyContract = async (
contractName: string,
address: string, address: string,
constructorArguments: (string | string[])[], constructorArguments: (string | string[])[],
libraries?: 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()}` `Current network ${currentNetwork} not supported. Please change to one of the next networks: ${SUPPORTED_ETHERSCAN_NETWORKS.toString()}`
); );
} }
const etherscanPath = await getEtherscanPath(contractName);
try { try {
console.log( console.log(
'[ETHERSCAN][WARNING] Delaying Etherscan verification due their API can not find newly deployed contracts' '[ETHERSCAN][WARNING] Delaying Etherscan verification due their API can not find newly deployed contracts'
); );
const msDelay = 3000; 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 // 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({ const {fd, path, cleanup} = await file({
prefix: 'verify-params-', prefix: 'verify-params-',
@ -61,10 +50,10 @@ export const verifyContract = async (
fs.writeSync(fd, `module.exports = ${JSON.stringify([...constructorArguments])};`); fs.writeSync(fd, `module.exports = ${JSON.stringify([...constructorArguments])};`);
const params = { const params = {
contractName: etherscanPath,
address: address, address: address,
libraries, libraries,
constructorArgs: path, constructorArgs: path,
relatedSources: true,
}; };
await runTaskWithRetry('verify', params, times, msDelay, cleanup); await runTaskWithRetry('verify', params, times, msDelay, cleanup);
} catch (error) {} } catch (error) {}
@ -81,7 +70,12 @@ export const runTaskWithRetry = async (
await delay(msDelay); await delay(msDelay);
try { 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); await DRE.run(task, params);
cleanup(); cleanup();
} else { } else {
@ -92,16 +86,26 @@ export const runTaskWithRetry = async (
} }
} catch (error) { } catch (error) {
counter--; counter--;
console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`);
console.error('[ETHERSCAN][[ERROR]', error.message);
if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) { if (okErrors.some((okReason) => error.message.includes(okReason))) {
console.error( console.info('[ETHERSCAN][INFO] Skipping due OK response: ', error.message);
'[ETHERSCAN][[ERROR] Fatal error detected, skip retries and resume deployment.'
);
return; 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); 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 {LendingPoolConfigurator} from '../types/LendingPoolConfigurator';
import {AaveProtocolTestHelpers} from '../types/AaveProtocolTestHelpers'; import {AaveProtocolTestHelpers} from '../types/AaveProtocolTestHelpers';
import { import {
@ -11,6 +11,7 @@ import {
getLendingPoolAddressesProvider, getLendingPoolAddressesProvider,
getStableAndVariableTokensHelper, getStableAndVariableTokensHelper,
} from './contracts-getters'; } from './contracts-getters';
import {insertContractAddressInDb, rawInsertContractAddressInDb} from './contracts-helpers';
export const initReservesByHelper = async ( export const initReservesByHelper = async (
reservesParams: iMultiPoolsAssets<IReserveParams>, reservesParams: iMultiPoolsAssets<IReserveParams>,
@ -89,12 +90,15 @@ export const initReservesByHelper = async (
reservesDecimals.push(reserveDecimals); reservesDecimals.push(reserveDecimals);
} }
// Deploy stable and variable deployers // Deploy stable and variable deployers and save implementations
const tx1 = await waitForTx( const tx1 = await waitForTx(
await stableAndVariableDeployer.initDeployment(tokens, symbols, incentivesController) await stableAndVariableDeployer.initDeployment(tokens, symbols, incentivesController)
); );
tx1.events?.forEach((event, index) => {
// Deploy atokens and rate strategies 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( const tx2 = await waitForTx(
await atokenAndRatesDeployer.initDeployment( await atokenAndRatesDeployer.initDeployment(
tokens, tokens,
@ -103,6 +107,11 @@ export const initReservesByHelper = async (
incentivesController 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(', ')} `); console.log(` - Deployed aToken, DebtTokens and Strategy for: ${symbols.join(', ')} `);
const stableTokens: string[] = tx1.events?.map((e) => e.args?.stableToken) || []; const stableTokens: string[] = tx1.events?.map((e) => e.args?.stableToken) || [];
const variableTokens: string[] = tx1.events?.map((e) => e.args?.variableToken) || []; const variableTokens: string[] = tx1.events?.map((e) => e.args?.variableToken) || [];

View File

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

527
package-lock.json generated
View File

@ -1115,253 +1115,6 @@
"integrity": "sha512-fIi6XP9PgKqwSNVcLDr6S5hvGlc21PendaLD5eGdXEXc9aYQ0OJX8Mk3evs+p78x7W9n9U3ZcKtTiGc1+YScDw==", "integrity": "sha512-fIi6XP9PgKqwSNVcLDr6S5hvGlc21PendaLD5eGdXEXc9aYQ0OJX8Mk3evs+p78x7W9n9U3ZcKtTiGc1+YScDw==",
"dev": true "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": { "@nomiclabs/hardhat-waffle": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.0.tgz", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.0.tgz",
@ -8058,9 +7811,9 @@
}, },
"dependencies": { "dependencies": {
"get-stream": { "get-stream": {
"version": "5.1.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
@ -13843,16 +13596,6 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true "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": { "scrypt-js": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
@ -15354,9 +15097,9 @@
}, },
"dependencies": { "dependencies": {
"@types/node": { "@types/node": {
"version": "12.12.53", "version": "12.19.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.3.tgz",
"integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ==", "integrity": "sha512-8Jduo8wvvwDzEVJCOvS/G6sgilOLvvhn1eMmK3TW8/T217O7u1jdrK6ImKLv80tVryaPSVeKu6sjDEiFjd4/eg==",
"dev": true, "dev": true,
"optional": 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": { "scrypt-js": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "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": { "test-value": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", "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:kovan": "npm run hardhat:kovan -- print-contracts",
"print-contracts:main": "npm run hardhat:main -- print-contracts", "print-contracts:main": "npm run hardhat:main -- print-contracts",
"print-contracts:ropsten": "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": { "devDependencies": {
"@nomiclabs/buidler": "^1.4.7", "@nomiclabs/buidler": "^1.4.7",
@ -61,7 +64,6 @@
"@nomiclabs/buidler-etherscan": "^2.1.0", "@nomiclabs/buidler-etherscan": "^2.1.0",
"@nomiclabs/buidler-waffle": "2.0.0", "@nomiclabs/buidler-waffle": "2.0.0",
"@nomiclabs/hardhat-ethers": "^2.0.0", "@nomiclabs/hardhat-ethers": "^2.0.0",
"@nomiclabs/hardhat-etherscan": "^2.0.0",
"@nomiclabs/hardhat-waffle": "^2.0.0", "@nomiclabs/hardhat-waffle": "^2.0.0",
"@openzeppelin/contracts": "3.1.0", "@openzeppelin/contracts": "3.1.0",
"@typechain/ethers-v4": "1.0.0", "@typechain/ethers-v4": "1.0.0",
@ -93,6 +95,7 @@
"prettier-plugin-solidity": "^1.0.0-alpha.53", "prettier-plugin-solidity": "^1.0.0-alpha.53",
"pretty-quick": "^2.0.1", "pretty-quick": "^2.0.1",
"solidity-coverage": "0.7.10", "solidity-coverage": "0.7.10",
"temp-hardhat-etherscan": "^2.0.2",
"ts-generator": "0.0.8", "ts-generator": "0.0.8",
"ts-node": "^8.10.2", "ts-node": "^8.10.2",
"tslint": "^6.1.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('Migration started\n');
console.log('1. Deploy address provider'); 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'); 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'); 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'); console.log('\nFinished migrations');
printContracts(); printContracts();

View File

@ -9,7 +9,6 @@ interface VerifyParams {
} }
task('verify-sc', 'Inits the DRE, to have access to all the plugins') 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') .addParam('address', 'Ethereum address of the smart contract')
.addOptionalParam( .addOptionalParam(
'libraries', 'libraries',
@ -20,16 +19,11 @@ task('verify-sc', 'Inits the DRE, to have access to all the plugins')
'arguments for contract constructor', 'arguments for contract constructor',
[] []
) )
.setAction( .setAction(async ({address, constructorArguments = [], libraries}: VerifyParams, localBRE) => {
async ( await localBRE.run('set-DRE');
{contractName, address, constructorArguments = [], libraries}: VerifyParams,
localBRE
) => {
await localBRE.run('set-DRE');
checkVerification(); checkVerification();
const result = await verifyContract(contractName, address, constructorArguments, libraries); const result = await verifyContract(address, constructorArguments, libraries);
return result; return result;
} });
);