mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Fixed master tests
This commit is contained in:
parent
c7a8f41d46
commit
f05550fc04
|
@ -996,7 +996,7 @@ export const calcExpectedReserveDataAfterStableRateRebalance = (
|
||||||
|
|
||||||
//removing the stable liquidity at the old rate
|
//removing the stable liquidity at the old rate
|
||||||
|
|
||||||
const avgRateBefore = calcExpectedAverageStableBorrowRate(
|
const avgRateBefore = calcExpectedAverageStableBorrowRateRebalance(
|
||||||
reserveDataBeforeAction.averageStableBorrowRate,
|
reserveDataBeforeAction.averageStableBorrowRate,
|
||||||
expectedReserveData.totalStableDebt,
|
expectedReserveData.totalStableDebt,
|
||||||
userStableDebt.negated(),
|
userStableDebt.negated(),
|
||||||
|
@ -1004,7 +1004,7 @@ export const calcExpectedReserveDataAfterStableRateRebalance = (
|
||||||
);
|
);
|
||||||
// adding it again at the new rate
|
// adding it again at the new rate
|
||||||
|
|
||||||
expectedReserveData.averageStableBorrowRate = calcExpectedAverageStableBorrowRate(
|
expectedReserveData.averageStableBorrowRate = calcExpectedAverageStableBorrowRateRebalance(
|
||||||
avgRateBefore,
|
avgRateBefore,
|
||||||
expectedReserveData.totalStableDebt.minus(userStableDebt),
|
expectedReserveData.totalStableDebt.minus(userStableDebt),
|
||||||
userStableDebt,
|
userStableDebt,
|
||||||
|
@ -1044,6 +1044,8 @@ export const calcExpectedUserDataAfterStableRateRebalance = (
|
||||||
): UserReserveData => {
|
): UserReserveData => {
|
||||||
const expectedUserData = { ...userDataBeforeAction };
|
const expectedUserData = { ...userDataBeforeAction };
|
||||||
|
|
||||||
|
expectedUserData.principalStableDebt = userDataBeforeAction.principalStableDebt;
|
||||||
|
|
||||||
expectedUserData.principalVariableDebt = calcExpectedVariableDebtTokenBalance(
|
expectedUserData.principalVariableDebt = calcExpectedVariableDebtTokenBalance(
|
||||||
reserveDataBeforeAction,
|
reserveDataBeforeAction,
|
||||||
userDataBeforeAction,
|
userDataBeforeAction,
|
||||||
|
@ -1056,12 +1058,18 @@ export const calcExpectedUserDataAfterStableRateRebalance = (
|
||||||
txTimestamp
|
txTimestamp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
expectedUserData.currentVariableDebt = calcExpectedVariableDebtTokenBalance(
|
||||||
|
reserveDataBeforeAction,
|
||||||
|
userDataBeforeAction,
|
||||||
|
txTimestamp
|
||||||
|
);
|
||||||
|
|
||||||
expectedUserData.stableRateLastUpdated = txTimestamp;
|
expectedUserData.stableRateLastUpdated = txTimestamp;
|
||||||
|
|
||||||
expectedUserData.principalVariableDebt = userDataBeforeAction.principalVariableDebt;
|
expectedUserData.principalVariableDebt = userDataBeforeAction.principalVariableDebt;
|
||||||
|
|
||||||
expectedUserData.stableBorrowRate = reserveDataBeforeAction.stableBorrowRate;
|
// Stable rate after burn
|
||||||
|
expectedUserData.stableBorrowRate = expectedDataAfterAction.averageStableBorrowRate;
|
||||||
expectedUserData.liquidityRate = expectedDataAfterAction.liquidityRate;
|
expectedUserData.liquidityRate = expectedDataAfterAction.liquidityRate;
|
||||||
|
|
||||||
expectedUserData.currentATokenBalance = calcExpectedATokenBalance(
|
expectedUserData.currentATokenBalance = calcExpectedATokenBalance(
|
||||||
|
@ -1104,7 +1112,7 @@ const calcExpectedAverageStableBorrowRate = (
|
||||||
) => {
|
) => {
|
||||||
const weightedTotalBorrows = avgStableRateBefore.multipliedBy(totalStableDebtBefore);
|
const weightedTotalBorrows = avgStableRateBefore.multipliedBy(totalStableDebtBefore);
|
||||||
const weightedAmountBorrowed = rate.multipliedBy(amountChanged);
|
const weightedAmountBorrowed = rate.multipliedBy(amountChanged);
|
||||||
const totalBorrowedStable = totalStableDebtBefore.plus(new BigNumber(amountChanged));
|
const totalBorrowedStable = totalStableDebtBefore.plus(amountChanged);
|
||||||
|
|
||||||
if (totalBorrowedStable.eq(0)) return new BigNumber('0');
|
if (totalBorrowedStable.eq(0)) return new BigNumber('0');
|
||||||
|
|
||||||
|
@ -1114,6 +1122,24 @@ const calcExpectedAverageStableBorrowRate = (
|
||||||
.decimalPlaces(0, BigNumber.ROUND_DOWN);
|
.decimalPlaces(0, BigNumber.ROUND_DOWN);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const calcExpectedAverageStableBorrowRateRebalance = (
|
||||||
|
avgStableRateBefore: BigNumber,
|
||||||
|
totalStableDebtBefore: BigNumber,
|
||||||
|
amountChanged: BigNumber,
|
||||||
|
rate: BigNumber
|
||||||
|
) => {
|
||||||
|
const weightedTotalBorrows = avgStableRateBefore.rayMul(totalStableDebtBefore);
|
||||||
|
const weightedAmountBorrowed = rate.rayMul(amountChanged.wadToRay());
|
||||||
|
const totalBorrowedStable = totalStableDebtBefore.plus(amountChanged.wadToRay());
|
||||||
|
|
||||||
|
if (totalBorrowedStable.eq(0)) return new BigNumber('0');
|
||||||
|
|
||||||
|
return weightedTotalBorrows
|
||||||
|
.plus(weightedAmountBorrowed)
|
||||||
|
.rayDiv(totalBorrowedStable)
|
||||||
|
.decimalPlaces(0, BigNumber.ROUND_DOWN);
|
||||||
|
};
|
||||||
|
|
||||||
export const calcExpectedVariableDebtTokenBalance = (
|
export const calcExpectedVariableDebtTokenBalance = (
|
||||||
reserveData: ReserveData,
|
reserveData: ReserveData,
|
||||||
userData: UserReserveData,
|
userData: UserReserveData,
|
||||||
|
@ -1211,7 +1237,6 @@ export const calcExpectedInterestRates = (
|
||||||
): BigNumber[] => {
|
): BigNumber[] => {
|
||||||
const { reservesParams } = configuration;
|
const { reservesParams } = configuration;
|
||||||
|
|
||||||
|
|
||||||
const reserveIndex = Object.keys(reservesParams).findIndex((value) => value === reserveSymbol);
|
const reserveIndex = Object.keys(reservesParams).findIndex((value) => value === reserveSymbol);
|
||||||
const [, reserveConfiguration] = (Object.entries(reservesParams) as [string, IReserveParams][])[
|
const [, reserveConfiguration] = (Object.entries(reservesParams) as [string, IReserveParams][])[
|
||||||
reserveIndex
|
reserveIndex
|
||||||
|
|
|
@ -17,6 +17,7 @@ import { eContractid } from '../helpers/types';
|
||||||
import { StableDebtToken } from '../types/StableDebtToken';
|
import { StableDebtToken } from '../types/StableDebtToken';
|
||||||
import { BUIDLEREVM_CHAINID } from '../helpers/buidler-constants';
|
import { BUIDLEREVM_CHAINID } from '../helpers/buidler-constants';
|
||||||
import { MAX_UINT_AMOUNT } from '../helpers/constants';
|
import { MAX_UINT_AMOUNT } from '../helpers/constants';
|
||||||
|
import { VariableDebtToken } from '../types';
|
||||||
const { parseEther } = ethers.utils;
|
const { parseEther } = ethers.utils;
|
||||||
|
|
||||||
const { expect } = require('chai');
|
const { expect } = require('chai');
|
||||||
|
@ -797,7 +798,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
expect(userAEthBalance).to.be.gte(userAEthBalanceBefore.sub(liquidityToSwap));
|
expect(userAEthBalance).to.be.gte(userAEthBalanceBefore.sub(liquidityToSwap));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should correctly repay debt using the same asset as collateral', async () => {
|
it('should correctly repay debt via flash loan using the same asset as collateral', async () => {
|
||||||
const { users, pool, aDai, dai, uniswapRepayAdapter, helpersContract } = testEnv;
|
const { users, pool, aDai, dai, uniswapRepayAdapter, helpersContract } = testEnv;
|
||||||
const user = users[0].signer;
|
const user = users[0].signer;
|
||||||
const userAddress = users[0].address;
|
const userAddress = users[0].address;
|
||||||
|
@ -813,16 +814,18 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
// Open user Debt
|
// Open user Debt
|
||||||
await pool.connect(user).borrow(dai.address, debtAmount, 2, 0, userAddress);
|
await pool.connect(user).borrow(dai.address, debtAmount, 2, 0, userAddress);
|
||||||
|
|
||||||
const daiStableDebtTokenAddress = (
|
const daiVariableDebtTokenAddress = (
|
||||||
await helpersContract.getReserveTokensAddresses(dai.address)
|
await helpersContract.getReserveTokensAddresses(dai.address)
|
||||||
).stableDebtTokenAddress;
|
).variableDebtTokenAddress;
|
||||||
|
|
||||||
const daiStableDebtContract = await getContract<StableDebtToken>(
|
const daiVariableDebtContract = await getContract<VariableDebtToken>(
|
||||||
eContractid.StableDebtToken,
|
eContractid.VariableDebtToken,
|
||||||
daiStableDebtTokenAddress
|
daiVariableDebtTokenAddress
|
||||||
);
|
);
|
||||||
|
|
||||||
const userDaiStableDebtAmountBefore = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiVariableDebtAmountBefore = await daiVariableDebtContract.balanceOf(
|
||||||
|
userAddress
|
||||||
|
);
|
||||||
|
|
||||||
const flashLoanDebt = new BigNumber(amountCollateralToSwap.toString())
|
const flashLoanDebt = new BigNumber(amountCollateralToSwap.toString())
|
||||||
.multipliedBy(1.0009)
|
.multipliedBy(1.0009)
|
||||||
|
@ -835,7 +838,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
const params = buildRepayAdapterParams(
|
const params = buildRepayAdapterParams(
|
||||||
dai.address,
|
dai.address,
|
||||||
amountCollateralToSwap,
|
amountCollateralToSwap,
|
||||||
1,
|
2,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
@ -857,18 +860,30 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
const adapterDaiBalance = await dai.balanceOf(uniswapRepayAdapter.address);
|
const adapterDaiBalance = await dai.balanceOf(uniswapRepayAdapter.address);
|
||||||
const userDaiStableDebtAmount = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiVariableDebtAmount = await daiVariableDebtContract.balanceOf(userAddress);
|
||||||
const userADaiBalance = await aDai.balanceOf(userAddress);
|
const userADaiBalance = await aDai.balanceOf(userAddress);
|
||||||
const adapterADaiBalance = await aDai.balanceOf(uniswapRepayAdapter.address);
|
const adapterADaiBalance = await aDai.balanceOf(uniswapRepayAdapter.address);
|
||||||
const userDaiBalance = await dai.balanceOf(userAddress);
|
const userDaiBalance = await dai.balanceOf(userAddress);
|
||||||
|
|
||||||
expect(adapterADaiBalance).to.be.eq(Zero);
|
expect(adapterADaiBalance).to.be.eq(Zero, 'adapter aDAI balance should be zero');
|
||||||
expect(adapterDaiBalance).to.be.eq(Zero);
|
expect(adapterDaiBalance).to.be.eq(Zero, 'adapter DAI balance should be zero');
|
||||||
expect(userDaiStableDebtAmountBefore).to.be.gte(debtAmount);
|
expect(userDaiVariableDebtAmountBefore).to.be.gte(
|
||||||
expect(userDaiStableDebtAmount).to.be.lt(debtAmount);
|
debtAmount,
|
||||||
expect(userADaiBalance).to.be.lt(userADaiBalanceBefore);
|
' user DAI variable debt before should be gte debtAmount'
|
||||||
expect(userADaiBalance).to.be.gte(userADaiBalanceBefore.sub(flashLoanDebt));
|
);
|
||||||
expect(userDaiBalance).to.be.eq(userDaiBalanceBefore);
|
expect(userDaiVariableDebtAmount).to.be.lt(
|
||||||
|
debtAmount,
|
||||||
|
'user dai variable debt amount should be lt debt amount'
|
||||||
|
);
|
||||||
|
expect(userADaiBalance).to.be.lt(
|
||||||
|
userADaiBalanceBefore,
|
||||||
|
'user aDAI balance should be lt aDAI prior balance'
|
||||||
|
);
|
||||||
|
expect(userADaiBalance).to.be.gte(
|
||||||
|
userADaiBalanceBefore.sub(flashLoanDebt),
|
||||||
|
'user aDAI balance should be gte aDAI prior balance sub flash loan debt'
|
||||||
|
);
|
||||||
|
expect(userDaiBalance).to.be.eq(userDaiBalanceBefore, 'user dai balance eq prior balance');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1387,16 +1402,18 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
// Open user Debt
|
// Open user Debt
|
||||||
await pool.connect(user).borrow(dai.address, debtAmount, 2, 0, userAddress);
|
await pool.connect(user).borrow(dai.address, debtAmount, 2, 0, userAddress);
|
||||||
|
|
||||||
const daiStableDebtTokenAddress = (
|
const daiVariableDebtTokenAddress = (
|
||||||
await helpersContract.getReserveTokensAddresses(dai.address)
|
await helpersContract.getReserveTokensAddresses(dai.address)
|
||||||
).stableDebtTokenAddress;
|
).variableDebtTokenAddress;
|
||||||
|
|
||||||
const daiStableDebtContract = await getContract<StableDebtToken>(
|
const daiVariableDebtContract = await getContract<StableDebtToken>(
|
||||||
eContractid.StableDebtToken,
|
eContractid.StableDebtToken,
|
||||||
daiStableDebtTokenAddress
|
daiVariableDebtTokenAddress
|
||||||
);
|
);
|
||||||
|
|
||||||
const userDaiStableDebtAmountBefore = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiVariableDebtAmountBefore = await daiVariableDebtContract.balanceOf(
|
||||||
|
userAddress
|
||||||
|
);
|
||||||
|
|
||||||
await aDai.connect(user).approve(uniswapRepayAdapter.address, amountCollateralToSwap);
|
await aDai.connect(user).approve(uniswapRepayAdapter.address, amountCollateralToSwap);
|
||||||
const userADaiBalanceBefore = await aDai.balanceOf(userAddress);
|
const userADaiBalanceBefore = await aDai.balanceOf(userAddress);
|
||||||
|
@ -1407,7 +1424,7 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
dai.address,
|
dai.address,
|
||||||
amountCollateralToSwap,
|
amountCollateralToSwap,
|
||||||
amountCollateralToSwap,
|
amountCollateralToSwap,
|
||||||
1,
|
2,
|
||||||
{
|
{
|
||||||
amount: 0,
|
amount: 0,
|
||||||
deadline: 0,
|
deadline: 0,
|
||||||
|
@ -1419,18 +1436,33 @@ makeSuite('Uniswap adapters', (testEnv: TestEnv) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
const adapterDaiBalance = await dai.balanceOf(uniswapRepayAdapter.address);
|
const adapterDaiBalance = await dai.balanceOf(uniswapRepayAdapter.address);
|
||||||
const userDaiStableDebtAmount = await daiStableDebtContract.balanceOf(userAddress);
|
const userDaiVariableDebtAmount = await daiVariableDebtContract.balanceOf(userAddress);
|
||||||
const userADaiBalance = await aDai.balanceOf(userAddress);
|
const userADaiBalance = await aDai.balanceOf(userAddress);
|
||||||
const adapterADaiBalance = await aDai.balanceOf(uniswapRepayAdapter.address);
|
const adapterADaiBalance = await aDai.balanceOf(uniswapRepayAdapter.address);
|
||||||
const userDaiBalance = await dai.balanceOf(userAddress);
|
const userDaiBalance = await dai.balanceOf(userAddress);
|
||||||
|
|
||||||
expect(adapterADaiBalance).to.be.eq(Zero);
|
expect(adapterADaiBalance).to.be.eq(Zero, 'adapter aADAI should be zero');
|
||||||
expect(adapterDaiBalance).to.be.eq(Zero);
|
expect(adapterDaiBalance).to.be.eq(Zero, 'adapter DAI should be zero');
|
||||||
expect(userDaiStableDebtAmountBefore).to.be.gte(debtAmount);
|
expect(userDaiVariableDebtAmountBefore).to.be.gte(
|
||||||
expect(userDaiStableDebtAmount).to.be.lt(debtAmount);
|
debtAmount,
|
||||||
expect(userADaiBalance).to.be.lt(userADaiBalanceBefore);
|
'user dai variable debt before should be gte debtAmount'
|
||||||
expect(userADaiBalance).to.be.gte(userADaiBalanceBefore.sub(amountCollateralToSwap));
|
);
|
||||||
expect(userDaiBalance).to.be.eq(userDaiBalanceBefore);
|
expect(userDaiVariableDebtAmount).to.be.lt(
|
||||||
|
debtAmount,
|
||||||
|
'current user dai variable debt amount should be less than debtAmount'
|
||||||
|
);
|
||||||
|
expect(userADaiBalance).to.be.lt(
|
||||||
|
userADaiBalanceBefore,
|
||||||
|
'current user aDAI balance should be less than prior balance'
|
||||||
|
);
|
||||||
|
expect(userADaiBalance).to.be.gte(
|
||||||
|
userADaiBalanceBefore.sub(amountCollateralToSwap),
|
||||||
|
'current user aDAI balance should be gte user balance sub swapped collateral'
|
||||||
|
);
|
||||||
|
expect(userDaiBalance).to.be.eq(
|
||||||
|
userDaiBalanceBefore,
|
||||||
|
'user DAI balance should remain equal'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user