为数字资产交易设计安全的钱包架构
作为一名加密货币爱好者和区块链行业建设者的一员,我将尽我最大的努力来更好地构建加密货币生态系统。在这篇文章中,我将分享我的经验,如何为数字资产交易设计一个安全的加密货币钱包。希望对建立基于区块链和加密货币经济的业务基础有所帮助。
数字资产管理是至关重要的,尤其是对于那些建立在区块链基础上的机构。一个典型的使用案例是加密货币交易所或场外交易平台(OTC),使成千上万的交易者在不受时间和空间限制的情况下提取或剥离他们的数字资产,银行级别的安全性和高可用架构是这类创业公司要获取的基本要求。
热钱包,暖钱包和冷钱包
关于钱包的常识不会在文章中介绍,但是我们应该学习三种钱包之间的交易业务系统。
· 热钱包:仅用于从系统发送交易,应保留足够但不太多的资金来服务取款。它应该有严格的政策限制硬币的数量,也就是说,小额取款应该尽可能自动化,但大额提款应该在提款前得到行政部门的批准。
· 暖钱包:用于所有存款到系统,请求一个地址发送资金到新用户加入时。客户充值到暖钱包的资金应自动或定时提取到冷钱包。
· 冷钱包:用于系统大部分资金的存储,我想至少是7/10,用于暖钱包的充值。冷钱包也被称为离线钱包,因为它打算在不连接任何网络的设备上运行。
因此,在讨论加密货币钱包系统体系结构的设计思想时,需要考虑安全存储私钥、智能风险控制取款系统和存款链确认三个关键问题。如果我们必须优先考虑这些安全因素的发展,这些密钥的重要性逐步减少,因为最重要的是私钥存储。
基于实际用例的体系结构
持有自己的私钥是采用加密货币的主要原因。传统的金融方式,尤其是跨境汇款,使得货币的转移十分繁琐。在使用数字资产钱包时,个人或机构之间的业务逻辑存在许多差异。
如何设计数字资产钱包取决于您存储的私钥的位置。主要有三种模式:在手机中存储私钥、区块链全节点或安全的网络程序环境。
1. 分散式移动应用钱包持有密钥并签署原始交易。当手机app创建钱包时,pubkic key注册到网络程序(主要是webservices)。网络程序与p2p网络交互,从区块链台账中获取信息(维护UTXO,查询以太坊账户余额, nonce值,交易历史等),并广播新的交易。这些链能够钱包满足大多数人使用。
2. 带钱包的区块链节点提供全方位服务,直接在网络环境中创建和签署原始交易。与全服务节点的系统集成通过JSON-RPC与区块链全服务节点交互来管理钱包。钱包私钥与区块链分类账一起存储,同时暴露在不太安全的开放网络环境中。有许多黑客入侵案件引起的json - rpc连接。我认为使用区块链节点实现的原始钱包是不好的做法。有人建议比特币内核应该将节点和钱包从功能中分离出来
3. 为了提高安全性,可以通过在更安全的环境中运行的一个单独的钱包程序生成私钥,我们称之为签名程序。全服务的另一部分是网络程序,它构造原始交易和广播签名交易。整个过程是,网络程序创建未签名的交易,并以成功的方式将未签名的交易转移到签名程序(然后签名程序将签名后的交易返回给网络程序,最后由网络程序将签名的交易广播到对等网络。
签名程序和网络程序
钱包全方位服务包括四个部分。
· 首先是钱包管理,私钥由wallet-core(签名程序)程序生成,并由levelDB存储
· 第二是外部端点,取款流程和钱包生成,wallet-gateway(网络程序)构建原始交易,为业务系统提供外部端点,使用wallet-core和wallet-gateway组件之间的gRPC协议传输数据。
· 第三个是ledger-monitor程序,它订阅最佳块事件并推送到MQ(RabbitMQ)。
· 最后一个是ledger-consumer,它与两个MQ消费者相结合,一个是为我们的系统钱包维护UTXO区块链,另一个是处理消费者(用户通知)的存款。