Merge branch '154-updates-for-walletbalalanceprovider-contract' into 'master'

Resolve "Updates for WalletBalalanceProvider contract"

Closes #154

See merge request aave-tech/protocol-v2!175
This commit is contained in:
Ernesto Boado 2020-11-23 14:06:28 +00:00
commit 8ccb92670b
9 changed files with 61 additions and 50 deletions

View File

@ -1,8 +1,8 @@
stages: stages:
- test - checks
test: test:
stage: test stage: checks
tags: tags:
- aave-build-runner - aave-build-runner
before_script: before_script:
@ -12,3 +12,15 @@ test:
after_script: after_script:
- docker-compose -f docker-compose.test.yml run contracts-env npm run ci:clean - docker-compose -f docker-compose.test.yml run contracts-env npm run ci:clean
- docker-compose -f docker-compose.test.yml down - docker-compose -f docker-compose.test.yml down
deploy-mainnet-fork:
stage: checks
tags:
- aave-build-runner
before_script:
- docker-compose -f docker-compose.test.yml build
script:
- docker-compose -f docker-compose.test.yml run contracts-env npm run aave:fork:main
after_script:
- docker-compose -f docker-compose.test.yml run contracts-env npm run ci:clean
- docker-compose -f docker-compose.test.yml down

View File

@ -24,13 +24,8 @@ contract WalletBalanceProvider {
using SafeERC20 for IERC20; using SafeERC20 for IERC20;
using ReserveConfiguration for ReserveConfiguration.Map; using ReserveConfiguration for ReserveConfiguration.Map;
ILendingPoolAddressesProvider internal immutable _provider;
address constant MOCK_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address constant MOCK_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
constructor(ILendingPoolAddressesProvider provider) public {
_provider = provider;
}
/** /**
@dev Fallback function, don't accept any ETH @dev Fallback function, don't accept any ETH
**/ **/
@ -80,12 +75,12 @@ contract WalletBalanceProvider {
/** /**
@dev provides balances of user wallet for all reserves available on the pool @dev provides balances of user wallet for all reserves available on the pool
*/ */
function getUserWalletBalances(address user) function getUserWalletBalances(address provider, address user)
external external
view view
returns (address[] memory, uint256[] memory) returns (address[] memory, uint256[] memory)
{ {
ILendingPool pool = ILendingPool(_provider.getLendingPool()); ILendingPool pool = ILendingPool(ILendingPoolAddressesProvider(provider).getLendingPool());
address[] memory reserves = pool.getReservesList(); address[] memory reserves = pool.getReservesList();
address[] memory reservesWithEth = new address[](reserves.length + 1); address[] memory reservesWithEth = new address[](reserves.length + 1);

View File

@ -4,4 +4,6 @@ services:
build: build:
context: ./ context: ./
dockerfile: ./Dockerfile_test dockerfile: ./Dockerfile_test
command: npm run test environment:
- MNEMONIC
- ALCHEMY_KEY

View File

@ -244,14 +244,11 @@ export const deployMockFlashLoanReceiver = async (
verify verify
); );
export const deployWalletBalancerProvider = async ( export const deployWalletBalancerProvider = async (verify?: boolean) =>
addressesProvider: tEthereumAddress,
verify?: boolean
) =>
withSaveAndVerify( withSaveAndVerify(
await new WalletBalanceProviderFactory(await getFirstSigner()).deploy(addressesProvider), await new WalletBalanceProviderFactory(await getFirstSigner()).deploy(),
eContractid.WalletBalanceProvider, eContractid.WalletBalanceProvider,
[addressesProvider], [],
verify verify
); );

View File

@ -1,4 +1,4 @@
import {task} from 'hardhat/config'; import { task } from 'hardhat/config';
import { import {
deployLendingPoolCollateralManager, deployLendingPoolCollateralManager,
deployMockFlashLoanReceiver, deployMockFlashLoanReceiver,
@ -13,22 +13,25 @@ import {
loadPoolConfig, loadPoolConfig,
} from '../../helpers/configuration'; } from '../../helpers/configuration';
import {tEthereumAddress, AavePools, eContractid} from '../../helpers/types'; import { tEthereumAddress, AavePools, eContractid } from '../../helpers/types';
import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; import { waitForTx, filterMapBy } from '../../helpers/misc-utils';
import { import {
enableReservesToBorrowByHelper, enableReservesToBorrowByHelper,
enableReservesAsCollateralByHelper, enableReservesAsCollateralByHelper,
initReservesByHelper, initReservesByHelper,
} from '../../helpers/init-helpers'; } from '../../helpers/init-helpers';
import {getAllTokenAddresses} from '../../helpers/mock-helpers'; import { getAllTokenAddresses } from '../../helpers/mock-helpers';
import {ZERO_ADDRESS} from '../../helpers/constants'; import { ZERO_ADDRESS } from '../../helpers/constants';
import {getAllMockedTokens, getLendingPoolAddressesProvider} from '../../helpers/contracts-getters'; import {
import {insertContractAddressInDb} from '../../helpers/contracts-helpers'; getAllMockedTokens,
getLendingPoolAddressesProvider,
} from '../../helpers/contracts-getters';
import { insertContractAddressInDb } from '../../helpers/contracts-helpers';
task('dev:initialize-lending-pool', 'Initialize lending pool configuration.') task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan') .addFlag('verify', 'Verify contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, pool}, localBRE) => { .setAction(async ({ verify, pool }, localBRE) => {
await localBRE.run('set-DRE'); await localBRE.run('set-DRE');
const poolConfig = loadPoolConfig(pool); const poolConfig = loadPoolConfig(pool);
@ -37,7 +40,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
const addressesProvider = await getLendingPoolAddressesProvider(); const addressesProvider = await getLendingPoolAddressesProvider();
const protoPoolReservesAddresses = <{[symbol: string]: tEthereumAddress}>( const protoPoolReservesAddresses = <{ [symbol: string]: tEthereumAddress }>(
filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI_')) filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI_'))
); );
@ -75,7 +78,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
mockFlashLoanReceiver.address mockFlashLoanReceiver.address
); );
await deployWalletBalancerProvider(addressesProvider.address, verify); await deployWalletBalancerProvider(verify);
await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address); await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);

View File

@ -1,13 +1,12 @@
import {task} from 'hardhat/config'; import { task } from 'hardhat/config';
import {deployWalletBalancerProvider} from '../../helpers/contracts-deployments'; import { deployWalletBalancerProvider } from '../../helpers/contracts-deployments';
import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters'; import { getLendingPoolAddressesProvider } from '../../helpers/contracts-getters';
task('dev:wallet-balance-provider', 'Initialize lending pool configuration.') task('dev:wallet-balance-provider', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan') .addFlag('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => { .setAction(async ({ verify }, localBRE) => {
await localBRE.run('set-DRE'); await localBRE.run('set-DRE');
const addressesProvider = await getLendingPoolAddressesProvider(); await deployWalletBalancerProvider(verify);
await deployWalletBalancerProvider(addressesProvider.address, verify);
}); });

View File

@ -1,11 +1,11 @@
import {task} from 'hardhat/config'; import { task } from 'hardhat/config';
import {deployAaveProtocolDataProvider} from '../../helpers/contracts-deployments'; import { deployAaveProtocolDataProvider } from '../../helpers/contracts-deployments';
import {exit} from 'process'; import { exit } from 'process';
import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters'; import { getLendingPoolAddressesProvider } from '../../helpers/contracts-getters';
task('full:data-provider', 'Initialize lending pool configuration.') task('full:data-provider', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan') .addFlag('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => { .setAction(async ({ verify }, localBRE) => {
try { try {
await localBRE.run('set-DRE'); await localBRE.run('set-DRE');

View File

@ -1,38 +1,41 @@
import {task} from 'hardhat/config'; import { task } from 'hardhat/config';
import {getParamPerNetwork} from '../../helpers/contracts-helpers'; import { getParamPerNetwork } from '../../helpers/contracts-helpers';
import { import {
deployLendingPoolCollateralManager, deployLendingPoolCollateralManager,
deployWalletBalancerProvider, deployWalletBalancerProvider,
deployAaveProtocolDataProvider, deployAaveProtocolDataProvider,
deployWETHGateway, deployWETHGateway,
} from '../../helpers/contracts-deployments'; } from '../../helpers/contracts-deployments';
import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration'; import { loadPoolConfig, ConfigNames, getWethAddress } from '../../helpers/configuration';
import {eEthereumNetwork, ICommonConfiguration} from '../../helpers/types'; import { eEthereumNetwork, ICommonConfiguration } from '../../helpers/types';
import {waitForTx} from '../../helpers/misc-utils'; import { waitForTx } from '../../helpers/misc-utils';
import { import {
initReservesByHelper, initReservesByHelper,
enableReservesToBorrowByHelper, enableReservesToBorrowByHelper,
enableReservesAsCollateralByHelper, enableReservesAsCollateralByHelper,
} from '../../helpers/init-helpers'; } from '../../helpers/init-helpers';
import {exit} from 'process'; import { exit } from 'process';
import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters'; import {
import {ZERO_ADDRESS} from '../../helpers/constants'; getAaveProtocolDataProvider,
getLendingPoolAddressesProvider,
} from '../../helpers/contracts-getters';
import { ZERO_ADDRESS } from '../../helpers/constants';
task('full:initialize-lending-pool', 'Initialize lending pool configuration.') task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan') .addFlag('verify', 'Verify contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, pool}, localBRE) => { .setAction(async ({ verify, pool }, localBRE) => {
try { try {
await localBRE.run('set-DRE'); await localBRE.run('set-DRE');
const network = <eEthereumNetwork>localBRE.network.name; const network = <eEthereumNetwork>localBRE.network.name;
const poolConfig = loadPoolConfig(pool); const poolConfig = loadPoolConfig(pool);
const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration; const { ReserveAssets, ReservesConfig } = poolConfig as ICommonConfiguration;
const reserveAssets = await getParamPerNetwork(ReserveAssets, network); const reserveAssets = await getParamPerNetwork(ReserveAssets, network);
const addressesProvider = await getLendingPoolAddressesProvider(); const addressesProvider = await getLendingPoolAddressesProvider();
const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address, verify); const testHelpers = await getAaveProtocolDataProvider();
const admin = await addressesProvider.getPoolAdmin(); const admin = await addressesProvider.getPoolAdmin();
if (!reserveAssets) { if (!reserveAssets) {
@ -48,7 +51,7 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
await addressesProvider.setLendingPoolCollateralManager(collateralManager.address) await addressesProvider.setLendingPoolCollateralManager(collateralManager.address)
); );
await deployWalletBalancerProvider(addressesProvider.address, verify); await deployWalletBalancerProvider(verify);
const wethAddress = await getWethAddress(poolConfig); const wethAddress = await getWethAddress(poolConfig);
const lendingPoolAddress = await addressesProvider.getLendingPool(); const lendingPoolAddress = await addressesProvider.getLendingPool();

View File

@ -226,7 +226,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
const mockFlashLoanReceiver = await deployMockFlashLoanReceiver(addressesProvider.address); const mockFlashLoanReceiver = await deployMockFlashLoanReceiver(addressesProvider.address);
await insertContractAddressInDb(eContractid.MockFlashLoanReceiver, mockFlashLoanReceiver.address); await insertContractAddressInDb(eContractid.MockFlashLoanReceiver, mockFlashLoanReceiver.address);
await deployWalletBalancerProvider(addressesProvider.address); await deployWalletBalancerProvider();
await deployWETHGateway([mockTokens.WETH.address, lendingPoolAddress]); await deployWETHGateway([mockTokens.WETH.address, lendingPoolAddress]);