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

Web3钱包:钱包集成与签名验证

Web3钱包钱包集成与签名验证大家好我是欧阳瑞Rich Own。今天想和大家聊聊Web3钱包这个重要话题。作为一个全栈/Web3开发者钱包集成是DApp开发的核心功能。今天就来分享一下钱包集成和签名验证的实战经验。Web3钱包概述常见钱包钱包说明类型MetaMask浏览器插件钱包热钱包WalletConnect跨平台钱包协议协议Coinbase WalletCoinbase官方钱包热钱包Ledger硬件钱包冷钱包核心功能连接钱包 → 获取用户地址 签名交易 → 授权转账 签名消息 → 身份验证 监听事件 → 账户/网络变化MetaMask集成基础连接async function connectWallet() { if (window.ethereum) { try { const accounts await window.ethereum.request({ method: eth_requestAccounts }); return accounts[0]; } catch (error) { console.error(连接失败:, error); throw error; } } else { throw new Error(请安装MetaMask); } }获取账户信息async function getAccountInfo() { const provider new ethers.providers.Web3Provider(window.ethereum); const signer provider.getSigner(); const address await signer.getAddress(); const balance await provider.getBalance(address); const chainId await provider.getNetwork().then(net net.chainId); return { address, balance: ethers.utils.formatEther(balance), chainId }; }监听变化// 监听账户变化 window.ethereum.on(accountsChanged, (accounts) { if (accounts.length 0) { console.log(账户已断开); } else { console.log(账户已切换:, accounts[0]); } }); // 监听网络变化 window.ethereum.on(chainChanged, (chainId) { console.log(网络已切换:, chainId); window.location.reload(); });WalletConnect集成初始化连接import WalletConnect from walletconnect/client; import QRCodeModal from walletconnect/qrcode-modal; const connector new WalletConnect({ bridge: https://bridge.walletconnect.org, qrcodeModal: QRCodeModal }); async function connectWithWalletConnect() { if (!connector.connected) { await connector.createSession(); } connector.on(connect, (error, payload) { if (error) { throw error; } const { accounts, chainId } payload.params[0]; console.log(已连接:, accounts[0]); }); connector.on(disconnect, (error, payload) { console.log(已断开连接); }); }签名验证签名消息async function signMessage(message) { const provider new ethers.providers.Web3Provider(window.ethereum); const signer provider.getSigner(); const signature await signer.signMessage(message); return signature; }验证签名function verifySignature(message, signature, address) { const signer ethers.utils.verifyMessage(message, signature); return signer address; }登录示例async function login() { const nonce generateNonce(); localStorage.setItem(nonce, nonce); const message 欢迎登录\n\nNonce: ${nonce}; const signature await signMessage(message); // 发送到后端验证 const response await fetch(/api/login, { method: POST, body: JSON.stringify({ address: await getAddress(), signature, nonce }) }); return response.json(); }实战案例DApp钱包集成class WalletService { constructor() { this.provider null; this.signer null; this.address null; this.chainId null; } async connect() { if (!window.ethereum) { throw new Error(请安装Web3钱包); } this.provider new ethers.providers.Web3Provider(window.ethereum); const accounts await this.provider.send(eth_requestAccounts, []); this.address accounts[0]; this.signer this.provider.getSigner(); this.chainId await this.provider.getNetwork().then(net net.chainId); this.setupListeners(); return this.address; } setupListeners() { window.ethereum.on(accountsChanged, (accounts) { if (accounts.length 0) { this.address accounts[0]; this.signer this.provider.getSigner(); } }); window.ethereum.on(chainChanged, () { window.location.reload(); }); } async getBalance() { if (!this.provider || !this.address) { throw new Error(请先连接钱包); } const balance await this.provider.getBalance(this.address); return ethers.utils.formatEther(balance); } async sendTransaction(to, amount) { if (!this.signer) { throw new Error(请先连接钱包); } const tx await this.signer.sendTransaction({ to, value: ethers.utils.parseEther(amount) }); return tx.hash; } } // 使用 const wallet new WalletService(); await wallet.connect(); console.log(地址:, wallet.address); console.log(余额:, await wallet.getBalance());最佳实践1. 多钱包支持// 支持多种钱包 const wallets { metamask: connectMetaMask, walletconnect: connectWalletConnect, coinbase: connectCoinbase };2. 错误处理try { await connectWallet(); } catch (error) { if (error.code 4001) { // 用户拒绝连接 console.log(用户拒绝连接); } else { console.error(连接失败:, error); } }总结Web3钱包集成是DApp开发的基础。通过正确的钱包连接、签名验证和事件监听可以提供良好的用户体验。我的鬃狮蜥Hash对钱包也有自己的理解——它总是安全地保护自己的领地这也许就是自然界的钱包吧如果你对Web3钱包集成有任何问题欢迎留言交流我是欧阳瑞极客之路永无止境技术栈Web3钱包 · MetaMask · WalletConnect
http://www.zskr.cn/news/1374757.html

相关文章:

  • 图像数据质量自动化评估与清洗:从CleanVision到自适应阈值实战
  • Android高版本HTTPS抓包终极方案:Magisk+MoveCert证书迁移
  • 渗透测试信息收集四层穿透模型与实战流水线
  • JWT认证深度解析:从签名原理到密钥轮换与灰度升级
  • Outlook与Gmail OAuth 2.0 Proxy 实现原理与工程实践
  • DVWA High文件上传漏洞深度解析与四重绕过实战
  • 元学习驱动AutoML动态搜索空间优化:效率与性能双提升
  • OpenAI RLHF的理解
  • 机器人异常检测实战:基于系统日志的LR、SVM与自编码器模型对比
  • 在Ubuntu 14.04上为老旧系统(如XP)搭建现代Web服务栈:Apache 2.4.59 + OpenSSL 1.1.1w + PHP 8.3.6 保姆级配置指南
  • 在Ubuntu 22.04上,用SSH和HTTPS两种方式搞定OpenHarmony 4.1 Release源码下载(附工具链配置)
  • 机器学习势能面验证:从静态点收敛性到全局拓扑评估
  • Gemini Omni Flash 完整指南:Google AI 视频生成器深度解析
  • 机器学习检测Chrome恶意扩展:概念漂移挑战与开放世界评估
  • 告别SSH连接玄学!用Finalshell管理多台Linux服务器时,如何一劳永逸搞定IP变动?
  • VMware17装CentOS踩过的那些坑:从镜像选择、密码设置到登录失败的完整避雷指南
  • 卷积神经网络在天文图像中自动搜寻双活动星系核的工程实践
  • Java中的接口
  • Rust Web框架对比:Axum、Rocket、Warp深度解析
  • YOLO26涨点改进| TIP 2025 |独家创新首发、特征融合改进篇|引入DFAM双特征聚合模块,通过局部纹理先验强化边缘、轮廓信息,助力小目标检测、RGB-D目标检测、多模态融合目标检测有效涨点
  • opencode 子代理配置
  • 国际半导体博览会汇总,适合企业出海参展的展会清单 - 品牌2025
  • AODV协议智能增强:多模型机器学习提升蓝牙Mesh网络路由可靠性
  • Java NIO.2 并发守卫:AcceptPendingException 源码深度剖析与异步状态机契约
  • PID算法从入门到进门
  • Java NIO 状态守卫:AlreadyBoundException 源码深度剖析与网络通道绑定契约
  • 未来趋势洞察:后端开发技术的前沿动态与发展方向
  • CentOS 7无线网络配置避坑指南:wpa_supplicant vs NetworkManager,我该选哪个?
  • 开源HARNode系统:高精度多设备可穿戴人体活动识别方案
  • 安卓So层Hook实战:ARM64函数定位与参数还原五步法