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

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


一、前言

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

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

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


二、整体架构图

【钱包】WEB3钱包APP框架的设计_第1张图片


三、功能模块详解

这里我会主要讲解重要模块,一个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_张福杰)

  • 官网:https://zfjsafe.com
  • 博客:https://zfj1128.blog.csdn.net
  • Github:https://github.com/zfjsyqk
  • Gitee:https://gitee.com/zfj1128
  • 打赏:https://zfjsafe.com/paycode

你可能感兴趣的:(区块链,web3,钱包,区块链)