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

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();

问题根因

  1. 配置结构错误:提前实例化了WalletConnectProvider,将实例对象直接传入walletconnect.options字段,web3modal内部会自动基于传入的package和配置对象初始化provider,传入已实例化的对象会导致内部初始化参数异常。MetaMask等钱包容错性较高可正常兼容,Trust Wallet对参数校验严格,直接导致连接卡住。
  2. 链配置不匹配:初始化web3modal时指定network: 'mainnet'(对应以太坊主网chainId=1),但rpc映射中仅配置了Polygon链(chainId=137)的节点地址,未配置默认主网的RPC节点,Trust Wallet校验默认链连通性时无法获取节点响应,导致连接挂起。
  3. 未显式指定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:06:25