一文讀懂 tBTC 資產跨鏈方案與漏洞補救

買賣虛擬貨幣

tBTC 是如何做到安全且去中心化地進行比特幣資產跨鏈?主網上線後的漏洞是如何被修復的?

撰文:潘致雄,鏈聞研究總監

以去中心化實現比特幣資產跨鏈的方案中,tBTC 是近期最受矚目的專案。當 BTC 可以安全且無需信任地遷移到以太坊網路之後,相當於 BTC 能享受到圖靈完備的智慧合約,想象空間更大。比如,這樣以來,比特幣資產可以應用在去中心化金融(DeFi)生態中——畢竟比特幣擁有最多的使用者、最高的市值、最顯著的網路效應。

tBTC 是由 Thesis 公司旗下 Keep Network 開發的一個子專案,這甚至有點像是他們「不務正業」推出的實驗專案。原本 Keep Network 是一個為以太坊提供隱私層的方案,利用鏈下的容器存放隱私資料;而 tBTC 則是一個比特幣跨鏈方案,聽起來好像與 Keep 本身的方向毫無關聯。不過,兩者還是存在一些交集的,比如利用了相同的代幣 KEEP 和多簽名機制等。

另外 Summa 和 Cross-Chain Group 也是 tBTC 專案的參與方。按照介紹,這些合作方是這樣分工的:

Keep 將 ECDSA 門限簽名運用在比特幣去中心化託管的邏輯中,且 tBTC 的原生代幣使用的是 KEEP;

Summa 專注跨鏈解決方案,也就是 tBTC 協議中負責如何在以太坊區塊鏈中驗證比特幣交易的部分(SPV 方案);

Cross-Chain Group 則負責跨鏈技術的研究、設計和實施。

Keep 的投資者包括了數家美國的主流機構,如 Polychain Capital、a16z、Draper Associates、Fabric Ventures、Distributed Capital Partners 等。其中 a16z 還是多家 DeFi 協議的投資者,包括穩定幣協議 Maker、借貸協議 Compound、交易協議 dYdX 等,這三家也是目前 DeFi 協議中的頭部專案,如果他們後續能整合 tBTC,或許是一個雙贏的策略:比特幣可以支援 DeFi,DeFi 可以使用比特幣。

目前整合tBTC的專案

在 tBTC 之前,加密資產的跨鏈、尤其是比特幣資產的跨鏈方案,絕大多數都是透過中心化機構託管方式實現的,比如 WBTC、imBTC 或 HBTC。雖然這些方案也考慮到了安全性和透明度,但對於加密貨幣社羣而言,人們更想要一個完全去中心化、非託管、無准入門檻、無需許可的資產跨鏈基礎設施。畢竟,資產從一個地方挪到另一個地方是一個很基礎的權利,不應該牽扯到其他因素、不應該增加額外風險、也不應該犧牲隱私。

雖然 tBTC 已完成審計並上線主網,但專案仍處於早期階段,仍有很多未知風險等待早期使用者探索。而且 tBTC 的整套機制也存在一些爭議,比如引入了預言機這個外部不可控的因素。此外,tBTC 網路的參與者的質押率較高資金效率較低,這也會帶來參與者的參與動機較弱。不過 tBTC 專案還是有機會對這些現有的問題進行最佳化和調整的。

總體而言,tBTC 的兩個最重要的優勢為:

由原資產抵押:由於 tBTC 透過質押比特幣而跨鏈生成的等價 TBTC 代幣,所以不會產生額外的比特幣。相反的,像 Synthetix 這類資產合成協議,是透過其他代幣鑄造出「模擬」比特幣價值的代幣 sBTC,事實上增加了比特幣的流通量。

由去中心化協議託管:在 tBTC 協議內的比特幣資產是被去中心化的協議託管的,而且也設定了一系列的安全機制確保整個流程無法作惡。

從上述兩個角度來看,目前與 tBTC 類似的專案可以這麼分類:

tBTC 是如何運作的?

像穩定幣協議 Maker 為了維持價格所設計的各種機制一樣,tBTC 在整套方案中也考慮到了各種可能會對系統安全帶來的特殊情況,如果將這些模組一一拿出解釋或輔以案例說明,可能是一篇論文的長度,或不亞於白皮書。

畢竟對於大多數 tBTC 系統或者是 TBTC 代幣的使用者而言,並不需要接觸到這麼多繁雜的邏輯。只有對於系統的深度參與者或者原生代幣的交易者而言,才應該徹底瞭解整個系統的運作機制,就算很費時間也需要仔細讀一讀他們的白皮書。

不過,在此之前,也可以將本文作為了解 tBTC 的入門手冊,以快速建立起對 tBTC 協議的概念和系統運作的核心工作流程。簡而言之,這裡主要解答的是這個問題:為什麼 tBTC 可以安全且去中心化地進行資產跨鏈?

先做一些說明和解釋:

tBTC 是這個專案和協議的名稱,而 TBTC 是由比特幣跨鏈後在以太坊上流通的代幣名,也就是 TBTC = BTC。

在 tBTC 的方案中,涉及到這幾方:

存款人(depositor):希望把 BTC 挪到以太坊上的使用者;

驗證人 / 簽署人(signer):維護 tBTC 網路安全且能賺取收益的使用者;

贖回者(redeemer):希望把以太坊上的 TBTC 換成真正 BTC 的使用者。

BTC -> TBTC 鑄造流程

對於比特幣與以太坊的資產跨鏈解決方案,兩個主要的挑戰是:

使用者如何確保抵押的資產不會被盜:tBTC 選擇的方案是將資產儲存在由 3 人共同保管的多簽名地址中(由 Keep 實現的技術),沒有任何一個人可以挪動資產,且需要抵押超額資產。

如何在以太坊的鏈上確認比特幣的交易和所有權:tBTC 採用了由 Summa 設計的 SPV (簡單支付驗證)技術實現跨鏈的交易驗證。

所以,從 BTC 換成 TBTC 的流程分為兩大步驟:

1. 存款人申請資產跨鏈,在 tBTC 協議的分配下由驗證人輔助負責資產託管,然後存款人將比特幣轉至由三個人共同託管的比特幣地址中。

2. 轉賬至比特幣託管地址的 6 個區塊後,存款人向協議提交已完成轉賬的證明,然後就可以鑄造相應數量的 TBTC 了。

簡單介紹一下 TDT:tBTC 系統為了記錄不同存款人不同的託管數量或者時間,在鑄造 TBTC 之前還會發行一枚非同質化代幣(NFT),稱為 TDT (tBTC Deposit Token)。雖說叫代幣,但其實類似於一張「憑證」,不可分割且獨一無二,後續贖回 BTC 需要用到這張憑證。

當然,在協議的設計中還需要考慮其他可能的問題以及相應的處理方式,最常見的是如果 ETH 價值相比 BTC 價值貶值後,可能會產生驗證人抵押不足的情況,導致驗證人就有動機作惡了,所以 tBTC 設計了相應的清算模組以應對。

tBTC 協議包含了預清算和強制清算兩個階段,和其他的清算系統的設計目標類似,在強制清算階段將會啟動拍賣流程,將 ETH 以折扣價拍賣給 TBTC 的持有者以保證抵押品 ETH 價值大於 TBTC (也就是 BTC)的價值。而如果清算後還有剩餘資金,則根據不同的情況進行收益分配。

BTC -> TBTC 贖回流程

贖回流程相比較而言簡單一些,當使用者希望將持有的 TBTC 換回 BTC 時,只需將 TBTC 以及一小筆「費用」提交給以太坊的智慧合約,同時附上收款的比特幣地址,三位驗證人就必須共同簽署一筆比特幣鏈上交易,將 BTC 轉至規定的地址。如果有驗證人不配合呢?那抵押的 ETH 就只能被清算了。

也正因為驗證人提供了聯合的託管業務,並付出了 ETH 抵押資產,所以贖回者需要支付一小筆額外的費用給他們作為經濟激勵。

所以作為驗證人,可以將 tBTC 系統作為一種收益穩定的資產管理工具。據白皮書計算,驗證人的年化收益約為 1.875%,考慮到 150% 的抵押率,真實的年化收益約為 1.25%。這是讓社羣中不少人吐槽 tBTC 的地方:很多人認為目前設定的收益率較低,可能會導致驗證人的參與動機不足。當然,這也就意味著目前引數設定,對於存款人和贖回者更友好一些。

KEEP 代幣:付出勞動才能獲得回報

在 tBTC 的系統裡,原生代幣 KEEP 是一種工作型代幣,這也就意味著持有 KEEP 不能帶來任何收益,但是在持有 KEEP 的同時又付出勞動,才能因此獲得收益。

回顧一下鑄造 TBTC 的環節,在「步驟 2」中,tBTC 系統需要從包含一群驗證人的池子中抽取其中的三個,是以什麼作為依據抽取的?沒錯,就是按照 KEEP 代幣持有量作為依據的。舉個例子,持有 1000 枚 KEEP 的人是持有 100 枚 KEEP 的人被抽中概率的十倍,也就是如果放在一個很長的時間跨度中,前者幹活的數量是後者的十倍。

持有更多 KEEP 意味著驗證人可以更多的參與託管 BTC,也就有機會獲得更多的潛在收益。

上線兩天就被發現的 Bug,怎麼回事?

在 tBTC 上線的兩天後,官方發現了一個協議的嚴重問題,於是按下了之前預留的全域性開關,將整個系統的充值功能暫停 10 天。

在此之前需要先介紹一個背景知識,比特幣在 10 多年的發展過程中,隨著技術的演進誕生了多種地址型別,由不同型別的指令碼生成:

最初的比特幣地址以「1 開頭」,這類指令碼稱為 P2PKH (Pay to Public Key Hash);

後來誕生了由「3 開頭」的地址,這類指令碼稱為 P2SH (Pay to Script Hash),功能比較強大,支援多籤以及可以和後來的隔離見證組合;

最後誕生的是原生隔離見證地址,由「bc1 開頭」,這類指令碼稱為 P2WPKH (Pay To Witness Public Key Hash),也會被稱為 Bech32。

最初 tBTC 在協議設計時,限定並強制要求贖回的地址必須是 P2WPKH (bc1 開頭)。但是到了今年 2 月,tBTC 的工程負責人提交了一個變更,放鬆了這個限制,也就是支援了 P2WPKH 之外的指令碼(1 或 3 開頭)。

這個調整可以提升使用者體驗,贖回者可以以任意地址贖回,畢竟 Bech32 的普及程度並不高。據 txstats 的資料顯示,目前儲存在 Bech32 中的 BTC 數量約 3%。但 tBTC 的系統卻沒有因為增加支援其他指令碼而做相應的調整。

不過這樣也不一定會產生問題,軟體開發中設定的測試流程,就是為了及早發現這樣的問題,但他們表示,測試用例中竟然沒有覆蓋到「非 P2WPKH」指令碼。雖然後來在測試網中總算測試了 P2SH 地址(3 開頭),但是又由於贖回 DApp 流程中的前端漏洞,導致團隊誤認為該測試透過了。

問題未被發現的一整個流程為:

tBTC 協議設計中僅支援 P2WPKH 地址—> 臨時決定放鬆對 P2WPKH 限制—> 但系統未做相應調整—> 測試用例未覆蓋—> 其他功能漏洞導致誤認為測試透過了

這些問題堆積在一起,導致了 tBTC 帶著漏洞上線主網。

後續如何改進?

在該事件的回顧報告中,tBTC 專案表示將最佳化他們工作流程,還將與安全團隊 Trail of Bits 合作,為 tBTC 規劃更多的自動化整合測試和系統測試。

隨後,為了進一步減少專案的整體風險,tBTC 重新定義了他們的軟體釋出流程。原來上線主網的 tBTC「正式版」將回退至「釋出候選版」(Release candidates),版本號為 RC0,所以下一個版本是 RC1。

補充一下,軟體開發流程中,在釋出某個正式版之前,通常會先發布數個版本稱之為「釋出候選版」(Release candidates),如果未發現任何漏洞,最後一個 Release candidates (RC)就會成為最終的正式版,比如比特幣的下一個大版本 0.20.0 就已經發布了兩個 RC 版本。

tBTC 認為,另外一個可以有效降低專案風險的機制是限制整個系統的容量。也就是他們限制了 BTC 可以換成 TBTC 的最大數量,這樣就算出現嚴重問題,損失的也就是可控範圍內的比特幣或以太坊。

具體來說,在 RC1 版本中,第一個月的系統容量被設定為 100 BTC,之後按月增加,分別是 250 BTC、750 BTC、1000 BTC,這些邏輯也都是按照智慧合約預設的執行即可。5 個月後,該限制將自動解除,而且如果 12 個月後未發生事故,團隊將禁用緊急暫停按鈕,也就是保護了這次系統沒有受到更多損失的預留「後門」。

最後,tBTC 還表示除了 ConsenSys 和 Trail of Bits 的安全審計外,還將組織第三次安全審計,專門針對涉及 BTC 交易和跨鏈通訊的部分。同時,tBTC 還將漏洞賞金計劃的最高獎勵提高了 10 倍,至 100 萬個 KEEP 代幣。

激勵初始化流動性:「質押空投」

考慮到很多潛在的驗證人可能暫時沒有 KEEP 代幣,tBTC 發起了一個為期 6 至 12 個月的「質押空投」(Stakedrop)活動,為專案進行額外的激勵,促進專案的初始化和流動性。

活動中將分發 KEEP 代幣總量的20%,期間使用者可以僅依靠質押 ETH 成為tBTC 網路的驗證人,為資產跨鏈提供去中心化託管服務,而活動結束後,就會按照之前的方案,以 KEEP 代幣作為抽籤依據。

所以對於驗證人而言,這個期間內將獲得除了 1.25% 年化收益率之外的 KEEP 代幣獎勵,而數量要參考參與 tBTC 網路的具體表現,更多細節後續也會公佈。

值得長期觀察

雖然 tBTC 在機制設計、協議治理以及開發流程還有很大的改進空間,比如:改用去中心化預言機、透過系統治理調整引數等,但他們設計的去中心化跨鏈解決方案依舊是目前比較完整的,且產品的實現速度也較快。

再加上該專案由三個團隊合作推進各司其職,以及背後投資方有強大的資源支援,未來該協議的普及應該不是問題,被加到各種 DeFi 協議內也是遲早的事情。

更何況 tBTC 的未來將不僅限於以太坊。採用了 Keep 和 Summa 技術的開放式區塊鏈專案,或許都可以實現比特幣的資產跨鏈,因為這將是各個區塊鏈之間互聯互通的重要基礎設施。因此,tBTC 這類資產跨鏈專案值得長期關注。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;