diff --git a/packages/mask/src/plugins/Trader/helpers/uniswap.ts b/packages/mask/src/plugins/Trader/helpers/uniswap.ts index f54a547482bd..3ba5a2c945e9 100644 --- a/packages/mask/src/plugins/Trader/helpers/uniswap.ts +++ b/packages/mask/src/plugins/Trader/helpers/uniswap.ts @@ -83,7 +83,11 @@ export function toUniswapCurrencyAmount(chainId: ChainId, token?: FungibleTokenD if (!token || !amount) return const currency = toUniswapCurrency(chainId, token) if (!currency) return - if (isGreaterThan(amount, 0)) return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(amount)) + try { + if (isGreaterThan(amount, 0)) return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(amount)) + } catch { + return + } return } diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts index cd0495b3e2c4..b0d496ab37c2 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts @@ -19,24 +19,28 @@ function computeAllRoutes( const tokenOut = currencyOut?.wrapped if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') - for (const pool of pools) { - if (currentPath.includes(pool) || !pool.involvesToken(tokenIn)) continue + try { + for (const pool of pools) { + if (currentPath.includes(pool) || !pool.involvesToken(tokenIn)) continue - const outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 - if (outputToken.equals(tokenOut)) { - allPaths.push(new Route([...currentPath, pool], startCurrencyIn, currencyOut)) - } else if (maxHops > 1) { - computeAllRoutes( - outputToken, - currencyOut, - pools, - chainId, - [...currentPath, pool], - allPaths, - startCurrencyIn, - maxHops - 1, - ) + const outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 + if (outputToken.equals(tokenOut)) { + allPaths.push(new Route([...currentPath, pool], startCurrencyIn, currencyOut)) + } else if (maxHops > 1) { + computeAllRoutes( + outputToken, + currencyOut, + pools, + chainId, + [...currentPath, pool], + allPaths, + startCurrencyIn, + maxHops - 1, + ) + } } + } catch { + return [] } return allPaths diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/usePairs.ts b/packages/mask/src/plugins/Trader/trader/uniswap/usePairs.ts index 3f754d0aecf7..62856baff29a 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/usePairs.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/usePairs.ts @@ -76,20 +76,24 @@ export function usePairs(tradeProvider: TradeProvider, tokenPairs: readonly Toke // compose pairs from list of reserves const pairs = useMemo(() => { return listOfPairAddress.map((address, i) => { - const tokenA = tokenPairs[i][0] - const tokenB = tokenPairs[i][1] - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] - const { reserve0, reserve1 } = - listOfReserves.find((x) => x.id.toLowerCase() === address?.toLowerCase()) ?? {} - if (!reserve0 || !reserve1) return [PairState.NOT_EXISTS, null] - const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA] - return [ - PairState.EXISTS, - new Pair( - CurrencyAmount.fromRawAmount(token0, reserve0), - CurrencyAmount.fromRawAmount(token1, reserve1), - ), - ] as const + try { + const tokenA = tokenPairs[i][0] + const tokenB = tokenPairs[i][1] + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] + const { reserve0, reserve1 } = + listOfReserves.find((x) => x.id.toLowerCase() === address?.toLowerCase()) ?? {} + if (!reserve0 || !reserve1) return [PairState.NOT_EXISTS, null] + const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA] + return [ + PairState.EXISTS, + new Pair( + CurrencyAmount.fromRawAmount(token0, reserve0), + CurrencyAmount.fromRawAmount(token1, reserve1), + ), + ] as const + } catch { + return [] + } }) }, [listOfPairAddress, listOfReserves, tokenPairs]) diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts b/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts index e7d5891b6bc5..79640191d3db 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts @@ -37,16 +37,20 @@ export function usePools( }, [chainId, poolKeys]) const poolAddresses = useMemo(() => { - return transformed.map((value) => { - if (!context?.IS_UNISWAP_V3_LIKE) return '' - if (!context?.FACTORY_CONTRACT_ADDRESS || !value) return '' - return computePoolAddress({ - factoryAddress: context.FACTORY_CONTRACT_ADDRESS, - tokenA: value[0], - tokenB: value[1], - fee: value[2], + try { + return transformed.map((value) => { + if (!context?.IS_UNISWAP_V3_LIKE) return '' + if (!context?.FACTORY_CONTRACT_ADDRESS || !value) return '' + return computePoolAddress({ + factoryAddress: context.FACTORY_CONTRACT_ADDRESS, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }) }) - }) + } catch { + return [] + } }, [chainId, transformed, context?.FACTORY_CONTRACT_ADDRESS]) const poolContracts = usePoolContracts(poolAddresses, chainId) diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts index c76d2998fc88..783b57907efb 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts @@ -34,16 +34,20 @@ function computeRealizedLPFeePercent(trade: Trade): Percent { // computes price breakdown for the trade function computeRealizedLPFeeAmount(trade?: Trade | null): CurrencyAmount | undefined { - if (trade) { - const realizedLPFee = computeRealizedLPFeePercent(trade) + try { + if (trade) { + const realizedLPFee = computeRealizedLPFeePercent(trade) - // the amount of the input that accrues to LPs - return CurrencyAmount.fromRawAmount( - trade.inputAmount.currency, - trade.inputAmount.multiply(realizedLPFee).quotient, - ) + // the amount of the input that accrues to LPs + return CurrencyAmount.fromRawAmount( + trade.inputAmount.currency, + trade.inputAmount.multiply(realizedLPFee).quotient, + ) + } + return undefined + } catch { + return undefined } - return undefined } export function useTradeBreakdown(trade: Trade | null) { diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts index 63ad1edaf637..8b7b50d09439 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts @@ -32,13 +32,17 @@ export function useV3BestTradeExactIn( const quoterContract = useQuoterContract(targetChainId) const { routes, loading: routesLoading } = useAllV3Routes(amountIn?.currency, currencyOut) const quoteExactInInputs = useMemo(() => { - return routes.map( - (route) => - [encodeRouteToPath(route, false), amountIn ? `0x${amountIn.quotient.toString(16)}` : undefined] as [ - string, - string, - ], - ) + try { + return routes.map( + (route) => + [encodeRouteToPath(route, false), amountIn ? `0x${amountIn.quotient.toString(16)}` : undefined] as [ + string, + string, + ], + ) + } catch { + return [] + } }, [amountIn, routes]) const { value: blockNumber } = useTargetBlockNumber(targetChainId) @@ -149,13 +153,17 @@ export function useV3BestTradeExactOut( const { targetChainId } = TargetChainIdContext.useContainer() const quoterContract = useQuoterContract(targetChainId) const quoteExactOutInputs = useMemo(() => { - return routes.map( - (route) => - [encodeRouteToPath(route, true), amountOut ? `0x${amountOut.quotient.toString(16)}` : undefined] as [ - string, - string, - ], - ) + try { + return routes.map( + (route) => + [ + encodeRouteToPath(route, true), + amountOut ? `0x${amountOut.quotient.toString(16)}` : undefined, + ] as [string, string], + ) + } catch { + return [] + } }, [amountOut, routes]) const { value: blockNumber } = useTargetBlockNumber(targetChainId)