You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uniswap SDK跨链使用问题及Arbitrum调用报错咨询

关于Uniswap SDK跨链使用及Arbitrum适配报错的解答

问题1:Arbitrum、Polygon、Avalanche等链能否使用Uniswap SDK?

可以直接用Uniswap SDK和这些部署了Uniswap合约的EVM兼容链交互,没必要直接用ethers从零实现。Uniswap SDK原生支持多链,只要目标链上部署了Uniswap V2/V3合约,就能通过SDK快速完成交易对查询、价格计算、交易路径生成等操作,比直接调用ethers高效很多。

问题2:非EVM网络(如Binance Smart Chain)能否与Uniswap合约交互?

首先纠正:BSC属于EVM兼容链,是可以和部署在其上的Uniswap合约交互的。但纯非EVM链(比如Solana、Sui这类)无法直接和Uniswap合约交互,因为Uniswap合约基于EVM开发,依赖以太坊虚拟机的执行逻辑,非EVM链不支持以太坊字节码的运行。

Arbitrum One适配官方示例的报错解决

你遇到的unsupported getDefaultProvider network错误,原因是Uniswap SDK的Fetcher.fetchPairData默认会调用ethers v5的getDefaultProvider连接目标链,但ethers v5的默认provider列表里不包含Arbitrum,导致无法自动连接节点。

解决方法有两种:

方法1:手动传入自定义Provider

自己初始化一个Arbitrum的RPC Provider,传给fetchPairData即可:

import { ethers } from 'ethers';
import { Token, Fetcher, Route, WETH } from '@uniswap/sdk';

export async function getPriceInUsd() {
    const chainId = 42161;
    // 初始化Arbitrum RPC Provider,可使用公开节点或自有节点
    const provider = new ethers.providers.JsonRpcProvider('https://arb1.arbitrum.io/rpc');
    const stableAddress = '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1';
    const DAI = new Token(chainId, stableAddress, 18);
    // 传入自定义provider作为第三个参数
    const pair = await Fetcher.fetchPairData(DAI, WETH[chainId], provider);
    const route = new Route([pair], WETH[chainId]);
    return route.midPrice.toSignificant(6);
};

方法2:升级ethers到v6版本

ethers v6的getDefaultProvider已经原生支持Arbitrum等更多链,升级后无需额外配置provider即可正常连接,代码可以保持原有结构。

另外注意代码里的注释// ChainId.MAINNET是错误的,42161是Arbitrum One的链ID,建议改成// ChainId.ARBITRUM_ONE(如果SDK提供了该枚举值)。


内容的提问来源于stack exchange,提问作者RomanKovalev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:27:30