Skip to content

Commit dda5648

Browse files
committed
fix: health factor calculation based on increased amount
1 parent 5bfbdc1 commit dda5648

File tree

3 files changed

+93
-43
lines changed

3 files changed

+93
-43
lines changed

src/helpers/useTransactionHandler.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export const useTransactionHandler = ({
112112
};
113113

114114
const approval = async (approvals?: Approval[]) => {
115-
console.log(approvalTxes, 'approvalTxes');
115+
console.log(approvalTxes, 'approvalTxes', approvals);
116116
if (approvalTxes) {
117117
console.log(approvalTxes, 'approvalTxes');
118118
if (usePermit && approvals && approvals?.length > 0) {
@@ -182,9 +182,7 @@ export const useTransactionHandler = ({
182182
} else {
183183
try {
184184
setApprovalTxState({ ...approvalTxState, loading: true });
185-
console.log('no permit should call approval', approvalTxes);
186185
const params = await Promise.all(approvalTxes.map((approvalTx) => approvalTx.tx()));
187-
console.log(params, 'params');
188186
const approvalResponses = await Promise.all(
189187
params.map(
190188
(param) =>
@@ -234,7 +232,6 @@ export const useTransactionHandler = ({
234232
if (approvalTxes && usePermit && handleGetPermitTxns) {
235233
if (!signatures.length || !signatureDeadline) throw new Error('signature needed');
236234
try {
237-
console.log(signatures, 'signatures');
238235
setMainTxState({ ...mainTxState, loading: true });
239236
const txns = await handleGetPermitTxns(signatures, signatureDeadline);
240237
const params = await txns[0].tx();
@@ -260,7 +257,6 @@ export const useTransactionHandler = ({
260257
action: TxAction.MAIN_ACTION,
261258
});
262259
} catch (error) {
263-
console.log(error, 'error');
264260
const parsedError = getErrorTextFromError(error, TxAction.GAS_ESTIMATION, false);
265261
setTxError(parsedError);
266262
setMainTxState({
@@ -273,7 +269,7 @@ export const useTransactionHandler = ({
273269
try {
274270
setMainTxState({ ...mainTxState, loading: true });
275271
const params = await actionTx.tx();
276-
// delete params.gasPrice;
272+
delete params.gasPrice;
277273
return processTx({
278274
tx: () => sendTx(params),
279275
successCallback: (txnResponse: TransactionResponse) => {

src/store/poolSelectors.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ export const selectCurrentChainIdV2MarketData = (state: RootStore) => {
2929
};
3030

3131
export const selectCurrentChainIdV3MarketData = (state: RootStore) => {
32-
const v2MarketKey = selectCurrentChainIdV3MarketKey(state);
33-
const marketData = marketsData[v2MarketKey];
32+
const v3MarketKey = selectCurrentChainIdV3MarketKey(state);
33+
const marketData = marketsData[v3MarketKey];
3434
return state.data
3535
.get(state.currentChainId)
3636
?.get(marketData.addresses.LENDING_POOL_ADDRESS_PROVIDER);

src/store/v3MigrationSelectors.ts

Lines changed: 89 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
PoolBaseCurrencyHumanized,
44
ReserveDataHumanized,
55
UserReserveDataHumanized,
6+
valueToWei,
67
} from '@aave/contract-helpers';
78
import { V3MigrationHelperSignedPermit } from '@aave/contract-helpers/dist/esm/v3-migration-contract/v3MigrationTypes';
89
import { formatReserves, formatUserSummary, valueToBigNumber } from '@aave/math-utils';
@@ -69,6 +70,16 @@ const addPercent = (amount: string) => {
6970
return convertedAmount.plus(convertedAmount.div(1000)).toString();
7071
};
7172

73+
// adding 1 hour of variable or either stable or variable debt APY similar to swap
74+
// https://github.com/aave/interface/blob/main/src/hooks/useSwap.ts#L72-L78
75+
const add1HourBorrowAPY = (amount: string, borrowAPY: string) => {
76+
const convertedAmount = valueToBigNumber(amount);
77+
const convertedBorrowAPY = valueToBigNumber(borrowAPY);
78+
return convertedAmount
79+
.plus(convertedAmount.multipliedBy(convertedBorrowAPY).dividedBy(360 * 24))
80+
.toString();
81+
};
82+
7283
export const selectUserBorrowReservesForMigration = (store: RootStore, timestamp: number) => {
7384
const user = selectUserSummaryAndIncentives(store, timestamp);
7485
const selectedUserReserves = user.userReservesData
@@ -82,11 +93,31 @@ export const selectUserBorrowReservesForMigration = (store: RootStore, timestamp
8293
.map(({ reserve, ...userReserve }) => {
8394
const stableBorrows = valueToBigNumber(userReserve.stableBorrows);
8495
if (stableBorrows.isGreaterThan(0)) {
85-
const increasedAmount = addPercent(userReserve.stableBorrows);
86-
return { ...userReserve, reserve, increasedAmount, interestRate: InterestRate.Stable };
96+
const increasedAmount = add1HourBorrowAPY(
97+
userReserve.stableBorrows,
98+
reserve.stableBorrowAPY
99+
);
100+
const increasedAmountInWei = valueToWei(increasedAmount, reserve.decimals);
101+
return {
102+
...userReserve,
103+
reserve,
104+
increasedAmount,
105+
increasedAmountInWei,
106+
interestRate: InterestRate.Stable,
107+
};
87108
}
88-
const increasedAmount = addPercent(userReserve.variableBorrows);
89-
return { ...userReserve, reserve, increasedAmount, interestRate: InterestRate.Variable };
109+
const increasedAmount = add1HourBorrowAPY(
110+
userReserve.variableBorrows,
111+
reserve.variableBorrowAPY
112+
);
113+
const increasedAmountInWei = valueToWei(increasedAmount, reserve.decimals);
114+
return {
115+
...userReserve,
116+
reserve,
117+
increasedAmount,
118+
increasedAmountInWei,
119+
interestRate: InterestRate.Variable,
120+
};
90121
});
91122

92123
return selectedUserReserves;
@@ -122,14 +153,26 @@ export const selectV2UserSummaryAfterMigration = (store: RootStore, currentTimes
122153
const poolReserve = selectCurrentChainIdV2MarketData(store);
123154

124155
const userReserves =
125-
poolReserve?.userReserves?.filter((userReserve) => {
126-
if (
127-
store.selectedMigrationSupplyAssets[userReserve.underlyingAsset] ||
128-
store.selectedMigrationBorrowAssets[userReserve.underlyingAsset]
129-
) {
130-
return false;
156+
poolReserve?.userReserves?.map((userReserve) => {
157+
let scaledATokenBalance = userReserve.scaledATokenBalance;
158+
let principalStableDebt = userReserve.principalStableDebt;
159+
let scaledVariableDebt = userReserve.scaledVariableDebt;
160+
161+
const isSupplyAsset = store.selectedMigrationSupplyAssets[userReserve.underlyingAsset];
162+
if (isSupplyAsset) {
163+
scaledATokenBalance = '0';
164+
}
165+
const isBorrowAsset = store.selectedMigrationBorrowAssets[userReserve.underlyingAsset];
166+
if (isBorrowAsset) {
167+
principalStableDebt = '0';
168+
scaledVariableDebt = '0';
131169
}
132-
return true;
170+
return {
171+
...userReserve,
172+
principalStableDebt,
173+
scaledATokenBalance,
174+
scaledVariableDebt,
175+
};
133176
}) || [];
134177

135178
const baseCurrencyData = selectFormatBaseCurrencyData(poolReserve);
@@ -153,34 +196,45 @@ export const selectV3UserSummaryAfterMigration = (store: RootStore, currentTimes
153196
const borrows = selectUserBorrowReservesForMigration(store, currentTimestamp);
154197

155198
//TODO: refactor that to be more efficient
156-
const suppliesMap = supplies.concat(borrows).reduce((obj, item) => {
199+
const suppliesMap = supplies.concat(supplies).reduce((obj, item) => {
157200
obj[item.underlyingAsset] = item;
158201
return obj;
159202
}, {} as Record<string, typeof supplies[0]>);
160203

161-
const userReserves =
162-
poolReserveV3?.userReserves?.map((userReserve) => {
163-
const suppliedAsset = suppliesMap[userReserve.underlyingAsset];
164-
if (suppliedAsset) {
165-
const combinedScaledATokenBalance = combine(
166-
userReserve.scaledATokenBalance,
167-
suppliedAsset.scaledATokenBalance
168-
);
169-
return {
170-
...userReserve,
171-
scaledATokenBalance: combinedScaledATokenBalance,
172-
scaledVariableDebt: combine(
173-
userReserve.scaledVariableDebt,
174-
suppliedAsset.scaledVariableDebt
175-
),
176-
principalStableDebt: combine(
177-
userReserve.principalStableDebt,
178-
suppliedAsset.principalStableDebt
179-
),
180-
};
181-
}
182-
return userReserve;
183-
}) || [];
204+
const borrowsMap = borrows.concat(borrows).reduce((obj, item) => {
205+
obj[item.underlyingAsset] = item;
206+
return obj;
207+
}, {} as Record<string, typeof borrows[0]>);
208+
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);
224+
}
225+
let usageAsCollateralEnabledOnUser = false;
226+
if (reserve && reserve[0]) {
227+
usageAsCollateralEnabledOnUser = reserve[0].usageAsCollateralEnabled;
228+
}
229+
230+
return {
231+
...userReserve,
232+
scaledATokenBalance,
233+
usageAsCollateralEnabledOnUser,
234+
scaledVariableDebt,
235+
principalStableDebt,
236+
};
237+
});
184238

185239
const baseCurrencyData = selectFormatBaseCurrencyData(poolReserveV3);
186240

0 commit comments

Comments
 (0)