diff --git a/apps/main/src/lend/components/ChartOhlcWrapper/index.tsx b/apps/main/src/lend/components/ChartOhlcWrapper/index.tsx index a2225b848e..8a12e319db 100644 --- a/apps/main/src/lend/components/ChartOhlcWrapper/index.tsx +++ b/apps/main/src/lend/components/ChartOhlcWrapper/index.tsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import { styled } from 'styled-components' import PoolActivity from '@/lend/components/ChartOhlcWrapper/PoolActivity' -import { useOneWayMarket } from '@/lend/entities/chain' +import { useLendMarket } from '@/lend/entities/lend-markets' import { useUserLoanDetails } from '@/lend/hooks/useUserLoanDetails' import useStore from '@/lend/store/useStore' import AlertBox from '@ui/AlertBox' @@ -18,7 +18,7 @@ import { t } from '@ui-kit/lib/i18n' import { ChartOhlcWrapperProps, LendingMarketTokens } from './types' const ChartOhlcWrapper = ({ rChainId, userActiveKey, rOwmId, betaBackgroundColor }: ChartOhlcWrapperProps) => { - const market = useOneWayMarket(rChainId, rOwmId).data + const market = useLendMarket({ chainId: rChainId, marketId: rOwmId }) const borrowMoreActiveKey = useStore((state) => state.loanBorrowMore.activeKey) const loanRepayActiveKey = useStore((state) => state.loanRepay.activeKey) const loanCollateralAddActiveKey = useStore((state) => state.loanCollateralAdd.activeKey) diff --git a/apps/main/src/lend/components/DetailInfoCrvIncentives.tsx b/apps/main/src/lend/components/DetailInfoCrvIncentives.tsx index 95478d63d4..ef1d8a77a5 100644 --- a/apps/main/src/lend/components/DetailInfoCrvIncentives.tsx +++ b/apps/main/src/lend/components/DetailInfoCrvIncentives.tsx @@ -1,7 +1,6 @@ import { useMemo } from 'react' import { styled } from 'styled-components' import { zeroAddress } from 'viem' -import { useOneWayMarket } from '@/lend/entities/chain' import useAbiTotalSupply from '@/lend/hooks/useAbiTotalSupply' import useSupplyTotalApr from '@/lend/hooks/useSupplyTotalApr' import { ChainId } from '@/lend/types/lend.types' @@ -10,6 +9,7 @@ import Icon from '@ui/Icon' import TooltipIcon from '@ui/Tooltip/TooltipIcon' import { FORMAT_OPTIONS, formatNumber } from '@ui/utils' import { t } from '@ui-kit/lib/i18n' +import { useLendMarket } from '../entities/lend-markets' type Data = { label: string @@ -30,7 +30,7 @@ const DetailInfoCrvIncentives = ({ lpTokenAmount: string }) => { const { tooltipValues } = useSupplyTotalApr(rChainId, rOwmId) - const gaugeAddress = useOneWayMarket(rChainId, rOwmId).data?.addresses?.gauge + const gaugeAddress = useLendMarket({ chainId: rChainId, marketId: rOwmId })?.addresses?.gauge const gaugeTotalSupply = useAbiTotalSupply(rChainId, gaugeAddress) const isGaugeAddressInvalid = gaugeAddress === zeroAddress diff --git a/apps/main/src/lend/components/DetailInfoHealth.tsx b/apps/main/src/lend/components/DetailInfoHealth.tsx index 5d87de4ce0..c613ee97be 100644 --- a/apps/main/src/lend/components/DetailInfoHealth.tsx +++ b/apps/main/src/lend/components/DetailInfoHealth.tsx @@ -2,7 +2,6 @@ import { Dispatch, SetStateAction, useEffect, useMemo, useState } from 'react' import { styled } from 'styled-components' import ExternalLink from 'ui/src/Link/ExternalLink' import { DEFAULT_HEALTH_MODE } from '@/lend/components/PageLoanManage/utils' -import { useOneWayMarket } from '@/lend/entities/chain' import useStore from '@/lend/store/useStore' import { HealthColorKey, HealthMode, PageContentProps } from '@/lend/types/lend.types' import { getHealthMode } from '@/lend/utils/health.util' @@ -12,6 +11,7 @@ import Icon from '@ui/Icon' import IconTooltip from '@ui/Tooltip/TooltipIcon' import { formatNumber } from '@ui/utils' import { t } from '@ui-kit/lib/i18n' +import { useLendMarket } from '../entities/lend-markets' import { useUserLoanDetails } from '../hooks/useUserLoanDetails' type FormType = 'create-loan' | 'collateral-decrease' | '' @@ -44,7 +44,7 @@ const DetailInfoHealth = ({ loading: boolean setHealthMode: Dispatch> }) => { - const market = useOneWayMarket(rChainId, rOwmId).data + const market = useLendMarket({ chainId: rChainId, marketId: rOwmId }) const oraclePriceBand = useStore((state) => state.markets.pricesMapper[rChainId]?.[rOwmId]?.prices?.oraclePriceBand) const { healthFull: healthFullCurrent, diff --git a/apps/main/src/lend/components/DetailsMarket/components/MarketParameters.tsx b/apps/main/src/lend/components/DetailsMarket/components/MarketParameters.tsx index 2c63762164..9b318ef211 100644 --- a/apps/main/src/lend/components/DetailsMarket/components/MarketParameters.tsx +++ b/apps/main/src/lend/components/DetailsMarket/components/MarketParameters.tsx @@ -1,6 +1,6 @@ import { Fragment, useEffect } from 'react' import { SubTitle } from '@/lend/components/DetailsMarket/styles' -import { useOneWayMarket } from '@/lend/entities/chain' +import { useLendMarket } from '@/lend/entities/lend-markets' import useStore from '@/lend/store/useStore' import { ChainId } from '@/lend/types/lend.types' import Box from '@ui/Box' @@ -20,7 +20,7 @@ const MarketParameters = ({ rOwmId: string type: 'borrow' | 'supply' }) => { - const owm = useOneWayMarket(rChainId, rOwmId).data + const owm = useLendMarket({ chainId: rChainId, marketId: rOwmId }) const loanPricesResp = useStore((state) => state.markets.pricesMapper[rChainId]?.[rOwmId]) const parametersResp = useStore((state) => state.markets.statsParametersMapper[rChainId]?.[rOwmId]) const vaultPricePerShareResp = useStore((state) => state.markets.vaultPricePerShare[rChainId]?.[rOwmId]) diff --git a/apps/main/src/lend/components/PageLoanCreate/Page.tsx b/apps/main/src/lend/components/PageLoanCreate/Page.tsx index 8b72931473..fbb5525ebb 100644 --- a/apps/main/src/lend/components/PageLoanCreate/Page.tsx +++ b/apps/main/src/lend/components/PageLoanCreate/Page.tsx @@ -4,7 +4,7 @@ import ChartOhlcWrapper from '@/lend/components/ChartOhlcWrapper' import { MarketInformationComp } from '@/lend/components/MarketInformationComp' import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' import LoanCreate from '@/lend/components/PageLoanCreate/index' -import { useOneWayMarket } from '@/lend/entities/chain' +import { useLendMarket } from '@/lend/entities/lend-markets' import { useMarketDetails } from '@/lend/hooks/useMarketDetails' import useTitleMapper from '@/lend/hooks/useTitleMapper' import { helpers } from '@/lend/lib/apiLending' @@ -38,7 +38,7 @@ const Page = () => { const params = useParams() const { rMarket, rChainId, rFormType } = parseMarketParams(params) - const { data: market, isSuccess } = useOneWayMarket(rChainId, rMarket) + const market = useLendMarket({ chainId: rChainId, marketId: rMarket }) const { llamaApi: api = null, connectState } = useConnection() const titleMapper = useTitleMapper() const { provider, connect } = useWallet() @@ -61,11 +61,11 @@ const Page = () => { }) useEffect(() => { - if (isSuccess && !market) { + if (api?.hydrated && !market) { console.warn(`Market ${rMarket} not found. Redirecting to market list.`) push(getCollateralListPathname(params)) } - }, [isSuccess, market, params, push, rMarket]) + }, [api?.hydrated, market, params, push, rMarket]) useEffect(() => { // delay fetch rest after form details are fetched first diff --git a/apps/main/src/lend/components/PageLoanManage/Page.tsx b/apps/main/src/lend/components/PageLoanManage/Page.tsx index a7df530e18..b31223c839 100644 --- a/apps/main/src/lend/components/PageLoanManage/Page.tsx +++ b/apps/main/src/lend/components/PageLoanManage/Page.tsx @@ -5,7 +5,7 @@ import { MarketInformationComp } from '@/lend/components/MarketInformationComp' import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' import LoanMange from '@/lend/components/PageLoanManage/index' import type { DetailInfoTypes } from '@/lend/components/PageLoanManage/types' -import { useOneWayMarket } from '@/lend/entities/chain' +import { useLendMarket } from '@/lend/entities/lend-markets' import { useBorrowPositionDetails } from '@/lend/hooks/useBorrowPositionDetails' import { useMarketDetails } from '@/lend/hooks/useMarketDetails' import useTitleMapper from '@/lend/hooks/useTitleMapper' @@ -41,7 +41,7 @@ const Page = () => { const { rMarket, rChainId, rFormType } = parseMarketParams(params) const { llamaApi: api = null, connectState } = useConnection() const titleMapper = useTitleMapper() - const market = useOneWayMarket(rChainId, rMarket).data + const market = useLendMarket({ chainId: rChainId, marketId: rMarket }) const rOwmId = market?.id ?? '' const userActiveKey = helpers.getUserActiveKey(api, market!) const isMdUp = useLayoutStore((state) => state.isMdUp) diff --git a/apps/main/src/lend/components/PageVault/Page.tsx b/apps/main/src/lend/components/PageVault/Page.tsx index 88d4acd734..13dbf9cde4 100644 --- a/apps/main/src/lend/components/PageVault/Page.tsx +++ b/apps/main/src/lend/components/PageVault/Page.tsx @@ -5,7 +5,7 @@ import { MarketInformationComp } from '@/lend/components/MarketInformationComp' import { MarketInformationTabs } from '@/lend/components/MarketInformationTabs' import type { DetailInfoTypes } from '@/lend/components/PageLoanManage/types' import Vault from '@/lend/components/PageVault/index' -import { useOneWayMarket } from '@/lend/entities/chain' +import { useLendMarket } from '@/lend/entities/lend-markets' import { useMarketDetails } from '@/lend/hooks/useMarketDetails' import { useSupplyPositionDetails } from '@/lend/hooks/useSupplyPositionDetails' import useTitleMapper from '@/lend/hooks/useTitleMapper' @@ -42,7 +42,7 @@ const Page = () => { const { connect, provider } = useWallet() const { llamaApi: api = null, connectState } = useConnection() const titleMapper = useTitleMapper() - const market = useOneWayMarket(rChainId, rMarket).data + const market = useLendMarket({ chainId: rChainId, marketId: rMarket }) const isPageVisible = useLayoutStore((state) => state.isPageVisible) const fetchAllMarketDetails = useStore((state) => state.markets.fetchAll) diff --git a/apps/main/src/lend/entities/chain/chain-hooks.ts b/apps/main/src/lend/entities/chain/chain-hooks.ts deleted file mode 100644 index 0a19d12c05..0000000000 --- a/apps/main/src/lend/entities/chain/chain-hooks.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { useMemo } from 'react' -import networks from '@/lend/networks' -import useStore from '@/lend/store/useStore' -import { ChainId, OneWayMarketTemplate } from '@/lend/types/lend.types' -import { useConnection } from '@ui-kit/features/connect-wallet' -import { ChainParams } from '@ui-kit/lib/model/query' -import { useOneWayMarketNames } from './chain-query' - -export const useOneWayMarketMapping = (params: ChainParams) => { - const { chainId } = params - const { data: marketNames, isSuccess, error } = useOneWayMarketNames(params) - const hydratedChainId = useStore((state) => state.hydratedChainId) - const { llamaApi: api } = useConnection() - const apiChainId = api?.chainId - const data: Record | undefined = useMemo( - () => - // note: only during hydration `api` internally retrieves all the markets, and we can call `getOneWayMarket` - marketNames && api && chainId == apiChainId && hydratedChainId === chainId - ? Object.fromEntries( - marketNames - .filter((marketName) => !networks[chainId!].hideMarketsInUI[marketName]) - .map((name) => [name, api.getLendMarket(name)] as const) - .flatMap(([name, market]) => [ - [name, market], - [market.addresses.controller, market], - ]), - ) - : undefined, - [api, apiChainId, chainId, hydratedChainId, marketNames], - ) - return { data, isSuccess, error } -} - -export const useOneWayMarket = (chainId: ChainId, marketName: string) => { - const { data: markets, isSuccess, ...rest } = useOneWayMarketMapping({ chainId }) - const market = markets?.[marketName] - return { data: market, isSuccess: isSuccess && !!markets, ...rest } -} diff --git a/apps/main/src/lend/entities/chain/chain-query.ts b/apps/main/src/lend/entities/chain/chain-query.ts deleted file mode 100644 index 6ad0bb81cf..0000000000 --- a/apps/main/src/lend/entities/chain/chain-query.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChainId } from '@/lend/types/lend.types' -import { requireLib } from '@ui-kit/features/connect-wallet' -import { ChainParams, ChainQuery, queryFactory } from '@ui-kit/lib/model/query' -import { llamaApiValidationSuite } from '@ui-kit/lib/model/query/curve-api-validation' - -export const { useQuery: useOneWayMarketNames, prefetchQuery: prefetchMarkets } = queryFactory({ - queryKey: ({ chainId }: ChainParams) => ['chain', { chainId }, 'markets'] as const, - queryFn: async ({ chainId }: ChainQuery): Promise => { - const useAPI = chainId !== 146 // disable API for sonic - const api = requireLib('llamaApi') - await api.lendMarkets.fetchMarkets(useAPI) - return api.lendMarkets.getMarketList() - }, - staleTime: '5m', - refetchInterval: '1m', - validationSuite: llamaApiValidationSuite, -}) diff --git a/apps/main/src/lend/entities/chain/chain-tvl.ts b/apps/main/src/lend/entities/chain/chain-tvl.ts index ef614f3ef7..d6497c3997 100644 --- a/apps/main/src/lend/entities/chain/chain-tvl.ts +++ b/apps/main/src/lend/entities/chain/chain-tvl.ts @@ -1,38 +1,36 @@ import { useMemo } from 'react' import useStore from '@/lend/store/useStore' import { ChainId } from '@/lend/types/lend.types' +import { useConnection } from '@ui-kit/features/connect-wallet' import { useTokenUsdRates } from '@ui-kit/lib/model/entities/token-usd-rate' import { FETCHING, PartialQueryResult, READY } from '@ui-kit/lib/queries' -import { useOneWayMarketMapping } from './chain-hooks' +import { useLendMarketMapping } from '../lend-markets' import { calculateChainTvl } from './tvl' +/** Todo: we should replace this entire hook with prices API some day, there should be an endpoint available */ export const useTvl = (chainId: ChainId | undefined): PartialQueryResult => { - const marketMapping = useOneWayMarketMapping({ chainId }).data + const { llamaApi: api } = useConnection() + + const marketMapping = useLendMarketMapping({ chainId }) + const markets = useMemo( + () => (api && marketMapping ? Object.values(marketMapping).map(api.getLendMarket) : []), + [api, marketMapping], + ) const marketsCollateralMapper = useStore((state) => chainId && state.markets.statsAmmBalancesMapper[chainId]) const marketsTotalSupplyMapper = useStore((state) => chainId && state.markets.totalLiquidityMapper[chainId]) const marketsTotalDebtMapper = useStore((state) => chainId && state.markets.statsTotalsMapper[chainId]) const tokenAddresses = useMemo( - () => - Object.values(marketMapping ?? {}) - // note: include the borrowed tokens here, to be used in `filterSmallMarkets` - .flatMap((market) => [market.borrowed_token, market.collateral_token]) - .map((t) => t.address), - [marketMapping], + () => markets.flatMap((market) => [market.borrowed_token, market.collateral_token]).map((t) => t.address), + [markets], ) const { data: tokenUsdRates, isError: isUsdRatesError } = useTokenUsdRates({ chainId, tokenAddresses }) return useMemo(() => { - if ( - !marketMapping || - !marketsCollateralMapper || - !marketsTotalSupplyMapper || - !marketsTotalDebtMapper || - !tokenUsdRates - ) { + if (!marketsCollateralMapper || !marketsTotalSupplyMapper || !marketsTotalDebtMapper || !tokenUsdRates) { return { ...FETCHING, isError: isUsdRatesError } } const data = calculateChainTvl( - marketMapping, + markets, marketsCollateralMapper, tokenUsdRates, marketsTotalDebtMapper, @@ -40,11 +38,11 @@ export const useTvl = (chainId: ChainId | undefined): PartialQueryResult ) return { ...READY, data } }, [ - isUsdRatesError, - marketMapping, marketsCollateralMapper, marketsTotalSupplyMapper, marketsTotalDebtMapper, tokenUsdRates, + markets, + isUsdRatesError, ]) } diff --git a/apps/main/src/lend/entities/chain/index.ts b/apps/main/src/lend/entities/chain/index.ts index c378a6590c..2b2c31a73a 100644 --- a/apps/main/src/lend/entities/chain/index.ts +++ b/apps/main/src/lend/entities/chain/index.ts @@ -1,4 +1,3 @@ export { useChainId } from './chain-info' export { useTvl } from './chain-tvl' -export { useOneWayMarket, useOneWayMarketMapping } from './chain-hooks' export { calculateChainTvl } from './tvl' diff --git a/apps/main/src/lend/entities/chain/tvl.ts b/apps/main/src/lend/entities/chain/tvl.ts index 9508b14c9b..005f50fb72 100644 --- a/apps/main/src/lend/entities/chain/tvl.ts +++ b/apps/main/src/lend/entities/chain/tvl.ts @@ -8,7 +8,7 @@ import { IDict } from '@curvefi/llamalend-api/lib/interfaces' import { logSuccess } from '@ui-kit/lib' export function calculateChainTvl( - marketMapping: IDict, + markets: OneWayMarketTemplate[], marketsCollateralMapper: MarketsStatsAMMBalancesMapper, tokenUsdRates: IDict, marketsTotalDebtMapper: MarketsStatsTotalsMapper, @@ -18,17 +18,15 @@ export function calculateChainTvl( let totalLiquidity = 0 let totalDebt = 0 - Object.entries(marketMapping) - .filter(([key]) => !key.startsWith('0x')) // the market mapping has addresses and ids, we only want the ids - .forEach(([id, { collateral_token }]) => { - const ammBalance = marketsCollateralMapper[id] ?? {} - const collateralUsdRate = tokenUsdRates[collateral_token.address] ?? 0 - const marketTotalCollateralUsd = +(ammBalance?.collateral ?? '0') * collateralUsdRate + markets.forEach(({ id, collateral_token }) => { + const ammBalance = marketsCollateralMapper[id] ?? {} + const collateralUsdRate = tokenUsdRates[collateral_token.address] ?? 0 + const marketTotalCollateralUsd = +(ammBalance?.collateral ?? '0') * collateralUsdRate - totalCollateral += marketTotalCollateralUsd - totalDebt += +marketsTotalDebtMapper[id]?.totalDebt - totalLiquidity += +marketsTotalSupplyMapper[id]?.totalLiquidity - }) + totalCollateral += marketTotalCollateralUsd + totalDebt += +marketsTotalDebtMapper[id]?.totalDebt + totalLiquidity += +marketsTotalSupplyMapper[id]?.totalLiquidity + }) const tvl = totalCollateral + totalLiquidity - totalDebt logSuccess(['chain-tvl'], { totalCollateral, totalLiquidity, totalDebt }, tvl) diff --git a/apps/main/src/lend/entities/lend-markets.ts b/apps/main/src/lend/entities/lend-markets.ts new file mode 100644 index 0000000000..4b3e20891c --- /dev/null +++ b/apps/main/src/lend/entities/lend-markets.ts @@ -0,0 +1,63 @@ +import { useMemo } from 'react' +import { isAddress } from 'viem' +import networks from '@/lend/networks' +import { ChainId } from '@/lend/types/lend.types' +import { fromEntries } from '@curvefi/prices-api/objects.util' +import { useConnection } from '@ui-kit/features/connect-wallet' +import type { Address } from '@ui-kit/utils' + +/** + * Hook to get a mapping of lending market controller address to market name for all lending markets on a specific chain. + * Primarily useful fetching lending markets via URL. + */ +export const useLendMarketMapping = ({ chainId }: { chainId: ChainId | undefined }) => { + const { llamaApi: api } = useConnection() + const mapping = useMemo( + () => + api?.hydrated && + chainId && + fromEntries( + api.lendMarkets + .getMarketList() + .filter((marketName) => !networks[chainId].hideMarketsInUI[marketName]) + .map((name) => [api.getLendMarket(name).addresses.controller as Address, name]), + ), + // Need to specifically watch to api?.hydrated, as simply watching api as a whole won't trigger when hydrated is set to true by `useHydration` + // eslint-disable-next-line react-hooks/exhaustive-deps + [api?.hydrated, chainId], + ) + + return mapping || undefined +} + +/** + * Hook to get a specific lending market by its id or controller address. + * @param chainId The chain for which to get the lending market of + * @param marketId Lend market id or controller address + * @returns The market instance, if found. + */ +export const useLendMarket = ({ chainId, marketId }: { chainId: ChainId; marketId: string | Address }) => { + const marketMapping = useLendMarketMapping({ chainId }) + const { llamaApi: api } = useConnection() + + return useMemo(() => { + if (!api) return undefined + + // If markets aren't found they throw an error, but we want to return undefined instead + const safeGetMarket = (id: string) => { + try { + return api.getLendMarket(id) + } catch { + return undefined + } + } + + // Try to get the market by name first + if (!isAddress(marketId)) return safeGetMarket(marketId) + + // Try to get by controller address mapping + return marketMapping && marketId in marketMapping && api.hydrated && api.chainId === chainId + ? safeGetMarket(marketMapping[marketId]) + : undefined + }, [api, chainId, marketId, marketMapping]) +} diff --git a/apps/main/src/lend/hooks/useSupplyTotalApr.ts b/apps/main/src/lend/hooks/useSupplyTotalApr.ts index 2da3374f2c..119ef6a452 100644 --- a/apps/main/src/lend/hooks/useSupplyTotalApr.ts +++ b/apps/main/src/lend/hooks/useSupplyTotalApr.ts @@ -1,14 +1,14 @@ import { useMemo } from 'react' import { zeroAddress } from 'viem' -import { useOneWayMarket } from '@/lend/entities/chain' import { useMarketOnChainRates } from '@/lend/entities/market-details' import useStore from '@/lend/store/useStore' import { ChainId, MarketRates, RewardOther, MarketRewards } from '@/lend/types/lend.types' import { getTotalApr } from '@/lend/utils/utilsRewards' import { FORMAT_OPTIONS, formatNumber } from '@ui/utils' +import { useLendMarket } from '../entities/lend-markets' function useSupplyTotalApr(rChainId: ChainId, rOwmId: string) { - const market = useOneWayMarket(rChainId, rOwmId).data + const market = useLendMarket({ chainId: rChainId, marketId: rOwmId }) const marketRewardsResp = useStore((state) => state.markets.rewardsMapper[rChainId]?.[rOwmId]) const marketRatesResp = useStore((state) => state.markets.ratesMapper[rChainId]?.[rOwmId]) const { diff --git a/apps/main/src/lend/hooks/useVaultShares.ts b/apps/main/src/lend/hooks/useVaultShares.ts index 177ae84c46..409309d528 100644 --- a/apps/main/src/lend/hooks/useVaultShares.ts +++ b/apps/main/src/lend/hooks/useVaultShares.ts @@ -1,9 +1,9 @@ import { useEffect, useMemo } from 'react' -import { useOneWayMarket } from '@/lend/entities/chain' import useStore from '@/lend/store/useStore' import { ChainId } from '@/lend/types/lend.types' import { useTokenUsdRate } from '@ui-kit/lib/model/entities/token-usd-rate' import { formatNumber } from '@ui-kit/utils' +import { useLendMarket } from '../entities/lend-markets' function formatNumberWithPrecision(value: number, precisionDigits: number) { const valueDigits = Math.max(0, Math.floor(Math.log10(value))) @@ -12,7 +12,7 @@ function formatNumberWithPrecision(value: number, precisionDigits: number) { } function useVaultShares(rChainId: ChainId, rOwmId: string, vaultShares: string | number | undefined = '0') { - const market = useOneWayMarket(rChainId, rOwmId).data + const market = useLendMarket({ chainId: rChainId, marketId: rOwmId }) const pricePerShareResp = useStore((state) => state.markets.vaultPricePerShare[rChainId]?.[rOwmId]) const { address = '', symbol = '' } = market?.borrowed_token ?? {} const { data: usdRate } = useTokenUsdRate({ chainId: rChainId, tokenAddress: address }) diff --git a/apps/main/src/lend/store/createAppSlice.ts b/apps/main/src/lend/store/createAppSlice.ts index 168934c97e..b65b946a2d 100644 --- a/apps/main/src/lend/store/createAppSlice.ts +++ b/apps/main/src/lend/store/createAppSlice.ts @@ -1,18 +1,15 @@ import { produce } from 'immer' import lodash from 'lodash' import type { GetState, SetState } from 'zustand' -import { prefetchMarkets } from '@/lend/entities/chain/chain-query' import type { State } from '@/lend/store/useStore' -import { Api, ChainId, Wallet } from '@/lend/types/lend.types' +import { Api, Wallet } from '@/lend/types/lend.types' import { log } from '@ui-kit/lib/logging' export type DefaultStateKeys = keyof typeof DEFAULT_STATE export type SliceKey = keyof State | '' export type StateKey = string -type SliceState = { - hydratedChainId: ChainId | null -} +type SliceState = {} // prettier-ignore export interface AppSlice extends SliceState { @@ -27,9 +24,7 @@ export interface AppSlice extends SliceState { resetAppState(sliceKey: SliceKey, defaultState: T): void } -const DEFAULT_STATE: SliceState = { - hydratedChainId: null, -} +const DEFAULT_STATE: SliceState = {} satisfies SliceState const createAppSlice = (set: SetState, get: GetState): AppSlice => ({ ...DEFAULT_STATE, @@ -41,7 +36,6 @@ const createAppSlice = (set: SetState, get: GetState): AppSlice => ) }, hydrate: async (api, prevApi, wallet) => { - get().updateGlobalStoreByKey('hydratedChainId', null) if (!api) return const isNetworkSwitched = !!prevApi?.chainId && prevApi.chainId !== api.chainId @@ -74,11 +68,10 @@ const createAppSlice = (set: SetState, get: GetState): AppSlice => state.user.resetState() } - // unfortunately, we cannot use markets from the cache as that leaves curve-lending-js in an inconsistent state - await prefetchMarkets({ chainId: api.chainId }) + const useAPI = api.chainId !== 146 // disable API for sonic + await api.lendMarkets.fetchMarkets(useAPI) log('Hydrating Lend - Complete') - get().updateGlobalStoreByKey('hydratedChainId', api.chainId) }, setAppStateByActiveKey: (sliceKey: SliceKey, key: StateKey, activeKey: string, value: T, showLog?: boolean) => { set(