盡可能通俗的解釋 BitVM 原理,闡明未來比特幣 Layer2 的技術解決方案。
作者:霧月 & Faust,極客 Web3
顧問:Kevin He, BitVM 中文社區贊助者,ex Web3 Tech Head@Huobi
封面:Photo by Shubham’s Web3 on Unsplash
導語:目前,比特幣 Layer2 已經成為一股熱潮,市面上自我定位為「比特幣 Layer2」的項目,據說已有數十家。 其中,不少自封為 “Rollup” 的比特幣 Layer2,聲稱採用了 BitVM 白皮書提出的方案,使得 BitVM 成為比特幣生態的顯學。
但無奈的是,目前大多數關於 BitVM 的文字資料,都未能通俗的解釋其原理。
本文是我們讀過了 BitVM 只有 8 頁的白皮書後,查閱了與 Taproot、MAST 樹、Bitcoin Script 相關的資料後,得出的簡單總結。 為了便於讀者理解,其中一些表達方式與 BitVM 白皮書中闡述的內容不同,我們假定讀者對 Layer2 有一些瞭解,並能夠理解 “欺詐證明” 的簡單思想。
![](https://web3caff.com/wp-content/uploads/2024/01/image-877.png)
先幾句話概括 BitVM 的思路:無需 on chain 的數據,先在鏈下發佈並存儲,鏈上只存放 Commitment(承諾)。
發生挑戰/欺詐證明時,我們只把需要上鏈的數據 on chian,證明其與鏈上的 Commitment 存在關聯。 之後,BTC 主網再校驗這些 on chian 的數據是否有問題,數據生產者(處理交易的節點)是否有作惡行為。 這一切都遵循奧卡姆剃刀原則——若非必要,勿增實體 “(能少 on chain,就少 on chain)。
![](https://web3caff.com/wp-content/uploads/2024/01/image-876.png)
正文:所謂的基於 BitVM 的 BTC 鏈上欺詐證明驗證方案,通俗總結:
1. 首先,計算機/處理器,是一個由大量邏輯門電路組合成的輸入-輸出系統。 BitVM 的核心思路之一,是用 Bitcoin Script(比特幣腳本),類比出邏輯門電路的輸入-輸出效果。
只要能類比出邏輯門電路,理論上就可以實現圖靈機,完成所有可計算任務。 也就是說,只要你人多錢多,就可以召集一幫工程師,幫你用功能簡陋的 Bitcoin Script 代碼,先類比出邏輯門電路,再用巨量的邏輯門電路實現 EVM 或是 WASM 的功能。
![](https://web3caff.com/wp-content/uploads/2024/01/image-875.png)
有人曾將 BitVM 的思路比作:在《我的世界》里,用紅石電路做一個 M1 處理器。 或者說,相當於用積木撘出來紐約帝國大廈。
![](https://web3caff.com/wp-content/uploads/2024/01/image-874.png)
2. 那麼,為什麼非要用 Bitcoin Script 類比 EVM 或 WASM? 這樣不是很麻煩嗎? 這是因為大多數比特幣 Layer2 往往選擇支援 Solidity 或 Move 等高級語言,而目前可以直接在比特幣鏈上運行的,是 Bitcoin Script 這種簡陋的、由一堆獨特操作碼組成的、非圖靈完備的程式設計語言。
![](https://web3caff.com/wp-content/uploads/2024/01/image-873.png)
如果比特幣 Layer2 打算像 Arbitrum 等乙太坊 Layer2 一樣,在 Layer1 上驗證欺詐證明,極大程度繼承 BTC 安全性,需要在 BTC 鏈上直接驗證「某筆有爭議的交易」或「某個有爭議的操作碼」。。 如此一來,就要把 Layer2 採用的 Solidity 語言 / EVM 對應的操作碼,放在比特幣鏈上重新跑一遍。 問題歸結為:
用 Bitcoin Script 這種比特幣 native 的簡陋程式設計語言,實現出 EVM 或其他虛擬機的效果。
所以,從編譯原理的角度去理解 BitVM 方案,它是把 EVM / WASM / Javascript 操作碼,轉譯為 Bitcoin Script 的操作碼,邏輯門電路作為 “ EVM 操作碼 ——> Bitcoin Script 操作碼” 兩者之間的一種中間形態(IR)。
![](https://web3caff.com/wp-content/uploads/2024/01/image-872.png)
Anyway,最終類比出的效果是,把原本在 EVM / WASM 上才能處理的指令,放到比特幣鏈上直接處理 。 這個方案雖然可行,但難點在於,如何用大量的邏輯門電路作為中間形態,表達出所有的 EVM / WASM 操作碼 op code。 而且,用邏輯門電路的組合,直接表達某些極為複雜的交易處理流程,可能產生巨大的工作量。
3. 下面說下 BitVM 白皮書中提到的另一個核心,也就是與 Arbitrum 高度相似的 “互動式欺詐證明”。
互動式欺詐證明會涉及到一個稱為 assert(斷言)的詞,一般而言,Layer2 的提議者 Proposer(往往由排序器充當),會在 Layer1 上發佈 assert 斷言,聲明某些交易數據、狀態轉換結果,是有效無誤的。
如果有人認為 Proposer 提交的 assert 斷言有問題(關聯的數據有誤),就會發生爭議。 此時,Proposer 和 Challenger 會回合式的交換資訊,並對有爭議的數據進行二分法查找,快速定位到某個粒度極細的操作指令,及其關聯的數據片段。 對這個有爭議的操作指令(OP Code),需要連帶其輸入參數在 Layer1 上直接執行,並對輸出結果作出驗證(Layer1 節點會把自己計算得到的輸出結果,與 Proposer 之前發佈的輸出結果進行對比)。 在 Arbitrum 裡,這被稱為「單步欺詐證明」。
![](https://web3caff.com/wp-content/uploads/2024/01/image-871.png)
參考資料:前 Arbitrum 技術大使解讀 Arbitrum 的元件結構(上)
![](https://web3caff.com/wp-content/uploads/2024/01/image-870.png)
到了這裡,單步欺詐證明的思路很好理解了:絕大多數發生在 Layer2 的交易指令,不需要在 BTC 鏈上重新驗證。 但其中某個有爭議的數據片段/操作碼,在被人挑戰時要在 Layer1 重放一遍。
如果檢測結論為:Proposer 之前發佈的數據有問題,則 Slash 掉 Proposer 質押的資產; 如果是 Challenger 有問題,則 Slash 掉 Challenger 質押的資產。 如果 Prover 長時間不回應挑戰,也可以被 Slash。
Arbitrum 通過乙太坊上的合約來實現上述效果,BitVM 則要藉助 Bitcoin Script 實現時間鎖、多簽等功能。
![](https://web3caff.com/wp-content/uploads/2024/01/image-869.png)
4. 簡單講完「互動式欺詐證明」與「單步欺詐證明」後,我們將談及 MAST 樹和 Merkle Proof。
前面談到,BitVM 方案中,不會將 Layer2 在鏈下處理的大量交易數據/涉及的巨量邏輯門電路 直接 on chain,只在必要時刻將極少數據/邏輯門電路 on chian。
但是,我們需要某種方式,證明這些「原本在鏈下,現在要 on chain」的數據,不是隨手捏造的,這就是密碼學中常提到的 Commitment。 Merkle Proof 就是 Commitment 的一種。
首先,我們說下 MAST 樹。 MAST 樹全名為 Merkelized Abstract Syntax Trees,是把編譯原理里涉及的 AST 樹,轉化為 Merkle Tree 之後的形態。
那麼,AST 樹又是什麼? 它的中文名是「抽象語法樹」,簡單的講,就是把一段複雜的指令,通過詞法分析,細分為一堆基礎的操作單元,然後組織為一棵樹狀的數據結構。
![](https://web3caff.com/wp-content/uploads/2024/01/image-868.png)
而 MAST 樹,就是把 AST 樹 Merkle 化,以支援 Merkle Proof。 Merkle 樹有一個好處,就是它可以實現高效率的「數據壓縮」。。 比如,你想在必要時,將 Merkle 樹上的某段數據發佈到 BTC 鏈上,但又要讓外界確信,這個數據片段確實存在於 Merkle 樹上,而不是你「隨手拈來」的,怎麼辦?
你只要事先將 Merkle 樹的 Root 記錄在鏈上,在未來出示 Merkle Proof,證明某段數據,存在於 Root 對應的 Merkle 樹上,就行。
![](https://web3caff.com/wp-content/uploads/2024/01/image-867.png)
所以,無需將完整的 MAST 樹存放在 BTC 鏈上,只需要提前披露其 Root 充當 Commitment,在必要時出示 數據片段 + Merkle Proof /Branch 即可。 這種可以極大程度壓縮 on chain 的數據量,且能保證 on chain 數據真的存在於 MAST 樹上。 而且,僅在 BTC 鏈上公開小部分數據片段+Merkle Proof,而不是公開所有數據,能起到很好的隱私保護效果。 參考資料:數據扣留與欺詐證明:Plasma 不支援智能合約的原因
![](https://web3caff.com/wp-content/uploads/2024/01/image-866.png)
BitVM 的方案,嘗試把所有的邏輯門電路用比特幣腳本表達出來,再組織成一個巨大的 MAST 樹,這棵樹最底下的葉子 leaf(圖中的 Content),就對應著用比特幣腳本實現的邏輯門電路。
Layer2 的 Proposer,會頻繁的在 BTC 鏈上發佈 MAST 樹的 root,每棵 MAST 樹,都關聯著一筆交易,涉及其所有的 輸入參數 / 操作碼 / 邏輯門電路。 某種程度上,這類似於 Arbitrum 的 Proposer 在乙太坊鏈上發布 Rollup Block。
當爭議發生時,挑戰者在 BTC 鏈上聲明,自己要挑戰 Proposer 發佈的哪個 Root,然後要求 Proposer 揭示 Root 對應的某段數據。 之後,Proposer 出示默克爾證明,反覆在鏈上披露 MAST 樹的小部分數據片段,直到和挑戰者共同定位到有爭議的邏輯門電路。 之後就可以執行 Slash。
![](https://web3caff.com/wp-content/uploads/2024/01/image-865.png)
5. 到這裡,BitVM 整個方案最重要的部分基本講完,雖然其中某些細節還是有點晦澀,但相信讀者已經可以 get 到 BitVM 的精華與要旨。 至於其白皮書裡提到的 bit value commitment,是為了防止 Proposer 在被挑戰並被迫在鏈上驗證邏輯門電路時,給該邏輯門的輸入值「既賦值 0,又賦值 1」,產生二義性混亂。
總結:BitVM 的方案,先用比特幣腳本表達邏輯門電路,再用邏輯門電路表達 EVM/其他 VM 的操作碼,再用操作碼表達任意一條交易指令的處理流程,最後組織成 merkle tree/MAST 樹。
這樣的一棵樹,如果表達的交易處理流程很複雜,很容易破 1 億個 leaf,所以要盡量縮減 Commitment 佔用的區塊空間,以及欺詐證明波及的範圍。
雖然單步欺詐證明,只需要 onchain 極小的一段數據和邏輯門腳本,但完整的 Merkle Tree 要長期存儲在鏈下,以備有人挑戰時,可以隨時 onchain 樹上的數據。
Layer2 每筆發生的交易,都會產生一個大號 Merkle Tree,節點的計算和存儲壓力可想而知,大多數人可能不願意去運行節點(但這些歷史數據可以被過期淘汰,而 B^2 network 專門引入類似 Filecoin 的 zk 存儲證明,激勵存儲節點長期保存歷史數據)
不過,基於欺詐證明的樂觀 Rollup,本身也不需要有太多節點,因為其信任模型是 1/N,只要 N 個節點中有 1 個是誠實的,能夠在關鍵時刻發起欺詐證明,Layer2 網路就是安全的。
但是,基於 BitVM 的 Layer2 方案設計中,還存在許多挑戰,比如:
1)理論上說,為了進一步壓縮數據,不必直接在 Layer1 驗證操作碼,可以將操作碼的處理流程再度壓縮為 zk proof,讓挑戰者對 zk proof 的驗證步驟進行挑戰。 這樣可以大幅度壓縮 on chain 的數據量。 但具體的開發細節會很複雜。
2)Proposer 和 Challenger 要在鏈下反覆產生交互,協定該如何設計,Commitment 和挑戰過程,該如何在處理流程上進一步優化,需要消耗很多腦細胞。
參考文獻:
1.BitVM 白皮書
2.Deep dive into BitVM -Computing paradigm to express Turing-complete Bitcoin contracts-
3.Merkelized Abstract Syntax Trees
https://hashingit.com/elements/research-resources/2014-12-11-merkelized-abstract-syntax-trees.pdf
4. 數據扣留與欺詐證明:Plasma 不支援智能合約的原因
https://mp.weixin.qq.com/s/oOPZqIoi2p6sCxBdfUP4eA
5. 前 Arbitrum 技術大使解讀 Arbitrum 的元件結構(上)
https://mp.weixin.qq.com/s/BgpHI4oXQYYVpB5v6x8cAg
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。