【web3】

复制代码
检测钱包是否安装

方法一

javascript 复制代码
// npm install @metamask/detect-provider
import detectEthereumProvider from '@metamask/detect-provider'

// 检测钱包是否安装
const isProvider = await detectEthereumProvider()
if(!isProvider) {
    proxy.$modal.msgError("请安装钱包");
    return
}

方法二

javascript 复制代码
async function detectWallet() {
  try {
    // 检查浏览器是否支持以太坊钱包,如果没有检测到window.ethereum,意味着没有钱包扩展被安装
    if(typeof window.ethereum == "undefined") {
      proxy.$modal.msgError("请安装钱包");
      return
    }
    const isProvider = window.ethereum
    // 检测安装的钱包
    if(isProvider.isMetaMask) {
      console.log("MetaMask 钱包");
    }
    if (isProvider.isTokenPocket) {
      console.log("TokenPocket 钱包");
    } else {
      console.log("其他以太坊兼容钱包");
    }
  } catch (e) {
    console.log(e)
  }
}

window.ethereum 是浏览器中的以太坊提供者对象,它提供了与区块链交互的功能(例如发送交易,查询余额等)。

注意事项

安装 TP 钱包时,isProvider.isMetaMask 返回也是true,因为 window.ethereum 对象的 isMetaMask 属性并非专门区分不同钱包提供者的标识。很多以太坊兼容钱包会模仿 MetaMask 的行为,在 window.ethereum对象上设置类似的表示,以便兼容现有的 Web3 代码库,因此 isMetaMask 属性不能准确反映当前的钱包类型。

如果想解决这个问题,可以尝试检查其它钱包特定标识符(如 isTokenPocket),或者使用更复杂的逻辑来区分不同的以太坊兼容钱包。

或者通过 ethereum.chainId 区分钱包:window.ethereum.chainId 来查看当前连接的链 ID,然后根据链 ID 推测可能的提供者。

相关推荐
磐链科技4 天前
交易所开发核心:钱包提现引擎的设计——从风控拦截、多级审批到自动广播上链
web3·区块链
磐链科技5 天前
Web3钱包开发中的交易风控体系:模拟执行、沙盒隔离与授权拦截
web3·区块链
磐链科技7 天前
Web3钱包开发扩展比特币生态:BRC20与Runes协议的集成实践
web3
磐链科技8 天前
Web3钱包安全架构设计:抵御攻击与防护策略
安全·web3·安全架构
mykj155111 天前
Web3开发系统不是炒币,是互联网的“对账本”逻辑
web3·区块链·rwa·钱包区块链系统开发
磐链科技15 天前
轻量级与模块化:面向移动端的Web3钱包开发框架选型与技术精简策略
web3
人民新视野15 天前
LV纪元:褪去行业浮躁情绪,以真知锚定Web3长期价值
web3
Web3_Daisy19 天前
从流动性到执行:如何降低 MEV 对 Web3 市场
大数据·人工智能·web3·区块链
2601_9657984719 天前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress
Web3李李21 天前
Web3项目拆分模式:项目方核心诉求与实战逻辑
web3·区块链·软件开发·dapp·dapp拆分模式·案例msa