手握近百万BTC,揭秘巨鲸Coinbase是如何管理它们的

洒脱喜 发布在 比特币 32382

写在前面:根据chain.info统计的数据显示,当前由Coinbase管理的比特币资产已达到了970,294.77 BTC(价值约85亿美元),而其中有大部分资产是由Coinbase Custody在负责保管,而巨额的用户资金,必然要配备最高级别的保管措施及管理方式,因为安全性对于大型机构和高净值个人而言,是他们愿意将大量资产托管给服务商的主要原因。

而在这篇文章中,Coinbase Custody的工程经理Andrei Anisimov介绍了该公司如何使用比特币“父子支付”(Child-Pays-For-Parent)技术来管理他们的钱包。

4

以下为译文:

安全性是所有托管技术的主要内容,而客户则主要通过可靠性和便利性来判断我们的产品。我们的用户经常会执行一些高价值、高实效性的提款交易,然后期望在区块链的交易确认方面不会有延迟,并且有干净可预测的金额可以到达目的地地址(也就是说,不会从金额中扣除任何费用)。

幸运的是,比特币的先进技术“父子支付”(CPFP)能够帮助我们实现以上的所有要求,即:零费用交易、可靠的确认时间,同时保持安全的冷存储基本属性(每个私钥只严格使用一次)。

 

比特币费用和冷存储

 

通常来说,提交给比特币网络的每一笔交易,都需要有一笔支付给矿工的费用,然后矿工会处理该交易,并将其纳入一个区块当中。平均而言,比特币网络每10分钟会产生一个区块。当所有待处理交易的大小超过区块大小限制(1MB)时,矿工将优先考虑具有高手续费的交易,同时将低费用交易推迟到下一个区块。这样的过程可能会重复多次,从而导致交易无限期地推迟(直至网络堵塞的情况消除)。

如果你在2017年-2018年进行过比特币交易,你可能还记得,在价格波动剧烈期,以及其它重要事件高峰期间,比特币交易经常会出现数小时甚至数天的延迟。在这段时间里,为了确保交易不被延迟,而支付超100倍正常交易费用的情况并不少见。下图显示了比特币费用的波动情况。

p1

(图:比特币交易费用历史数据,来自https://jochen-hoenicke.de/queue/#0,all)

在Coinbase Custody,我们意识到了这一障碍,并尝试了一些解决方案,以在客户最需要的时候为他们提供优势。一个显而易见的解决方案,是在广播交易之前,立即计算交易费用,知道当前的网络状况,使得我们能够预测最佳的费用。

不幸的是,冷存储的安全要求,使得在广播之前是很难估算费用的。

 

冷存储遇到的挑战

 

冷存储安全模型,要求事先完全了解完整的交易有效载荷(包括金额和目的地),以防止在密钥恢复过程启动后,对有效载荷进行任何的更改。

另一方面,由于交易费用被编码在有效载荷中,因此这意味着必须提早在广播交易前计算费用。如果在该时间间隔内,网络突然变得拥挤,则计算出的费用可能不足以及时确认交易。

 

父子支付(CPFP)解决方案

 

比特币UTXO模型的一个有趣的特性是,交易是可以捆绑在一起的,然后矿工对费用进行整体评估。例如,如果一项(子项)交易花费了另一项(父项)交易的输出,则子项交易可以同时为这两项交易支付费用,而矿工是别无选择的,如果他们想从子项交易中收取超额费用,他们只能纳入父项交易。这种方法,通常被称为“父子支付”(CPFP)方案。

Coinbase的客户平台使用该方案来加速提款已经有很长一段时间了,你可以在博客文章中了解到更多的信息,而Custody所面临的独特挑战,迫使我们重新考虑该方法,并由此提出了不同的设计。

在Custody托管产品中,我们使用“父子支付”(CPFP)技术将费用估算移动到广播之前。此外,我们使用特殊的加油站服务来支付交易费用。逐步的方法如下:

  1. 当一笔提款从冷钱包地址发起时,我们会进行初始费用估算,并使用加油站服务向该地址发送10倍的估算费用;
  2. 除了目的地和找零输出之外,当构建取款(父)交易时,我们添加一个输出,将预充的10倍费用移动到一个特殊的“费用”地址(该地址为每次取款生成,并且仅用一次)。我们把这个输出称为“CPFP link”。
  3. 一旦在密钥恢复仪式结束以及广播前签署了主交易,费用将根据当前网络条件重新估算。
  4. 费用地址会生成一笔子交易,它会花费CPFP link输出,支付两笔交易的费用,并将剩余的预充费用发送回加油站。

举例说明

0_o0B9qW5FKefNA8Mx

让我们通过一个具体的例子来更好地理解这个解决方案的机制。请注意,为了简单起见,这里省略了一些小细节。

假设我们有一个客户,他账户里的余额是15 BTC,然后他想从Custody账户中提取12 BTC到一个外部比特币地址。以下是将要发生的步骤(请注意,聪是比特币中最小的单位,它等于0.00000001 BTC):

  1. Custody估计完成这笔交易的费用为10000聪;
  2. 加油站将10倍估算费用的10万聪发送到冷钱包地址(存放待提取资金的地址);
  3. Custody生成的取款交易有两个主要输出:12 BTC到目的地地址,3 BTC“找零”返回冷钱包;
  4. 我们添加了第三个“CPFP-link”输出,将10万聪移动到新生成的费用地址(这笔金额稍后将用于支付费用);
  5. “密钥恢复”仪式开始。其结果是,一个已签名的交易有效载荷准备好向网络广播;
  6. 就在广播之前,我们再次估算下费用,事实证明,网络突然变得拥挤,现在的费用是最初估算费用的2倍(即2万聪);
  7. 我们创建一笔子交易,该交易花费“CPFP link”输出,支付2万聪费用,并将剩余的8万聪返回到加油站;
  8. 我们把这两笔交易广播到网络;
在这之后,目的地地址会接收到完整的12 BTC金额。而从用户的角度来看,费用和子交易都是不存在的,它们被抽象了出来,由此实现了可靠的零费用比特币取款。

本文链接:https://www.8btc.com/article/561238
转载请注明文章出处

评论
登录 账号发表你的看法,还没有账号?立即免费 注册