细分数字货币钱包的不同种类
文章目录
- 一、中心化钱包
- 1.1 中心化钱包架构
- 1.2 中心化钱包业务细节流程
- 二、去中心化钱包(HD 钱包)
- 2.1 去中心化钱包架构
- 2.2 去中心化钱包细节业务流程
- 三、硬件钱包
- 3.1 硬件钱包架构
- 3.2 硬件钱包细节业务流程
- 四、MPC 托管钱包
- 五、多签钱包
- 中心化钱包 :钱包私钥一般管理在中心化服务器上,代表项目为交易所钱包;例如 Binance 交易所钱包,okx 交易所钱包和 bybit 交易所钱包等。
- 去中心化钱包(确定性分层钱包) :钱包私钥一般管理在用户的设备上,代表项目为 TP, ImToken, MetaMask 等。
- 硬件钱包 :钱包私钥管理在离线的硬件设备上,代表项目 ledger, onekey 等。
- 交易所 Web3 钱包: 一般的交易所 Web3 钱包集成了,中心化钱包,去中心化钱包(确定性分层钱包)和硬件钱包的功能。
- 托管钱包: 一般为 MPC 算法,每个节点有一个密钥片,网络中没有完整的私钥出现过, N-M 的签名方式,总节点为 N 个,M 个节点签名交易即有效。
- 多签钱包: EVM 链一般使用 gnosis safe 多签,其他使用传统密码学方式多签。
- 社交恢复钱包: 密钥分片备份和守护者恢复。
- EVM 链 AA 钱包: ERC4337 协议独有特性。
一、中心化钱包
1.1 中心化钱包架构
交易所使用的钱包一般都称为中心化钱包,原因是交易所钱包私钥一般管理在中心化服务器上,不同的交易所的私钥管理方式也不一样。
最简单的方式莫过去将私钥做一层 DES 加密之后存储在数据库或者 wallet.data 数据文件中,其次是使用 KMS 环境保存加密的私钥,不管是使用数据文件或者 KMS 保存私钥,交易签名的时候都需要解密私钥之后进行签名,私钥暴露的风险最大,团队成员作恶也非常容易。
其次是 Tee 环境,Tee 环境虽然是一个安全的执行环境,但是私钥也是加密之后存储在这个环境的数据库或者文件里面,每次签名也要在这个环境中解密私钥进行签名,私钥暴露的风险也很大,团队成员想拿到私钥也很容易,只需要签名前传人私钥是打一个日志就行。
最安全和最专业的做法是使用 cloadHSM 或者多节点备份的小型签名机,私钥不会离开设备,需要签名的时候,传入待签名的报文,cloadHSM 或者小型签名机签名结束之后返回签名报文,然后整理签名交易报文发送到区块链网络。
不管是使用数据库、数据文件、 KMS、TEE,还是 CloadHSM,安全级别也是相对的,有一句话说得好: “外贼易挡,家贼难防”,这句话用在钱包管理上真的是太正确了。不管用什么方案,即使是 CloadHSM 或者小型机方案,“家贼也是很难防”,家贼完全可以模拟一笔合法的交易让 CloadHSM 或小型机方案签名,然后把钱盗走。为了防止家贼,正常的交易所钱包都要做链路风控体系。
从上面的架构图中,我们可以看到, 对于交易所钱包来说,通常有这些业务流程:
- 批量地址生成
- 充值
- 提现
- 归集
- 热转冷
- 冷转热
- 链路风控
很多公司钱包开发,一般就是一个人负责整条链钱包的调研(离线地址生成,离线交易签名和扫块出入金),开发(含充值,提现,归集,热转冷等功能开发,甚至含链路风控的一部分代码)和测试。当然,也有的公司分为三到四团队,调研和离线签是一个团队,扫链出入金,归集和转冷等功能是一个团队,链路风控是一个团队,测试是一个团队。不管怎么分,运维和开发是隔离的,这样做才能做大限度做到人为风控。
1.2 中心化钱包业务细节流程
批量地址生成: 交易所钱包为了性能和快速响应用户,所有交易所钱包都会有一个地址池,地址池里面每次生成成千上万的地址,当用户注册到交易所的时直接给用户分配地址,而不是去生成;当地址池里面的地址少于一定数量时就会去新生成一批。
充值: 扫链服务扫区块链,解析区块里面的交易数据,当交易数据里面的 to 地址是系统里的用户地址时,就说明有用户充值;充值这个过程除了钱包充值扫块之外,还会和风控一起联合,只有风控系统和钱包都认可这笔交易,才会通知业务层;解析的时候需要注意有人构造恶意交易,有的链是可以构造交易攻击的。
提现: 客户端用户输入要提现的地址,金额,链;这些数据将进入交易所业务层,业务层提交数据给钱包,并建立签名参数风控;钱包拿到交易数据之后先验证是否能过风控,没有问题的去链上获取签名参数,组织交易之后生成待签名的交易报文,将交易报文递给签名机,签名机签名之后返回签名的交易报文,钱包服务组织交易之后发送到区块链网络。交易发送完成之后,定时任务需要不断获取这笔交易在链上的详情,然后验证风控,通过之后通知业务层提现成功,上报交易 Hash 等信息。
归集: 归集功能是把用户地址里面的资金全部归集到一个其它地址里面去,归集是一个批量转账的过程,和提现的逻辑比较类似,就是业务类别不一样。
转冷: 将归集地址里面的资金转到一个冷钱包,归集是一个单笔转账的过程,和提现的逻辑比较类似,就是业务类别不一样。
冷转热: 从冷钱包将资金转到热钱包,手动操作的过程。
交易回滚: 交易回滚是指区块链网络的区块回滚或者重组,需要将钱包系统中的交易处理掉的过程,比方说:现在有一条链区块一下从 1000 个块回滚到 500 个块,那么钱包系统里面存储的 500-1000 个块的交易就是无效交易了,需要处理在这个块范围的所用用户的交易。
钱包风控: 钱包风控在整个项目中占据重要的角色,不管是充值,提现,归集,转冷,冷转热中的每一笔交易,业务层和钱包底层都应该建立完善的风控体系。
清结算系统: 负责钱包平台内用户资金的转移、资产划拨及交易结算,确保资金流动的准确性与合规性。
对账系统: 钱包系统与业务层对账,钱包系统实时资产负债表等。
二、去中心化钱包(HD 钱包)
2.1 去中心化钱包架构
去中心化钱包的私钥是管理在用户设备中的,除了用户本人和牛逼的黑客,没有人接触得到。一般的去中心化钱包都是确定性分层钱包;先生成助记词,助记词导出主私钥,主私钥扩展子私钥和公钥匙的方式,公钥再导出地址。
确定性分层钱包(HD钱包)通过一个单一的种子短语(通常是12-24个单词)生成所有密钥和地址。它采用层次化结构,使得每个钱包可以生成多个账户和子地址,而不需要为每个账户单独管理私钥。种子短语是恢复钱包的唯一凭证,极大简化了备份和恢复的复杂度。
关键特点:
- 种子短语:一个种子短语可以恢复钱包中的所有私钥和地址。
- 层次化结构:通过BIP-32标准,钱包内部采用树状结构管理密钥,每个父密钥可以派生多个子密钥。
- 隐私保护:每次生成新的地址,避免地址重用,增强交易隐私。
- 多币种支持:支持不同币种的管理,通过不同的派生路径(如BIP-44)生成多个币种的地址。
- 备份和恢复简便:只需保存种子短语,即可在任何设备上恢复钱包,无需记录每个私钥。
总结:
HD钱包通过集中管理种子短语,提供安全、方便的密钥管理方式,且支持多个账户和币种,具有较强的隐私保护和备份恢复优势。
去中心化钱包的私钥一般是加密之后存储在本地设备 sqlite (一种嵌入式关系型数据库管理系统)或者数据文件里面,当要签名交易的时候,需要用户输入密码解密私钥之后再签名。
去中心化钱包一般有以下几个业务流程:
- 收款
- 转账
- 转账记录
- 闪兑
- Dapp 浏览器
去中心化钱包比较出名的有 Tp,ImToken,MetaMask 等。
2.2 去中心化钱包细节业务流程
-
收款:查询本地设备数据库把地址展示到界面上。
-
转账:用户在去中心化钱包中输入转账信息,包括:收款地址(对方的钱包地址)、转账金额、交易费用(Gas费),钱包创建交易参数后,用户输入解密私钥的密码,在本地对交易参数进行签名,然后发送签名交易到区块链网络中,区块链网络返回交易状态,随后钱包在界面显示转账状态。
-
转账记录:根据地址查询交易记录和根据 Hash 查询交易详情
-
闪兑:钱包里面的闪兑一般对接 1inch (去中心化聚合交易所)或者其他的 aggrator (DeFi 聚合器)实现兑换功能
-
Dapp 浏览器:Dapp 浏览器是指 Dapp 可以在里面运行,能够正常的和钱包进行交互,有以下几种主流的实现方式Web View 中包裹 Dapp, 通过 Js 注入 Windows 对象的方式通信,一般钱包开发直接使用这种方式Websocket 进行 Dapp 和钱包之间的通信
三、硬件钱包
3.1 硬件钱包架构
硬件钱包主要是把私钥管理在离线的硬件设备中,在硬件设备中集成钱包签名算法,一般使用蓝牙,NFC 或者串口通信进行通信。
硬件钱包一般有以下几个业务流程:
- 地址生成:硬件中集成 BIP,生成助记词和密钥对,使用公钥导出钱包地址;
- 离线签名:组织交易生成 32 位的 Msg Hash, 将签名消息摘要传给硬件,硬件签名之后返回,组织交易发送到区块链网络。
3.2 硬件钱包细节业务流程
硬件钱包和去中心化钱包相比,最不相同是私有的管理方式,硬件钱包私钥和助记词管理在硬件中,下面一离线地址生成和离线签名为例说明:
- 离线地址生成:发不地址生成的指令给硬件,硬件会生成助记词和私钥等信息,并将私钥和助记词编码加密之后存储在硬件中,吐出公钥匙,钱包界面端用公钥匙生成地址。
- 离线签名:用户端组织编码交易报文,发送给硬件签名,签名回来的交易报文再次组织,然后发送到区块链网络。
四、MPC 托管钱包
托管钱包和其中心化钱包相比,不相同的地方也是密钥的管理方式,在托管系统中,一般使用 MPC 网络,一共有 M 个节点,其中 N 节点签名交易就有效。每个节点掌握一个密钥片,在整个网络中没有出现过完整的密钥; 下面也地址生成和交易签名为例说明:
- 地址生成: 业务端发出 Keygen 指令,MPC 网络经过多轮共识之后各自产生密钥片,并吐出聚合公钥,业务端使用公钥导出地址。
- 离线签名: 业务端发出 Sign 指令, 并携带待签名的交易报文到 MPC 网络,MPC 网络经过多轮签名成公共,返回签名串给业务端,业务端将交易发送到区块链网络。
五、多签钱包
多签钱包有点像 MPC 钱包的工作机制,但又完全不一样。多签钱包的工作机制涉及多个密钥和 M-of-N 签名的概念。在 M-of-N 设置中,只有 N 个密钥中的 M 个对交易进行了签名,才能授权该交易。例如,在 2-of-3 多签钱包中,存在三个私钥,至少需要两个私钥才能授权交易。
相关文章:
细分数字货币钱包的不同种类
文章目录 一、中心化钱包1.1 中心化钱包架构1.2 中心化钱包业务细节流程 二、去中心化钱包(HD 钱包)2.1 去中心化钱包架构2.2 去中心化钱包细节业务流程 三、硬件钱包3.1 硬件钱包架构3.2 硬件钱包细节业务流程 四、MPC 托管钱包五、多签钱包 中心化钱包 :钱包私钥一…...
推理模型时代:大语言模型如何从对话走向深度思考?
一、对话模型和推理模型的区别概述 对话模型是专门用于问答交互的语言模型,符合人类的聊天方式,返回的内容可能仅仅只是一个简短的答案,一般模型名称后面会带有「chat」字样。 推理模型是比较新的产物,没有明确的定义,一般是指输出过程中带有<think>和</think&…...
调用click.getchar()时Windows PyCharm无法模拟键盘输入
文章目录 问题描述解决方案参考文献 问题描述 调用 click.getchar() 时,Windows PyCharm 无法模拟键盘输入 解决方案 Run → Edit Configurations… → Modify options → Emulate terminal in output console 参考文献 Terminal emulator | PyCharm Documentati…...
关于ES中text类型时间字段范围查询的结构化解决方案
前言 有关es中text类型的时间字段范围查询的问题,比如: {"query": {"range": {"insertTime": {"gte": "2025-02-01T00:00:00","lte": "2025-11-30T23:59:59","format&quo…...
易基因: ChIP-seq+DRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR
原文:ChIP-seqDRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 在饥饿等能量胁迫条件下,生物体会通过调整…...
Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解
Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解 前言简介一、安装二、Web Inspector 的使用2.1 获取元素定位器(Locators)2.2 将定位器添加到代码2.3 验证定位器2.4 处理 Frames (框架)总结前言 JetBrains 的 Aqua IDE 提供强大的 Web Inspector 工具,帮…...
数据中心储能蓄电池状态监测管理系统 组成架构介绍
安科瑞刘鸿鹏 摘要 随着数据中心对供电可靠性要求的提高,蓄电池储能系统成为关键的后备电源。本文探讨了蓄电池监测系统在数据中心储能系统中的重要性,分析了ABAT系列蓄电池在线监测系统的功能、技术特点及其应用优势。通过蓄电池监测系统的实施&#…...
01数据准备 抓取图片 通过爬虫方式获取bing的关键词搜索图片
为了获取训练所需的图片,我们最常用的手段就是自己去写一个爬虫去获取相关图片。本文将重点围绕如何采用爬虫的方式获取训练所需的图片素材进行讲解,为了大家能够够直观的掌握相关技术,参考本文的相关过程和代码获取自己的数据图片素材,笔者将详细介绍实现过程。 1、确定图…...
【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记
本文内容为构建双向循环链表、使用 Java 的泛型将其优化为通用类型的链表以及数组的基本语法介绍。 1. 双向链表 回顾上一节课写的代码,当执行 addLast() 与 getLast() 方法时需要遍历链表,效率不高,因此可以添加一个指向链表末尾的索引&am…...
Git 工作流程
1、Git 工作流程 http://www.ruanyifeng.com/blog/2015/12/git-workflow.html git push -f origin HEAD^:master 删除服务器上最近的一次提交git push -f origin HEAD^:master 2、Git分支管理 动画形式演示分支效果: http://onlywei.github.io/explain-git-with-…...
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署 **DeepSeek** 是一款专注于深度学习和人工智能的工具或平台,通常与人工智能、机器学习、自动化分析等领域有关。它的主要功能可能包括:深度学习模型搜索&…...
【后端】gitHub访问速度太慢解决办法
问题描述 浏览器无法打开GitHub,加载非常慢 解决方法 1、修改本地hosts文件,增加到 http://github.global.ssl.fastly.net 和 http://github.com 的映射 本机hosts 文件位置: C:\Windows\System32\drivers\etc配置如下: # g…...
Hutool - Extra:功能丰富的扩展模块
一、简介 Hutool - Extra 作为 Hutool 工具包的扩展模块,对众多第三方库和功能进行了封装,极大地丰富了 Hutool 的功能体系。它涵盖了模板引擎、邮件发送、Servlet 处理、二维码生成、Emoji 处理、FTP 操作以及分词等多个方面,为开发者在不同…...
opencv实时二维码识别的一种实现与思路分享
在嵌入式平台上比如 rk3568 这种弱鸡的平台,要做到实时视频处理就非常鸡肋,不像英伟达那种 deepstrem 什么的。 开始的时候,我们使用python 下的 pyzbar + opencv opencv 读取摄像头的数据然后每帧送到 pyzbar 二维码识别函数里面进行处理,然后打印出识别的数字。结果,非常…...
深入剖析Linux C中线程未释放问题
深入剖析 Linux C 中线程未释放问题 在 Linux C 编程中,线程的正确使用对于程序的性能和稳定性至关重要。其中,线程资源的释放是一个容易被忽视但又极为关键的环节。本文将通过具体代码示例,深入探讨线程未释放的问题,并结合进程…...
个人博客5年回顾
https://huangtao01.github.io/ 五年前,看程序羊的b站视频做的blog,受限于网络,只能单向学习,没有人指导与监督,从来没有想过,有没有什么问题? 一、为什么要做个人博客? 二、我是怎么…...
nacos编写瀚高数据库插件
1、下载nacos源码 git clone gitgithub.com:alibaba/nacos.git 2、引入瀚高驱动 <dependency><groupId>com.highgo</groupId><artifactId>jdbc</artifactId><version>${highgo.version}</version></dependency> 3、DataSource…...
bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全
ETL & 流批一体化框架 bboss v7.3.5 发布,多源输出插件增加为特定输出插件设置记录过滤功能;Elasticsearch 客户端新增异地双中心灾备机制,提升框架高可用性;Elasticsearch client 和 http 微服务框架增加对 Kerberos 认证支持…...
【编程语言】委托与函数指针
委托与函数指针的相似之处: 指向方法:C# 的委托和 C 的函数指针都可以用来指向一个方法或函数。调用方法:它们都可以通过引用(委托或函数指针)来调用指向的方法。 委托与函数指针的主要区别: 类型安全&am…...
《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用
专栏简介 《Python实战进阶》专栏共68集,分为 模块1:Web开发与API设计(共10集);模块2:数据处理与分析(共10集);模块3:自动化与脚本开发(共8集&am…...
Redis三剑客解决方案
文章目录 缓存穿透缓存穿透的概念两种解决方案: 缓存雪崩缓存击穿 缓存穿透 缓存穿透的概念 每一次查询的 key 都不在 redis 中,数据库中也没有。 一般都是属于非法的请求,比如 id<0,比如可以在 API 入口做一些参数校验。 大量访问不存…...
OpenCV机器学习(8)随机森林(Random Forests)算法cv::ml::RTrees类
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::RTrees 是 OpenCV 机器学习模块中的一部分,用于实现随机森林(Random Forests)算法。随机森林是一种集…...
C++:线程当中的锁专题
在 C 多线程编程中,线程同步是确保程序正确运行的关键环节,而锁机制则是实现线程同步的重要手段。 一、线程的同步之互斥锁 1.1 互斥锁的概念 互斥锁(Mutex,即 Mutual Exclusion 的缩写)是一种最基本的线程同步工具…...
vue3 文件类型传Form Data数据格式给后端
在 Vue 3 中,如果你想将文件(例如上传的 Excel 文件)以 FormData 格式发送到后端,可以通过以下步骤实现。这种方式通常用于处理文件上传,因为它可以将文件和其他数据一起发送到服务器。 首先,创建一个 Vue…...
Frp部署文档
Frp部署文档 开源项目地址:https://github.com/fatedier/frp项目中文文档地址:https://github.com/fatedier/frp/blob/dev/README_zh.md官网文档地址: https://gofrp.org/zh-cn/docs/发布包地址:https://github.com/fatedier/frp/releases 要注意对应的…...
创建一个简单的spring boot+vue前后端分离项目
一、环境准备 此次实验需要的环境: jdk、maven、nvm和node.js 开发工具:idea或者Spring Tool Suite 4,前端可使用HBuilder X,数据库Mysql 下面提供maven安装与配置步骤和nvm安装与配置步骤: 1、maven安装与配置 1…...
Spring Boot项目@Cacheable注解的使用
Cacheable 是 Spring 框架中用于缓存的注解之一,它可以帮助你轻松地将方法的结果缓存起来,从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先,确保你的项目中包含了 Spr…...
124.二叉树中的最大路径和 python
二叉树中的最大路径和 题目题目描述示例 1:示例 2:提示: 题解解决方案步骤Python 实现解释提交结果 题目 题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多…...
23.1 WebBrowser控件
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 WebBrowser控件类似于IE浏览器的文档界面(事实上IE也是使用的这个控件),它提供了显示网页及支持…...
vue 手写分页
【先看效果】 (1)内容小于2页 不展示页码 (2)1 < 内容页数< 限定展示页码 展示:页码、上下页;隐藏:首页、末页图标,上、下一区间码。即:(页数&#…...
