1- import {
2- type QueryObserverResult ,
3- type RefetchOptions ,
4- skipToken ,
5- useQuery
6- } from '@tanstack/react-query'
7- import { erc20Abi , Address } from 'viem'
1+ import { skipToken , useQuery } from '@tanstack/react-query'
2+ import { erc20Abi , Address , PublicClient } from 'viem'
83import { readContract } from 'viem/actions'
9- import useCChainNetwork from 'hooks/earn/useCChainNetwork'
104import { useSelector } from 'react-redux'
115import { selectActiveAccount } from 'store/account'
12- import { useTokensWithBalanceByNetworkForAccount } from 'features/portfolio/hooks/useTokensWithBalanceByNetworkForAccount '
13- import { findMatchingTokenWithBalance } from 'features/deposit/utils/findMatchingTokenWithBalance '
6+ import { Network } from '@avalabs/core-chains-sdk '
7+ import { ReactQueryKeys } from 'consts/reactQueryKeys '
148import { type DefiMarket , MarketNames } from '../../types'
159import { gqlQuery } from '../../utils/gqlQuery'
1610import {
@@ -32,50 +26,44 @@ import { getAaveFilteredMarketData } from '../../utils/getAaveFilteredMarketData
3226import { getUniqueMarketId } from '../../utils/getUniqueMarketId'
3327import { isMeritSupplyKey } from '../../utils/isMeritSupplyKey'
3428import { bigIntToBig } from '../../utils/bigInt'
35- import { useCChainClient } from '../useCChainClient'
3629import { useGetCChainToken } from '../useGetCChainToken'
3730import { useMeritAprs } from './useMeritAprs'
3831
39- export const useAaveAvailableMarkets = ( ) : {
32+ export const useAaveAvailableMarkets = ( {
33+ network,
34+ networkClient
35+ } : {
36+ network : Network | undefined
37+ networkClient : PublicClient | undefined
38+ } ) : {
4039 data : DefiMarket [ ] | undefined
4140 error : Error | null
4241 isLoading : boolean
4342 isPending : boolean
4443 isFetching : boolean
45- refetch :
46- | ( (
47- options ?: RefetchOptions
48- ) => Promise < QueryObserverResult < DefiMarket [ ] , Error > > )
49- | ( ( ) => void )
5044} => {
51- const cChainNetwork = useCChainNetwork ( )
52- const cChainClient = useCChainClient ( )
5345 const activeAccount = useSelector ( selectActiveAccount )
5446 const addressEVM = activeAccount ?. addressC
5547 const { data : meritAprs , isPending : isPendingMeritAprs } = useMeritAprs ( )
5648 const getCChainToken = useGetCChainToken ( )
57- const tokens = useTokensWithBalanceByNetworkForAccount (
58- activeAccount ,
59- cChainNetwork ?. chainId
60- )
6149
6250 const {
6351 data : enrichedMarkets ,
6452 isLoading : isLoadingEnrichedMarkets ,
6553 isPending : isPendingEnrichedMarkets ,
6654 isFetching : isFetchingEnrichedMarkets ,
67- error : errorEnrichedMarkets ,
68- refetch
55+ error : errorEnrichedMarkets
6956 } = useQuery ( {
70- queryKey : [ 'useAaveAvailableMarkets' , cChainClient , cChainNetwork , tokens ] ,
57+ // eslint-disable-next-line @tanstack/query/exhaustive-deps
58+ queryKey : [ ReactQueryKeys . AAVE_AVAILABLE_MARKETS , networkClient ?. chain ?. id ] ,
7159 queryFn :
72- cChainClient && cChainNetwork && ! isPendingMeritAprs
60+ networkClient && network && ! isPendingMeritAprs
7361 ? async ( ) => {
7462 // Step 1: Fetch all available reserve data from Aave V3 pool
7563 // getReservesData(in AAVE_POOL_DATA_PROVIDER abi) returns a tuple: [AggregatedReserveData[], BaseCurrencyInfo]
7664 // [0] = array of market data (USDC, USDT, WETH.e, etc.)
7765 // [1] = base currency info (USD prices, etc.) - not used currently
78- const [ marketsData ] = await readContract ( cChainClient , {
66+ const [ marketsData ] = await readContract ( networkClient , {
7967 address : AAVE_UI_POOL_DATA_PROVIDER_C_CHAIN_ADDRESS ,
8068 abi : AAVE_POOL_DATA_PROVIDER ,
8169 functionName : 'getReservesData' ,
@@ -97,7 +85,7 @@ export const useAaveAvailableMarkets = (): {
9785 const supplyApyPercent = formatAaveSupplyApy ( liveAprPercent )
9886
9987 // Get total supply to calculate total deposits
100- const totalSupply = await readContract ( cChainClient , {
88+ const totalSupply = await readContract ( networkClient , {
10189 address : market . mintTokenAddress ,
10290 abi : erc20Abi ,
10391 functionName : 'totalSupply'
@@ -125,7 +113,7 @@ export const useAaveAvailableMarkets = (): {
125113 ` ,
126114 {
127115 request : {
128- chainId : cChainNetwork ? .chainId ,
116+ chainId : network . chainId ,
129117 market : AAVE_POOL_C_CHAIN_ADDRESS ,
130118 underlyingToken : market . underlyingAsset ,
131119 window : 'LAST_MONTH'
@@ -159,15 +147,6 @@ export const useAaveAvailableMarkets = (): {
159147 return accumulator + formattedNumber
160148 } , 0 ) / safeData . length
161149
162- // Match with user's token balance
163- const balance = findMatchingTokenWithBalance (
164- {
165- symbol : market . symbol ,
166- contractAddress : market . underlyingAsset
167- } ,
168- tokens
169- )
170-
171150 // Get token metadata (logo, etc.)
172151 const token = getCChainToken (
173152 market . symbol ,
@@ -177,7 +156,7 @@ export const useAaveAvailableMarkets = (): {
177156 // Construct market data with all enriched information
178157 const marketData = {
179158 marketName : MarketNames . aave ,
180- network : cChainNetwork ,
159+ network,
181160 type : 'lending' as const ,
182161 supplyCapReached,
183162 totalDeposits : formatAmount (
@@ -191,9 +170,8 @@ export const useAaveAvailableMarkets = (): {
191170 iconUrl : token ?. logoUri ,
192171 symbol : market . symbol ,
193172 contractAddress : market . underlyingAsset ,
194- underlyingTokenBalance : balance ,
195173 mintTokenBalance : await getAaveDepositedBalance ( {
196- cChainClient,
174+ cChainClient : networkClient ,
197175 walletAddress : addressEVM as Address ,
198176 underlyingTokenDecimals : decimals ,
199177 underlyingAssetAddress : market . underlyingAsset
@@ -210,17 +188,7 @@ export const useAaveAvailableMarkets = (): {
210188 } )
211189 )
212190
213- // Step 4: Add AVAX (native token) market data
214- // Aave uses WAVAX wrapper, so we need to manually insert AVAX with user's balance
215- const avaxBalance = findMatchingTokenWithBalance (
216- {
217- symbol : cChainNetwork . networkToken . symbol ,
218- contractAddress : undefined
219- } ,
220- tokens
221- )
222-
223- return aaveInsertAvax ( results , avaxBalance )
191+ return aaveInsertAvax ( results )
224192 }
225193 : skipToken
226194 } )
@@ -230,8 +198,6 @@ export const useAaveAvailableMarkets = (): {
230198 error : errorEnrichedMarkets ,
231199 isLoading : isLoadingEnrichedMarkets ,
232200 isPending : isPendingEnrichedMarkets ,
233- isFetching : isFetchingEnrichedMarkets ,
234- // eslint-disable-next-line @typescript-eslint/no-empty-function
235- refetch : cChainClient && ! isPendingMeritAprs ? refetch : ( ) => { }
201+ isFetching : isFetchingEnrichedMarkets
236202 }
237203}
0 commit comments