Skip to content

Commit 9b244bd

Browse files
committed
fix: calculate health factor based on scaled balance
1 parent dda5648 commit 9b244bd

File tree

1 file changed

+55
-33
lines changed

1 file changed

+55
-33
lines changed

src/store/v3MigrationSelectors.ts

Lines changed: 55 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ import {
66
valueToWei,
77
} from '@aave/contract-helpers';
88
import { V3MigrationHelperSignedPermit } from '@aave/contract-helpers/dist/esm/v3-migration-contract/v3MigrationTypes';
9-
import { formatReserves, formatUserSummary, valueToBigNumber } from '@aave/math-utils';
9+
import {
10+
formatReserves,
11+
formatUserSummary,
12+
rayDiv,
13+
rayMul,
14+
valueToBigNumber,
15+
} from '@aave/math-utils';
1016
import { SignatureLike } from '@ethersproject/bytes';
1117
import { BigNumberish, constants } from 'ethers';
1218

@@ -97,26 +103,32 @@ export const selectUserBorrowReservesForMigration = (store: RootStore, timestamp
97103
userReserve.stableBorrows,
98104
reserve.stableBorrowAPY
99105
);
100-
const increasedAmountInWei = valueToWei(increasedAmount, reserve.decimals);
106+
const increasedScaledBalance = add1HourBorrowAPY(
107+
userReserve.principalStableDebt,
108+
reserve.stableBorrowAPY
109+
);
101110
return {
102111
...userReserve,
103112
reserve,
104113
increasedAmount,
105-
increasedAmountInWei,
106114
interestRate: InterestRate.Stable,
115+
increasedScaledBalance,
107116
};
108117
}
109118
const increasedAmount = add1HourBorrowAPY(
110119
userReserve.variableBorrows,
111120
reserve.variableBorrowAPY
112121
);
113-
const increasedAmountInWei = valueToWei(increasedAmount, reserve.decimals);
122+
const increasedScaledBalance = add1HourBorrowAPY(
123+
userReserve.scaledVariableDebt,
124+
reserve.variableBorrowAPY
125+
);
114126
return {
115127
...userReserve,
116128
reserve,
117129
increasedAmount,
118-
increasedAmountInWei,
119130
interestRate: InterestRate.Variable,
131+
increasedScaledBalance,
120132
};
121133
});
122134

@@ -185,11 +197,8 @@ export const selectV2UserSummaryAfterMigration = (store: RootStore, currentTimes
185197
);
186198
};
187199

188-
const combine = (a: string, b: string): string => {
189-
return valueToBigNumber(a).plus(valueToBigNumber(b)).toString();
190-
};
191-
192200
export const selectV3UserSummaryAfterMigration = (store: RootStore, currentTimestamp: number) => {
201+
const poolReserveV3Summary = selectV3UserSummary(store, currentTimestamp);
193202
const poolReserveV3 = selectCurrentChainIdV3MarketData(store);
194203

195204
const supplies = selectedUserSupplyReservesForMigration(store, currentTimestamp);
@@ -206,33 +215,44 @@ export const selectV3UserSummaryAfterMigration = (store: RootStore, currentTimes
206215
return obj;
207216
}, {} as Record<string, typeof borrows[0]>);
208217

209-
const userReserves = poolReserveV3?.userReserves?.map((userReserve) => {
210-
let scaledATokenBalance = userReserve.scaledATokenBalance;
211-
let scaledVariableDebt = userReserve.scaledVariableDebt;
212-
let principalStableDebt = userReserve.principalStableDebt;
213-
const reserve = poolReserveV3.reserves?.filter(
214-
(reserve) => reserve.underlyingAsset == userReserve.underlyingAsset
215-
);
216-
const suppliedAsset = suppliesMap[userReserve.underlyingAsset];
217-
if (suppliedAsset) {
218-
scaledATokenBalance = combine(scaledATokenBalance, suppliedAsset.scaledATokenBalance);
219-
}
220-
const borrowedAsset = borrowsMap[userReserve.underlyingAsset];
221-
if (borrowedAsset) {
222-
scaledVariableDebt = combine(scaledVariableDebt, borrowedAsset.increasedAmountInWei);
223-
principalStableDebt = combine(principalStableDebt, borrowedAsset.increasedAmountInWei);
218+
const userReserves = poolReserveV3Summary.userReservesData.map((userReserveData) => {
219+
const borrowAsset = borrowsMap[userReserveData.underlyingAsset];
220+
const supplyAsset = suppliesMap[userReserveData.underlyingAsset];
221+
222+
let combinedScaledVariableDebt = userReserveData.scaledVariableDebt;
223+
let combinedScaledATokenBalance = userReserveData.scaledATokenBalance;
224+
if (borrowAsset) {
225+
const scaledVariableDebt = valueToBigNumber(userReserveData.scaledVariableDebt);
226+
const variableBorrowIndex = valueToBigNumber(userReserveData.reserve.variableBorrowIndex);
227+
const scaledDownBalance = rayDiv(scaledVariableDebt, variableBorrowIndex);
228+
const scaledDownV2Balance = rayDiv(
229+
valueToBigNumber(borrowAsset.increasedScaledBalance),
230+
variableBorrowIndex
231+
);
232+
const combinedScaledDownBalance = scaledDownBalance.plus(scaledDownV2Balance);
233+
combinedScaledVariableDebt = rayMul(
234+
combinedScaledDownBalance,
235+
variableBorrowIndex
236+
).toString();
224237
}
225-
let usageAsCollateralEnabledOnUser = false;
226-
if (reserve && reserve[0]) {
227-
usageAsCollateralEnabledOnUser = reserve[0].usageAsCollateralEnabled;
238+
239+
if (supplyAsset) {
240+
const scaledATokenBalance = valueToBigNumber(userReserveData.scaledATokenBalance);
241+
const liquidityIndex = valueToBigNumber(userReserveData.reserve.liquidityIndex);
242+
const scaledDownBalance = rayDiv(scaledATokenBalance, liquidityIndex);
243+
const scaledDownBalanceV2 = rayDiv(
244+
valueToBigNumber(supplyAsset.scaledATokenBalance),
245+
liquidityIndex
246+
);
247+
const combinedScaledDownBalance = scaledDownBalance.plus(scaledDownBalanceV2);
248+
combinedScaledATokenBalance = rayMul(combinedScaledDownBalance, liquidityIndex).toString();
228249
}
229250

230251
return {
231-
...userReserve,
232-
scaledATokenBalance,
233-
usageAsCollateralEnabledOnUser,
234-
scaledVariableDebt,
235-
principalStableDebt,
252+
...userReserveData,
253+
id: userReserveData.reserve.id,
254+
scaledVariableDebt: combinedScaledVariableDebt,
255+
scaledATokenBalance: combinedScaledATokenBalance,
236256
};
237257
});
238258

@@ -250,12 +270,14 @@ export const selectV3UserSummary = (store: RootStore, timestamp: number) => {
250270
const poolReserveV3 = selectCurrentChainIdV3MarketData(store);
251271
const baseCurrencyData = selectFormatBaseCurrencyData(poolReserveV3);
252272

253-
return selectFormatUserSummaryForMigration(
273+
const formattedUserSummary = selectFormatUserSummaryForMigration(
254274
poolReserveV3?.reserves,
255275
poolReserveV3?.userReserves,
256276
baseCurrencyData,
257277
timestamp
258278
);
279+
280+
return formattedUserSummary;
259281
};
260282

261283
export const selectIsMigrationAvailable = (store: RootStore) => {

0 commit comments

Comments
 (0)