Commit f3e9b513 authored by Jordan Frankfurt's avatar Jordan Frankfurt Committed by GitHub

fix: dont fetch a route for wrap transactions (#6102)

* fix: dont fetch a route for wrap transactions

* refactor logic into useBestTrade

* add mock for useWeb3React

* remove unnecessary diff

* fix tests

* Update src/hooks/useBestTrade.ts
Co-authored-by: default avatarZach Pomerantz <zzmp@uniswap.org>

* Update src/hooks/useBestTrade.ts
Co-authored-by: default avatarZach Pomerantz <zzmp@uniswap.org>

* remove unnecessary wethContract reference

---------
Co-authored-by: default avatarZach Pomerantz <zzmp@uniswap.org>
parent 412a10e0
...@@ -15,6 +15,13 @@ import useIsWindowVisible from './useIsWindowVisible' ...@@ -15,6 +15,13 @@ import useIsWindowVisible from './useIsWindowVisible'
const USDCAmount = CurrencyAmount.fromRawAmount(USDC_MAINNET, '10000') const USDCAmount = CurrencyAmount.fromRawAmount(USDC_MAINNET, '10000')
const DAIAmount = CurrencyAmount.fromRawAmount(DAI, '10000') const DAIAmount = CurrencyAmount.fromRawAmount(DAI, '10000')
jest.mock('@web3-react/core', () => {
return {
useWeb3React: () => ({
chainId: 1,
}),
}
})
jest.mock('./useAutoRouterSupported') jest.mock('./useAutoRouterSupported')
jest.mock('./useClientSideV3Trade') jest.mock('./useClientSideV3Trade')
jest.mock('./useDebounce') jest.mock('./useDebounce')
...@@ -69,8 +76,7 @@ describe('#useBestV3Trade ExactIn', () => { ...@@ -69,8 +76,7 @@ describe('#useBestV3Trade ExactIn', () => {
const { result } = renderHook(() => useBestTrade(TradeType.EXACT_INPUT, USDCAmount, DAI)) const { result } = renderHook(() => useBestTrade(TradeType.EXACT_INPUT, USDCAmount, DAI))
expect(mockUseRoutingAPITrade).toHaveBeenCalledWith(TradeType.EXACT_INPUT, undefined, DAI, RouterPreference.CLIENT) expect(mockUseRoutingAPITrade).toHaveBeenCalledWith(TradeType.EXACT_INPUT, undefined, DAI, RouterPreference.CLIENT)
expect(mockUseClientSideV3Trade).toHaveBeenCalledWith(TradeType.EXACT_INPUT, USDCAmount, DAI) expect(result.current).toEqual({ state: TradeState.NO_ROUTE_FOUND, trade: undefined })
expect(result.current).toEqual({ state: TradeState.VALID, trade: undefined })
}) })
describe('when routing api is in non-error state', () => { describe('when routing api is in non-error state', () => {
...@@ -155,8 +161,7 @@ describe('#useBestV3Trade ExactOut', () => { ...@@ -155,8 +161,7 @@ describe('#useBestV3Trade ExactOut', () => {
USDC_MAINNET, USDC_MAINNET,
RouterPreference.CLIENT RouterPreference.CLIENT
) )
expect(mockUseClientSideV3Trade).toHaveBeenCalledWith(TradeType.EXACT_OUTPUT, DAIAmount, USDC_MAINNET) expect(result.current).toEqual({ state: TradeState.NO_ROUTE_FOUND, trade: undefined })
expect(result.current).toEqual({ state: TradeState.VALID, trade: undefined })
}) })
describe('when routing api is in non-error state', () => { describe('when routing api is in non-error state', () => {
it('does not compute client side v3 trade if routing api is LOADING', () => { it('does not compute client side v3 trade if routing api is LOADING', () => {
......
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core' import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import { useWeb3React } from '@web3-react/core'
import { WRAPPED_NATIVE_CURRENCY } from 'constants/tokens'
import { useMemo } from 'react' import { useMemo } from 'react'
import { RouterPreference } from 'state/routing/slice' import { RouterPreference } from 'state/routing/slice'
import { InterfaceTrade, TradeState } from 'state/routing/types' import { InterfaceTrade, TradeState } from 'state/routing/types'
...@@ -24,6 +26,7 @@ export function useBestTrade( ...@@ -24,6 +26,7 @@ export function useBestTrade(
state: TradeState state: TradeState
trade: InterfaceTrade<Currency, Currency, TradeType> | undefined trade: InterfaceTrade<Currency, Currency, TradeType> | undefined
} { } {
const { chainId } = useWeb3React()
const autoRouterSupported = useAutoRouterSupported() const autoRouterSupported = useAutoRouterSupported()
const isWindowVisible = useIsWindowVisible() const isWindowVisible = useIsWindowVisible()
...@@ -32,16 +35,27 @@ export function useBestTrade( ...@@ -32,16 +35,27 @@ export function useBestTrade(
200 200
) )
const isAWrapTransaction = useMemo(() => {
if (!chainId || !amountSpecified || !debouncedOtherCurrency) return false
const weth = WRAPPED_NATIVE_CURRENCY[chainId]
return (
(amountSpecified.currency.isNative && weth?.equals(debouncedOtherCurrency)) ||
(debouncedOtherCurrency.isNative && weth?.equals(amountSpecified.currency))
)
}, [amountSpecified, chainId, debouncedOtherCurrency])
const shouldGetTrade = !isAWrapTransaction && isWindowVisible
const [clientSideRouter] = useClientSideRouter() const [clientSideRouter] = useClientSideRouter()
const routingAPITrade = useRoutingAPITrade( const routingAPITrade = useRoutingAPITrade(
tradeType, tradeType,
autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, autoRouterSupported && shouldGetTrade ? debouncedAmount : undefined,
debouncedOtherCurrency, debouncedOtherCurrency,
clientSideRouter ? RouterPreference.CLIENT : RouterPreference.API clientSideRouter ? RouterPreference.CLIENT : RouterPreference.API
) )
const isLoading = routingAPITrade.state === TradeState.LOADING const isLoading = routingAPITrade.state === TradeState.LOADING
const useFallback = !autoRouterSupported || routingAPITrade.state === TradeState.NO_ROUTE_FOUND const useFallback = (!autoRouterSupported || routingAPITrade.state === TradeState.NO_ROUTE_FOUND) && shouldGetTrade
// only use client side router if routing api trade failed or is not supported // only use client side router if routing api trade failed or is not supported
const bestV3Trade = useClientSideV3Trade( const bestV3Trade = useClientSideV3Trade(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment