BitVM 是比特幣生態系統中最新的熱門協議,有潛力使每個在比特幣上建立的專案受益。讓我們來談談BitVM 的設計以及它為比特幣開啟的新可能性。
將欺詐證明引入比特幣
“ 比特幣第二季[3] 「正在進行中,開發人員和用戶都對在比特幣上建立專案以及為解決在比特幣上建立永恆挑戰帶來新用例和新方法感到興奮。
比特幣不具備可擴展性。由於區塊空間有限,交易費用可能會在網路擁堵時大幅波動。每秒僅處理7 筆交易,每個區塊僅包含約1MB 的數據,如果要讓數十億用戶使用比特幣,僅靠比特幣是不夠的。你需要擴展解決方案[4] 。
在比特幣L2s[5](Layer2 區塊鏈)方面已經做了大量工作,以提高比特幣的可擴展性和引入新功能。如今有數十個在比特幣上建構的項目[6] ,其中最有前景的研究和創新領域之一是比特幣Rollups[7]。在高層次上,比特幣Rollups 使交易可以在鏈下發生,然後「捲起」成單一狀態變更提交到區塊鏈,同時有一個密碼學證明系統,以便參與者可以驗證提交的狀態變更是否準確。
然而,將這種證明系統引入比特幣存在挑戰,這就是BitVM 的作用所在。
什麼是BitVM?
BitVM[8]是一種協議/規則集,可以實現在比特幣上進行欺詐證明,開發人員可以立即使用該協議,實現在比特幣上的各種用例,包括比特幣Rollups、最小信任橋等。 BitVM 的核心設計將運算移到鏈下,並在比特幣區塊鏈上實現了詐欺證明機制。
BitVM 可以在比特幣上實現詐欺證明。
BitVM 白皮書於2023 年10 月由Robin Linus 發行(值得注意的是,Robin 是ZeroSync[9] 團隊的一員,該專案致力於為比特幣開發零知識證明系統),開發人員在過去幾個月開始對該協議進行實驗,並且越來越感興趣。
你可以將BitVM 視為參與者事先同意遵循的分散式協定/規則集,而不是由軟體實現的實際虛擬機器(例如以太坊虛擬機)。類似比特幣Ordinals[10] 的工作方式,這裡存在社會共識的組成部分,參與者選擇加入規則,並且這些規則在協議層面上並未完全執行。
BitVM 如此令人興奮的原因在於它為驗證比特幣上的任意電路提供了挑戰-響應協議——你可以在鏈下提出聲明(例如,此證明有效),並使用比特幣L1 來驗證。其中「在比特幣上」是關鍵的,因為在比特幣上構建非常困難,如果實施,BitVM 協議可以用於構建樂觀Rollups、雙向BTC 錨定等,這些可以使其他在比特幣上構建的項目受益。
BitVM 解決了什麼問題?
任何在比特幣上建立的項目都知道與鏈互動有多麼困難(在Hiro,我們親身體會到了這種痛苦)。在比特幣上建立的挑戰之一是,比特幣沒有處理複雜計算的能力。
沒有智能合約。沒有虛擬機器。可程式性僅限於開發人員可以透過操作碼[11] (操作碼)建構的內容,而該功能是有限的。引入新的操作碼需要BIP 和比特幣分叉(這是非常困難的)。
因此,在沒有分叉和新操作碼的情況下,我們只能使用有限的可編程性。在擴展比特幣的情況下,這種限制主要體現在兩個方面:
-
如果要建立雙向BTC 錨定,很難從方程式中去除信任。大多數BTC 錨定今天涉及託管方,無論是單一機構還是控制多簽的聯盟,以處理存款/提款。有時被描述為“寫問題”。在Stacks 生態系統中,即將推出的Nakamoto 升級[12]包括設計用於最小信任橋樑——稍後將詳細介紹。
-
如果要透過Rollup 將計算或交易移到鏈下,很難在比特幣本身上驗證和驗證鏈下資料。這是一個驗證問題。
對於這兩個問題,BitVM 可以透過在比特幣L1 上實現挑戰/響應協議來解鎖戲劇性的設計改進。
BitVM 如何運作?
將BitVM 視為協定或一組規則是一個很好的方式。如果兩個方事先同意遵循這些規則(這意味著他們需要相互合作),則可以進行任意的挑戰-回應遊戲。理論上,這可以用於在比特幣上驗證/證明任意複雜的程式(這些程式的實際執行發生在鏈下)。
讓我們舉個具體的例子。
假設Alice 和Bob 想玩一個拋硬幣遊戲。兩位玩家各自在獎金池放入0.5 BTC。正面贏得1 BTC。 Alice 拿著硬幣並將首先拋硬幣。 Bob 希望確保Alice 不作弊。以下是他們如何使用BitVM 玩這個遊戲(為簡單起見省略了許多細節):
-
Alice 和Bob 同意遵循BitVM 協定。
-
假設正面以值H0 表示,反面以值H1 表示。 Alice 透過選擇兩個其他值,例如P0 和P1,並對它們進行哈希,產生了H0 和H1。因此,Hash(P0) = H0 和Hash(P1) = H1。 P0 稱為H0 的“原像”,P1 稱為H1 的原像。
-
Alice 與Bob 分享值H0 和H1(實際上,Alice 不可撤銷地「承諾」這些雜湊值,因此她不能後來聲稱有不同的值)。 Bob 不知道原像P0 和P1(並且「猜測」這些值是非常困難的,因此我們可以安全地假設Bob 不會神奇地發現這些值)。
-
Alice 和Bob 預先簽署兩筆交易:一筆用於挑戰,另一筆用於回應。
-
在挑戰交易中,Bob 將包含一個腳本,該腳本基本上檢查提供的輸入是否哈希為已知哈希值H0 或H1 之一——如果哈希為H0,則Bob 知道該值是正面;如果是H1,則是反面。此外,腳本具有一個時間鎖,如果在截止日期前未收到回應,則Bob 獲得獎金池。
-
在回應交易中,Alice 可以透過包含對應的原像P0 或P1 來「揭示」拋硬幣結果。如果Alice 未包含任何值、包含兩個值或包含除P0 或P1 之外的任何值,則Bob 獲得獎金池。否則,如果值為P0(正面),Alice 獲得獎金池。
-
現在我們準備開始遊戲。 Alice 拋硬幣但尚未揭示結果。 Bob 發出挑戰交易,隨後Alice 廣播回應交易。透過前面描述的腳本,在鏈上執行「詐欺偵測」的邏輯。顯然,這是一個瑣碎且刻意設計的例子,但它展示了關鍵思想。對於一個稍微複雜的例子,請考慮由一位名為Super Testnet 的開發者設計的井字棋遊戲。你可以在這裡查看GitHub 儲存庫[13] ,甚至今天可以玩「bit tac toe[14]」。Super Testnet 實際上向Hiro 展示了這個遊戲,你可以在下面觀看:
Bitvm Crash Course on Youtube [15]
以下是遊戲的高級組件:
-
井字棋是9 宮格。第一位玩家Alice 最多可以走5 步,因此有45 個預影像和雜湊(每輪9 個)。第二位玩家Bob 最多可以走4 步,因此有36 個哈希。
-
井字棋有3 種「作弊」方式:玩家可以在他們的回合放置多個X / O;玩家可以覆蓋他們先前使用過的方格;玩家可以覆蓋對手先前使用過的方格。因此,挑戰/響應協議圍繞著檢測這些情況而建構。
-
挑戰交易將迫使另一位玩家「揭示」他們在哪個方格放置了X 或O。
-
回應交易將具有一個腳本,該腳本將針對上述所有3 種情況進行檢查:如果未偵測到欺詐,則遊戲繼續(或遊戲結束,因為有人獲勝)。如果偵測到欺詐,則挑戰者獲勝,證明者失敗。
請注意,在這兩種情況下,欺詐證明是手工製作的,並專門為該用例設計:井字棋的欺詐證明對於拋硬幣或其他任何事情都不起作用。
回到大局,BitVM 白皮書描述了一種通用方法:針對任何程序,它提供了構建該程序的有效性證明的一種方式。關鍵見解如下:
-
從拋硬幣的例子中,我們看到瞭如何驗證單一位元:讓我們稱之為「比特承諾」證明。
-
有了位元承諾,我們可以建立邏輯閘承諾:考慮布林AND / OR 運算子- 針對任何兩個輸入(每個取值為0 或1),該運算子定義一個單一輸出。因此,使用2 個位元承諾作為輸入和1 個位元承諾作為輸出,我們可以為任何邏輯閘創建有效性證明。 BitVM 白皮書使用了一個NAND 邏輯閘。
-
最後,任何任意計算都可以使用一系列邏輯閘來表示。 BitVM 白皮書將其稱為「二進位電路」。這樣的電路可以使用Tapscript 有效地表示,每個tap 樹中的葉子代表一個單一的閘承諾。
-
然後,挑戰/響應協議基本上涉及驗證特定門承諾的輸出。在最壞的情況下,你可能需要驗證每個單一閘的輸出。
查看這個儲存庫[16] ,了解將任意程式轉換為tapleaf 電路的一種方法。
Stacks 如何適應?
BitVM 在Stacks 生態系中的兩個明顯且最相關的應用是:
-
改善sBTC 的信任假設
-
為比特幣上的Stacks 區塊添加有效性證明
為什麼選擇這兩個應用?目前的sBTC 設計[17]已經是正在開發中的比特幣最安全、最小化信任的雙向錨定之一。儘管如此,在安全模型和信任假設[18]方面仍有改進的空間。與要求至少30%誠實簽署者或信任一組高聲譽簽署者不同,基於BitVM 的方法理論上可以使sBTC 只需一個誠實參與者即可運作。
同樣,雖然每個Stacks 區塊在比特幣上結算,但當前設計僅允許你在擁有鏈狀態的一份副本時獨立驗證Stacks 資料。如果使用BitVM,Stacks 區塊還包括有效性證明,那麼你不僅可以檢查完整性(給定Stacks 區塊中的資料與儲存在比特幣上的哈希一致),還可以檢查正確性(你可以透過查看存儲在比特幣上的證明驗證給定Stacks 區塊中的交易是否實際執行正確)。換句話說:這將使Stacks 能夠發展成為比特幣上的樂觀Rollup。
如何利用BitVM 實現這些應用的具體方法需要進行更多的研究和開發。但我們可以嘗試在高層次上勾勒出一些想法。
BitVM 與sBTC
考慮sBTC 的例子:錨定進程非常簡單,只需廣播比特幣交易即可完成。然而,在目前設計中,錨定退出過程依賴簽署者來處理請求(在Stacks 上)。這帶來了一些約束:
-
退出可能需要時間,這取決於有多少簽名者離線/誠實。
-
你需要信任這個簽名者網絡,更廣泛地信任整個Stacks。
如果改為(或可能還要)在比特幣上產生一個有效性證明並使用BitVM[19],那麼:
-
退出可以進行樂觀處理(因此,在快樂路徑上,可以更快地處理)。
-
該錨只需要一個誠實參與者即可運作;你不需要信任簽名者網路的30%。
關鍵是確切地找出如何建立有效性證明。 BitVM 白皮書中所描述的蠻力方法可以奏效,但可能會導致一個非常龐大的tapleaf 電路(數十億個節點)。這反過來意味著任何挑戰都將需要很長時間(可能需要數週或更長時間),更不用說在註意力和資源(交易費用!)方面的成本。正如我們在井字棋的例子中看到的,可以建立更簡潔的證明,專為特定用例量身定制,類似的方法可能對這種情況更有效。
BitVM 與Stacks
至於整個Stacks 區塊的有效性證明,有許多值得探索的設計空間。例如,證明是以單一交易的粒度還是整個區塊的粒度還是介於兩者之間(例如構成因果依賴鏈的交易)?是否可能採取漸進式方法,例如先為簡單的代幣轉帳產生證明,然後逐漸添加Clarity 合約?這是否是比特幣區塊空間的良好利用,因為Stacks 礦工和網路參與者已經有經濟誘因來維護Stacks 鏈狀態的完整歷史?
結論
BitVM 是一個令人興奮的主題,需要比部落格文章更多的研究、思考和實驗,但我希望這有助於闡明比特幣中最近一些令人興奮的發展之一。