web3modal集成WalletConnect时无法连接Trust Wallet问题
web3modal配置WalletConnect后无法连接安卓端Trust Wallet问题修复
问题现象
- 基于web3modal搭建Dapp多钱包连接能力,已将WalletConnect配置为provider选项
- 现有配置可正常连接安卓端MetaMask、Wirex钱包
- 安卓端Trust Wallet扫描连接二维码后,钱包端提示
connecting it may take a few seconds,之后无任何响应,连接流程中断无后续进展
原问题代码
import WalletConnectProvider from '@walletconnect/web3-provider'; import Web3Modal from 'web3modal'; const options = new WalletConnectProvider({ rpc: { 137: 'https://matic-mainnet.chainstacklabs.com', }, infuraId: INFURA_ID, }); const providerOptions = { walletconnect: { package: WalletConnectProvider, // required options: options, }, }; const web3Modal = new Web3Modal({ network: 'mainnet', cacheProvider: true, providerOptions, }); } const provider = await web3Modal.connect();
问题根因
- 配置结构错误:提前实例化了
WalletConnectProvider,将实例对象直接传入walletconnect.options字段,web3modal内部会自动基于传入的package和配置对象初始化provider,传入已实例化的对象会导致内部初始化参数异常。MetaMask等钱包容错性较高可正常兼容,Trust Wallet对参数校验严格,直接导致连接卡住。 - 链配置不匹配:初始化web3modal时指定
network: 'mainnet'(对应以太坊主网chainId=1),但rpc映射中仅配置了Polygon链(chainId=137)的节点地址,未配置默认主网的RPC节点,Trust Wallet校验默认链连通性时无法获取节点响应,导致连接挂起。 - 未显式指定
chainId参数,WalletConnect握手时无法向钱包传递明确的默认链信息,部分钱包会取默认值1,和实际配置的可用链不匹配。
修复方案
调整配置结构,补全缺失的链参数,保证所有链配置一致:
- 移除提前实例化
WalletConnectProvider的逻辑,直接将配置对象传入options字段 - 补全默认连接链对应的RPC配置,显式声明
chainId和network字段匹配 - 测试阶段可临时关闭
cacheProvider,清除本地旧连接缓存避免干扰
修复后可正常运行的代码:
import WalletConnectProvider from '@walletconnect/web3-provider'; import Web3Modal from 'web3modal'; // 直接传配置对象,不要提前实例化WalletConnectProvider const walletConnectOptions = { rpc: { 1: `https://mainnet.infura.io/v3/${INFURA_ID}`, // 补全mainnet对应的RPC节点 137: 'https://matic-mainnet.chainstacklabs.com', }, infuraId: INFURA_ID, chainId: 1, // 显式指定默认链ID,和network配置保持一致 qrcodeModalOptions: { mobileLinks: ['trust', 'metamask', 'wirex'] } }; const providerOptions = { walletconnect: { package: WalletConnectProvider, options: walletConnectOptions, }, }; const web3Modal = new Web3Modal({ network: 'mainnet', cacheProvider: false, // 测试通过后可根据需求改回true providerOptions, }); const provider = await web3Modal.connect();
额外说明
如果业务默认连接Polygon链,只需同步修改三处配置保持一致即可:
- 将web3modal的
network字段改为matic - 将walletConnectOptions的
chainId改为137 - 确认rpc映射中存在137对应的节点地址
内容的提问来源于stack exchange,提问作者Mateen Kiani
相关产品推荐
相关产品推荐

