接入wallet connect

案例demo  

核心库如下

@wagmi/core:用于在 Web 应用中与以太坊及其他 EVM(以太坊虚拟机)兼容的区块链(如 Polygon, Arbitrum, Optimism, BNB Smart Chain 等)进行交互  

// 导入 Web3Modal 库的 HTML 版本,这是一个框架无关的预构建UI模态框
// 用于显示钱包连接界面,让用户可以选择和连接他们的加密货币钱包
import { Web3Modal } from "@web3modal/html";

// 从 @wagmi/core 库导入核心功能函数
import {
  configureChains,   // 配置应用支持的区块链网络和RPC提供商
  createConfig,      // 创建wagmi的客户端配置对象(包含链、连接器、提供商等)
  watchNetwork,      // 监听函数:当用户切换区块链网络时触发回调
  watchAccount,      // 监听函数:当用户切换钱包账户或连接状态变化时触发回调
} from "@wagmi/core";

// 从预定义的链列表中导入特定的区块链网络配置对象
// 这些对象包含网络的标准信息:链ID、名称、货币符号、RPC URL、区块浏览器等
import { mainnet, polygon } from "@wagmi/core/chains"; 
// mainnet: Ethereum 主网 (链ID: 1)
// polygon: Polygon PoS 主网 (链ID: 137)

基于 WalletConnect Cloud创建的,官网Dashboard | Reown  

一直有个报错,暂未解决  

写了个公共hooks,方便后续引用  

 "@wagmi/core": "^1.3.9",
 "@web3modal/ethereum": "^2.7.1",
 "@web3modal/html": "^2.7.1"
import { EthereumClient, w3mConnectors, w3mProvider } from '@web3modal/ethereum'
import { Web3Modal } from '@web3modal/html'
import {
  configureChains,
  createConfig,
  watchNetwork,
  watchAccount,
} from '@wagmi/core'
import { mainnet, polygon } from '@wagmi/core/chains'
import { ref, onMounted } from 'vue'

export function useWallet(
  callback: Function,
  id: string = 'ebaed7e2736beb0b53fad92933e247e4',
) {
  const chains = [mainnet, polygon]
  const projectId = id
  const { publicClient } = configureChains(chains, [w3mProvider({ projectId })])
  const wagmiConfig = createConfig({
    autoConnect: true,
    connectors: w3mConnectors({ projectId, chains }),
    publicClient,
  })
  const ethereumClient = new EthereumClient(wagmiConfig, chains)
  const web3modal = new Web3Modal({ projectId }, ethereumClient as any)

  const accountAddress = ref('')
  const isConnected = ref(false)
  async function connect() {
    await web3modal.openModal()
    console.log('web3modal: opened')
  }

  onMounted(() => {
    watchAccount((account: any) => {
      console.log('web3modal: account', account)
      accountAddress.value = account.address
      isConnected.value = account.isConnected
      callback?.()
    })
  })
  async function disconnect() {
    // do not use this method in production
    await ethereumClient.disconnect()
    console.log('web3modal: disconnected')
  }

  function getName(networkId: number) {
    switch (networkId) {
      case 1:
        return 'Mainnet'
      case 3:
        return 'Ropsten'
      case 4:
        return 'Rinkeby'
      case 5:
        return 'Goerli'
      case 42:
        return 'Kovan'
      case 137:
        return 'Polygon'
      case 80001:
        return 'Mumbai'
      case 1101:
        return 'zkEVM'
      default:
        return 'Unknown Chain'
    }
  }

  return {
    accountAddress,
    isConnected,
    connect,
    disconnect,
    getName,
    watchNetwork,
    watchAccount,
  }
}

实现以上效果  

vue/vue-wagmi

基本上和要求一模一样了。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值