Skip to content

Commit 2005038

Browse files
committed
Merge branch 'feature/v2-v3-migration' into chore/merge-updated-permit-flow
2 parents 7e188bf + 4bad33a commit 2005038

File tree

3 files changed

+70
-37
lines changed

3 files changed

+70
-37
lines changed

pages/v3-migration.page.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export default function V3Migration() {
2828
const { currentAccount, loading: web3Loading } = useWeb3Context();
2929
const { isPermissionsLoading } = usePermissions();
3030
const setCurrentMarketForMigration = useRootStore((state) => state.setCurrentMarketForMigration);
31+
const resetMigrationSelectedAssets = useRootStore((state) => state.resetMigrationSelectedAssets);
3132

3233
const currentTimeStamp = useCurrentTimestamp(5);
3334

@@ -58,6 +59,12 @@ export default function V3Migration() {
5859
}
5960
}, [setCurrentMarketForMigration]);
6061

62+
useEffect(() => {
63+
if (resetMigrationSelectedAssets) {
64+
resetMigrationSelectedAssets();
65+
}
66+
}, [resetMigrationSelectedAssets]);
67+
6168
usePoolDataV3Subscription();
6269

6370
return (

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) => {

src/store/v3MigrationSlice.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export type V3MigrationSlice = {
5252
signedPermits?: V3MigrationHelperSignedPermit[]
5353
) => Promise<EthereumTransactionTypeExtended[]>;
5454
setCurrentMarketForMigration: () => void;
55+
resetMigrationSelectedAssets: () => void;
5556
};
5657

5758
export const createV3MigrationSlice: StateCreator<
@@ -136,16 +137,19 @@ export const createV3MigrationSlice: StateCreator<
136137
})
137138
);
138139
},
140+
resetMigrationSelectedAssets: () => {
141+
set({
142+
selectedMigrationBorrowAssets: {},
143+
selectedMigrationSupplyAssets: {},
144+
});
145+
},
139146
getApprovePermitsForSelectedAssets: async () => {
140147
const timestamp = dayjs().unix();
141148
const approvalPermitsForMigrationAssets = await Promise.all(
142149
selectUserSupplyIncreasedReservesForMigrationPermits(get(), timestamp).map(
143150
async ({ reserve, increasedAmount }): Promise<Approval> => {
144-
const { getTokenData } = new ERC20Service(get().jsonRpcProvider());
145-
const { decimals } = await getTokenData(reserve.aTokenAddress);
146-
const convertedAmount = valueToWei(increasedAmount, decimals);
147151
return {
148-
amount: convertedAmount,
152+
amount: increasedAmount,
149153
underlyingAsset: reserve.aTokenAddress,
150154
permitType: 'MIGRATOR',
151155
};

0 commit comments

Comments
 (0)