区块链 · 2025年7月15日

Web3钱包产品设计

最近的DEXX黑客被盗事件(个人存疑)让钱包再次受到了大家的关注。我仅从产品设计者的角度聊聊钱包。

首先,钱包按照私钥管理的方式可以分为中心化钱包、去中心化钱包和托管钱包。

去中心化钱包

钱包保管在中心化服务器上。优势是建立钱包无需保管助记词,操作过程简单;劣势是钱包存在被黑客盗取和监守自盗的风险。

交易所和大部分建立钱包时没有生成助记词这一步骤的都是中心化钱包

中心化钱包架构

image.png

中心化钱包的业务流程大概包含以下几个步骤:

  • 批量地址生成
  • 充值
  • 提现
  • 归集
  • 热转冷
  • 冷转热
  • 链路风控
  • 财务对账

 

批量地址生成: 中心化钱包一般会存在一个地址池,在用户注册时会为其分配充值地址,不同的链和币种的地址是不同的。地址池在低于一定数量时会自动补充地址

image.png

充值: 扫链服务会持续监听线上的交易数据,当充值地址与系统用户地址一致时说明有用户进行充值。用户充值要经过区块确认才能生效,目前ERC-20需要12次确认,BSC需要15次确认,TRC-20需要1次确认。用户充值也有最小充值数量的限制。

需要注意的是用户充值的代币可能来历不明或者用于不法用途,为了避免合规风险,初级的KYC认证和第三方的风控程序是有所必要的。

image.png

提现: 用户输入提现的地址、链和金额后发起提现;这些数据将进入交易所业务层,业务层提交数据给钱包,并建立签名参数风控;钱包拿到交易数据之后先验证是否能过风控,没有问题的去链上获取签名参数,组织交易之后生成待签名的交易报文,将交易报文递给签名机,签名机签名之后返回签名的交易报文,钱包服务组织交易之后发送到区块链网络。交易发送完成之后,扫链服务扫到这笔交易之后,验证风控,通过之后通知业务层提现成功,上报交易 Hash 等信息。

image.png

归集: 用户充值的代币需要归集到一个统一地址里面去,方便管理。比如当用户钱包的代币价值大于500U时,我们需要把资金归集到归集钱包。归集是是一个批量转账的过程。

 

交易所或钱包中应用积累了数量庞大的资金,如果不进行分配转移就会面临很大的单点风险。目前通常的做法是定期(如每周日17点)统计归集钱包中的代币并将其中平台支持并有余额的按一定的比例分别转移到boss钱包、提现钱包、手续费钱包和冷钱包中。

 

热转冷: 将归集地址里面的资金转到一个冷钱包。热转冷是一个单笔转账的过程,和提现的逻辑比较类似

 

冷转热: 从冷钱包将资金转到热钱包,手动操作的过程。

 

链路风控: 充值、提现、归集、热转冷和冷转热都需要进行外部和内部风控,以规避合规或盗币风险

 

财务对账: 一个用户可能会有现货、合约、理财、跟单、机器人bot等多个账户,账户一般会有资产负债表与流水表。对账可通过资产快照和流水日切的方式进行。此外合约账户的保证金账户、理财账户的计算也是很有挑战性的地方,以后有空我们继续聊

 

去中心化钱包

去中心化钱包的私钥一般是管理在用户设备中,是一种确定性分层的钱包。地址的生成方法是先生成助记词,助记词导出主私钥,主私钥扩展子私钥和公钥匙的方式,公钥再导出地址。

去中心化钱包的优劣刚好与中心化钱包相反。

TokenPocket、MetaMask和imToken是当前较受欢迎的去中心化钱包

去中心化钱包的私钥一般是加密之后存储在本地设备 sqlite 或者数据文件里面,当要签名交易的时候,需要用户输入密码解密私钥之后再签名。

image.png

去中心化钱包一般有以下几个业务流程:

  • 收款: 查询本地设备数据库把地址展示到界面上。
  • 转账:

image.png

  • 转账记录: 根据地址查询交易记录和根据 Hash 查询交易详情
  • 闪兑: 钱包里面的闪兑一般对接 1inch 或者其他的 aggrator 实现兑换功能
  • Dapp 浏览器: Dapp 浏览器是指 Dapp 可以在里面运行,能够正常的和钱包进行交互,有以下几种主流的实现方式Web View 中包裹 Dapp, 通过 Js 注入 Windows 对象的方式通信,一般钱包开发直接使用这种方式Websocket 进行 Dapp 和钱包之间的通信

 

托管钱包

托管钱包架构

image.png

托管钱包和其中心化钱包相比,不相同的地方也是密钥的管理方式,在托管系统中,一般使用 MPC 网络,一共有 M 个节点,其中 N 节点签名交易就有效。每个节点掌握一个密钥片,在整个网络中没有出现过完整的密钥; 下面也地址生成和交易签名为例说明:

  • 地址生成:  业务端发出 Keygen 指令,MPC 网络经过多轮共识之后各自产生密钥片,并吐出聚合公钥,业务端使用公钥导出地址。
  • 离线签名:  业务端发出 Sign 指令, 并携带待签名的交易报文到 MPC 网络,MPC 网络经过多轮签名成公共,返回签名串给业务端,业务端将交易发送到区块链网络。

 

钱包安全设计

中心化钱包由于私钥存储在中心化服务器上,存在安全风险,因此需要采取一些技术手段来防范这些风险。

目前有以下几种私钥管理的方法。

  • 将私钥做一层 DES 加密之后存储在数据库或者 waller.data 数据文件
  • 使用 KMS 环境保存加密的私钥
  • 使用TEE环境保存和使用私钥
  • 使用 cloadHSM 或者多节点备份的小型签名机

 

钱包需要掌握哪些知识?

我原来是从事传统金融的产品工作,因为对区块链技术和交易感兴趣所以转身投入这个蓬勃发展的行业。部分区块链岗位也有着远程工作、收入回报不错等特点,钱包作为Web3的基础设施也有着很大的岗位需求。那么我们需要学习哪些知识才能成为一名合格的钱包产品或技术呢?我大概整理了以下内容:

钱包产品:

中心化钱包:

  • 熟悉充值,提现,归集,热转冷,冷转热和链路风控等钱包业务流程
  • 了解主流公链 RPC 接口
  • 了解钱包安全设计的基本方法
  • 了解优秀产品的设计方法和思想

去中心化钱包:

  • 熟悉钱包和主流Dapp交互流程
  • 了解主流公链 RPC 接口
  • 了解优秀产品的设计方法和思想

 

钱包开发:

  • 密码学算法基础
  • 通信协议
  • 交易签名
  • 上述产品需要学习的内容
  • 托管钱包的算法和实现流程

最后,我想说的是很多公链都有查看聪明钱钱包动态的工具,例如SOLscan等,我们没有必要因为这一功能把自己的资金存入所谓的Dex上,中心化的钱包除了交易量大和品牌影响力广泛的都存在被盗币的风险