From 18e19b4f8410d2aa5c3222ae75711ab371c034e3 Mon Sep 17 00:00:00 2001 From: eboado Date: Tue, 9 Jun 2020 11:11:19 +0200 Subject: [PATCH] - Added getAllReservesTokens for AaveProtocolTestHelpers. --- contracts/misc/AaveProtocolTestHelpers.sol | 26 +- helpers/contracts-helpers.ts | 62 ++++ helpers/types.ts | 1 + test/atoken-modifiers.spec.ts | 2 +- test/atoken-transfer.spec.ts | 313 ++++++++++++--------- types/AaveProtocolTestHelpers.d.ts | 16 +- types/AaveProtocolTestHelpersFactory.ts | 31 +- 7 files changed, 310 insertions(+), 141 deletions(-) diff --git a/contracts/misc/AaveProtocolTestHelpers.sol b/contracts/misc/AaveProtocolTestHelpers.sol index 89fba761..1a12130f 100644 --- a/contracts/misc/AaveProtocolTestHelpers.sol +++ b/contracts/misc/AaveProtocolTestHelpers.sol @@ -2,13 +2,14 @@ pragma solidity ^0.6.8; pragma experimental ABIEncoderV2; import {ILendingPoolAddressesProvider} from "../interfaces/ILendingPoolAddressesProvider.sol"; +import {IERC20Detailed} from "../interfaces/IERC20Detailed.sol"; import {LendingPoolCore} from "../lendingpool/LendingPool.sol"; import {AToken} from "../tokenization/AToken.sol"; contract AaveProtocolTestHelpers { - struct ATokenData { + struct TokenData { string symbol; - address aTokenAddress; + address tokenAddress; } ILendingPoolAddressesProvider public immutable ADDRESSES_PROVIDER; @@ -17,15 +18,28 @@ contract AaveProtocolTestHelpers { ADDRESSES_PROVIDER = addressesProvider; } - function getAllATokens() external view returns(ATokenData[] memory) { + function getAllReservesTokens() external view returns(TokenData[] memory) { LendingPoolCore core = LendingPoolCore(ADDRESSES_PROVIDER.getLendingPoolCore()); address[] memory reserves = core.getReserves(); - ATokenData[] memory aTokens = new ATokenData[](reserves.length); + TokenData[] memory reservesTokens = new TokenData[](reserves.length); + for (uint256 i = 0; i < reserves.length; i++) { + reservesTokens[i] = TokenData({ + symbol: (reserves[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) ? "ETH" : IERC20Detailed(reserves[i]).symbol(), + tokenAddress: reserves[i] + }); + } + return reservesTokens; + } + + function getAllATokens() external view returns(TokenData[] memory) { + LendingPoolCore core = LendingPoolCore(ADDRESSES_PROVIDER.getLendingPoolCore()); + address[] memory reserves = core.getReserves(); + TokenData[] memory aTokens = new TokenData[](reserves.length); for (uint256 i = 0; i < reserves.length; i++) { address aTokenAddress = core.getReserveATokenAddress(reserves[i]); - aTokens[i] = ATokenData({ + aTokens[i] = TokenData({ symbol: AToken(aTokenAddress).symbol(), - aTokenAddress: aTokenAddress + tokenAddress: aTokenAddress }); } return aTokens; diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 5f98ed96..b60870a3 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -35,6 +35,9 @@ import {MockFlashLoanReceiver} from "../types/MockFlashLoanReceiver"; import {WalletBalanceProvider} from "../types/WalletBalanceProvider"; import {AToken} from "../types/AToken"; import {AaveProtocolTestHelpers} from "../types/AaveProtocolTestHelpers"; +import {MOCK_ETH_ADDRESS} from "./constants"; +import BigNumber from "bignumber.js"; +import {Ierc20Detailed} from "../types/Ierc20Detailed"; export const registerContractInJsonDb = async ( contractId: string, @@ -414,6 +417,30 @@ export const getAToken = async (address?: tEthereumAddress) => { ); }; +export const getMintableErc20 = async (address?: tEthereumAddress) => { + return await getContract( + eContractid.MintableERC20, + address || + ( + await getDb() + .get(`${eContractid.MintableERC20}.${BRE.network.name}`) + .value() + ).address + ); +}; + +export const getIErc20Detailed = async (address?: tEthereumAddress) => { + return await getContract( + eContractid.IERC20Detailed, + address || + ( + await getDb() + .get(`${eContractid.IERC20Detailed}.${BRE.network.name}`) + .value() + ).address + ); +}; + export const getAaveProtocolTestHelpers = async ( address?: tEthereumAddress ) => { @@ -482,3 +509,38 @@ export const getParamPerPool = ( return proto; } }; + +export const convertToCurrencyDecimals = async ( + tokenAddress: tEthereumAddress, + amount: string +) => { + const isEth = tokenAddress === MOCK_ETH_ADDRESS; + let decimals = new BigNumber(18); + + if (!isEth) { + const token = await getIErc20Detailed(tokenAddress); + decimals = new BigNumber(await token.decimals()); + } + + const currencyUnit = new BigNumber(10).pow(decimals); + const amountInCurrencyDecimals = new BigNumber(amount).multipliedBy( + currencyUnit + ); + return amountInCurrencyDecimals.toFixed(); +}; + +export const convertToCurrencyUnits = async ( + tokenAddress: string, + amount: string +) => { + const isEth = tokenAddress === MOCK_ETH_ADDRESS; + + let decimals = new BigNumber(18); + if (!isEth) { + const token = await getIErc20Detailed(tokenAddress); + decimals = new BigNumber(await token.decimals()); + } + const currencyUnit = new BigNumber(10).pow(decimals); + const amountInCurrencyUnits = new BigNumber(amount).div(currencyUnit); + return amountInCurrencyUnits.toFixed(); +}; diff --git a/helpers/types.ts b/helpers/types.ts index 87abb9df..5d2b1246 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -39,6 +39,7 @@ export enum eContractid { WalletBalanceProvider = "WalletBalanceProvider", AToken = "AToken", AaveProtocolTestHelpers = "AaveProtocolTestHelpers", + IERC20Detailed = "IERC20Detailed" } export type tEthereumAddress = string; diff --git a/test/atoken-modifiers.spec.ts b/test/atoken-modifiers.spec.ts index df0226e1..69b7150f 100644 --- a/test/atoken-modifiers.spec.ts +++ b/test/atoken-modifiers.spec.ts @@ -20,7 +20,7 @@ describe("AToken: Modifiers", () => { const aDAIAddress = (await testHelpers.getAllATokens()).find( (aToken) => aToken.symbol === "aDAI" - )?.aTokenAddress; + )?.tokenAddress; if (!aDAIAddress) { console.log(`atoken-modifiers.spec: aDAI not correctly initialized`); process.exit(1); diff --git a/test/atoken-transfer.spec.ts b/test/atoken-transfer.spec.ts index cfad31f6..4b08d60f 100644 --- a/test/atoken-transfer.spec.ts +++ b/test/atoken-transfer.spec.ts @@ -1,190 +1,245 @@ -// import { ITestEnvWithoutInstances, RateMode} from '../utils/types'; -// import { -// ATokenInstance, -// LendingPoolInstance, -// MintableERC20Instance, -// LendingPoolCoreInstance, -// } from '../utils/typechain-types/truffle-contracts'; -// import {testEnvProviderWithoutInstances} from '../utils/truffle/dlp-tests-env'; -// import {convertToCurrencyDecimals} from '../utils/misc-utils'; -// import {APPROVAL_AMOUNT_LENDING_POOL_CORE, ETHEREUM_ADDRESS, oneEther, NIL_ADDRESS, MAX_UINT_AMOUNT} from '../utils/constants'; +import {MockProvider} from "ethereum-waffle"; +import {evmRevert, BRE} from "../helpers/misc-utils"; +import { + TEST_SNAPSHOT_ID, + APPROVAL_AMOUNT_LENDING_POOL_CORE, +} from "../helpers/constants"; +import {AToken} from "../types/AToken"; +import {MintableErc20} from "../types/MintableErc20"; +import {LendingPool} from "../types/LendingPool"; +import {LendingPoolCore} from "../types/LendingPoolCore"; +import { + getAaveProtocolTestHelpers, + getMintableErc20, + getAToken, + convertToCurrencyDecimals, + getEthersSigners, + getLendingPoolCoreProxy, + getLendingPoolProxy, +} from "../helpers/contracts-helpers"; +import {expect} from "chai"; +import {ethers, Wallet, Signer} from "ethers"; +// @ts-ignore +import {accounts} from "../test-wallets.js"; + +describe("AToken: Transfer", () => { + let wallets: Signer[]; + let deployer: Signer; + let users: Signer[]; + let _aDai = {} as AToken; + let _dai = {} as MintableErc20; + let _lendingPool = {} as LendingPool; + let _lendingPoolCore = {} as LendingPoolCore; + const NOT_LENDING_POOL_MSG = + "The caller of this function must be a lending pool"; + + before(async () => { + await evmRevert(TEST_SNAPSHOT_ID); + + const [_deployer, ..._users] = await getEthersSigners(); + deployer = _deployer; + users = _users; + + _lendingPool = await getLendingPoolProxy(); + _lendingPoolCore = await getLendingPoolCoreProxy(); + + const testHelpers = await getAaveProtocolTestHelpers(); + + const aDaiAddress = (await testHelpers.getAllATokens()).find( + (aToken) => aToken.symbol === "aDAI" + )?.tokenAddress; + + const daiAddress = (await testHelpers.getAllReservesTokens()).find( + (token) => token.symbol === "DAI" + )?.tokenAddress; + if (!aDaiAddress) { + console.log(`atoken-modifiers.spec: aDAI not correctly initialized`); + process.exit(1); + } + if (!daiAddress) { + console.log(`atoken-modifiers.spec: DAI not correctly initialized`); + process.exit(1); + } -// const expectRevert = require('@openzeppelin/test-helpers').expectRevert; + _aDai = await getAToken(aDaiAddress); + _dai = await getMintableErc20(daiAddress); + }); -// contract('AToken: Transfer', async ([deployer, ...users]) => { -// let _testEnvProvider: ITestEnvWithoutInstances; -// let _aDAI: ATokenInstance; -// let _DAI: MintableERC20Instance; -// let _lendingPoolInstance: LendingPoolInstance; -// let _lendingPoolCoreInstance: LendingPoolCoreInstance; + it("User 0 deposits 1000 DAI, transfers to user 1", async () => { + await _dai + .connect(users[0]) + .mint(await convertToCurrencyDecimals(_dai.address, "1000")); -// before('Initializing test variables', async () => { -// console.time('setup-test'); -// _testEnvProvider = await testEnvProviderWithoutInstances( -// artifacts, -// [deployer, ...users] -// ); + console.log(_lendingPoolCore.address); -// const { -// getLendingPoolInstance, -// getLendingPoolCoreInstance, -// getAllAssetsInstances, -// getATokenInstances -// } = _testEnvProvider; -// const instances = await Promise.all([ -// getATokenInstances(), getAllAssetsInstances(), getLendingPoolInstance(), getLendingPoolCoreInstance() -// ]) + await _dai + .connect(users[0]) + .approve(_lendingPoolCore.address, APPROVAL_AMOUNT_LENDING_POOL_CORE); -// _aDAI = instances[0].aDAI -// _DAI = instances[1].DAI -// _lendingPoolInstance = instances[2]; -// _lendingPoolCoreInstance = instances[3] + //user 1 deposits 1000 DAI + const amountDAItoDeposit = await convertToCurrencyDecimals( + _dai.address, + "1000" + ); -// console.timeEnd('setup-test'); -// }); + await _lendingPool + .connect(users[0]) + .deposit(_dai.address, amountDAItoDeposit, "0"); -// it('User 0 deposits 1000 DAI, transfers to user 1', async () => { -// await _DAI.mint(await convertToCurrencyDecimals(_DAI.address, '1000'), { -// from: users[0], -// }); + // console.log(users[0]) + // console.log(await users[0].getAddress()) + // await _aDai + // .connect(users[0]) + // .transfer(await users[1].getAddress(), amountDAItoDeposit); -// await _DAI.approve(_lendingPoolCoreInstance.address, APPROVAL_AMOUNT_LENDING_POOL_CORE, { -// from: users[0], -// }); + // const fromBalance = await _aDai.balanceOf(await users[0].getAddress()); + // const toBalance = await _aDai.balanceOf(await users[1].getAddress()); -// //user 1 deposits 1000 DAI -// const amountDAItoDeposit = await convertToCurrencyDecimals(_DAI.address, '1000'); + // expect(fromBalance.toString()).to.be.equal( + // "0", + // "Invalid from balance after transfer" + // ); + // expect(toBalance.toString()).to.be.equal( + // amountDAItoDeposit.toString(), + // "Invalid to balance after transfer" + // ); + }); -// await _lendingPoolInstance.deposit(_DAI.address, amountDAItoDeposit, '0', { -// from: users[0], -// }); + // it('User 1 redirects interest to user 2, transfers 500 DAI back to user 0', async () => { -// await _aDAI.transfer(users[1], amountDAItoDeposit, {from: users[0]}) + // await _aDAI.redirectInterestStream(users[2], {from: users[1]}); -// const fromBalance = await _aDAI.balanceOf(users[0]) -// const toBalance = await _aDAI.balanceOf(users[1]) + // const aDAIRedirected = await convertToCurrencyDecimals(_DAI.address, '1000'); -// expect(fromBalance.toString()).to.be.equal("0", "Invalid from balance after transfer") -// expect(toBalance.toString()).to.be.equal(amountDAItoDeposit.toString(), "Invalid to balance after transfer") + // const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '500'); -// }); + // const user2RedirectedBalanceBefore = await _aDAI.getRedirectedBalance(users[2]) + // expect(user2RedirectedBalanceBefore.toString()).to.be.equal(aDAIRedirected, "Invalid redirected balance for user 2 before transfer") + // await _aDAI.transfer(users[0], aDAItoTransfer, {from: users[1]}) -// it('User 1 redirects interest to user 2, transfers 500 DAI back to user 0', async () => { + // const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) + // const user1RedirectionAddress = await _aDAI.getInterestRedirectionAddress(users[1]) -// await _aDAI.redirectInterestStream(users[2], {from: users[1]}); + // expect(user2RedirectedBalanceAfter.toString()).to.be.equal(aDAItoTransfer, "Invalid redirected balance for user 2 after transfer") + // expect(user1RedirectionAddress.toString()).to.be.equal(users[2], "Invalid redirection address for user 1") + // }); -// const aDAIRedirected = await convertToCurrencyDecimals(_DAI.address, '1000'); + // it('User 0 transfers back to user 1', async () => { -// const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '500'); + // const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '500'); - -// const user2RedirectedBalanceBefore = await _aDAI.getRedirectedBalance(users[2]) -// expect(user2RedirectedBalanceBefore.toString()).to.be.equal(aDAIRedirected, "Invalid redirected balance for user 2 before transfer") + // await _aDAI.transfer(users[1], aDAItoTransfer, {from: users[0]}) -// await _aDAI.transfer(users[0], aDAItoTransfer, {from: users[1]}) + // const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) + // const user1BalanceAfter = await _aDAI.balanceOf(users[1]) -// const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) -// const user1RedirectionAddress = await _aDAI.getInterestRedirectionAddress(users[1]) + // expect(user2RedirectedBalanceAfter.toString()).to.be.equal(user1BalanceAfter.toString(), "Invalid redirected balance for user 2 after transfer") -// expect(user2RedirectedBalanceAfter.toString()).to.be.equal(aDAItoTransfer, "Invalid redirected balance for user 2 after transfer") -// expect(user1RedirectionAddress.toString()).to.be.equal(users[2], "Invalid redirection address for user 1") + // }); -// }); + // it('User 0 deposits 1 ETH and user tries to borrow, but the aTokens received as a transfer are not available as collateral (revert expected)', async () => { -// it('User 0 transfers back to user 1', async () => { + // await _lendingPoolInstance.deposit(ETHEREUM_ADDRESS, oneEther, '0', { + // from: users[0], + // value: oneEther.toFixed(0) + // }); + // await expectRevert(_lendingPoolInstance.borrow(ETHEREUM_ADDRESS, await convertToCurrencyDecimals(ETHEREUM_ADDRESS,"0.1"), RateMode.Stable, "0", {from: users[1]}), "The collateral balance is 0") -// const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '500'); + // }); + // it('User 1 sets the DAI as collateral and borrows, tries to transfer everything back to user 0 (revert expected)', async () => { -// await _aDAI.transfer(users[1], aDAItoTransfer, {from: users[0]}) + // await _lendingPoolInstance.setUserUseReserveAsCollateral(_DAI.address, true, {from: users[1]}) + // const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '1000'); -// const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) + // await _lendingPoolInstance.borrow(ETHEREUM_ADDRESS, await convertToCurrencyDecimals(ETHEREUM_ADDRESS,"0.1"), RateMode.Stable, "0", {from: users[1]}) -// const user1BalanceAfter = await _aDAI.balanceOf(users[1]) + // await expectRevert(_aDAI.transfer(users[0], aDAItoTransfer, {from: users[1]}), "Transfer cannot be allowed.") + // }); -// expect(user2RedirectedBalanceAfter.toString()).to.be.equal(user1BalanceAfter.toString(), "Invalid redirected balance for user 2 after transfer") + // it('User 0 tries to transfer 0 balance (revert expected)', async () => { + // await expectRevert(_aDAI.transfer(users[1], "0", {from: users[0]}), "Transferred amount needs to be greater than zero") + // }); -// }); + // it('User 1 repays the borrow, transfers aDAI back to user 0', async () => { + // await _lendingPoolInstance.repay(ETHEREUM_ADDRESS, MAX_UINT_AMOUNT, users[1], {from: users[1], value: oneEther.toFixed(0)}) -// it('User 0 deposits 1 ETH and user tries to borrow, but the aTokens received as a transfer are not available as collateral (revert expected)', async () => { + // const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '1000'); -// await _lendingPoolInstance.deposit(ETHEREUM_ADDRESS, oneEther, '0', { -// from: users[0], -// value: oneEther.toFixed(0) -// }); + // await _aDAI.transfer(users[0], aDAItoTransfer, {from: users[1]}) - -// await expectRevert(_lendingPoolInstance.borrow(ETHEREUM_ADDRESS, await convertToCurrencyDecimals(ETHEREUM_ADDRESS,"0.1"), RateMode.Stable, "0", {from: users[1]}), "The collateral balance is 0") + // const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) -// }); + // const user1RedirectionAddress = await _aDAI.getInterestRedirectionAddress(users[1]) -// it('User 1 sets the DAI as collateral and borrows, tries to transfer everything back to user 0 (revert expected)', async () => { + // expect(user2RedirectedBalanceAfter.toString()).to.be.equal("0", "Invalid redirected balance for user 2 after transfer") -// await _lendingPoolInstance.setUserUseReserveAsCollateral(_DAI.address, true, {from: users[1]}) + // expect(user1RedirectionAddress.toString()).to.be.equal(NIL_ADDRESS, "Invalid redirected address for user 1") -// const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '1000'); + // }); -// await _lendingPoolInstance.borrow(ETHEREUM_ADDRESS, await convertToCurrencyDecimals(ETHEREUM_ADDRESS,"0.1"), RateMode.Stable, "0", {from: users[1]}) + // it('User 0 redirects interest to user 2, transfers 500 aDAI to user 1. User 1 redirects to user 3. User 0 transfers another 100 aDAI', async () => { -// await expectRevert(_aDAI.transfer(users[0], aDAItoTransfer, {from: users[1]}), "Transfer cannot be allowed.") -// }); + // let aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '500'); - -// it('User 0 tries to transfer 0 balance (revert expected)', async () => { -// await expectRevert(_aDAI.transfer(users[1], "0", {from: users[0]}), "Transferred amount needs to be greater than zero") -// }); + // await _aDAI.redirectInterestStream(users[2], {from: users[0]}) -// it('User 1 repays the borrow, transfers aDAI back to user 0', async () => { + // await _aDAI.transfer(users[1], aDAItoTransfer, {from: users[0]}) -// await _lendingPoolInstance.repay(ETHEREUM_ADDRESS, MAX_UINT_AMOUNT, users[1], {from: users[1], value: oneEther.toFixed(0)}) + // await _aDAI.redirectInterestStream(users[3], {from: users[1]}) -// const aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '1000'); + // aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '100'); -// await _aDAI.transfer(users[0], aDAItoTransfer, {from: users[1]}) + // await _aDAI.transfer(users[1], aDAItoTransfer, {from: users[0]}) -// const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) + // const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) + // const user3RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[3]) -// const user1RedirectionAddress = await _aDAI.getInterestRedirectionAddress(users[1]) + // const expectedUser2Redirected = await convertToCurrencyDecimals(_DAI.address, "400") + // const expectedUser3Redirected = await convertToCurrencyDecimals(_DAI.address, "600") -// expect(user2RedirectedBalanceAfter.toString()).to.be.equal("0", "Invalid redirected balance for user 2 after transfer") + // expect(user2RedirectedBalanceAfter.toString()).to.be.equal(expectedUser2Redirected, "Invalid redirected balance for user 2 after transfer") + // expect(user3RedirectedBalanceAfter.toString()).to.be.equal(expectedUser3Redirected, "Invalid redirected balance for user 3 after transfer") -// expect(user1RedirectionAddress.toString()).to.be.equal(NIL_ADDRESS, "Invalid redirected address for user 1") + // }); +}); -// }); +// // contract('AToken: Transfer', async ([deployer, ...users]) => { +// // let _testEnvProvider: ITestEnvWithoutInstances; +// // let _aDAI: ATokenInstance; +// // let _DAI: MintableERC20Instance; +// // let _lendingPoolInstance: LendingPoolInstance; +// // let _lendingPoolCoreInstance: LendingPoolCoreInstance; -// it('User 0 redirects interest to user 2, transfers 500 aDAI to user 1. User 1 redirects to user 3. User 0 transfers another 100 aDAI', async () => { +// // before('Initializing test variables', async () => { +// // console.time('setup-test'); +// // _testEnvProvider = await testEnvProviderWithoutInstances( +// // artifacts, +// // [deployer, ...users] +// // ); - -// let aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '500'); +// // const { +// // getLendingPoolInstance, +// // getLendingPoolCoreInstance, +// // getAllAssetsInstances, +// // getATokenInstances +// // } = _testEnvProvider; +// // const instances = await Promise.all([ +// // getATokenInstances(), getAllAssetsInstances(), getLendingPoolInstance(), getLendingPoolCoreInstance() +// // ]) -// await _aDAI.redirectInterestStream(users[2], {from: users[0]}) +// // _aDAI = instances[0].aDAI +// // _DAI = instances[1].DAI +// // _lendingPoolInstance = instances[2]; +// // _lendingPoolCoreInstance = instances[3] -// await _aDAI.transfer(users[1], aDAItoTransfer, {from: users[0]}) +// // console.timeEnd('setup-test'); +// // }); -// await _aDAI.redirectInterestStream(users[3], {from: users[1]}) - -// aDAItoTransfer = await convertToCurrencyDecimals(_DAI.address, '100'); - -// await _aDAI.transfer(users[1], aDAItoTransfer, {from: users[0]}) - - -// const user2RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[2]) -// const user3RedirectedBalanceAfter = await _aDAI.getRedirectedBalance(users[3]) - -// const expectedUser2Redirected = await convertToCurrencyDecimals(_DAI.address, "400") -// const expectedUser3Redirected = await convertToCurrencyDecimals(_DAI.address, "600") - -// expect(user2RedirectedBalanceAfter.toString()).to.be.equal(expectedUser2Redirected, "Invalid redirected balance for user 2 after transfer") -// expect(user3RedirectedBalanceAfter.toString()).to.be.equal(expectedUser3Redirected, "Invalid redirected balance for user 3 after transfer") - - -// }); - - -// }); +// // }); diff --git a/types/AaveProtocolTestHelpers.d.ts b/types/AaveProtocolTestHelpers.d.ts index f022af23..6ba01eb0 100644 --- a/types/AaveProtocolTestHelpers.d.ts +++ b/types/AaveProtocolTestHelpers.d.ts @@ -15,6 +15,8 @@ interface AaveProtocolTestHelpersInterface extends Interface { ADDRESSES_PROVIDER: TypedFunctionDescription<{ encode([]: []): string }>; getAllATokens: TypedFunctionDescription<{ encode([]: []): string }>; + + getAllReservesTokens: TypedFunctionDescription<{ encode([]: []): string }>; }; events: {}; @@ -45,14 +47,22 @@ export class AaveProtocolTestHelpers extends Contract { ADDRESSES_PROVIDER(): Promise; getAllATokens(): Promise< - { symbol: string; aTokenAddress: string; 0: string; 1: string }[] + { symbol: string; tokenAddress: string; 0: string; 1: string }[] + >; + + getAllReservesTokens(): Promise< + { symbol: string; tokenAddress: string; 0: string; 1: string }[] >; }; ADDRESSES_PROVIDER(): Promise; getAllATokens(): Promise< - { symbol: string; aTokenAddress: string; 0: string; 1: string }[] + { symbol: string; tokenAddress: string; 0: string; 1: string }[] + >; + + getAllReservesTokens(): Promise< + { symbol: string; tokenAddress: string; 0: string; 1: string }[] >; filters: {}; @@ -61,5 +71,7 @@ export class AaveProtocolTestHelpers extends Contract { ADDRESSES_PROVIDER(): Promise; getAllATokens(): Promise; + + getAllReservesTokens(): Promise; }; } diff --git a/types/AaveProtocolTestHelpersFactory.ts b/types/AaveProtocolTestHelpersFactory.ts index ce1fd041..b3b85952 100644 --- a/types/AaveProtocolTestHelpersFactory.ts +++ b/types/AaveProtocolTestHelpersFactory.ts @@ -83,11 +83,36 @@ const _abi = [ }, { internalType: "address", - name: "aTokenAddress", + name: "tokenAddress", type: "address" } ], - internalType: "struct AaveProtocolTestHelpers.ATokenData[]", + internalType: "struct AaveProtocolTestHelpers.TokenData[]", + name: "", + type: "tuple[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getAllReservesTokens", + outputs: [ + { + components: [ + { + internalType: "string", + name: "symbol", + type: "string" + }, + { + internalType: "address", + name: "tokenAddress", + type: "address" + } + ], + internalType: "struct AaveProtocolTestHelpers.TokenData[]", name: "", type: "tuple[]" } @@ -98,4 +123,4 @@ const _abi = [ ]; const _bytecode = - "0x60a060405234801561001057600080fd5b5060405161064338038061064383398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c6105b16100926000398060705280609852506105b16000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630542975c1461003b578063f561ae4114610059575b600080fd5b61004361006e565b6040516100509190610468565b60405180910390f35b610061610092565b604051610050919061047c565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156100ef57600080fd5b505afa158015610103573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610127919061030e565b90506060816001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160006040518083038186803b15801561016457600080fd5b505afa158015610178573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101a09190810190610331565b9050606060005b82518110156102f5576000846001600160a01b03166334b3beee8584815181106101cd57fe5b60200260200101516040518263ffffffff1660e01b81526004016101f19190610468565b60206040518083038186803b15801561020957600080fd5b505afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610241919061030e565b90506040518060400160405280826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561028757600080fd5b505afa15801561029b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c391908101906103dc565b8152602001826001600160a01b03168152508383815181106102e157fe5b6020908102919091010152506001016101a7565b509250505090565b805161030881610563565b92915050565b60006020828403121561031f578081fd5b815161032a81610563565b9392505050565b60006020808385031215610343578182fd5b825167ffffffffffffffff8082111561035a578384fd5b81850186601f82011261036b578485fd5b805192508183111561037b578485fd5b838302915061038b84830161050c565b8381528481019082860184840187018a10156103a5578788fd5b8794505b858510156103cf576103bb8a826102fd565b8352600194909401939186019186016103a9565b5098975050505050505050565b6000602082840312156103ed578081fd5b815167ffffffffffffffff80821115610404578283fd5b81840185601f820112610415578384fd5b8051925081831115610425578384fd5b610438601f8401601f191660200161050c565b915082825285602084830101111561044e578384fd5b61045f836020840160208401610533565b50949350505050565b6001600160a01b0391909116815260200190565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156104fe57603f19898403018552815180518785528051808987015260606104d0828289018d8601610533565b928a01516001600160a01b0316868b015296890196601f01601f1916909401019250908601906001016104a0565b509098975050505050505050565b60405181810167ffffffffffffffff8111828210171561052b57600080fd5b604052919050565b60005b8381101561054e578181015183820152602001610536565b8381111561055d576000848401525b50505050565b6001600160a01b038116811461057857600080fd5b5056fea264697066735822122050960433c8f7ac57690ddc920d782498bf0717738735870b68637df5806b8e8f64736f6c63430006080033"; + "0x60a060405234801561001057600080fd5b5060405161092738038061092783398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610890610097600039806083528060ab52806102fd52506108906000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630542975c14610046578063b316ff8914610064578063f561ae4114610079575b600080fd5b61004e610081565b60405161005b919061073f565b60405180910390f35b61006c6100a5565b60405161005b9190610753565b61006c6102f7565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561010257600080fd5b505afa158015610116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013a91906105d8565b90506060816001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160006040518083038186803b15801561017757600080fd5b505afa15801561018b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101b391908101906105fb565b90506060815167ffffffffffffffff811180156101cf57600080fd5b5060405190808252806020026020018201604052801561020957816020015b6101f66105af565b8152602001906001900390816101ee5790505b50905060005b82518110156102ef57604051806040016040528084838151811061022f57fe5b60200260200101516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561026f57600080fd5b505afa158015610283573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102ab91908101906106a6565b81526020018483815181106102bc57fe5b60200260200101516001600160a01b03168152508282815181106102dc57fe5b602090810291909101015260010161020f565b509250505090565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561035457600080fd5b505afa158015610368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038c91906105d8565b90506060816001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160006040518083038186803b1580156103c957600080fd5b505afa1580156103dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261040591908101906105fb565b90506060815167ffffffffffffffff8111801561042157600080fd5b5060405190808252806020026020018201604052801561045b57816020015b6104486105af565b8152602001906001900390816104405790505b50905060005b82518110156102ef576000846001600160a01b03166334b3beee85848151811061048757fe5b60200260200101516040518263ffffffff1660e01b81526004016104ab919061073f565b60206040518083038186803b1580156104c357600080fd5b505afa1580156104d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fb91906105d8565b90506040518060400160405280826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561054157600080fd5b505afa158015610555573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261057d91908101906106a6565b8152602001826001600160a01b031681525083838151811061059b57fe5b602090810291909101015250600101610461565b60408051808201909152606081526000602082015290565b80516105d281610842565b92915050565b6000602082840312156105e9578081fd5b81516105f481610842565b9392505050565b6000602080838503121561060d578182fd5b825167ffffffffffffffff80821115610624578384fd5b81850186601f820112610635578485fd5b8051925081831115610645578485fd5b83830291506106558483016107eb565b8381528481019082860184840187018a101561066f578788fd5b8794505b85851015610699576106858a826105c7565b835260019490940193918601918601610673565b5098975050505050505050565b6000602082840312156106b7578081fd5b815167ffffffffffffffff808211156106ce578283fd5b81840185601f8201126106df578384fd5b80519250818311156106ef578384fd5b610702601f8401601f19166020016107eb565b9150828252856020848301011115610718578384fd5b610729836020840160208401610812565b50949350505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156107dd57603f19898403018552815180518785528051808987015260606107a7828289018d8601610812565b8a84015192506107b98b880184610732565b978a0197601f91909101601f19169590950190940193505090860190600101610777565b509098975050505050505050565b60405181810167ffffffffffffffff8111828210171561080a57600080fd5b604052919050565b60005b8381101561082d578181015183820152602001610815565b8381111561083c576000848401525b50505050565b6001600160a01b038116811461085757600080fd5b5056fea2646970667358221220967f9120944e2fb9b6967de3a3d8bdd8112cda206fef4ad213f58723df99cb4264736f6c63430006080033";