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) { if (currentScaledBalance == 0 && redirectedBalance == 0) {
return 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); uint256 index = _pool.getReserveNormalizedIncome(UNDERLYING_ASSET_ADDRESS);
@ -340,6 +340,8 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
_updateRedirectedBalanceOfRedirectionAddress(origin, redirectionAddress, 0, 0, index); _updateRedirectedBalanceOfRedirectionAddress(origin, redirectionAddress, 0, 0, index);
} }
console.log("Interest redirection completed");
emit RedirectedBalanceUpdated( emit RedirectedBalanceUpdated(
redirectionAddress, redirectionAddress,
scaledBalanceToAdd, scaledBalanceToAdd,
@ -454,6 +456,10 @@ contract AToken is VersionedInitializable, ERC20, IAToken {
//being transferred //being transferred
_updateRedirectedBalanceOfRedirectionAddress(to, to, scaledAmount, 0, index); _updateRedirectedBalanceOfRedirectionAddress(to, to, scaledAmount, 0, index);
if(scaledBalanceOf(from) == 0){
_resetDataOnZeroBalance(from);
}
emit BalanceTransfer(from, to, amount, index); emit BalanceTransfer(from, to, amount, index);
} }

View File

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

View File

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