根据chain.info 统计的数据显示,当前由Coinbase 管理的比特币资产已达到了970.294.77 BTC(价值约85 亿美元),而其中有大部分资产是由Coinbase Custody 在负责保管,而巨额的用户资金,必然要配备最高级别的保管措施及管理方式,因为安全性对于大型机构和高净值个人而言,是他们愿意将大量资产托管给服务商的主要原因。
而在这篇文章中,Coinbase Custody 的工程经理Andrei Anisimov 介绍了该公司如何使用比特币「父子支付」(Child-Pays-For-Parent)技术来管理他们的钱包。
安全性是所有托管技术的主要内容,而客户则主要通过可靠性和便利性来判断我们的产品。我们的用户经常会执行一些高价值、高实效性的提款交易,然后期望在区块链的交易确认方面不会有延迟,并且有干净可预测的金额可以到达目的地地址(也就是说,不会从金额中扣除任何费用)。
幸运的是,比特币的先进技术「父子支付」(CPFP)能够帮助我们实现以上的所有要求,即:零费用交易、可靠的确认时间,同时保持安全的冷存储基本属性(每个私钥只严格使用一次)。
比特币费用和冷存储
通常来说,提交给比特币网络的每一笔交易,都需要有一笔支付给矿工的费用,然后矿工会处理该交易,并将其纳入一个区块当中。平均而言,比特币网络每10 分钟会产生一个区块。当所有待处理交易的大小超过区块大小限制(1MB)时,矿工将优先考虑具有高手续费的交易,同时将低费用交易推迟到下一个区块。这样的过程可能会重复多次,从而导致交易无限期地推迟(直至网络堵塞的情况消除)。
如果你在2017 年-2018 年进行过比特币交易,你可能还记得,在价格波动剧烈期,以及其它重要事件高峰期间,比特币交易经常会出现数小时甚至数天的延迟。在这段时间里,为了确保交易不被延迟,而支付超100 倍正常交易费用的情况并不少见。下图显示了比特币费用的波动情况。
图:比特币交易费用历史数据,来自jochen-hoenicke.de/queue/#0.all
在Coinbase Custody,我们意识到了这一障碍,并尝试了一些解决方案,以在客户最需要的时候为他们提供优势。一个显而易见的解决方案,是在广播交易之前,立即计算交易费用,知道当前的网络状况,使得我们能够预测最佳的费用。
不幸的是,冷存储的安全要求,使得在广播之前是很难估算费用的。
冷存储遇到的挑战
冷存储安全模型,要求事先完全了解完整的交易有效载荷(包括金额和目的地),以防止在密钥恢复过程启动后,对有效载荷进行任何的更改。
另一方面,由于交易费用被编码在有效载荷中,因此这意味着必须提早在广播交易前计算费用。如果在该时间间隔内,网络突然变得拥挤,则计算出的费用可能不足以及时确认交易。
父子支付(CPFP)解决方案
比特币UTXO 模型的一个有趣的特性是,交易是可以捆绑在一起的,然后矿工对费用进行整体评估。例如,如果一项(子项)交易花费了另一项(父项)交易的输出,则子项交易可以同时为这两项交易支付费用,而矿工是别无选择的,如果他们想从子项交易中收取超额费用,他们只能纳入父项交易。这种方法,通常被称为「父子支付」(CPFP)方案。
火币交易所销毁14741.79万个HT公告全文
Coinbase 的客户平台使用该方案来加速提款已经有很长一段时间了,你可以在博客文章中了解到更多的信息,而Custody 所面临的独特挑战,迫使我们重新考虑该方法,并由此提出了不同的设计。
在Custody 托管产品中,我们使用「父子支付」(CPFP)技术将费用估算移动到广播之前。此外,我们使用特殊的加油站服务来支付交易费用。逐步的方法如下:
当一笔提款从冷钱包地址发起时,我们会进行初始费用估算,并使用加油站服务向该地址发送10 倍的估算费用;
除了目的地和找零输出之外,当构建取款(父)交易时,我们添加一个输出,将预充的10 倍费用移动到一个特殊的「费用」地址(该地址为每次取款生成,并且仅用一次)。我们把这个输出称为「CPFP link」。
一旦在密钥恢复仪式结束以及广播前签署了主交易,费用将根据当前网络条件重新估算。
费用地址会生成一笔子交易,它会花费CPFP link 输出,支付两笔交易的费用,并将剩余的预充费用发送回加油站。
举例说明
让我们通过一个具体的例子来更好地理解这个解决方案的机制。请注意,为了简单起见,这里省略了一些小细节。
假设我们有一个客户,他账户里的余额是15 BTC,然后他想从Custody 账户中提取12 BTC 到一个外部比特币地址。以下是将要发生的步骤(请注意,聪是比特币中最小的单位,它等于0.00000001 BTC):
Custody 估计完成这笔交易的费用为10000 聪;
加油站将10 倍估算费用的10 万聪发送到冷钱包地址(存放待提取资金的地址);
Custody 生成的取款交易有两个主要输出:12 BTC 到目的地地址,3 BTC「找零」返回冷钱包;
我们添加了第三个「CPFP-link」输出,将10 万聪移动到新生成的费用地址(这笔金额稍后将用于支付费用);
「密钥恢复」仪式开始。其结果是,一个已签名的交易有效载荷准备好向网络广播;
就在广播之前,我们再次估算下费用,事实证明,网络突然变得拥挤,现在的费用是最初估算费用的2 倍(即2 万聪);
我们创建一笔子交易,该交易花费「CPFP link」输出,支付2 万聪费用,并将剩余的8 万聪返回到加油站;
我们把这两笔交易广播到网络:在这之后,目的地地址会接收到完整的12 BTC 金额。而从用户的角度来看,费用和子交易都是不存在的,它们被抽象了出来,由此实现了可靠的零费用比特币取款。
原创文章,作者:菜鸡,如若转载,请注明出处:https://www.20on.com/90859.html