fix: Remove block number check for quotes (#6148)
* remove block number check * add refetchOnMountOrArgChange
This commit is contained in:
parent
b0aea5f62a
commit
bc251230da
@ -1,31 +0,0 @@
|
|||||||
import { useWeb3React } from '@web3-react/core'
|
|
||||||
import { atomWithImmer } from 'jotai/immer'
|
|
||||||
import { useAtomValue } from 'jotai/utils'
|
|
||||||
import { useCallback } from 'react'
|
|
||||||
|
|
||||||
import useBlockNumber from './useBlockNumber'
|
|
||||||
|
|
||||||
// The oldest block (per chain) to be considered valid.
|
|
||||||
const oldestBlockMapAtom = atomWithImmer<{ [chainId: number]: number }>({})
|
|
||||||
|
|
||||||
const DEFAULT_MAX_BLOCK_AGE = 10
|
|
||||||
|
|
||||||
function useGetIsValidBlock(maxBlockAge = DEFAULT_MAX_BLOCK_AGE): (block: number) => boolean {
|
|
||||||
const { chainId } = useWeb3React()
|
|
||||||
const currentBlock = useBlockNumber()
|
|
||||||
const oldestBlockMap = useAtomValue(oldestBlockMapAtom)
|
|
||||||
const oldestBlock = chainId ? oldestBlockMap[chainId] : 0
|
|
||||||
return useCallback(
|
|
||||||
(block: number) => {
|
|
||||||
if (!currentBlock) return false
|
|
||||||
if (currentBlock - block > maxBlockAge) return false
|
|
||||||
if (currentBlock < oldestBlock) return false
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
[currentBlock, maxBlockAge, oldestBlock]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function useIsValidBlock(block: number): boolean {
|
|
||||||
return useGetIsValidBlock()(block)
|
|
||||||
}
|
|
@ -5,12 +5,11 @@ import { sendTiming } from 'components/analytics'
|
|||||||
import { AVERAGE_L1_BLOCK_TIME } from 'constants/chainInfo'
|
import { AVERAGE_L1_BLOCK_TIME } from 'constants/chainInfo'
|
||||||
import { useStablecoinAmountFromFiatValue } from 'hooks/useStablecoinPrice'
|
import { useStablecoinAmountFromFiatValue } from 'hooks/useStablecoinPrice'
|
||||||
import { useRoutingAPIArguments } from 'lib/hooks/routing/useRoutingAPIArguments'
|
import { useRoutingAPIArguments } from 'lib/hooks/routing/useRoutingAPIArguments'
|
||||||
import useIsValidBlock from 'lib/hooks/useIsValidBlock'
|
|
||||||
import ms from 'ms.macro'
|
import ms from 'ms.macro'
|
||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
import { RouterPreference, useGetQuoteQuery } from 'state/routing/slice'
|
import { RouterPreference, useGetQuoteQuery } from 'state/routing/slice'
|
||||||
|
|
||||||
import { GetQuoteResult, InterfaceTrade, TradeState } from './types'
|
import { InterfaceTrade, TradeState } from './types'
|
||||||
import { computeRoutes, transformRoutesToTrade } from './utils'
|
import { computeRoutes, transformRoutesToTrade } from './utils'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,13 +43,18 @@ export function useRoutingAPITrade<TTradeType extends TradeType>(
|
|||||||
routerPreference,
|
routerPreference,
|
||||||
})
|
})
|
||||||
|
|
||||||
const { isLoading, isError, data, currentData } = useGetQuoteQuery(queryArgs ?? skipToken, {
|
const {
|
||||||
|
isLoading,
|
||||||
|
isError,
|
||||||
|
data: quoteResult,
|
||||||
|
currentData,
|
||||||
|
} = useGetQuoteQuery(queryArgs ?? skipToken, {
|
||||||
// Price-fetching is informational and costly, so it's done less frequently.
|
// Price-fetching is informational and costly, so it's done less frequently.
|
||||||
pollingInterval: routerPreference === RouterPreference.PRICE ? ms`2m` : AVERAGE_L1_BLOCK_TIME,
|
pollingInterval: routerPreference === RouterPreference.PRICE ? ms`1m` : AVERAGE_L1_BLOCK_TIME,
|
||||||
|
// If latest quote from cache was fetched > 2m ago, instantly repoll for another instead of waiting for next poll period
|
||||||
|
refetchOnMountOrArgChange: 2 * 60,
|
||||||
})
|
})
|
||||||
|
|
||||||
const quoteResult: GetQuoteResult | undefined = useIsValidBlock(Number(data?.blockNumber) || 0) ? data : undefined
|
|
||||||
|
|
||||||
const route = useMemo(
|
const route = useMemo(
|
||||||
() => computeRoutes(currencyIn, currencyOut, tradeType, quoteResult),
|
() => computeRoutes(currencyIn, currencyOut, tradeType, quoteResult),
|
||||||
[currencyIn, currencyOut, quoteResult, tradeType]
|
[currencyIn, currencyOut, quoteResult, tradeType]
|
||||||
@ -59,7 +63,7 @@ export function useRoutingAPITrade<TTradeType extends TradeType>(
|
|||||||
// get USD gas cost of trade in active chains stablecoin amount
|
// get USD gas cost of trade in active chains stablecoin amount
|
||||||
const gasUseEstimateUSD = useStablecoinAmountFromFiatValue(quoteResult?.gasUseEstimateUSD) ?? null
|
const gasUseEstimateUSD = useStablecoinAmountFromFiatValue(quoteResult?.gasUseEstimateUSD) ?? null
|
||||||
|
|
||||||
const isSyncing = currentData !== data
|
const isSyncing = currentData !== quoteResult
|
||||||
|
|
||||||
return useMemo(() => {
|
return useMemo(() => {
|
||||||
if (!currencyIn || !currencyOut || currencyIn.equals(currencyOut)) {
|
if (!currencyIn || !currencyOut || currencyIn.equals(currencyOut)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user