【钱包】WEB3钱包APP框架的设计

发布于:2025-06-24 ⋅ 阅读:(20) ⋅ 点赞:(0)

【钱包】WEB3钱包APP框架的设计


一、前言

前段时间,自己做了一款WEB3钱包APP,从产品设计到框架搭建都是我一个人搞的,更多的参考了其他公司的钱包APP。

在此,想把自己的钱包经验分享出来,帮助没有做过钱包APP的同学开阔自己的思路

还有一些需要非常注意的安全方面的经验


二、整体架构图

整体架构图


三、功能模块详解

这里我会主要讲解重要模块,一个UI和基础配置常量等等,我都不会说了。
状态管理和路由我是通过GetX进行处理的。

👉🏻 助记词与钱包管理模块 (WalletManager

  1. 创建新助记词
  2. 导入助记词(校验合法性)
  3. 给每组助记词一个唯一 ID
  4. 助记词不明文存储,使用 EncryptedSharedPreferences(Android)或 Keychain(iOS)
  5. 删除钱包
  6. 修改钱包的基本信息
  7. 当前选择的钱包
  8. 钱包列表更新管理

👉🏻 子账号(子路径账户)管理 (AccountManager

  1. 每个助记词可以生成多个子账号
  2. 支持标记“主账号”、重命名、删除
  3. 每个账号维护其地址、公钥、余额等数据
  4. 删除账号
  5. 修改账号的基本信息
  6. 当前选择的账号
  7. 账号列表更新管理
  8. 添加一个或者多个账号

👉🏻 存储模块(本地)

  1. 数据库加密存储封装(DBManager
  2. 关键KEY和秘钥的存储(LocalDataStore
  3. 加密KEY管理(SecureStorage
    • 单个设备生成不同的KEY
    • 使用EncryptedSharedPreferences(Android)或 Keychain(iOS)

特别说明:
这里需要存储的是KEY,最好不同的手机生成不同的KEY,然后使用EncryptedSharedPreferences(Android)或
Keychain(iOS)存储,相关的逻辑可以看《【WEB3】钱包助记词在APP中的加密存储》


至于数据库表,会有wallets钱包表、accounts 表(每个钱包多个账户)、transactions
表(每个账号多条交易记录)、账户余额表、币种列表、汇率表等等。

👉🏻 网络模块(链上与服务器)

  1. 区块链网络模块(BlockchainProvider
    • ETH: web3dart
    • TRON: grpc/http
    • BTC: json-rpc
    • 方便后续支持更多链
  2. 业务网络框架API的封装(WalletApi
    • 常用请求方式的封装(POST、GET等等)
    • 统一错误信息
    • 请求加密解密逻辑
  3. 请求加密解密逻辑

👉🏻 转账与交易模块(TransactionManager

  1. 构造交易
  2. 签名交易(使用私钥)
  3. 广播交易
  4. 查询交易历史(接口聚合服务可选)

特别说明: 这里查询查询交易历史,我采用的是服务端的聚合接口,这样方便管理。

👉🏻 链路工具(BlockChainUtils

  1. 生成支持的网络模型(ethereumbinanceSmartChaintron等等)
  2. 生成助记词
  3. 通过助记词获取种子seed

特别说明: APP支持哪些链路是开发的时候就订好了,这里面要考虑好后续的扩展,比如新增其他的网络了。

👉🏻 APP信息管理(WalletAppInfo

  1. APP的主题模式(night/light)
  2. 选择的语言lang
  3. APP的千分位和小数点分隔符
  4. 计价信息
  5. 设备信息
  6. 等等…

👉🏻 UI 层模块

  1. 创建、导入(分步流程)
  2. 多钱包管理(创建、添加、删除…)
  3. 多账号管理(创建、添加、删除…)
  4. 生物安全
  5. 其他功能界面
  6. 等等…

👉🏻 UI组件轮子

  1. 通用按钮、复选框、开关
  2. 通用输入框
  3. 通用弹窗
  4. 通用toast
  5. 等等…

👉🏻 常量(Common

  1. 通用枚举类型
  2. 通用模型
  3. 通用配置
  4. 等等…

👉🏻 扩展(Extension

  1. 其他钱包的二维码字符串转换
  2. 颜色扩展
  3. BuildContext扩展
  4. Decimal扩展
  5. String扩展
  6. 等等…

👉🏻 路由管理(Routers

  1. 路由注入
  2. 路由管理
  3. 特殊页面处理

四、安全策略总结

👉🏻 应用启动锁(App Lock)

  • 启动时强制验证 PIN 或生物识别(Touch ID / Face ID)
  • 每次进入前台(AppLifecycleState.resumed)也强制验证
  • 设置自动锁屏时间(如:1分钟、5分钟后未操作自动上锁)

👉🏻 密码派生加密密钥

  • 使用 PBKDF2 + 盐值(salt)从用户 PIN 派生 AES 加密密钥
  • 不直接使用密码作为加密 key
  • 每台设备用独立 salt 存储,提升抗暴力破解能力

👉🏻 防截图、防录屏

  • 防止敏感数据被截取

👉🏻 助记词/私钥防泄漏机制

  • 永不在内存中长期保存助记词或私钥
  • 使用完立即清除(可以重写 Dart 对象、加上 final + secure wipe)
  • 不写入日志,不输出到 UI 除非显式“显示助记词”

👉🏻 Clipboard 助记词拦截与清除:

  • 如果用户复制助记词或私钥, 可以显示安全提示:“30秒后将自动清除剪贴板”和自动定时清除内容
  • 检测剪贴板是否正在暴露敏感数据

👉🏻 交易二次确认与签名验证

  • 所有交易必须通过 PIN 或生物认证后才可签名
  • 签名前展示交易摘要(to、amount、gas等)并要求用户确认

👉🏻 安全存储机制

类型 建议存储方式
助记词 flutter_secure_storage + AES 二次加密
私钥 AES 加密 + sqlite_sqlcipher
PIN 仅存储 PBKDF2 哈希,不存明文
Biometric 不存用户指纹,仅用于验证通过与否

👉🏻 用户操作日志审计(本地):

  • 不可篡改地记录关键操作(如创建钱包、导出助记词、发送交易)
  • 可用于后续“钱包安全中心”功能,提醒异常行为

五、后续拓展

  1. 支持硬件钱包(Ledger/Trezor)
  2. 支持 dApp 浏览器与 WalletConnect
  3. 资产价格聚合与行情图
  4. NFT 展示
  5. Uniswap

六、关于作者(ZFJ_张福杰)



网站公告

今日签到

点亮在社区的每一天
去签到