@@ -6,7 +6,13 @@ import {
66 valueToWei ,
77} from '@aave/contract-helpers' ;
88import { 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' ;
1016import { SignatureLike } from '@ethersproject/bytes' ;
1117import { 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-
192200export 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
261283export const selectIsMigrationAvailable = ( store : RootStore ) => {
0 commit comments