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

【钱包】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_张福杰)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88823.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGL学习(基本窗口)

学习路线 学习 OpenGL 需要掌握一系列基础知识和技能,这些内容涵盖了计算机图形学的基本概念、编程语言、数学知识以及 OpenGL 的具体 API 使用。以下是学习 OpenGL 所需的主要知识点: 1. 计算机图形学基础 图形学概念:了解图形学的基本概…

无人机防护装置技术解析

一、技术要点 1. 侦测防御系统 多频谱复合探测 整合无线电侦测(20MHz–6GHz频段扫描)、雷达探测、光电跟踪(可见光/红外/激光)技术,实现360无死角监测。例如神州明达系统可5公里内识别无人机信号,并同步…

2.2.2、CAN总线-测试模式、工作模式

目录 1、测试模式 2、工作模式 (1) (2)SLEEP位: (3)INRQ位:(Init Request) (4)ACK:应答 (5)…

区块链大讲堂 | 分布式隐私计算友好的零知识证明协议

区块链大讲堂 主讲人:上海交通大学计算机学院助理教授胡云聪 报告题目:分布式隐私计算友好的零知识证明协议 参与方式:扫描海报二维码报名参与活动

MyBatis映射文件(XML)中参数传递和SQL特殊字符处理

1. 参数占位符 1.1 #{} 和 ${} 的区别 #{} 占位符 作用:安全传参。MyBatis在执行SQL时,会把#{}替换成?,然后用参数值自动填充。 优点:可以防止SQL注入,推荐使用。 例子: select * from user wher…

C语言 数据结构 --排序 (直接插入排序,选择排序,交换排序......)

引言:本章简洁的讲解一下数据结构中的几个常见的排序 ,作复习之用,后面可能会补一些其他的排序 。并给出一些小编学习中遇到的坑,作借鉴。 1.直接插入排序 直接插入排序是一种简单直观的排序算法,其基本思想是将一个数…

华为云发布盘古大模型 5.5 新一代昇腾 AI 云服务上线

2025 年 6 月 20 日,华为开发者大会 2025(HDC 2025)在东莞召开。华为常务董事、云计算 CEO 张平安宣布基于 CloudMatrix 384 超节点的新一代昇腾 AI 云服务全面上线,并发布盘古大模型 5.5,五大基础模型实现技术突破&am…

Reactor Handle

handle 是 Reactor 中一个非常灵活的操作符,它允许你对每个源元素进行处理,并可以选择性地发出零个或多个元素。它既可以用于映射(map)也可以用于过滤(filter),因此可以看作是 map 和 filter 的…

C#哈希加密:原理、实现与应用

C#哈希加密:原理、实现与应用 在当今数字化时代,数据安全是每个应用程序都必须重视的问题。哈希加密作为一种重要的加密技术,在密码存储、数据完整性验证、数字签名等领域发挥着关键作用。本文将深入探讨C#中哈希加密的原理、常用算法以及实…

httpbin.org是什么,有什么作用

httpbin.org 是一个开源的 HTTP 请求与响应测试服务,基于 Python 的 Flask 框架开发 它允许开发者发送各种 HTTP 请求,并返回请求的详细信息,便于调试和验证 HTTP 客户端的行为。以下是其核心功能和作用详解: 一、核心功能与作用…

mongodb生产备份工具PBM

如果你的 MongoDB 数据量特别大(例如几十 GB、TB 级别),普通的 mongodump/mongorestore 会显得缓慢且资源消耗大,不适合生产级别大数据集。下面是当前 MongoDB 社区和企业广泛使用的几种备份方案对比和推荐: 工具是否…

【LeetCode#第167题】两数之和Ⅱ

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers…

Python(一)实现一个爬取微信小程序数据的爬虫+工程化初步实践

文章目录 前言用Charles 抓包 iOS 微信小程序在Mac端和iOS端安装Charles 自签名证书Mac端iOS端 能抓到Safari浏览器的包但是抓不到微信小程序的包直接在iOS 上抓包的App如何抓取Android 7.0 以上/Harmony OS微信小程序包 Python 项目工程化pip 切换为国内镜像源工程化参考脚手架…

uview ui request get / post 传参含params和json数据的分析和使用

背景。单独写了controller方法去配合移动端的接口调用。但有的接口与pc端类似。于是进行了复用。但接口得复制不是。 uview js request 文档 注意迪三个参数是header 后端接口GET方法 调用代码截图 浏览器调试 总结。 复制之前的api接口。为了方便复用底层实现。接口类型…

用 pnpm + TurboRepo,构建多项目高效开发体系

在现代前端项目日益复杂的今天&#xff0c;我们越来越多地面对一个场景&#xff1a;多个项目共享逻辑、组件和依赖&#xff0c;而维护和构建效率却在不断拉垮。这种情况下&#xff0c;传统项目结构的痛点就显现无遗。 从我亲身实践来看&#xff0c;选择 pnpm TurboRepo 构建 …

Pytest 使用命令行参数执行指定环境的脚本—— Python 实践

&#x1f9fe; 一、项目背景 在自动化测试中&#xff0c;我们经常需要根据不同的运行环境&#xff08;如测试环境和生产环境&#xff09;来执行测试脚本。本文将详细介绍如何通过命令行参数来指定运行环境&#xff0c;并使用 Python 和 pytest 框架实现这一功能。 &#x1f6e…

利用可控验证码位数实现拒绝服务攻击(DoS)风险与线程模型分析

一、背景介绍&#xff1a;验证码接口中的潜在 DoS 漏洞 在渗透测试过程中&#xff0c;常见验证码接口支持传入“验证码位数”参数&#xff0c;表面看是业务可配置&#xff0c;实则若未做上限控制&#xff0c;极易成为资源消耗型 DoS 攻击入口。 &#x1f9ea; 测试场景&#…

Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护

Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护 在微服务架构中&#xff0c;服务之间的调用往往依赖 Feign&#xff0c;而服务调用的稳定性又至关重要。本文将介绍如何将 Feign 与 Sentinel 结合使用&#xff0c;实现服务的容错保护&#xff08;如降级与熔断&#…

宠物医院系统的设计与实现(springBoot版)

一、开题报告 一、本选题研究的意义和背景&#xff08;理论与现实意义&#xff09;&#xff1a; 背景&#xff1a;随着人们生活水平的提高&#xff0c;宠物饲养愈发普遍&#xff0c;宠物医院的需求也日益增长。挂号方式主要依赖现场挂号&#xff0c;导致宠物主人需要长时间排队…

SOCKSv5 协议通信的完整阶段与报文格式详解

SOCKSv5 协议的通信通常分为以下几个主要阶段&#xff1a; 方法协商阶段 (Method Negotiation)方法依赖的子协商阶段 (Method-Dependent Sub-negotiation) - 本例为用户名/密码认证请求发送阶段 (Request Sending)请求回复阶段 (Request Reply)数据传输阶段 (Data Transfer) …