From 6eb19a2d6683c23a82cd2c368a8c66e2e01c73ff Mon Sep 17 00:00:00 2001 From: David Racero Date: Tue, 10 Nov 2020 13:11:33 +0100 Subject: [PATCH] Move verification to a separate task and run after deployment. Speed up verification via more logic to prevent too many retries. --- deployed-contracts.json | 43 +++++++--- hardhat.config.ts | 6 +- helpers/configuration.ts | 8 +- helpers/contracts-deployments.ts | 39 ++++++--- helpers/contracts-getters.ts | 49 +++++++++++ helpers/contracts-helpers.ts | 2 +- helpers/etherscan-verification.ts | 46 +++++----- helpers/types.ts | 3 + package.json | 5 +- tasks/full/6_verify.ts | 135 ++++++++++++++++++++++++++++++ tasks/migrations/aave.full.ts | 9 +- tasks/misc/verify-sc.ts | 18 ++-- 12 files changed, 295 insertions(+), 68 deletions(-) create mode 100644 tasks/full/6_verify.ts diff --git a/deployed-contracts.json b/deployed-contracts.json index 9e9ce6de..a8b5ecf3 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -251,7 +251,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x688C81eC2A0Be6F287fD8C9c343D299c03A34804", + "address": "0x8C7ECfD09Ef1F4e5558cB8ccC96e75f2F224caE8", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -265,7 +265,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xf189cC1eD07cEFB6e61082104e12673E133163f5", + "address": "0x9227414C87834383Ca84fad024AE32523Ef10F9F", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -279,7 +279,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x757855037B01c45832f8d662D217C766Ba4e8e74", + "address": "0x84EE313786A3198dD8c339708101FD44a1446871", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -293,7 +293,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xBc013D1412E0F4acacAa64CDc1c93e8A3Ecd8fF4", + "address": "0xB05737274337dCBCCC9c62A4A2b210882d7b9811", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -307,7 +307,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xba681EfB276237903df60ef92D564610A393Dbd6", + "address": "0x88cF7D778AC89282dDd4641a842Feaaad112e302", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -321,7 +321,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x59525b17808F0a7eFe62303ca46e596A5a602683" + "address": "0xD115B2Bd4B65F74f4ED61de653d0E76D1f3a9B65" }, "hardhat": { "address": "0x813F07B2100e59ba6555d0D6dBA2660c68514665" @@ -332,7 +332,7 @@ "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" }, "kovan": { - "address": "0x0a9bc0ce44e6473a1B0e30b54b7227de6E75Fd83" + "address": "0xD73c368707D7AD80B4f0C33A5AeD0EA1f5D5F40C" }, "hardhat": { "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" @@ -344,7 +344,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x882AD7981FE3d63200A23F5d009A1d0488b5ea7e", + "address": "0x9C983988764D9AE64565844C2A0349ECE513BACC", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -358,7 +358,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0x20Bfad73e3A8aA9161b5c553f7825002a175DB23", + "address": "0x29f853B79829EB9Aa8DB8D42f2398A0b89B5404B", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -411,7 +411,7 @@ "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" }, "kovan": { - "address": "0xe875775D75F384944E77086Ea54bAD008ea8004A", + "address": "0x1e20D68372F8Da94BB10aE7331eeCBf6293c3093", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -424,7 +424,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xc072D8A233C8C52239dcD6ab39954240a0699055", + "address": "0xca67A1eAE05B38Ce57AfE463f4508Ffe0133301D", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -446,7 +446,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "kovan": { - "address": "0xf896A27CDd4E3bC101aCEa86cc1cE6b7C91AEFA1", + "address": "0xA7Ba135e916BFdAE50D2cD446F02c675121E4372", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -489,6 +489,10 @@ "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, + "kovan": { + "address": "0x459ddF0837bf703E4F165F380835baF2D24Ffc11", + "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" + }, "hardhat": { "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" @@ -583,5 +587,20 @@ "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } + }, + "LendingPoolImpl": { + "kovan": { + "address": "0x74E26a9131209c5F6aa8461128b416379ec6C9B7" + } + }, + "LendingPoolConfiguratorImpl": { + "kovan": { + "address": "0xD98d801Cd300BA85Bc3ac2d911b687EA464f2cD1" + } + }, + "LendingPoolCollateralManagerImpl": { + "kovan": { + "address": "0xca67A1eAE05B38Ce57AfE463f4508Ffe0133301D" + } } } diff --git a/hardhat.config.ts b/hardhat.config.ts index 16e95299..86f60980 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -14,7 +14,8 @@ 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 = 1000000000; const HARDFORK = 'istanbul'; const INFURA_KEY = process.env.INFURA_KEY || ''; const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || ''; @@ -40,7 +41,8 @@ const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number url: `https://${networkName}.infura.io/v3/${INFURA_KEY}`, hardfork: HARDFORK, blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT, - gasMultiplier: DEFAULT_GAS_PRICE, + gasMultiplier: DEFAULT_GAS_MUL, + gasPrice: DEFAULT_GAS_PRICE, chainId: networkId, accounts: { mnemonic: MNEMONIC, diff --git a/helpers/configuration.ts b/helpers/configuration.ts index 25e47c62..68c2db4e 100644 --- a/helpers/configuration.ts +++ b/helpers/configuration.ts @@ -53,7 +53,9 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets { +export const getGenesisPoolAdmin = async ( + config: ICommonConfiguration +): Promise => { const currentNetwork = DRE.network.name; const targetAddress = getParamPerNetwork(config.PoolAdmin, currentNetwork); if (targetAddress) { @@ -66,7 +68,9 @@ export const getGenesisPoolAdmin = async (config: ICommonConfiguration) => { return addressList[addressIndex]; }; -export const getEmergencyAdmin = async (config: ICommonConfiguration) => { +export const getEmergencyAdmin = async ( + config: ICommonConfiguration +): Promise => { const currentNetwork = DRE.network.name; const targetAddress = getParamPerNetwork(config.EmergencyAdmin, currentNetwork); if (targetAddress) { diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index af4dd3c9..f61e1dcd 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -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 diff --git a/helpers/contracts-getters.ts b/helpers/contracts-getters.ts index 74b8564b..e3e22cb9 100644 --- a/helpers/contracts-getters.ts +++ b/helpers/contracts-getters.ts @@ -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,48 @@ 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() + ); diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 25624634..d3fc122c 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -83,7 +83,7 @@ export const withSaveAndVerify = async ( await waitForTx(instance.deployTransaction); await registerContractInJsonDb(id, instance); if (verify) { - await verifyContract(id, instance.address, args); + await verifyContract(instance.address, args); } return instance; }; diff --git a/helpers/etherscan-verification.ts b/helpers/etherscan-verification.ts index f9738548..902cb2fe 100644 --- a/helpers/etherscan-verification.ts +++ b/helpers/etherscan-verification.ts @@ -1,36 +1,26 @@ import {exit} from 'process'; import fs from 'fs'; -import globby from 'globby'; import {file} from 'tmp-promise'; import {DRE} from './misc-utils'; -const listSolidityFiles = (dir: string) => globby(`${dir}/**/*.sol`); - const fatalErrors = [ `The address provided as argument contains a contract, but its bytecode`, `Daily limit of 100 source code submissions reached`, + `has no bytecode. Is the contract deployed to this network`, + `The constructor for`, ]; +const okErrors = [`Contract source code already verified`]; + +const unableVerifyError = 'Fail - Unable to verify'; + export const SUPPORTED_ETHERSCAN_NETWORKS = ['main', 'ropsten', 'kovan']; -export const getEtherscanPath = async (contractName: string) => { - const paths = await listSolidityFiles(DRE.config.paths.sources); - const path = paths.find((p) => p.includes(contractName)); - if (!path) { - throw new Error( - `Contract path not found for ${contractName}. Check if smart contract file is equal to contractName input.` - ); - } - - return `${path}:${contractName}`; -}; - function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } export const verifyContract = async ( - contractName: string, address: string, constructorArguments: (string | string[])[], libraries?: string @@ -45,7 +35,6 @@ 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( @@ -61,7 +50,6 @@ export const verifyContract = async ( fs.writeSync(fd, `module.exports = ${JSON.stringify([...constructorArguments])};`); const params = { - contractName: etherscanPath, address: address, libraries, constructorArgs: path, @@ -98,16 +86,26 @@ export const runTaskWithRetry = async ( } } catch (error) { counter--; - console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`); - console.error('[ETHERSCAN][[ERROR]', error.message); - if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) { - console.error( - '[ETHERSCAN][[ERROR] Fatal error detected, skip retries and resume deployment.' - ); + if (okErrors.some((okReason) => error.message.includes(okReason))) { + console.info('[ETHERSCAN][INFO] Skipping due OK response: ', error.message); return; } + if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) { + console.error( + '[ETHERSCAN][ERROR] Fatal error detected, skip retries and resume deployment.', + error.message + ); + return; + } + console.error('[ETHERSCAN][ERROR]', error.message); + console.log(); + console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`); + if (error.message.includes(unableVerifyError)) { + console.log('[ETHERSCAN][WARNING] Trying to verify via uploading all sources.'); + delete params.relatedSources; + } await runTaskWithRetry(task, params, counter, msDelay, cleanup); } }; diff --git a/helpers/types.ts b/helpers/types.ts index df6f4afc..3d1a0e3b 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -64,6 +64,9 @@ export enum eContractid { WETH = 'WETH', WETHMocked = 'WETHMocked', SelfdestructTransferMock = 'SelfdestructTransferMock', + LendingPoolImpl = 'LendingPoolImpl', + LendingPoolConfiguratorImpl = 'LendingPoolConfiguratorImpl', + LendingPoolCollateralManagerImpl = 'LendingPoolCollateralManagerImpl', } /* diff --git a/package.json b/package.json index 870d11ac..e3786fc7 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,10 @@ "print-contracts:kovan": "npm run hardhat:kovan -- print-contracts", "print-contracts:main": "npm run hardhat:main -- print-contracts", "print-contracts:ropsten": "npm run hardhat:main -- print-contracts", - "dev:deployUIProvider": "npm run buidler:kovan deploy-UiPoolDataProvider" + "dev:deployUIProvider": "npm run hardhat:kovan deploy-UiPoolDataProvider", + "kovan:verify": "npm run hardhat:kovan full:verify -- --all --verify --pool Aave", + "ropsten:verify": "npm run hardhat:ropsten full:verify -- --all --verify --pool Aave", + "mainnet:verify": "npm run hardhat:main full:verify -- --all --verify --pool Aave" }, "devDependencies": { "@nomiclabs/buidler": "^1.4.7", diff --git a/tasks/full/6_verify.ts b/tasks/full/6_verify.ts new file mode 100644 index 00000000..a95c597f --- /dev/null +++ b/tasks/full/6_verify.ts @@ -0,0 +1,135 @@ +import {task} from 'hardhat/config'; +import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration'; +import { + getAaveProtocolTestHelpers, + 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, []); + + // Stable token + const DAI = getParamPerNetwork(ReserveAssets, network).DAI; + const USDC = getParamPerNetwork(ReserveAssets, network).USDC; + + const { + stableDebtTokenAddress, + variableDebtTokenAddress, + aTokenAddress, + interestRateStrategyAddress, + } = await lendingPoolProxy.getReserveData(DAI); + const {stableDebtTokenAddress: usdStable} = await lendingPoolProxy.getReserveData(USDC); + 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, + ]); + }); diff --git a/tasks/migrations/aave.full.ts b/tasks/migrations/aave.full.ts index 502a77ae..17fb92c6 100644 --- a/tasks/migrations/aave.full.ts +++ b/tasks/migrations/aave.full.ts @@ -20,13 +20,16 @@ task('aave:full', 'Deploy development enviroment') console.log('Migration started\n'); console.log('1. Deploy address provider'); - await localBRE.run('full:deploy-address-provider', {verify, pool: POOL_NAME}); + await localBRE.run('full:deploy-address-provider', {pool: POOL_NAME}); console.log('2. Deploy lending pool'); - await localBRE.run('full:deploy-lending-pool', {verify}); + await localBRE.run('full:deploy-lending-pool'); console.log('3. Initialize lending pool'); - await localBRE.run('full:initialize-lending-pool', {verify, pool: POOL_NAME}); + await localBRE.run('full:initialize-lending-pool', {pool: POOL_NAME}); + + console.log('4. Veryfing contracts'); + await localBRE.run('full:verify', {verify, all: true, pool: POOL_NAME}); console.log('\nFinished migrations'); printContracts(); diff --git a/tasks/misc/verify-sc.ts b/tasks/misc/verify-sc.ts index 854aa36c..81f0970c 100644 --- a/tasks/misc/verify-sc.ts +++ b/tasks/misc/verify-sc.ts @@ -9,7 +9,6 @@ interface VerifyParams { } task('verify-sc', 'Inits the DRE, to have access to all the plugins') - .addParam('contractName', 'Name of the Solidity smart contract') .addParam('address', 'Ethereum address of the smart contract') .addOptionalParam( 'libraries', @@ -20,16 +19,11 @@ task('verify-sc', 'Inits the DRE, to have access to all the plugins') 'arguments for contract constructor', [] ) - .setAction( - async ( - {contractName, address, constructorArguments = [], libraries}: VerifyParams, - localBRE - ) => { - await localBRE.run('set-DRE'); + .setAction(async ({address, constructorArguments = [], libraries}: VerifyParams, localBRE) => { + await localBRE.run('set-DRE'); - checkVerification(); + checkVerification(); - const result = await verifyContract(contractName, address, constructorArguments, libraries); - return result; - } - ); + const result = await verifyContract(address, constructorArguments, libraries); + return result; + });