IOS端Trust Wallet调用sendTransaction时WalletConnect会话断开报错
问题背景
在iOS端使用Wagmi SDK的WalletConnect连接器连接Trust Wallet移动端时,可成功完成链配置、读取钱包地址,但调用useSendTransaction钩子执行sendTransaction方法时,弹窗后出现错误提示:WalletConnect session disconnected. Go back to your browser and connect via WalletConnect again。该功能在MetaMask及其他移动端钱包可正常触发签名弹窗,仅Trust Wallet出现此问题。
排查方向
检查WalletConnect版本兼容性
确认Wagmi、RainbowKit依赖的WalletConnect版本是否与Trust Wallet iOS端兼容。Trust Wallet对WalletConnect v2的部分特性支持可能存在差异,可尝试锁定依赖包中的@walletconnect/*系列包为稳定版,避免自动升级到最新版带来的兼容性问题。验证交易参数的链一致性
确保调用sendTransaction时使用的链ID与当前连接的Trust Wallet链ID完全匹配。通过useChainId()钩子获取当前链ID,显式在交易参数中指定chainId:sendTransaction({ to: "0xd2135CfB216b74109775236E36d4b433F1DF507B", value: ethers.utils.parseEther("0.0001"), chainId: chainId // 传入当前连接的链ID });Trust Wallet对跨链交易的校验可能更严格,未指定链ID或链ID不匹配会直接断开会话。
调整autoConnect配置
当前createConfig开启了autoConnect: true,在iOS端Trust Wallet场景下,自动重连可能与交易请求产生冲突。尝试将autoConnect设为false,手动控制连接流程,避免会话状态异常:const wagmiConfig = createConfig({ autoConnect: false, connectors, publicClient, });完善metadata中的URL配置
当前metadata中的url字段为"https://",Trust Wallet可能会校验DApp的URL合法性,需填写真实的DApp域名(比如"https://your-dapp-domain.com"),空值或无效域名可能导致会话在交易阶段被终止。延迟触发交易请求
在isConnected状态变更后立即触发交易,可能Trust Wallet的会话还未完全初始化完成。尝试添加延迟,确保会话稳定后再发起交易:useEffect(() => { if (isConnected) { setTimeout(() => { sendTransaction({ to: "0xd2135CfB216b74109775236E36d4b433F1DF507B", value: ethers.utils.parseEther("0.0001"), }); }, 1000); // 延迟1秒触发 } }, [isConnected]);排查Trust Wallet端设置与版本
检查Trust Wallet iOS端的WalletConnect权限设置,确认是否开启了会话持久化、允许交易请求;同时将Trust Wallet更新到最新版本,旧版本可能存在已知的会话断开bug。
内容的提问来源于stack exchange,提问作者Ólú Álófe-bì-àsà

