The Web3 社区产品课程之深入理解交易所钱包产品底层逻辑
1.交易钱包概述
交易所使用的钱包一般都称为中心化钱包,原因是交易所钱包私钥一般管理在中心化服务器上,不同的交易所的私钥管理方式也不一样
最简单的方式莫过去将私钥做一层 AES 加密之后存储在数据库或者 wallet.data 数据文件中,其次是使用 KMS 环境保存加密的私钥,不管是使用数据文件或者 KMS 保存私钥,交易签名的时候都需要解密私钥之后就行签名,私钥暴露的风险最大,团队成员作恶也非常容易。
再次是 Tee 环境,Tee 环境虽然是一个安全的执行环境,但是私钥也是加密之后存储在这个环境的数据库或者文件里面,每次签名也要在这个环境中解密私钥进行签名,私钥暴露的风险也很大,团队成员想拿到私钥也很容易,只需要签名前传人私钥是打一个日志就行。
最安全和最专业的做法是使用 cloadHSM 多节点备份的小型签名机,私钥不会离开设备,需要签名的时候,传入待签名的报文,cloadHSM 或者小型签名机签名结束之后返回签名报文,然后整理签名交易报文发送到区块链网络。
不管是使用数据库、数据文件、 KMS、TEE,还是 CloadHSM,安全级别也是相对的,有一句话说得好: "外贼易挡,家贼难防",这句话用在钱包管理上真的是太正确了。不管用什么方案,即使是 CloadHSM 或者小型机方案,"家贼也是很难防",家贼完全可以模拟一笔合法的交易让 CloadHSM 或小型机方案签名,然后把钱盗走。为了防止家贼,正常的交易所钱包都要做链路风控体系。
下面是交易所钱包常见的系统架构图
2.交易钱包模块
对于交易所钱包来说,通常有以下这些业务流程
- 批量地址生成
- 充值
- 提现
- 归集
- 热转冷
- 冷转热
- Staking 产品
- NFT 产品
- 链路风控
- 对账系统
2.1.钱包底层实现逻辑
2.1.1.批量地址生成
在交易钱包中,一般都会有批量地址生成工具,提前把地址生成好,用户注册的时候直接分配地址;当生成的地址少于一定数量时,再新生成一批地址。
地址提前生成是比较常规的做法,但还有中心化钱包或者交易产品做法和这个不一样,而是用户注册的时候请求钱包 RPC 接口生成一个地址返回给用户,由于 RPC 效率比较高,这样的设计也能满足系统的需求。
2.1.2.地址细节逻辑
- ECDSA 和 EdDSA:两种椭圆曲线加密算法,区块链里面最常用的签名算法。
- BLS: BLS签名的一个显著特性是支持签名聚合。多个签名可以被聚合为一个单一的签名,而聚合后的签名仍然是一个有效的签名,代表着所有参与方的签名组合。这对于区块链或分布式系统来说,可以显著减少数据的大小和验证的计算量; BLS 签名生成的签名可以使用单个公共密钥来验证,因此验证效率很高,这使得它非常适合于分布式网络中需要验证大量签名的场景; BLS 签名具有固定且非常小的签名长度(一般为 48 字节),这使得它在需要高效存储和传输的环境中非常有优势;BLS 签名广泛用于区块链系统中,如以太坊 2.0 中的验证者聚合签名,可以将多个验证者的签名聚合成一个,减少网络负担。
- MPC: MPC** 是一种加密技术,允许多个参与方在不泄露各自输入的情况下,协同计算一个函数的结果。这意味着每个参与方都能保留数据的私密性,只有最终的计算结果是公开的; 在 MPC 中,每个参与方的输入是私密的,即使在计算过程中也不会被其他参与方知道。这使得 MPC 在需要高度隐私和安全的应用中非常有价值;MPC 可以用于各种场景,如秘密共享、加密签名生成、分布式密钥生成等。MPC 是一个通用的框架,可以处理非常广泛的计算任务,而不仅限于加密签名。
2.1.3.充值
- 分别获取本地数据库存储的最新块,和链上最新的区块;
- 若数据数据里面为空,则以配置的块高为起始块高,若数据块里面有块数据,以数据库里面的最新块为起始块;
- 若起始块高和链上的块一致,等待新的块出现
- 若起始块高远大于最新块,说明区块链网络发生了回滚,需要回滚以前的交易,交易回滚了之后通知业务层。
- 若链上的块大于起始块高,按照配置的扫块步长往下扫块,直到数据块中获取的起始块和链上的块一致,在等待最新块出来之后继续扫。
- 扫块过程中解析区块里面的交易,和系统里面的地址进行判断。
- 若 from 地址是外部地址,to 地址是系统内部的用户地址,说明是充值
- 若公司有风控系统,风控系统一般也会扫链维护交易,钱包系统请求风控校验,校验通过之后,将扫的交易丢到充值和交易表,并更新用户余额。
- 不断更新确认位,并通知业务层交易的状态,当完全达到确认位是,通知业务层交易充值成功
- 业务层需要对用户的 from 进行风控校验,若 from 地址是黑,灰地址,则将用户的资金锁定,若是白地址,请求风控校验通过之后直接给用户入账。
2.1.4.提现
- 用户发起提现,数据提交到业务层,业务层将提现数据推到钱包和风控系统
- 钱包的提现任务扫描所有未提现的交易,在签名交易之前请求风控验证交易,交易验证通过之后
- 将交易构建,然后生成 32 位待签名的 Message, 将 Message 发送到签名机进行签名,这里的签名机有以下几种形态,签名机的安全级别 CloadHSM > TEE > KMS > 裸露的签名机
- CloadHSM 管理私钥的签名机
- TEE 内在签名服务的签名机
- KMS 管理密钥的签名机
- 裸露的签名机, 仅仅是对私钥进行加密放到数据库
- 签名机签名完交易之后,返回 signature, 钱包端用 signature,交易体等信息构造完整的交易,发送到区块链网络,并将交 Hash, 签名等更新到提现表,状态标志成已发出,同时锁定热钱包要提现的这部分资金。
- 扫链服务扫到这笔交易之后,若交易成功,更新交易状态为成功,把实际消耗的手续费等信息写回 withdraw 表,同时在交易表里面记录着笔交易,将热钱包锁定的资金扣除;通知业务层提现成功;若交易失败,将交易状态变成需要重新发送到区块链网络,退回热钱包锁定的资金。
2.1.5.归集
- 用户充值到到用户地址的资金,中心化钱包为了方便资金的管理,会将用户地址的资金归集到交易所的归集地址。
- 归集任务扫描用户地址,如果余额大于最小充值余额,发起归集交易,交易的签名过程,发送到区块链网络的逻辑和提现类似;
- 扫链服务扫到这笔交易之后,若交易成功,更新交易状态为成功,把实际消耗的手续费等信息写回 transaction 表,并将用户钱包地址锁定的资金扣除,更新归集钱包余额;若交易失败,将交易状态变成需要重新发送到区块链网络,退回用户钱包锁定的资金。
2.1.6.热转冷
- 热钱包金额大于一定数量时,需要转到冷钱包,整个过程和提现归集比较类似,不一样的是针对的钱包地址类型不一样。
2.1.7.冷转热
- 热钱包金额小于一定数量时,需要从冷钱包转到热钱包,整个过程和提现归集比较类似,不一样的是针对的钱包地址类型不一样。
2.1.8.链路风控
- 交易同步器从区块链网络同步交易数据
- 地址标签从各平台抓取或者人工录入地址标签
- 数据清洗中心将交易数据和标签数据跟追踪业务清洗数据之后放入到业务数据库
- 提交数据 API 提供给业务平台和钱包平台提交风控数据
- 业务数据 API 提供业务数据给其他平台调用
注意:关于风控和追踪系统的产品细节逻辑,我们后续会有专题讲解,这里就不再过多赘述。
2.1.9.对账系统
- 交易所钱包对账系统主要涉及到的业务方有财务部门,交易所业务部门和钱包部门
- 用户充值的时候,是充值给业务部门,但是实际资金到了钱包部门
- 用户提现的时候,是从业务部门提现,实际提现是从钱包里面提走
- 业务部分和钱包部分需要定期对账和定期结算
- 钱包缺钱的时候,需要向财务借款,钱包资金充足的时候,需要还款给财务
以上这些逻辑就会在财务,钱包和业务部分产生资产负债表,有资产负债,就需要资产负债快照,实时资产负债表,每日,周,月,季度,年度流水表,结算日报,周报,月报,季度报,年度报表等功能
2.2.Staking 底层实现逻辑
- 用户把钱充值到交易所,业务层定期调度钱包将资金打到质押账户质押,质押完成之后把投票权 delegate 给到对应的矿池
- 矿池参与整个网络的共识出块,获得共识出块奖励,矿池按照和交易所约定的分成比例将收益转移到交易所钱包,钱包将收益给到业务平台,业务平台按照质押收益比例把收益给到用户。
- 用户发起取回质押,交易所把用户质押的资金释放,并定期去解除质押账户质押的资金
- 如果是 ETH,质押流程比较复杂一些
- 充值步骤和上面一致
- 用户质押的 ETH 将会质押给 LSD 产品,LSD 产品质押缓冲池满 32 个 ETH 或者是 32 ETH 的倍数时,LSD 产品把 ETH 质押到信标链合约,并启动信标节点参与信标的共识出块。同时 LSD 产品会 Mint 和 ETH 等价的 Token 给钱包地址,持有钱包地址的交易所还可以将这些 Token 质押给 Eigenlayer 这样支持重新质押的产品。
- 收益:这里将产生两层收益,ETH 的质押收益和重新质押 Token 的收益,交易所怎么给用户奖励看具体的产品规则
- 取回质押:用户发起从交易所取回质押,交易所一般会给用户直接释放质押的 ETH, 但是对于交易所来说,质押到 Eigenlayer 的 Token 要排队取款,等待排队取款结束之后可以取出 Token, 然后去 LSD 产品里面去取回 ETH,这个过程也需要排队取款,ETH 质押的取回要花费一定的时间。
2.3.NFT 底层实现逻辑
- NFT 产品在交易所钱包层面和 Token 一致,充值,提现,归集等业务流程和 Token 一样;不太一样的是,在交易所里面,NFT 属于低频交易资产,Token 属于高频交易资产。
3.总结
本节我们主要集中在交易所钱包产品逻辑,里面提到的追踪系统,风控系统,Ethereum 质押,我们后面的课程中还会详解介绍,本节大家只要能把交易钱包的 Token,NFT 充值,提现,归集,转冷,冷转热, staking 等逻辑搞清楚就可以了。