mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Merge fix
This commit is contained in:
parent
3f779e2e9f
commit
d3ef60f01b
|
@ -278,7 +278,7 @@ export const getSelfdestructTransferMock = async (address?: tEthereumAddress) =>
|
||||||
export const getMockUniswapRouter = async (address?: tEthereumAddress) =>
|
export const getMockUniswapRouter = async (address?: tEthereumAddress) =>
|
||||||
await MockUniswapV2Router02Factory.connect(
|
await MockUniswapV2Router02Factory.connect(
|
||||||
address ||
|
address ||
|
||||||
(await getDb().get(`${eContractid.MockUniswapV2Router02}.${BRE.network.name}`).value())
|
(await getDb().get(`${eContractid.MockUniswapV2Router02}.${DRE.network.name}`).value())
|
||||||
.address,
|
.address,
|
||||||
await getFirstSigner()
|
await getFirstSigner()
|
||||||
);
|
);
|
||||||
|
@ -286,7 +286,7 @@ export const getMockUniswapRouter = async (address?: tEthereumAddress) =>
|
||||||
export const getUniswapLiquiditySwapAdapter = async (address?: tEthereumAddress) =>
|
export const getUniswapLiquiditySwapAdapter = async (address?: tEthereumAddress) =>
|
||||||
await UniswapLiquiditySwapAdapterFactory.connect(
|
await UniswapLiquiditySwapAdapterFactory.connect(
|
||||||
address ||
|
address ||
|
||||||
(await getDb().get(`${eContractid.UniswapLiquiditySwapAdapter}.${BRE.network.name}`).value())
|
(await getDb().get(`${eContractid.UniswapLiquiditySwapAdapter}.${DRE.network.name}`).value())
|
||||||
.address,
|
.address,
|
||||||
await getFirstSigner()
|
await getFirstSigner()
|
||||||
);
|
);
|
||||||
|
@ -294,6 +294,6 @@ export const getUniswapLiquiditySwapAdapter = async (address?: tEthereumAddress)
|
||||||
export const getUniswapRepayAdapter = async (address?: tEthereumAddress) =>
|
export const getUniswapRepayAdapter = async (address?: tEthereumAddress) =>
|
||||||
await UniswapRepayAdapterFactory.connect(
|
await UniswapRepayAdapterFactory.connect(
|
||||||
address ||
|
address ||
|
||||||
(await getDb().get(`${eContractid.UniswapRepayAdapter}.${BRE.network.name}`).value()).address,
|
(await getDb().get(`${eContractid.UniswapRepayAdapter}.${DRE.network.name}`).value()).address,
|
||||||
await getFirstSigner()
|
await getFirstSigner()
|
||||||
);
|
);
|
||||||
|
|
|
@ -15,7 +15,7 @@ import {
|
||||||
import {MockUniswapV2Router02} from '../types/MockUniswapV2Router02';
|
import {MockUniswapV2Router02} from '../types/MockUniswapV2Router02';
|
||||||
import {Zero} from '@ethersproject/constants';
|
import {Zero} from '@ethersproject/constants';
|
||||||
import BigNumber from 'bignumber.js';
|
import BigNumber from 'bignumber.js';
|
||||||
import {BRE, evmRevert, evmSnapshot} from '../helpers/misc-utils';
|
import {DRE, evmRevert, evmSnapshot} from '../helpers/misc-utils';
|
||||||
import {ethers} from 'ethers';
|
import {ethers} from 'ethers';
|
||||||
import {eContractid} from '../helpers/types';
|
import {eContractid} from '../helpers/types';
|
||||||
import {AToken} from '../types/AToken';
|
import {AToken} from '../types/AToken';
|
||||||
|
@ -94,13 +94,13 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
expect(result['3']).to.be.eq(daiUsdValue);
|
expect(result['3']).to.be.eq(daiUsdValue);
|
||||||
});
|
});
|
||||||
it('should work correctly with different decimals', async () => {
|
it('should work correctly with different decimals', async () => {
|
||||||
const {lend, usdc, uniswapLiquiditySwapAdapter, oracle} = testEnv;
|
const {aave, usdc, uniswapLiquiditySwapAdapter, oracle} = testEnv;
|
||||||
|
|
||||||
const amountIn = parseEther('10');
|
const amountIn = parseEther('10');
|
||||||
const flashloanPremium = amountIn.mul(9).div(10000);
|
const flashloanPremium = amountIn.mul(9).div(10000);
|
||||||
const amountToSwap = amountIn.sub(flashloanPremium);
|
const amountToSwap = amountIn.sub(flashloanPremium);
|
||||||
|
|
||||||
const lendPrice = await oracle.getAssetPrice(lend.address);
|
const aavePrice = await oracle.getAssetPrice(aave.address);
|
||||||
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
||||||
const usdPrice = await oracle.getAssetPrice(USD_ADDRESS);
|
const usdPrice = await oracle.getAssetPrice(USD_ADDRESS);
|
||||||
|
|
||||||
|
@ -114,8 +114,8 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
.mul('1000000') // usdc 6 decimals
|
.mul('1000000') // usdc 6 decimals
|
||||||
.div(expectedUSDCAmount.mul(parseEther('1')));
|
.div(expectedUSDCAmount.mul(parseEther('1')));
|
||||||
|
|
||||||
const lendUsdValue = amountIn
|
const aaveUsdValue = amountIn
|
||||||
.mul(lendPrice)
|
.mul(aavePrice)
|
||||||
.div(parseEther('1'))
|
.div(parseEther('1'))
|
||||||
.mul(usdPrice)
|
.mul(usdPrice)
|
||||||
.div(parseEther('1'));
|
.div(parseEther('1'));
|
||||||
|
@ -128,20 +128,20 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
await mockUniswapRouter.setAmountOut(
|
await mockUniswapRouter.setAmountOut(
|
||||||
amountToSwap,
|
amountToSwap,
|
||||||
lend.address,
|
aave.address,
|
||||||
usdc.address,
|
usdc.address,
|
||||||
expectedUSDCAmount
|
expectedUSDCAmount
|
||||||
);
|
);
|
||||||
|
|
||||||
const result = await uniswapLiquiditySwapAdapter.getAmountsOut(
|
const result = await uniswapLiquiditySwapAdapter.getAmountsOut(
|
||||||
amountIn,
|
amountIn,
|
||||||
lend.address,
|
aave.address,
|
||||||
usdc.address
|
usdc.address
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(result['0']).to.be.eq(expectedUSDCAmount);
|
expect(result['0']).to.be.eq(expectedUSDCAmount);
|
||||||
expect(result['1']).to.be.eq(outPerInPrice);
|
expect(result['1']).to.be.eq(outPerInPrice);
|
||||||
expect(result['2']).to.be.eq(lendUsdValue);
|
expect(result['2']).to.be.eq(aaveUsdValue);
|
||||||
expect(result['3']).to.be.eq(usdcUsdValue);
|
expect(result['3']).to.be.eq(usdcUsdValue);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -193,13 +193,13 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
expect(result['3']).to.be.eq(daiUsdValue);
|
expect(result['3']).to.be.eq(daiUsdValue);
|
||||||
});
|
});
|
||||||
it('should work correctly with different decimals', async () => {
|
it('should work correctly with different decimals', async () => {
|
||||||
const {lend, usdc, uniswapLiquiditySwapAdapter, oracle} = testEnv;
|
const {aave, usdc, uniswapLiquiditySwapAdapter, oracle} = testEnv;
|
||||||
|
|
||||||
const amountIn = parseEther('10');
|
const amountIn = parseEther('10');
|
||||||
const flashloanPremium = amountIn.mul(9).div(10000);
|
const flashloanPremium = amountIn.mul(9).div(10000);
|
||||||
const amountToSwap = amountIn.sub(flashloanPremium);
|
const amountToSwap = amountIn.sub(flashloanPremium);
|
||||||
|
|
||||||
const lendPrice = await oracle.getAssetPrice(lend.address);
|
const aavePrice = await oracle.getAssetPrice(aave.address);
|
||||||
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
||||||
const usdPrice = await oracle.getAssetPrice(USD_ADDRESS);
|
const usdPrice = await oracle.getAssetPrice(USD_ADDRESS);
|
||||||
|
|
||||||
|
@ -213,8 +213,8 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
.mul(parseEther('1'))
|
.mul(parseEther('1'))
|
||||||
.div(amountToSwap.mul('1000000')); // usdc 6 decimals
|
.div(amountToSwap.mul('1000000')); // usdc 6 decimals
|
||||||
|
|
||||||
const lendUsdValue = amountToSwap
|
const aaveUsdValue = amountToSwap
|
||||||
.mul(lendPrice)
|
.mul(aavePrice)
|
||||||
.div(parseEther('1'))
|
.div(parseEther('1'))
|
||||||
.mul(usdPrice)
|
.mul(usdPrice)
|
||||||
.div(parseEther('1'));
|
.div(parseEther('1'));
|
||||||
|
@ -225,17 +225,17 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
.mul(usdPrice)
|
.mul(usdPrice)
|
||||||
.div(parseEther('1'));
|
.div(parseEther('1'));
|
||||||
|
|
||||||
await mockUniswapRouter.setAmountIn(amountOut, lend.address, usdc.address, amountIn);
|
await mockUniswapRouter.setAmountIn(amountOut, aave.address, usdc.address, amountIn);
|
||||||
|
|
||||||
const result = await uniswapLiquiditySwapAdapter.getAmountsIn(
|
const result = await uniswapLiquiditySwapAdapter.getAmountsIn(
|
||||||
amountOut,
|
amountOut,
|
||||||
lend.address,
|
aave.address,
|
||||||
usdc.address
|
usdc.address
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(result['0']).to.be.eq(amountToSwap);
|
expect(result['0']).to.be.eq(amountToSwap);
|
||||||
expect(result['1']).to.be.eq(inPerOutPrice);
|
expect(result['1']).to.be.eq(inPerOutPrice);
|
||||||
expect(result['2']).to.be.eq(lendUsdValue);
|
expect(result['2']).to.be.eq(aaveUsdValue);
|
||||||
expect(result['3']).to.be.eq(usdcUsdValue);
|
expect(result['3']).to.be.eq(usdcUsdValue);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -474,7 +474,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
} = testEnv;
|
} = testEnv;
|
||||||
const user = users[0].signer;
|
const user = users[0].signer;
|
||||||
const userAddress = users[0].address;
|
const userAddress = users[0].address;
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
|
|
||||||
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
||||||
|
@ -628,7 +628,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
// Subtract the FL fee from the amount to be swapped 0,09%
|
// Subtract the FL fee from the amount to be swapped 0,09%
|
||||||
const flashloanAmount = new BigNumber(liquidityToSwap.toString()).div(1.0009).toFixed(0);
|
const flashloanAmount = new BigNumber(liquidityToSwap.toString()).div(1.0009).toFixed(0);
|
||||||
|
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
||||||
const msgParams = buildPermitParams(
|
const msgParams = buildPermitParams(
|
||||||
|
@ -1209,7 +1209,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const liquidityToSwap = parseEther('10');
|
const liquidityToSwap = parseEther('10');
|
||||||
expect(userAEthBalanceBefore).to.be.eq(liquidityToSwap);
|
expect(userAEthBalanceBefore).to.be.eq(liquidityToSwap);
|
||||||
|
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
||||||
const msgParams = buildPermitParams(
|
const msgParams = buildPermitParams(
|
||||||
|
@ -1373,7 +1373,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const liquidityToSwap = parseEther('10');
|
const liquidityToSwap = parseEther('10');
|
||||||
const userAEthBalanceBefore = await aWETH.balanceOf(userAddress);
|
const userAEthBalanceBefore = await aWETH.balanceOf(userAddress);
|
||||||
|
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
||||||
const msgParams = buildPermitParams(
|
const msgParams = buildPermitParams(
|
||||||
|
@ -1680,7 +1680,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
} = testEnv;
|
} = testEnv;
|
||||||
const user = users[0].signer;
|
const user = users[0].signer;
|
||||||
const userAddress = users[0].address;
|
const userAddress = users[0].address;
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
|
|
||||||
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
||||||
|
@ -1898,7 +1898,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
// Only has 10 atokens, so all the balance will be swapped
|
// Only has 10 atokens, so all the balance will be swapped
|
||||||
const bigAmountToSwap = parseEther('100');
|
const bigAmountToSwap = parseEther('100');
|
||||||
|
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
|
|
||||||
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
||||||
|
@ -1974,7 +1974,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
describe('executeOperation', () => {
|
describe('executeOperation', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const {users, weth, dai, usdc, lend, pool, deployer} = testEnv;
|
const {users, weth, dai, usdc, aave, pool, deployer} = testEnv;
|
||||||
const userAddress = users[0].address;
|
const userAddress = users[0].address;
|
||||||
|
|
||||||
// Provide liquidity
|
// Provide liquidity
|
||||||
|
@ -1982,7 +1982,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
await dai.approve(pool.address, parseEther('20000'));
|
await dai.approve(pool.address, parseEther('20000'));
|
||||||
await pool.deposit(dai.address, parseEther('20000'), deployer.address, 0);
|
await pool.deposit(dai.address, parseEther('20000'), deployer.address, 0);
|
||||||
|
|
||||||
const usdcLiquidity = await convertToCurrencyDecimals(usdc.address, '20000');
|
const usdcLiquidity = await convertToCurrencyDecimals(usdc.address, '2000000');
|
||||||
await usdc.mint(usdcLiquidity);
|
await usdc.mint(usdcLiquidity);
|
||||||
await usdc.approve(pool.address, usdcLiquidity);
|
await usdc.approve(pool.address, usdcLiquidity);
|
||||||
await pool.deposit(usdc.address, usdcLiquidity, deployer.address, 0);
|
await pool.deposit(usdc.address, usdcLiquidity, deployer.address, 0);
|
||||||
|
@ -1991,18 +1991,22 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
await weth.approve(pool.address, parseEther('100'));
|
await weth.approve(pool.address, parseEther('100'));
|
||||||
await pool.deposit(weth.address, parseEther('100'), deployer.address, 0);
|
await pool.deposit(weth.address, parseEther('100'), deployer.address, 0);
|
||||||
|
|
||||||
await lend.mint(parseEther('1000000'));
|
await aave.mint(parseEther('1000000'));
|
||||||
await lend.approve(pool.address, parseEther('1000000'));
|
await aave.approve(pool.address, parseEther('1000000'));
|
||||||
await pool.deposit(lend.address, parseEther('1000000'), deployer.address, 0);
|
await pool.deposit(aave.address, parseEther('1000000'), deployer.address, 0);
|
||||||
|
|
||||||
// Make a deposit for user
|
// Make a deposit for user
|
||||||
await weth.mint(parseEther('100'));
|
await weth.mint(parseEther('1000'));
|
||||||
await weth.approve(pool.address, parseEther('100'));
|
await weth.approve(pool.address, parseEther('1000'));
|
||||||
await pool.deposit(weth.address, parseEther('100'), userAddress, 0);
|
await pool.deposit(weth.address, parseEther('1000'), userAddress, 0);
|
||||||
|
|
||||||
await lend.mint(parseEther('1000000'));
|
await aave.mint(parseEther('1000000'));
|
||||||
await lend.approve(pool.address, parseEther('1000000'));
|
await aave.approve(pool.address, parseEther('1000000'));
|
||||||
await pool.deposit(lend.address, parseEther('1000000'), userAddress, 0);
|
await pool.deposit(aave.address, parseEther('1000000'), userAddress, 0);
|
||||||
|
|
||||||
|
await usdc.mint(usdcLiquidity);
|
||||||
|
await usdc.approve(pool.address, usdcLiquidity);
|
||||||
|
await pool.deposit(usdc.address, usdcLiquidity, userAddress, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should correctly swap tokens and repay debt', async () => {
|
it('should correctly swap tokens and repay debt', async () => {
|
||||||
|
@ -2133,7 +2137,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
// Subtract the FL fee from the amount to be swapped 0,09%
|
// Subtract the FL fee from the amount to be swapped 0,09%
|
||||||
const flashloanAmount = new BigNumber(liquidityToSwap.toString()).div(1.0009).toFixed(0);
|
const flashloanAmount = new BigNumber(liquidityToSwap.toString()).div(1.0009).toFixed(0);
|
||||||
|
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
const nonce = (await aWETH._nonces(userAddress)).toNumber();
|
||||||
const msgParams = buildPermitParams(
|
const msgParams = buildPermitParams(
|
||||||
|
@ -2206,7 +2210,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
oracle,
|
oracle,
|
||||||
dai,
|
dai,
|
||||||
uniswapRepayAdapter,
|
uniswapRepayAdapter,
|
||||||
lend,
|
aave,
|
||||||
usdc,
|
usdc,
|
||||||
helpersContract,
|
helpersContract,
|
||||||
aWETH,
|
aWETH,
|
||||||
|
@ -2215,7 +2219,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const userAddress = users[0].address;
|
const userAddress = users[0].address;
|
||||||
|
|
||||||
const amountWETHtoSwap = await convertToCurrencyDecimals(weth.address, '10');
|
const amountWETHtoSwap = await convertToCurrencyDecimals(weth.address, '10');
|
||||||
const amountLendToSwap = await convertToCurrencyDecimals(lend.address, '1');
|
const amountAaveToSwap = parseEther('1');
|
||||||
|
|
||||||
const daiPrice = await oracle.getAssetPrice(dai.address);
|
const daiPrice = await oracle.getAssetPrice(dai.address);
|
||||||
const expectedDaiAmountForEth = await convertToCurrencyDecimals(
|
const expectedDaiAmountForEth = await convertToCurrencyDecimals(
|
||||||
|
@ -2223,17 +2227,17 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
new BigNumber(amountWETHtoSwap.toString()).div(daiPrice.toString()).toFixed(0)
|
new BigNumber(amountWETHtoSwap.toString()).div(daiPrice.toString()).toFixed(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
const lendPrice = await oracle.getAssetPrice(lend.address);
|
const aavePrice = await oracle.getAssetPrice(aave.address);
|
||||||
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
||||||
|
|
||||||
const collateralDecimals = (await lend.decimals()).toString();
|
const collateralDecimals = (await aave.decimals()).toString();
|
||||||
const principalDecimals = (await usdc.decimals()).toString();
|
const principalDecimals = (await usdc.decimals()).toString();
|
||||||
|
|
||||||
const expectedUsdcAmountForLend = await convertToCurrencyDecimals(
|
const expectedUsdcAmountForAave = await convertToCurrencyDecimals(
|
||||||
usdc.address,
|
usdc.address,
|
||||||
new BigNumber(amountLendToSwap.toString())
|
new BigNumber(amountAaveToSwap.toString())
|
||||||
.times(
|
.times(
|
||||||
new BigNumber(lendPrice.toString()).times(new BigNumber(10).pow(principalDecimals))
|
new BigNumber(aavePrice.toString()).times(new BigNumber(10).pow(principalDecimals))
|
||||||
)
|
)
|
||||||
.div(
|
.div(
|
||||||
new BigNumber(usdcPrice.toString()).times(new BigNumber(10).pow(collateralDecimals))
|
new BigNumber(usdcPrice.toString()).times(new BigNumber(10).pow(collateralDecimals))
|
||||||
|
@ -2243,7 +2247,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
// Open user Debt
|
// Open user Debt
|
||||||
await pool.connect(user).borrow(dai.address, expectedDaiAmountForEth, 1, 0, userAddress);
|
await pool.connect(user).borrow(dai.address, expectedDaiAmountForEth, 1, 0, userAddress);
|
||||||
await pool.connect(user).borrow(usdc.address, expectedUsdcAmountForLend, 1, 0, userAddress);
|
await pool.connect(user).borrow(usdc.address, expectedUsdcAmountForAave, 1, 0, userAddress);
|
||||||
|
|
||||||
const daiStableDebtTokenAddress = (
|
const daiStableDebtTokenAddress = (
|
||||||
await helpersContract.getReserveTokensAddresses(dai.address)
|
await helpersContract.getReserveTokensAddresses(dai.address)
|
||||||
|
@ -2270,26 +2274,26 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const wethFlashloanAmount = new BigNumber(amountWETHtoSwap.toString())
|
const wethFlashloanAmount = new BigNumber(amountWETHtoSwap.toString())
|
||||||
.div(1.0009)
|
.div(1.0009)
|
||||||
.toFixed(0);
|
.toFixed(0);
|
||||||
const lendFlashloanAmount = new BigNumber(amountLendToSwap.toString())
|
const aaveFlashloanAmount = new BigNumber(amountAaveToSwap.toString())
|
||||||
.div(1.0009)
|
.div(1.0009)
|
||||||
.toFixed(0);
|
.toFixed(0);
|
||||||
|
|
||||||
await mockUniswapRouter.connect(user).setAmountToSwap(weth.address, wethFlashloanAmount);
|
await mockUniswapRouter.connect(user).setAmountToSwap(weth.address, wethFlashloanAmount);
|
||||||
await mockUniswapRouter.connect(user).setAmountToSwap(lend.address, lendFlashloanAmount);
|
await mockUniswapRouter.connect(user).setAmountToSwap(aave.address, aaveFlashloanAmount);
|
||||||
|
|
||||||
await aWETH.connect(user).approve(uniswapRepayAdapter.address, amountWETHtoSwap);
|
await aWETH.connect(user).approve(uniswapRepayAdapter.address, amountWETHtoSwap);
|
||||||
|
|
||||||
const lendData = await pool.getReserveData(lend.address);
|
const aaveData = await pool.getReserveData(aave.address);
|
||||||
const aLend = await getContract<AToken>(eContractid.AToken, lendData.aTokenAddress);
|
const aAave = await getContract<AToken>(eContractid.AToken, aaveData.aTokenAddress);
|
||||||
await aLend.connect(user).approve(uniswapRepayAdapter.address, amountLendToSwap);
|
await aAave.connect(user).approve(uniswapRepayAdapter.address, amountAaveToSwap);
|
||||||
|
|
||||||
const aWETHBalanceBefore = await aWETH.balanceOf(userAddress);
|
const aWETHBalanceBefore = await aWETH.balanceOf(userAddress);
|
||||||
const aLendBalanceBefore = await aLend.balanceOf(userAddress);
|
const aAaveBalanceBefore = await aAave.balanceOf(userAddress);
|
||||||
|
|
||||||
const params = buildRepayAdapterParams(
|
const params = buildRepayAdapterParams(
|
||||||
[dai.address, usdc.address],
|
[dai.address, usdc.address],
|
||||||
0,
|
0,
|
||||||
[expectedDaiAmountForEth, expectedUsdcAmountForLend],
|
[expectedDaiAmountForEth, expectedUsdcAmountForAave],
|
||||||
[1, 1],
|
[1, 1],
|
||||||
[0, 0],
|
[0, 0],
|
||||||
[0, 0],
|
[0, 0],
|
||||||
|
@ -2308,8 +2312,8 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
.connect(user)
|
.connect(user)
|
||||||
.flashLoan(
|
.flashLoan(
|
||||||
uniswapRepayAdapter.address,
|
uniswapRepayAdapter.address,
|
||||||
[weth.address, lend.address],
|
[weth.address, aave.address],
|
||||||
[wethFlashloanAmount.toString(), lendFlashloanAmount.toString()],
|
[wethFlashloanAmount.toString(), aaveFlashloanAmount.toString()],
|
||||||
[0, 0],
|
[0, 0],
|
||||||
userAddress,
|
userAddress,
|
||||||
params,
|
params,
|
||||||
|
@ -2321,16 +2325,16 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const userDaiStableDebtAmount = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiStableDebtAmount = await daiStableDebtContract.balanceOf(userAddress);
|
||||||
const userUsdcStableDebtAmount = await usdcStableDebtContract.balanceOf(userAddress);
|
const userUsdcStableDebtAmount = await usdcStableDebtContract.balanceOf(userAddress);
|
||||||
const aWETHBalance = await aWETH.balanceOf(userAddress);
|
const aWETHBalance = await aWETH.balanceOf(userAddress);
|
||||||
const aLendBalance = await aLend.balanceOf(userAddress);
|
const aAaveBalance = await aAave.balanceOf(userAddress);
|
||||||
|
|
||||||
expect(adapterWethBalance).to.be.eq(Zero);
|
expect(adapterWethBalance).to.be.eq(Zero);
|
||||||
expect(adapterDaiBalance).to.be.eq(Zero);
|
expect(adapterDaiBalance).to.be.eq(Zero);
|
||||||
expect(userDaiStableDebtAmountBefore).to.be.gte(expectedDaiAmountForEth);
|
expect(userDaiStableDebtAmountBefore).to.be.gte(expectedDaiAmountForEth);
|
||||||
expect(userDaiStableDebtAmount).to.be.lt(expectedDaiAmountForEth);
|
expect(userDaiStableDebtAmount).to.be.lt(expectedDaiAmountForEth);
|
||||||
expect(userUsdcStableDebtAmountBefore).to.be.gte(expectedUsdcAmountForLend);
|
expect(userUsdcStableDebtAmountBefore).to.be.gte(expectedUsdcAmountForAave);
|
||||||
expect(userUsdcStableDebtAmount).to.be.lt(expectedUsdcAmountForLend);
|
expect(userUsdcStableDebtAmount).to.be.lt(expectedUsdcAmountForAave);
|
||||||
expect(aWETHBalance).to.be.lt(aWETHBalanceBefore);
|
expect(aWETHBalance).to.be.lt(aWETHBalanceBefore);
|
||||||
expect(aLendBalance).to.be.lt(aLendBalanceBefore);
|
expect(aAaveBalance).to.be.lt(aAaveBalanceBefore);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should swap tokens and repay debt for multiple tokens using permit', async () => {
|
it('should swap tokens and repay debt for multiple tokens using permit', async () => {
|
||||||
|
@ -2341,14 +2345,14 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
oracle,
|
oracle,
|
||||||
dai,
|
dai,
|
||||||
uniswapRepayAdapter,
|
uniswapRepayAdapter,
|
||||||
lend,
|
aave,
|
||||||
usdc,
|
usdc,
|
||||||
helpersContract,
|
helpersContract,
|
||||||
aWETH,
|
aWETH,
|
||||||
} = testEnv;
|
} = testEnv;
|
||||||
const user = users[0].signer;
|
const user = users[0].signer;
|
||||||
const userAddress = users[0].address;
|
const userAddress = users[0].address;
|
||||||
const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
|
||||||
const deadline = MAX_UINT_AMOUNT;
|
const deadline = MAX_UINT_AMOUNT;
|
||||||
|
|
||||||
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
const ownerPrivateKey = require('../test-wallets.js').accounts[1].secretKey;
|
||||||
|
@ -2357,7 +2361,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const amountWETHtoSwap = await convertToCurrencyDecimals(weth.address, '10');
|
const amountWETHtoSwap = await convertToCurrencyDecimals(weth.address, '10');
|
||||||
const amountLendToSwap = await convertToCurrencyDecimals(lend.address, '1');
|
const amountAaveToSwap = await convertToCurrencyDecimals(aave.address, '1');
|
||||||
|
|
||||||
const daiPrice = await oracle.getAssetPrice(dai.address);
|
const daiPrice = await oracle.getAssetPrice(dai.address);
|
||||||
const expectedDaiAmountForEth = await convertToCurrencyDecimals(
|
const expectedDaiAmountForEth = await convertToCurrencyDecimals(
|
||||||
|
@ -2365,17 +2369,17 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
new BigNumber(amountWETHtoSwap.toString()).div(daiPrice.toString()).toFixed(0)
|
new BigNumber(amountWETHtoSwap.toString()).div(daiPrice.toString()).toFixed(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
const lendPrice = await oracle.getAssetPrice(lend.address);
|
const aavePrice = await oracle.getAssetPrice(aave.address);
|
||||||
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
const usdcPrice = await oracle.getAssetPrice(usdc.address);
|
||||||
|
|
||||||
const collateralDecimals = (await lend.decimals()).toString();
|
const collateralDecimals = (await aave.decimals()).toString();
|
||||||
const principalDecimals = (await usdc.decimals()).toString();
|
const principalDecimals = (await usdc.decimals()).toString();
|
||||||
|
|
||||||
const expectedUsdcAmountForLend = await convertToCurrencyDecimals(
|
const expectedUsdcAmountForAave = await convertToCurrencyDecimals(
|
||||||
usdc.address,
|
usdc.address,
|
||||||
new BigNumber(amountLendToSwap.toString())
|
new BigNumber(amountAaveToSwap.toString())
|
||||||
.times(
|
.times(
|
||||||
new BigNumber(lendPrice.toString()).times(new BigNumber(10).pow(principalDecimals))
|
new BigNumber(aavePrice.toString()).times(new BigNumber(10).pow(principalDecimals))
|
||||||
)
|
)
|
||||||
.div(
|
.div(
|
||||||
new BigNumber(usdcPrice.toString()).times(new BigNumber(10).pow(collateralDecimals))
|
new BigNumber(usdcPrice.toString()).times(new BigNumber(10).pow(collateralDecimals))
|
||||||
|
@ -2385,7 +2389,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
// Open user Debt
|
// Open user Debt
|
||||||
await pool.connect(user).borrow(dai.address, expectedDaiAmountForEth, 1, 0, userAddress);
|
await pool.connect(user).borrow(dai.address, expectedDaiAmountForEth, 1, 0, userAddress);
|
||||||
await pool.connect(user).borrow(usdc.address, expectedUsdcAmountForLend, 1, 0, userAddress);
|
await pool.connect(user).borrow(usdc.address, expectedUsdcAmountForAave, 1, 0, userAddress);
|
||||||
|
|
||||||
const daiStableDebtTokenAddress = (
|
const daiStableDebtTokenAddress = (
|
||||||
await helpersContract.getReserveTokensAddresses(dai.address)
|
await helpersContract.getReserveTokensAddresses(dai.address)
|
||||||
|
@ -2408,17 +2412,17 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const userDaiStableDebtAmountBefore = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiStableDebtAmountBefore = await daiStableDebtContract.balanceOf(userAddress);
|
||||||
const userUsdcStableDebtAmountBefore = await usdcStableDebtContract.balanceOf(userAddress);
|
const userUsdcStableDebtAmountBefore = await usdcStableDebtContract.balanceOf(userAddress);
|
||||||
|
|
||||||
const lendData = await pool.getReserveData(lend.address);
|
const aaveData = await pool.getReserveData(aave.address);
|
||||||
const aLend = await getContract<AToken>(eContractid.AToken, lendData.aTokenAddress);
|
const aAave = await getContract<AToken>(eContractid.AToken, aaveData.aTokenAddress);
|
||||||
|
|
||||||
const aWETHBalanceBefore = await aWETH.balanceOf(userAddress);
|
const aWETHBalanceBefore = await aWETH.balanceOf(userAddress);
|
||||||
const aLendBalanceBefore = await aLend.balanceOf(userAddress);
|
const aAaveBalanceBefore = await aAave.balanceOf(userAddress);
|
||||||
|
|
||||||
const wethFlashloanAmount = new BigNumber(amountWETHtoSwap.toString())
|
const wethFlashloanAmount = new BigNumber(amountWETHtoSwap.toString())
|
||||||
.div(1.0009)
|
.div(1.0009)
|
||||||
.toFixed(0);
|
.toFixed(0);
|
||||||
|
|
||||||
const lendFlashloanAmount = new BigNumber(amountLendToSwap.toString())
|
const aaveFlashloanAmount = new BigNumber(amountAaveToSwap.toString())
|
||||||
.div(1.0009)
|
.div(1.0009)
|
||||||
.toFixed(0);
|
.toFixed(0);
|
||||||
|
|
||||||
|
@ -2439,44 +2443,44 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
aWethMsgParams
|
aWethMsgParams
|
||||||
);
|
);
|
||||||
|
|
||||||
const aLendNonce = (await aLend._nonces(userAddress)).toNumber();
|
const aAaveNonce = (await aAave._nonces(userAddress)).toNumber();
|
||||||
const aLendMsgParams = buildPermitParams(
|
const aAaveMsgParams = buildPermitParams(
|
||||||
chainId,
|
chainId,
|
||||||
aLend.address,
|
aAave.address,
|
||||||
'1',
|
'1',
|
||||||
await aLend.name(),
|
await aAave.name(),
|
||||||
userAddress,
|
userAddress,
|
||||||
uniswapRepayAdapter.address,
|
uniswapRepayAdapter.address,
|
||||||
aLendNonce,
|
aAaveNonce,
|
||||||
deadline,
|
deadline,
|
||||||
amountLendToSwap.toString()
|
amountAaveToSwap.toString()
|
||||||
);
|
);
|
||||||
const {v: aLendv, r: aLendr, s: aLends} = getSignatureFromTypedData(
|
const {v: aAavev, r: aAaver, s: aAaves} = getSignatureFromTypedData(
|
||||||
ownerPrivateKey,
|
ownerPrivateKey,
|
||||||
aLendMsgParams
|
aAaveMsgParams
|
||||||
);
|
);
|
||||||
|
|
||||||
await mockUniswapRouter.connect(user).setAmountToSwap(weth.address, wethFlashloanAmount);
|
await mockUniswapRouter.connect(user).setAmountToSwap(weth.address, wethFlashloanAmount);
|
||||||
await mockUniswapRouter.connect(user).setAmountToSwap(lend.address, lendFlashloanAmount);
|
await mockUniswapRouter.connect(user).setAmountToSwap(aave.address, aaveFlashloanAmount);
|
||||||
|
|
||||||
const params = buildRepayAdapterParams(
|
const params = buildRepayAdapterParams(
|
||||||
[dai.address, usdc.address],
|
[dai.address, usdc.address],
|
||||||
0,
|
0,
|
||||||
[expectedDaiAmountForEth, expectedUsdcAmountForLend],
|
[expectedDaiAmountForEth, expectedUsdcAmountForAave],
|
||||||
[1, 1],
|
[1, 1],
|
||||||
[amountWETHtoSwap, amountLendToSwap],
|
[amountWETHtoSwap, amountAaveToSwap],
|
||||||
[deadline, deadline],
|
[deadline, deadline],
|
||||||
[aWETHv, aLendv],
|
[aWETHv, aAavev],
|
||||||
[aWETHr, aLendr],
|
[aWETHr, aAaver],
|
||||||
[aWETHs, aLends]
|
[aWETHs, aAaves]
|
||||||
);
|
);
|
||||||
|
|
||||||
await pool
|
await pool
|
||||||
.connect(user)
|
.connect(user)
|
||||||
.flashLoan(
|
.flashLoan(
|
||||||
uniswapRepayAdapter.address,
|
uniswapRepayAdapter.address,
|
||||||
[weth.address, lend.address],
|
[weth.address, aave.address],
|
||||||
[wethFlashloanAmount.toString(), lendFlashloanAmount.toString()],
|
[wethFlashloanAmount.toString(), aaveFlashloanAmount.toString()],
|
||||||
[0, 0],
|
[0, 0],
|
||||||
userAddress,
|
userAddress,
|
||||||
params,
|
params,
|
||||||
|
@ -2488,16 +2492,16 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const userDaiStableDebtAmount = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiStableDebtAmount = await daiStableDebtContract.balanceOf(userAddress);
|
||||||
const userUsdcStableDebtAmount = await usdcStableDebtContract.balanceOf(userAddress);
|
const userUsdcStableDebtAmount = await usdcStableDebtContract.balanceOf(userAddress);
|
||||||
const aWETHBalance = await aWETH.balanceOf(userAddress);
|
const aWETHBalance = await aWETH.balanceOf(userAddress);
|
||||||
const aLendBalance = await aLend.balanceOf(userAddress);
|
const aAaveBalance = await aAave.balanceOf(userAddress);
|
||||||
|
|
||||||
expect(adapterWethBalance).to.be.eq(Zero);
|
expect(adapterWethBalance).to.be.eq(Zero);
|
||||||
expect(adapterDaiBalance).to.be.eq(Zero);
|
expect(adapterDaiBalance).to.be.eq(Zero);
|
||||||
expect(userDaiStableDebtAmountBefore).to.be.gte(expectedDaiAmountForEth);
|
expect(userDaiStableDebtAmountBefore).to.be.gte(expectedDaiAmountForEth);
|
||||||
expect(userDaiStableDebtAmount).to.be.lt(expectedDaiAmountForEth);
|
expect(userDaiStableDebtAmount).to.be.lt(expectedDaiAmountForEth);
|
||||||
expect(userUsdcStableDebtAmountBefore).to.be.gte(expectedUsdcAmountForLend);
|
expect(userUsdcStableDebtAmountBefore).to.be.gte(expectedUsdcAmountForAave);
|
||||||
expect(userUsdcStableDebtAmount).to.be.lt(expectedUsdcAmountForLend);
|
expect(userUsdcStableDebtAmount).to.be.lt(expectedUsdcAmountForAave);
|
||||||
expect(aWETHBalance).to.be.lt(aWETHBalanceBefore);
|
expect(aWETHBalance).to.be.lt(aWETHBalanceBefore);
|
||||||
expect(aLendBalance).to.be.lt(aLendBalanceBefore);
|
expect(aAaveBalance).to.be.lt(aAaveBalanceBefore);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should revert if inconsistent params', async () => {
|
it('should revert if inconsistent params', async () => {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user