Merge branch 'feat/token-verification-loop-and-fix-lending-rate-oracle-task' into 'master'

Fixes task related with LendingOracle. Add token verification task.

See merge request aave-tech/protocol-v2!157
This commit is contained in:
Ernesto Boado 2020-11-11 10:29:17 +00:00
commit f73db4dbd9
7 changed files with 127 additions and 15 deletions

View File

@ -135,7 +135,7 @@ export const stablecoinStrategySUSD: IReserveParams = {
liquidationBonus: '0',
borrowingEnabled: false,
stableBorrowRateEnabled: false,
reserveDecimals: '18',
reserveDecimals: '6',
};
export const strategySNX: IReserveParams = {

View File

@ -24,7 +24,7 @@ const MNEMONIC = process.env.MNEMONIC || '';
// Prevent to load scripts before compilation and typechain
if (!SKIP_LOAD) {
['misc', 'migrations', 'dev', 'full'].forEach((folder) => {
['misc', 'migrations', 'dev', 'full', 'verifications'].forEach((folder) => {
const tasksPath = path.join(__dirname, 'tasks', folder);
fs.readdirSync(tasksPath)
.filter((pth) => pth.includes('.ts'))

View File

@ -54,9 +54,12 @@
"print-contracts:main": "npm run hardhat:main -- print-contracts",
"print-contracts:ropsten": "npm run hardhat:main -- print-contracts",
"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"
"kovan:verify": "npm run hardhat:kovan verify:general -- --all --pool Aave",
"ropsten:verify": "npm run hardhat:ropsten verify:general -- --all --pool Aave",
"mainnet:verify": "npm run hardhat:main verify:general -- --all --pool Aave",
"kovan:verify:tokens": "npm run hardhat:kovan verify:tokens -- --pool Aave",
"ropsten:verify:tokens": "npm run hardhat:ropsten verify:tokens -- --pool Aave",
"mainnet:verify:tokens": "npm run hardhat:main verify:tokens -- --pool Aave"
},
"devDependencies": {
"@nomiclabs/buidler": "^1.4.7",

View File

@ -58,7 +58,6 @@ task(
const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network);
if (lendingRateOracle && lendingRateOracle !== '') {
await waitForTx(await addressesProvider.setLendingRateOracle(proxyProvider));
await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle));
}
});

View File

@ -28,9 +28,14 @@ task('aave:full', 'Deploy development enviroment')
console.log('3. Initialize lending pool');
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});
if (verify) {
printContracts();
console.log('4. Veryfing contracts');
await localBRE.run('verify:general', {all: true, pool: POOL_NAME});
console.log('5. Veryfing aTokens and debtTokens');
await localBRE.run('verify:tokens', {pool: POOL_NAME});
}
console.log('\nFinished migrations');
printContracts();
});

View File

@ -20,11 +20,10 @@ 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')
task('verify:general', 'Deploy oracles for dev enviroment')
.addFlag('all', 'Verify all contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, all, pool}, localDRE) => {
.setAction(async ({all, pool}, localDRE) => {
await localDRE.run('set-DRE');
const network = localDRE.network.name as eEthereumNetwork;
const poolConfig = loadPoolConfig(pool);
@ -36,9 +35,6 @@ task('full:verify', 'Deploy oracles for dev enviroment')
const lendingPoolConfigurator = await getLendingPoolConfiguratorProxy();
const lendingPoolCollateralManager = await getLendingPoolCollateralManager();
if (!verify) {
return;
}
if (all) {
const lendingPoolImpl = await getLendingPoolImpl();
const lendingPoolConfiguratorImpl = await getLendingPoolConfiguratorImpl();

View File

@ -0,0 +1,109 @@
import {task} from 'hardhat/config';
import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration';
import {ZERO_ADDRESS} from '../../helpers/constants';
import {
getAddressById,
getLendingPool,
getLendingPoolAddressesProvider,
getLendingPoolConfiguratorProxy,
} from '../../helpers/contracts-getters';
import {getParamPerNetwork} from '../../helpers/contracts-helpers';
import {verifyContract} from '../../helpers/etherscan-verification';
import {eEthereumNetwork, ICommonConfiguration, IReserveParams} from '../../helpers/types';
task('verify:tokens', 'Deploy oracles for dev enviroment')
.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 lendingPoolProxy = await getLendingPool();
const lendingPoolConfigurator = await getLendingPoolConfiguratorProxy();
const configs = Object.entries(ReservesConfig) as [string, IReserveParams][];
for (const entry of Object.entries(getParamPerNetwork(ReserveAssets, network))) {
const [token, tokenAddress] = entry;
console.log(`- Verifying ${token} token related contracts`);
const {
stableDebtTokenAddress,
variableDebtTokenAddress,
aTokenAddress,
interestRateStrategyAddress,
} = await lendingPoolProxy.getReserveData(tokenAddress);
const tokenConfig = configs.find(([symbol]) => symbol === token);
if (!tokenConfig) {
throw `ReservesConfig not found for ${token} token`;
}
const {
baseVariableBorrowRate,
variableRateSlope1,
variableRateSlope2,
stableRateSlope1,
stableRateSlope2,
} = tokenConfig[1];
console.log;
// Proxy Stable Debt
console.log(`\n- Verifying Stable Debt Token proxy...\n`);
await verifyContract(stableDebtTokenAddress, [lendingPoolConfigurator.address]);
// Proxy Variable Debt
console.log(`\n- Verifying Debt Token proxy...\n`);
await verifyContract(variableDebtTokenAddress, [lendingPoolConfigurator.address]);
// Proxy aToken
console.log('\n- Verifying aToken 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,
]);
const stableDebt = await getAddressById(`stableDebt${token}`);
const variableDebt = await getAddressById(`variableDebt${token}`);
const aToken = await getAddressById(`a${token}`);
// aToken
console.log('\n- Verifying aToken...\n');
await verifyContract(aToken, [
lendingPoolProxy.address,
tokenAddress,
ZERO_ADDRESS,
`Aave interest bearing ${token}`,
`a${token}`,
ZERO_ADDRESS,
]);
// stableDebtToken
console.log('\n- Verifying StableDebtToken...\n');
await verifyContract(stableDebt, [
lendingPoolProxy.address,
tokenAddress,
`Aave stable debt bearing ${token}`,
`stableDebt${token}`,
ZERO_ADDRESS,
]);
// variableDebtToken
console.log('\n- Verifying VariableDebtToken...\n');
await verifyContract(variableDebt, [
lendingPoolProxy.address,
tokenAddress,
`Aave variable debt bearing ${token}`,
`variableDebt${token}`,
ZERO_ADDRESS,
]);
}
});