当前位置: 首页 > news >正文

小狐狸JSON-RPC:钱包连接,断开连接,监听地址改变

detect-metamask
创建连接,并监听钱包切换

一、连接钱包,切换地址(监听地址切换),断开连接

  1. 使用npm安装 @metamask/detect-provider在您的项目目录中:
npm i @metamask/detect-provider
import detectEthereumProvider from "@metamask/detect-provider";
async onLoad() {if (typeof window.ethereum !== "undefined") {console.log("MetaMask 已安装!");}this.provider = await detectEthereumProvider();this.provider.request({method: "eth_accounts"}).then(this.handleAccountsChanged).catch((err) => {console.error(err);});this.provider.on("accountsChanged", this.handleAccountsChanged);
},
methods: {// 这个方法,只在钱包APP内可以监听到地址切换,浏览器不行。handleAccountsChanged(accounts) {console.log('监听', accounts);if (accounts.length === 0) {console.log("请连接到MetaMask");} else if (accounts[0] !== this.address) {console.log('地址发生更换', this.address);this.address = accounts[0];}},// 连接钱包async getAccount() {// 1.向用户请求连接钱包,弹出钱包选择账户let res = await window.ethereum.request({"method": "wallet_requestPermissions","params": [{"eth_accounts": {}}]}).catch((err) => {// User rejected the request. (用户拒绝了请求。)console.log(err.message);});if(res){// 2.选择地址并确认let accounts = await this.provider.request({method: "eth_requestAccounts"}).catch((err) => {if (err.code === 4001) {console.log("请连接到MetaMask.");} else {console.error(err);}});this.address = accounts[0]; // 当前钱包地址}},// 关闭连接,仅适用于浏览器扩展。async closeAccount() {var res = await window.ethereum.request({"method": "wallet_revokePermissions","params": [{"eth_accounts": {}}]});this.address = ''console.log('连接已断开', res);},
}

实现的效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • es6的核心语法
  • OpenGL的MVP矩阵理解
  • 专业130+总分410+西南交通大学924信号与系统考研经验西南交大电子信息通信工程,真题,大纲,参考书。
  • 【概率基础】从概率角度去解释回归和分类的主要区别是什么?
  • 文本文件操作
  • 设计模式 —— 设计原则
  • 前端-包管理器
  • MR混合现实情景实训教学系统在军事演练课堂中的教学应用
  • Python+Django+Yolov5路面墙体桥梁裂缝特征检测识别html网页前后端
  • Java设计模式—备忘录模式(快照模式)
  • 【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】
  • 探索SOCKS5代理、代理IP、HTTP与网络安全
  • C++:sizeof关键字(7)
  • 【论文阅读】ELA: Efficient Local Attention for Deep Convolutional Neural Networks
  • Linux基础篇:解析Linux命令执行的基本原理
  • 【译】JS基础算法脚本:字符串结尾
  • es6
  • JavaScript创建对象的四种方式
  • JavaScript服务器推送技术之 WebSocket
  • java正则表式的使用
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PV统计优化设计
  • Python3爬取英雄联盟英雄皮肤大图
  • Python十分钟制作属于你自己的个性logo
  • Redis字符串类型内部编码剖析
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 当SetTimeout遇到了字符串
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端相关框架总和
  • 悄悄地说一个bug
  • 跳前端坑前,先看看这个!!
  • 正则表达式-基础知识Review
  • #pragma multi_compile #pragma shader_feature
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (排序详解之 堆排序)
  • (转)linux下的时间函数使用
  • (转)shell中括号的特殊用法 linux if多条件判断
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .CSS-hover 的解释
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET上SQLite的连接
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @ModelAttribute注解使用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ C++ ] STL_list 使用及其模拟实现
  • [100天算法】-二叉树剪枝(day 48)
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [AIGC 大数据基础]hive浅谈
  • [C++]C++基础知识概述
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [FC][常见Mapper IRQ研究]
  • [hdu 3065] 病毒侵袭持续中 [AC自动机] [病毒特征码匹配]
  • [lesson17]对象的构造(上)