📌 项目缘起
从一个对 NFT 存储的好奇心开始,我曾先用 IPFS 做了一款小工具,借此熟悉了链上存储的模式。但“看懂 NFT”只是第一步,我更想深挖 dApp 与钱包之间的交互逻辑,于是决定亲手写一款以太坊钱包——取名「海狸」。动手一周后,核心功能已全部跑通,现将关键步骤、踩坑心得与扩展规划一并整理,供后来者快速上手 以太坊钱包开发。
🗂 核心功能清单
- 多账户钱包 创建钱包、导入钱包(私钥、助记词)。
- 余额与行情 实时 ETH 余额、法币汇率自动换算。
- 转账收发 普通转账、签名交易一次搞定。
- walletConnect 协议 已完整对接 V2,并兼容 V1。
👉 想快速看到海狸钱包 Demo?点击下方 GPU 环境可秒级体验全功能。
🔧 技术选型
- 框架层:React-Native —— 一套代码跑 iOS / Android。
- 链交互:Ethers.js —— 轻量、TypeScript 支持完善。
- 二维码 / 深链:React-Native-QR-Code-Scanner、Linking。
- 状态管理:MobX —— 方便监听账户、余额变化。
🚀 功能拆解与开发进度
| 模块 | 状态 | 备注 |
|---|---|---|
| 钱包创建管理 | ✅ | 同时支持 HD 钱包与裸私钥。 |
| 网络切换 | ✅ | 一键转战以太坊主网 / 测试网 / BSC。 |
| 转账 | ✅ | 支持 EIP-1559 手续费调节。 |
| 多语言 | 🔄 | 中/英 已完成,日/韩计划中。 |
| 夜间模式 | 🔄 | 颜色主题跟随系统。 |
| 以太坊 API | ✅ | Infura & Alchemy 双节点备用。 |
| 汇率 API | ✅ | 每 30 秒拉取一次 CoinGecko 数据。 |
| walletConnect V2 Sign | ✅ | 会话建立、签交易、签消息。 |
| walletConnect V2 Auth | ✅ | 可颁发链下身份凭证。 |
| walletConnect V1 兼容 | 🔄 | 通过[Bridge 迁移脚本]已跑通测试网。 |
首页布局
- 钱包账户横向滑动,图标+地址后四位。
- 实时 ETH 价格 + 折算 CNY/USDT。
- 最近 3 笔交易以时间线形式呈现。
添加钱包流程
主界面点击 “钱包列表” → 底部弹出菜单:
- 创建新钱包(自动给出助记词)。
- 导入:私钥、助记词宽匹配,BIP-44 / BIP-32 路径 自动识别。
- 多重加密:使用 SecureStore 存私钥,默认 Android Keystore / iOS Keychain。
转账体验
- 扫描对方收款码自动填充地址。
- 手续费预设 慢 / 标 / 快 三档,也可手动改 GWEI。
- 发送前二次确认:一步签名、一步广播,避免误操作。
卡包管理
- 仅做 ERC-20 资产的资产列表显示。
- 未来可接 ERC-721 / ERC-1155,计划用 OpenSea API。
交易记录
- 每新建账户自动同步历史记录 50 条封顶。
- 点击进入详情页,展示 TxHash、GasUsed、GasPrice、转账备注。
🔐 walletConnect V2 深度实操
如果想让去中心化应用与钱包安全通信,walletConnect V2 是当前最优解,优势在于:
- 无浏览器扩展依赖;
- 一次扫码多端同步;
- 协议内支持链间消息路由,未来 Solana、Cosmos 也能共用一个链接。
接入体验细节
- 钱包端实现
@walletconnect/[email protected],监听session_proposal事件。 - 建立会话后可返回
accounts列表供 dApp 调取;支持多条链共用一个会话。 已覆盖三类授权:
- eth_sendTransaction(标准转账/合约调用);
- personal_sign(消息签名认证登录);
- eth_signTypedData_v4(拍卖挂单、NFT 订单签名)。
👉 如何 10 分钟内跑通 walletConnect demo?点我获取全栈代码与环境说明。
常见错误速查
session not found→ 检查 bridge 地址与项目 ID;missing accounts→ 确认链 ID 已写进namespace.chains;- 苹果审核「In-App Purchase」豁免 → 仅做消息签名,不涉及内购即可过审。
📈 下一步规划
- 插件市场:允许高级用户把代码片段塞进钱包内部运行时(沙盒)。
- NFT 画廊:整合 IPFS 网关预览 + 链上元数据解析。
- DApp 入口:集成 WalletLink + 自定义白名单,缩短「发现 → 交易」路径。
- L2 友好:Arbitrum、Optimism 网络免手动添加 RPC。
🔥 常见问题 (FAQ)
Q1:助记词放本地会不会不安全?
A:助记词加密后存 Keychain,App 卸载数据即消失,物理隔离最安全。若怕被系统备份截走,可关闭云备份开关。Q2:为什么金额和链上浏览器展示差 0.01 USD?
A:汇率每 30 秒更新一次,不同平台取价源差异会导致微幅跳动;可在设置里切换 Binance / CoinGecko / CoinMarketCap 来源。Q3:walletConnect 能连仿盘「测试网」吗?
A:测试链默认写进namespaces,若 dApp 链接仍失败,多半是 [WalletConnect 中继 URL 属地] 被封,换海外节点即可。Q4:以后支持 BTC、Solana 吗?
A:优先深耕 EVM 生态,再扩展到比特币/ Solana,但底层仍会保留「多链抽象层」以方便后续集成。Q5:当年私钥输错次数过多会不会锁定账户?
A:不会;密码层只会做延时抖动验证,默认 5 次重试后每次+1 秒,防止暴力破解。Q6:如何贡献代码?
A:在本机pnpm install完成依赖,运行pnpm android:dev即可本地调试;遵循 commitlint 规范提 PR 即可。