33 PoolBaseCurrencyHumanized ,
44 ReserveDataHumanized ,
55 UserReserveDataHumanized ,
6+ valueToWei ,
67} from '@aave/contract-helpers' ;
78import { V3MigrationHelperSignedPermit } from '@aave/contract-helpers/dist/esm/v3-migration-contract/v3MigrationTypes' ;
89import { 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+
7283export 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