From ce3db28503672bb3adc0532a02a5b536575fa510 Mon Sep 17 00:00:00 2001 From: David Racero Date: Tue, 10 Nov 2020 14:18:48 +0100 Subject: [PATCH] Added tokenization verifications --- .../deployments/ATokensAndRatesHelper.sol | 23 +- deployed-contracts.json | 362 +++++++++++++++++- helpers/contracts-getters.ts | 3 + helpers/contracts-helpers.ts | 7 + helpers/init-helpers.ts | 18 +- tasks/full/6_verify.ts | 52 ++- 6 files changed, 452 insertions(+), 13 deletions(-) diff --git a/contracts/deployments/ATokensAndRatesHelper.sol b/contracts/deployments/ATokensAndRatesHelper.sol index f39cdaa2..f2dec2e1 100644 --- a/contracts/deployments/ATokensAndRatesHelper.sol +++ b/contracts/deployments/ATokensAndRatesHelper.sol @@ -6,6 +6,7 @@ import {LendingPool} from '../lendingpool/LendingPool.sol'; import {LendingPoolAddressesProvider} from '../configuration/LendingPoolAddressesProvider.sol'; import {LendingPoolConfigurator} from '../lendingpool/LendingPoolConfigurator.sol'; import {AToken} from '../tokenization/AToken.sol'; +import {DelegationAwareAToken} from '../tokenization/DelegationAwareAToken.sol'; import { DefaultReserveInterestRateStrategy } from '../lendingpool/DefaultReserveInterestRateStrategy.sol'; @@ -36,10 +37,21 @@ contract ATokensAndRatesHelper is Ownable { ) external onlyOwner { require(tokens.length == symbols.length, 't Arrays not same length'); require(rates.length == symbols.length, 'r Arrays not same length'); - for (uint256 i = 0; i < tokens.length; i++) { - emit deployedContracts( - address( + address aToken; + if (keccak256(bytes(symbols[i])) == keccak256(bytes('UNI'))) { + aToken = address( + new DelegationAwareAToken( + LendingPool(pool), + tokens[i], + address(0), + StringLib.concat('Aave interest bearing ', symbols[i]), + StringLib.concat('a', symbols[i]), + incentivesController + ) + ); + } else { + aToken = address( new AToken( LendingPool(pool), tokens[i], @@ -48,7 +60,10 @@ contract ATokensAndRatesHelper is Ownable { StringLib.concat('a', symbols[i]), incentivesController ) - ), + ); + } + emit deployedContracts( + aToken, address( new DefaultReserveInterestRateStrategy( LendingPoolAddressesProvider(addressesProvider), diff --git a/deployed-contracts.json b/deployed-contracts.json index a8b5ecf3..697b821a 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -411,7 +411,7 @@ "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" }, "kovan": { - "address": "0x1e20D68372F8Da94BB10aE7331eeCBf6293c3093", + "address": "0x27d7b683f24855302280cEb615c7217e628A852A", "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { @@ -602,5 +602,365 @@ "kovan": { "address": "0xca67A1eAE05B38Ce57AfE463f4508Ffe0133301D" } + }, + "stableDebtAAVE": { + "kovan": { + "address": "0x6cFE6fF6c6DA0Dd45a222978c3b6e5d715f6d93e" + } + }, + "variableDebtAAVE": { + "kovan": { + "address": "0x8ff5c2a96b461d2a09D8cBa9FA4e33ddBB76D108" + } + }, + "stableDebtBAT": { + "kovan": { + "address": "0xC634A578Db77b918d3300813f278c069083d2A04" + } + }, + "variableDebtBAT": { + "kovan": { + "address": "0x06fb5D970337A5fb806c4bbf809000937641F153" + } + }, + "stableDebtBUSD": { + "kovan": { + "address": "0x5388ac78373B8cAC36828586989a57F34Cd4c539" + } + }, + "variableDebtBUSD": { + "kovan": { + "address": "0xe299F63Ef26a266DEDeb0cc4ea7E2ec54e7c8577" + } + }, + "stableDebtDAI": { + "kovan": { + "address": "0x4A3FE592f8b7EBE734D8f0b8Eb8C17b309c6b031" + } + }, + "variableDebtDAI": { + "kovan": { + "address": "0xC7ad3d6f83963B6242799CDD620e61F25B5001B6" + } + }, + "aAAVE": { + "kovan": { + "address": "0x514F7Eefa7cA326aAaEE6AD87613f2C27e0A2711" + } + }, + "strategyAAVE": { + "kovan": { + "address": "0x630163545489cE3CB86559Debb7a4504f4905ba2" + } + }, + "aBAT": { + "kovan": { + "address": "0x764730c91Ac0D9777cfC26B2bF1D3e6322503867" + } + }, + "strategyBAT": { + "kovan": { + "address": "0x5075aaE8c154F4B3d3806bd095E8c7bD4087e78a" + } + }, + "aBUSD": { + "kovan": { + "address": "0x55716479180c1Fe2AD441E794858968acC6beAdB" + } + }, + "strategyBUSD": { + "kovan": { + "address": "0x2b85a6f4E3C3a699B9584149233DDb7735D5d451" + } + }, + "aDAI": { + "kovan": { + "address": "0x95D314e003D3aEbC59Fe25884A81C72562E7E630" + } + }, + "strategyDAI": { + "kovan": { + "address": "0xbf761b4454f1636bF63E77a49d234Bb411979797" + } + }, + "stableDebtENJ": { + "kovan": { + "address": "0xfF308EB66F2dD66945b19606b2E240836234f228" + } + }, + "variableDebtENJ": { + "kovan": { + "address": "0x0e8f6A87269FEdf0f7347065483CD4F00e651a5b" + } + }, + "stableDebtKNC": { + "kovan": { + "address": "0x8DFce79F6728e4B1617bA1A5B726E4d4146bB627" + } + }, + "variableDebtKNC": { + "kovan": { + "address": "0x040066C1d19Ea626F214951db0F16Eea893C815E" + } + }, + "stableDebtLINK": { + "kovan": { + "address": "0xE419fCF929D3F9E15055c195f92a55386F8CEB0D" + } + }, + "variableDebtLINK": { + "kovan": { + "address": "0x9026CC095f011277aEFF76BF4F7Fdd6ccE86c04E" + } + }, + "stableDebtMANA": { + "kovan": { + "address": "0x232F9362ff263C71798161965261134754Ce2791" + } + }, + "variableDebtMANA": { + "kovan": { + "address": "0x1a9ff3fa8FFE12268389Bef6a3EAD60E5E18a7B5" + } + }, + "aENJ": { + "kovan": { + "address": "0x193Cd957999ddBE6D6dF972960664897f6976Dc6" + } + }, + "strategyENJ": { + "kovan": { + "address": "0x1D5644113937A3E92e5141fF35c978Dd098F3D17" + } + }, + "aKNC": { + "kovan": { + "address": "0x72b899E953E0f9ADA655c909Fa5363EC43E71B72" + } + }, + "strategyKNC": { + "kovan": { + "address": "0x302499C2773D70D3D94bE2679Acc85805F83129D" + } + }, + "aLINK": { + "kovan": { + "address": "0x43fAbE3FB84921753dB0bCBF5DA55914D69D62FD" + } + }, + "strategyLINK": { + "kovan": { + "address": "0x64d675E9c64290C0d3b5E80ABfc0D8c70d03Aa35" + } + }, + "aMANA": { + "kovan": { + "address": "0x5FFf5493E4c0a1120325554A3537E9a5C0347B3e" + } + }, + "strategyMANA": { + "kovan": { + "address": "0xF0EFD4B771A423b4dbf408F4be0a724E49ecd2Db" + } + }, + "stableDebtMKR": { + "kovan": { + "address": "0x92528A78E3c2533b1f8e9272B6955Ac36027892a" + } + }, + "variableDebtMKR": { + "kovan": { + "address": "0x4b98ef27fF61Ca44570B3710AE0114D7ca0e4cd8" + } + }, + "stableDebtREN": { + "kovan": { + "address": "0x80F95C1a659DB64A0b282a60Fa02bedb3a76eAcA" + } + }, + "variableDebtREN": { + "kovan": { + "address": "0x7757c7bf09Fa7F7B1c4bA41D195EC7930e7be896" + } + }, + "stableDebtREP": { + "kovan": { + "address": "0x32940613eF33db42E19A936797FddB9d3Efc285f" + } + }, + "variableDebtREP": { + "kovan": { + "address": "0x285bb65bC1fe6103455fb14DB96C04Ca6e0A4ceC" + } + }, + "stableDebtSNX": { + "kovan": { + "address": "0xE2019f9F10D0d5448d82631126BFA94F015044BA" + } + }, + "variableDebtSNX": { + "kovan": { + "address": "0x5c3f7E555dc9086C99A1f548fd90eCFdB5939296" + } + }, + "aMKR": { + "kovan": { + "address": "0x723348D18f6E8fdd6F075Cd3E9063ADed173292C" + } + }, + "strategyMKR": { + "kovan": { + "address": "0x7C805E7581303233645FBA6c4a6fefE448296415" + } + }, + "aREN": { + "kovan": { + "address": "0x2Af6c0df39BB9A81ec7201526C0dfEa3e221c381" + } + }, + "strategyREN": { + "kovan": { + "address": "0x75Fb4c8816002cA80c34241dEB7aAE738554be40" + } + }, + "aREP": { + "kovan": { + "address": "0xb4AE74454bB76c1E7bB0CEB100ED2107fBba36b8" + } + }, + "strategyREP": { + "kovan": { + "address": "0x8C95F49Ef82909F94cE920De5cc5917b081223F3" + } + }, + "aSNX": { + "kovan": { + "address": "0x481fC92dDd4927386ACbFbDAAE4F71243B129aC8" + } + }, + "strategySNX": { + "kovan": { + "address": "0x8A9C286D4Ad3569acD21d36d805BC47895a499aC" + } + }, + "stableDebtSUSD": { + "kovan": { + "address": "0x23c62B9d362C8641b42477E61C54f060295eA91d" + } + }, + "variableDebtSUSD": { + "kovan": { + "address": "0x75702D996A755Bb7ed5798DFfdb9CC8C4DB66d49" + } + }, + "stableDebtTUSD": { + "kovan": { + "address": "0xd5ca6aeCccBFFf08BA307EFc6812E761dE925081" + } + }, + "variableDebtTUSD": { + "kovan": { + "address": "0x3e4d1a670045290531B2B7fb8D8b83F43a388e53" + } + }, + "stableDebtUNI": { + "kovan": { + "address": "0x6c705087c7a652d44d38dD0d94f78Ad73F639C88" + } + }, + "variableDebtUNI": { + "kovan": { + "address": "0xf4379e2B872D66354bC26b45e36D3b6F88DD3248" + } + }, + "stableDebtUSDC": { + "kovan": { + "address": "0xE831BF5E1Fb9235776B448E03dAb5871B5234E93" + } + }, + "variableDebtUSDC": { + "kovan": { + "address": "0xE74249cFDAdc21e5d7104DfaD8D5c7d1CB80b10a" + } + }, + "aSUSD": { + "kovan": { + "address": "0xEE5Ab1E35Eb00a0288A259675Ed9C3EF766c1feC" + } + }, + "strategySUSD": { + "kovan": { + "address": "0x7864220AAaA91417B2c5bF3acEd8c7525D6549d4" + } + }, + "aTUSD": { + "kovan": { + "address": "0x2e93685ca52F996330B3d4C1686118C40A8fe395" + } + }, + "strategyTUSD": { + "kovan": { + "address": "0xF88720ea7f42ce1F8C5e73FfE7eee446279b9Ce8" + } + }, + "aUNI": { + "kovan": { + "address": "0x2052e836F0fB11556bDb42Cb18b6D37B4bbc7C9a" + } + }, + "strategyUNI": { + "kovan": { + "address": "0x4ef0e554181062308A3E0Ae360C1AdE04DcCa4dD" + } + }, + "aUSDC": { + "kovan": { + "address": "0x64ea2A40805812f9f7E512DAe7Ef56E0C73F68EF" + } + }, + "strategyUSDC": { + "kovan": { + "address": "0x846DfbAFAE686fe3490Fd2FECCEA563536094178" + } + }, + "stableDebtUSDT": { + "kovan": { + "address": "0x3cb517109d68514D9B8Ef7223D62cA5018c518F4" + } + }, + "variableDebtUSDT": { + "kovan": { + "address": "0x8fc8A6362b9c7132857284072B71cd5fbde9c690" + } + }, + "stableDebtWBTC": { + "kovan": { + "address": "0x2Da22F17A6C75124ad10d6e311d23dd76bfc1025" + } + }, + "variableDebtWBTC": { + "kovan": { + "address": "0xA1b3Dd550C33c33Cd3aAe3429f5c7F7a959df8ab" + } + }, + "stableDebtWETH": { + "kovan": { + "address": "0x0BCBB0BE9192AFace3a5C668686bD31Ef6f84dFe" + } + }, + "variableDebtWETH": { + "kovan": { + "address": "0x097bDAc44BfFeA314590383F67D2046461a14Ac0" + } + }, + "stableDebtYFI": { + "kovan": { + "address": "0xad470b75F1430faF195c3059EC7A4bb23D279C05" + } + }, + "variableDebtYFI": { + "kovan": { + "address": "0x77f8AcD9E8CdDEB8d885E657C003404cc8C1a6B4" + } } } diff --git a/helpers/contracts-getters.ts b/helpers/contracts-getters.ts index e3e22cb9..bad1db2d 100644 --- a/helpers/contracts-getters.ts +++ b/helpers/contracts-getters.ts @@ -320,3 +320,6 @@ export const getLendingPoolCollateralManager = async (address?: tEthereumAddress .address, await getFirstSigner() ); + +export const getAddressById = async (id: string) => + (await getDb().get(`${id}.${DRE.network.name}`).value()).address; diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index d3fc122c..ba8ee5d1 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -49,6 +49,13 @@ export const insertContractAddressInDb = async (id: eContractid, address: tEther }) .write(); +export const rawInsertContractAddressInDb = async (id: string, address: tEthereumAddress) => + await getDb() + .set(`${id}.${DRE.network.name}`, { + address, + }) + .write(); + export const getEthersSigners = async (): Promise => await Promise.all(await DRE.ethers.getSigners()); diff --git a/helpers/init-helpers.ts b/helpers/init-helpers.ts index c4aa3978..e64796c4 100644 --- a/helpers/init-helpers.ts +++ b/helpers/init-helpers.ts @@ -1,4 +1,4 @@ -import {iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types'; +import {eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types'; import {LendingPoolConfigurator} from '../types/LendingPoolConfigurator'; import {AaveProtocolTestHelpers} from '../types/AaveProtocolTestHelpers'; import { @@ -11,6 +11,7 @@ import { getLendingPoolAddressesProvider, getStableAndVariableTokensHelper, } from './contracts-getters'; +import {insertContractAddressInDb, rawInsertContractAddressInDb} from './contracts-helpers'; export const initReservesByHelper = async ( reservesParams: iMultiPoolsAssets, @@ -89,12 +90,15 @@ export const initReservesByHelper = async ( reservesDecimals.push(reserveDecimals); } - // Deploy stable and variable deployers + // Deploy stable and variable deployers and save implementations const tx1 = await waitForTx( await stableAndVariableDeployer.initDeployment(tokens, symbols, incentivesController) ); - - // Deploy atokens and rate strategies + tx1.events?.forEach((event, index) => { + rawInsertContractAddressInDb(`stableDebt${symbols[index]}`, event?.args?.stableToken); + rawInsertContractAddressInDb(`variableDebt${symbols[index]}`, event?.args?.variableToken); + }); + // Deploy atokens and rate strategies and save implementations const tx2 = await waitForTx( await atokenAndRatesDeployer.initDeployment( tokens, @@ -103,6 +107,12 @@ export const initReservesByHelper = async ( incentivesController ) ); + tx2.events?.forEach((event, index) => { + rawInsertContractAddressInDb(`a${symbols[index]}`, event?.args?.aToken); + rawInsertContractAddressInDb(`strategy${symbols[index]}`, event?.args?.strategy); + }); + + console.log(tx2.events); console.log(` - Deployed aToken, DebtTokens and Strategy for: ${symbols.join(', ')} `); const stableTokens: string[] = tx1.events?.map((e) => e.args?.stableToken) || []; const variableTokens: string[] = tx1.events?.map((e) => e.args?.variableToken) || []; diff --git a/tasks/full/6_verify.ts b/tasks/full/6_verify.ts index a95c597f..fe10b83a 100644 --- a/tasks/full/6_verify.ts +++ b/tasks/full/6_verify.ts @@ -1,7 +1,10 @@ +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, @@ -91,17 +94,17 @@ task('full:verify', 'Deploy oracles for dev enviroment') console.log('\n- Verifying Lending Pool Collateral Manager Proxy...\n'); await verifyContract(lendingPoolCollateralManager.address, []); - // Stable token + // Tokens verification const DAI = getParamPerNetwork(ReserveAssets, network).DAI; - const USDC = getParamPerNetwork(ReserveAssets, network).USDC; - + 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 {stableDebtTokenAddress: usdStable} = await lendingPoolProxy.getReserveData(USDC); const { baseVariableBorrowRate, variableRateSlope1, @@ -132,4 +135,45 @@ task('full:verify', 'Deploy oracles for dev enviroment') 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, + ]); });