根據 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)方案。

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 金額。而從用戶的角度來看,費用和子交易都是不存在的,它們被抽象了出來,由此實現了可靠的零費用比特幣取款。

(以上內容獲合作夥伴 火星財經 授權節錄及轉載,原文鏈接 | 編譯:灑脫喜

聲明:文章僅代表作者個人觀點意見,不代表區塊客觀點和立場,所有內容及觀點僅供參考,不構成投資建議。投資者應自行決策與交易,對投資者交易形成的直接間接損失作者及區塊客將不承擔任何責任。


熱門市場動態與新聞傳送門:

區塊客致力於發掘和整理各種與區塊鏈技術有關的內容,只要與區塊鏈或區塊客網站有關的合作和/或建議,我們都非常歡迎。請您發電郵至 [email protected] 與我們聯繫。