Fixed test on transfer, updated interest redirection tests

This commit is contained in:
The3D 2020-09-09 14:15:38 +02:00
parent b0084aaf33
commit 223690f5f1
3 changed files with 26 additions and 23 deletions

View File

@ -201,7 +201,7 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
if (currentScaledBalance == 0 && redirectedBalance == 0) {
return 0;
}
uint256 scaledRedirectedBalance = redirectedBalance > 0 ? redirectedBalance.rayDiv(_interestRedirectionIndexes[user]) : 0;
uint256 scaledRedirectedBalance = redirectedBalance > 0 ? redirectedBalance.rayDiv(_redirectedBalanceIndexes[user]) : 0;
uint256 index = _pool.getReserveNormalizedIncome(UNDERLYING_ASSET_ADDRESS);
@ -340,6 +340,8 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
_updateRedirectedBalanceOfRedirectionAddress(origin, redirectionAddress, 0, 0, index);
}
console.log("Interest redirection completed");
emit RedirectedBalanceUpdated(
redirectionAddress,
scaledBalanceToAdd,
@ -454,6 +456,10 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
//being transferred
_updateRedirectedBalanceOfRedirectionAddress(to, to, scaledAmount, 0, index);
if(scaledBalanceOf(from) == 0){
_resetDataOnZeroBalance(from);
}
emit BalanceTransfer(from, to, amount, index);
}

View File

@ -50,8 +50,8 @@ export const calcExpectedUserDataAfterDeposit = (
expectedUserData.liquidityRate = reserveDataAfterAction.liquidityRate;
expectedUserData.scaledATokenBalance = calcExpectedScaledATokenBalance(
reserveDataAfterAction,
userDataBeforeAction,
reserveDataAfterAction.liquidityIndex,
new BigNumber(amountDeposited),
new BigNumber(0)
);
@ -89,8 +89,8 @@ export const calcExpectedUserDataAfterDeposit = (
);
expectedUserData.redirectionAddressRedirectedBalance = calcExpectedRedirectedBalance(
userDataBeforeAction,
expectedUserData,
reserveDataAfterAction.liquidityIndex,
userDataBeforeAction.redirectionAddressRedirectedBalance,
new BigNumber(amountDeposited),
new BigNumber(0)
@ -121,8 +121,8 @@ export const calcExpectedUserDataAfterWithdraw = (
}
expectedUserData.scaledATokenBalance = calcExpectedScaledATokenBalance(
reserveDataAfterAction,
userDataBeforeAction,
reserveDataAfterAction.liquidityIndex,
new BigNumber(0),
new BigNumber(amountWithdrawn)
);
@ -175,8 +175,8 @@ export const calcExpectedUserDataAfterWithdraw = (
}
expectedUserData.redirectionAddressRedirectedBalance = calcExpectedRedirectedBalance(
userDataBeforeAction,
expectedUserData,
reserveDataAfterAction.liquidityIndex,
userDataBeforeAction.redirectionAddressRedirectedBalance,
new BigNumber(0),
new BigNumber(amountWithdrawn)
@ -900,6 +900,7 @@ export const calcExpectedReserveDataAfterStableRateRebalance = (
expectedReserveData.totalBorrowsVariable,
expectedReserveData.averageStableBorrowRate
);
expectedReserveData.liquidityRate = rates[0];
expectedReserveData.stableBorrowRate = rates[1];
@ -941,10 +942,6 @@ export const calcExpectedUserDataAfterStableRateRebalance = (
expectedUserData.principalVariableDebt = userDataBeforeAction.principalVariableDebt;
const debtAccrued = expectedUserData.currentStableDebt.minus(
userDataBeforeAction.principalStableDebt
);
expectedUserData.stableBorrowRate = reserveDataBeforeAction.stableBorrowRate;
expectedUserData.liquidityRate = expectedDataAfterAction.liquidityRate;
@ -971,6 +968,8 @@ export const calcExpectedUsersDataAfterRedirectInterest = (
const expectedFromData = { ...fromDataBeforeAction };
const expectedToData = { ...toDataBeforeAction };
const index = calcExpectedReserveNormalizedIncome(reserveDataBeforeAction, txTimestamp);
expectedFromData.currentStableDebt = calcExpectedStableDebtTokenBalance(
fromDataBeforeAction,
txTimestamp
@ -988,20 +987,17 @@ export const calcExpectedUsersDataAfterRedirectInterest = (
expectedFromData.stableBorrowRate = fromDataBeforeAction.stableBorrowRate;
expectedToData.stableBorrowRate = toDataBeforeAction.stableBorrowRate;
expectedFromData.scaledATokenBalance = expectedFromData.currentATokenBalance = calcExpectedATokenBalance(
expectedFromData.scaledATokenBalance = fromDataBeforeAction.scaledATokenBalance;
expectedFromData.currentATokenBalance = calcExpectedATokenBalance(
reserveDataBeforeAction,
fromDataBeforeAction,
txTimestamp
);
expectedToData.principalATokenBalance = expectedToData.currentATokenBalance = calcExpectedATokenBalance(
reserveDataBeforeAction,
toDataBeforeAction,
txTimestamp
);
expectedToData.redirectedBalance = toDataBeforeAction.redirectedBalance.plus(
expectedFromData.currentATokenBalance
expectedFromData.currentATokenBalance.rayDiv(index)
);
if (fromAddress === toAddress) {
@ -1013,10 +1009,11 @@ export const calcExpectedUsersDataAfterRedirectInterest = (
expectedToData.redirectionAddressRedirectedBalance = new BigNumber(0);
} else {
expectedFromData.interestRedirectionAddress = toAddress;
expectedFromData.interestRedirectionIndex = index;
expectedFromData.redirectionAddressRedirectedBalance = calcExpectedRedirectedBalance(
toDataBeforeAction,
expectedFromData,
index,
toDataBeforeAction.redirectedBalance,
expectedFromData.currentATokenBalance,
new BigNumber(0)
@ -1027,14 +1024,14 @@ export const calcExpectedUsersDataAfterRedirectInterest = (
};
const calcExpectedScaledATokenBalance = (
reserveDataAfterAction: ReserveData,
userDataBeforeAction: UserReserveData,
index: BigNumber,
amountAdded: BigNumber,
amountTaken: BigNumber
) => {
return userDataBeforeAction.scaledATokenBalance
.plus(amountAdded.rayDiv(reserveDataAfterAction.liquidityIndex))
.minus(amountTaken.rayDiv(reserveDataAfterAction.liquidityIndex));
.plus(amountAdded.rayDiv(index))
.minus(amountTaken.rayDiv(index));
};
const calcExpectedATokenBalance = (
@ -1065,14 +1062,14 @@ const calcExpectedATokenBalance = (
};
const calcExpectedRedirectedBalance = (
userDataBeforeAction: UserReserveData,
expectedUserDataAfterAction: UserReserveData,
index: BigNumber,
redirectedBalanceBefore: BigNumber,
amountToAdd: BigNumber,
amountToSubstract: BigNumber
): BigNumber => {
return expectedUserDataAfterAction.interestRedirectionAddress !== ZERO_ADDRESS
? redirectedBalanceBefore.plus(amountToAdd).minus(amountToSubstract)
? redirectedBalanceBefore.plus(amountToAdd.rayDiv(index)).minus(amountToSubstract.rayDiv(index))
: new BigNumber('0');
};
const calcExpectedAverageStableBorrowRate = (

View File

@ -12,7 +12,7 @@ BigNumber.config({DECIMAL_PLACES: 0, ROUNDING_MODE: BigNumber.ROUND_DOWN});
const scenarioFolder = './test/helpers/scenarios/';
const selectedScenarios: string[] = [''];
const selectedScenarios: string[] = ['interest-redirection.json'];
fs.readdirSync(scenarioFolder).forEach((file) => {
if (selectedScenarios.length > 0 && !selectedScenarios.includes(file)) return;