如何配置WalletConnect使其仅连接币安智能链BSC
WalletConnect 仅支持BSC网络配置方案
1.x版本的@walletconnect/web3-provider默认将初始连接链设置为以太坊主网(链ID 1),仅配置rpc字段的链ID与节点映射不会自动修改默认连接链,这是Trust钱包连接时显示以太坊主网的核心原因。
修正后的完整配置
1. 初始化Provider时补全链约束参数
核心是显式指定默认链ID,同时声明支持的链范围,代码如下:
function getProvider() { const provider = new WalletConnectProvider.default({ rpc: { 56: "https://bsc-dataseed.binance.org", // 可配置多个备用BSC RPC节点避免单节点故障 }, chainId: 56, // 核心配置:显式指定默认连接链为BSC network: "binance", // 明确指定网络标识,避免钱包识别偏差 supportedChainIds: [56], // 声明仅支持BSC链,从协议层限制可选链 bridge: "https://bridge.walletconnect.org" // 手动指定v1桥接地址,避免默认桥接解析异常 }); return provider; }
2. 增加连接后的链校验与切换逻辑
部分老版本钱包可能不会自动读取配置的默认链,需要在连接成功后主动校验链ID,非BSC时触发钱包切换/添加网络逻辑:
async function initConnect() { const provider = getProvider(); try { // 触发钱包连接 await provider.enable(); // 查询当前钱包选中的链ID const currentChainHex = await provider.request({ method: "eth_chainId" }); const currentChainId = parseInt(currentChainHex, 16); if (currentChainId !== 56) { try { // 请求钱包切换到BSC await provider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: "0x38" }] // BSC主网链ID十六进制值 }); } catch (switchErr) { // 错误码4902代表钱包未添加BSC网络,触发添加网络逻辑 if (switchErr.code === 4902) { await provider.request({ method: "wallet_addEthereumChain", params: [{ chainId: "0x38", chainName: "BNB Smart Chain Mainnet", nativeCurrency: { name: "BNB", symbol: "BNB", decimals: 18 }, rpcUrls: ["https://bsc-dataseed.binance.org"], blockExplorerUrls: ["https://bscscan.com"] }] }); } throw switchErr; } } // 后续业务逻辑(签名、合约调用等)写在这里 } catch (err) { console.error("钱包连接失败:", err); } }
补充说明:WalletConnect v1版本官方已停止运维,若后续出现桥接失败、连接超时等无解决方案的问题,建议升级到WalletConnect v2版本,v2版本对多链的约束逻辑更严谨,不会出现默认 fallback 到以太坊的问题。
内容的提问来源于stack exchange,提问作者resilientEther
相关产品推荐
相关产品推荐

