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

求助:如何通过Alchemy RPC Provider实现Polygon dApp与Wallet Connect对接?

实现Wallet Connect与Alchemy Provider对接(Polygon链+ethers)

我们当前通过ethers库将dApp连接至Metamask,在Polygon主网进行交易操作,现需新增WalletConnect连接支持,但尝试以下两种方案均未成功:

方案一:使用@walletconnect/web3-provider

import WalletConnectProvider from "@walletconnect/web3-provider";

const provider = await new WalletConnectProvider({
  rpc: {
    137: 'https://polygon-mainnet.g.alchemy.com/v2/<OUR_ALCHEMY_RPC_PRIVATE_KEY>'
  },
  chainId: 137
});

await provider.enable();
const eProvider = await new ethers.providers.Web3Provider(provider)

问题:扫码后provider.enable()无返回、无报错,连接无法建立。

方案二:使用@maticnetwork/walletconnect-provider

const WalletConnectProviderPolygon = require('@maticnetwork/walletconnect-provider')

const wcProvider = new WalletConnectProviderPolygon({
  host: 'https://polygon-mainnet.g.alchemy.com/v2/<OUR_ALCHEMY_RPC_PRIVATE_KEY>',
  callbacks: {
    onConnect: (res: any) => {
      console.log('onConnect', res)
    },
    onDisconnect: (res: any) => {
      console.log('onDisconnect', res)
    }
  }
})
// await alchemyProvider.createWebconnector()
const eProvider = new ethers.providers.Web3Provider(wcProvider, 137)

问题:未显示连接弹窗;取消注释await alchemyProvider.createWebconnector()后,弹窗变形且无桌面选项,扫码后仍无法完成连接。


正确实现方案

1. 依赖安装

确保安装兼容版本的依赖:

npm install @walletconnect/web3-provider@1.8.0 ethers@5.7.2

(注:WalletConnect v2.x API与v1.x差异较大,此处采用稳定的v1.x版本适配ethers v5)

2. 完整代码实现

import WalletConnectProvider from "@walletconnect/web3-provider";
import { ethers } from "ethers";

async function connectWithWalletConnect() {
  try {
    // 初始化WalletConnect Provider
    const provider = new WalletConnectProvider({
      rpc: {
        137: "https://polygon-mainnet.g.alchemy.com/v2/<OUR_ALCHEMY_RPC_PRIVATE_KEY>",
      },
      chainId: 137, // Polygon主网链ID
      qrcodeModalOptions: {
        mobileLinks: ["rainbow", "metamask", "trust"], // 指定支持的移动端钱包
      },
    });

    // 监听连接事件
    provider.on("connect", (info) => {
      console.log("WalletConnect连接成功", info);
    });

    // 监听断开事件
    provider.on("disconnect", (error) => {
      console.log("WalletConnect连接断开", error);
    });

    // 触发连接弹窗
    await provider.enable();

    // 包装为ethers Provider
    const ethersProvider = new ethers.providers.Web3Provider(provider);
    const signer = ethersProvider.getSigner();

    // 验证连接:获取当前账户地址
    const address = await signer.getAddress();
    console.log("当前连接账户:", address);

    return { ethersProvider, signer };
  } catch (error) {
    console.error("WalletConnect连接失败:", error);
    throw error;
  }
}

关键修复点

  • 错误捕获:添加try/catch捕获provider.enable()可能抛出的异常(比如用户取消扫码)
  • 事件监听:通过connect/disconnect事件监控连接状态,避免因无返回值导致的阻塞感知问题
  • 版本兼容:使用WalletConnect v1.x与ethers v5配套,v2.x需使用@walletconnect/sign-client等新API,适配逻辑不同
  • 弹窗配置:通过qrcodeModalOptions显式指定移动端钱包,确保弹窗正常渲染

注意事项

  • 替换<OUR_ALCHEMY_RPC_PRIVATE_KEY>为你的Alchemy API密钥
  • 若需支持WalletConnect v2,需重构代码使用其新的SDK
  • 测试时确保前端环境允许弹窗弹出(浏览器弹窗权限需开启)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:18:08