
解讀BitVM:如何在BTC鏈上驗證欺詐證明?(執行EVM或其他VM的操作碼)
TechFlow Selected深潮精選

解讀BitVM:如何在BTC鏈上驗證欺詐證明?(執行EVM或其他VM的操作碼)
BitVM無需on chain的數據,先在鏈下發布並存儲,鏈上只存放Commitment(承諾)。
作者:霧月 & Faust,極客web3
顧問:Kevin He, BitVM 中文社區發起人,ex Web3 Tech Head@Huobi
導語:目前,比特幣Layer2已經成為一股熱潮,市面上自我定位為“比特幣Layer2”的項目,據說已有數十家。其中,不少自封為“Rollup”的比特幣Layer2,聲稱採用了BitVM白皮書提出的方案,使得BitVM成為比特幣生態的顯學。
但無奈的是,目前大多數關於BitVM的文字資料,都未能通俗的解釋其原理。
本文是我們讀過了BitVM只有8頁的白皮書後,查閱了與Taproot、MAST樹、Bitcoin Script相關的資料後,得出的簡單總結。為了便於讀者理解,其中一些表達方式與BitVM白皮書中闡述的內容不同,我們假定讀者對Layer2有一些瞭解,並能夠理解“欺詐證明”的簡單思想。

先幾句話概括BitVM的思路:無需on chain的數據,先在鏈下發布並存儲,鏈上只存放Commitment(承諾)。
發生挑戰/欺詐證明時,我們只把需要上鍊的數據on chian,證明其與鏈上的Commitment存在關聯。之後,BTC主網再校驗這些on chian的數據是否有問題,數據生產者(處理交易的節點)是否有作惡行為。這一切都遵循奧卡姆剃刀原則——“若非必要,勿增實體”(能少on chain,就少on chain)。

正文:所謂的基於BitVM的BTC鏈上欺詐證明驗證方案,通俗總結:
1.BitVM的核心思路
首先,計算機/處理器,是一個由大量邏輯門電路組合成的輸入-輸出系統。BitVM的核心思路之一,是用Bitcoin Script(比特幣腳本),模擬出邏輯門電路的輸入-輸出效果。
只要能模擬出邏輯門電路,理論上就可以實現圖靈機,完成所有可計算任務。也就是說,只要你人多錢多,就可以召集一幫工程師,幫你用功能簡陋的Bitcoin Script代碼,先模擬出邏輯門電路,再用巨量的邏輯門電路實現EVM或是WASM的功能。

(此截圖來自於一款 教學遊戲:《圖靈完備》 ,其中最核心的內容,就是用邏輯門電路尤其是與非門,搭建出完整的CPU處理器)
有人曾將BitVM的思路比作:在《我的世界》裡,用紅石電路做一個M1處理器。或者說,相當於用積木撘出來紐約帝國大廈。

(據說,這是有人花了一年時間,在《我的世界》裡搭出來的“處理器”)
2. 為什麼非要用Bitcoin Script模擬EVM或WASM?
這樣不是很麻煩嗎?這是因為大多數比特幣Layer2往往選擇支持Solidity或Move等高級語言,而目前可以直接在比特幣鏈上運行的,是Bitcoin Script這種簡陋的、由一堆獨特操作碼組成的、非圖靈完備的編程語言。

(一段Bitcoin Script代碼示例)
如果比特幣Layer2打算像Arbitrum等以太坊Layer2一樣,在Layer1上驗證欺詐證明,極大程度繼承BTC安全性,需要在BTC鏈上直接驗證“某筆有爭議的交易”或“某個有爭議的操作碼”。如此一來,就要把Layer2採用的Solidity語言 / EVM對應的操作碼,放在比特幣鏈上重新跑一遍。問題歸結為:
用Bitcoin Script這種比特幣native的簡陋編程語言,實現出EVM或其他虛擬機的效果。
所以,從編譯原理的角度去理解BitVM方案,它是把EVM / WASM / Javascript操作碼,轉譯為Bitcoin Script的操作碼,邏輯門電路作為“ EVM 操作碼 ——> Bitcoin Script操作碼”兩者之間的一種中間形態(IR)。

(BitVM白皮書裡,談到在比特幣鏈上執行某些“有爭議的指令”的大致思路)
Anyway,最終模擬出的效果是,把原本在EVM / WASM上才能處理的指令,放到比特幣鏈上直接處理 。這個方案雖然可行,但難點在於,如何用大量的邏輯門電路作為中間形態,表達出所有的EVM / WASM 操作碼op code。而且,用邏輯門電路的組合,直接表達某些極為複雜的交易處理流程,可能產生巨大的工作量。
3.與Arbitrum高度相似的“交互式欺詐證明”
下面說下BitVM白皮書中提到的另一個核心,也就是與Arbitrum高度相似的“交互式欺詐證明”。
交互式欺詐證明會涉及到一個稱為assert(斷言)的詞,一般而言,Layer2的提議者Proposer(往往由排序器充當),會在Layer1上發佈assert斷言,聲明某些交易數據、狀態轉換結果,是有效無誤的。
如果有人認為Proposer提交的assert斷言有問題(關聯的數據有誤),就會發生爭議。此時,Proposer和Challenger會回合式的交換信息,並對有爭議的數據進行二分法查找,快速定位到某個粒度極細的操作指令,及其關聯的數據片段。
對這個有爭議的操作指令(OP Code),需要連帶其輸入參數在Layer1上直接執行,並對輸出結果作出驗證(Layer1節點會把自己計算得到的輸出結果,與Proposer之前發佈的輸出結果進行對比)。在Arbitrum裡,這被稱為“單步欺詐證明”。

(Arbitrum的交互欺詐證明協議中,會通過二分法檢索Proposer發佈的數據,儘快定位到有爭議的那條指令及執行結果,最後發送單步欺詐證明到Layer1,進行最終驗證)
參考資料:前Arbitrum技術大使解讀Arbitrum的組件結構(上)

(Arbitrum的交互式欺詐證明流程圖,闡述的比較粗糙)
到了這裡,單步欺詐證明的思路很好理解了:絕大多數發生在Layer2的交易指令,不需要在BTC鏈上重新驗證。但其中某個有爭議的數據片段/操作碼,在被人挑戰時要在Layer1重放一遍。
如果檢測結論為:
-
Proposer之前發佈的數據有問題,則Slash掉Proposer質押的資產;
-
如果是Challenger有問題,則Slash掉Challenger質押的資產。
-
如果Prover長時間不響應挑戰,也可以被Slash。
Arbitrum通過以太坊上的合約來實現上述效果,BitVM則要藉助Bitcoin Script實現時間鎖、多籤等功能。

4.MAST樹和Merkle Proof
簡單講完“交互式欺詐證明”與“單步欺詐證明”後,我們將談及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樹又是什麼?它的中文名是“抽象語法樹”,簡單的講,就是把一段複雜的指令,通過詞法分析,細分為一堆基礎的操作單元,然後組織為一棵樹狀的數據結構。

(一個AST樹的簡單案例,這棵AST樹將x=2,y=x*3 這樣的簡單運算,細分為了底層操作碼+數據)
而MAST樹,就是把AST樹Merkle化,以支持Merkle Proof。Merkle樹有一個好處,就是它可以實現高效率的“數據壓縮”。比如,你想在必要時,將Merkle樹上的某段數據發佈到BTC鏈上,但又要讓外界確信,這個數據片段確實存在於Merkle樹上,而不是你“隨手拈來”的,怎麼辦?
你只要事先將Merkle樹的Root記錄在鏈上,在未來出示Merkle Proof,證明某段數據,存在於Root對應的Merkle樹上,就行。

(Merkle Proof/Branch與Root之間的關係)
所以,無需將完整的MAST樹存放在BTC鏈上,只需要提前披露其Root充當Commitment,在必要時出示 數據片段 + Merkle Proof /Branch即可。這種可以極大程度壓縮on chain的數據量,且能保證on chain數據真的存在於MAST樹上。而且,僅在BTC鏈上公開小部分數據片段+Merkle Proof,而不是公開所有數據,能起到很好的隱私保護效果。
參考資料:數據扣留與欺詐證明:Plasma不支持智能合約的原因

(MAST樹示例)
BitVM的方案,嘗試把所有的邏輯門電路用比特幣腳本表達出來,再組織成一個巨大的MAST樹,這棵樹最底下的葉子leaf(圖中的Content),就對應著用比特幣腳本實現的邏輯門電路。
Layer2的Proposer,會頻繁的在BTC鏈上發佈MAST樹的root,每棵MAST樹,都關聯著一筆交易,涉及其所有的 輸入參數 / 操作碼 / 邏輯門電路。某種程度上,這類似於Arbitrum的Proposer在以太坊鏈上發佈Rollup Block。
當爭議發生時,挑戰者在BTC鏈上聲明,自己要挑戰Proposer發佈的哪個Root,然後要求Proposer揭示Root對應的某段數據。之後,Proposer出示默克爾證明,反覆在鏈上披露MAST樹的小部分數據片段,直到和挑戰者共同定位到有爭議的邏輯門電路。之後就可以執行Slash。

(圖源)
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和挑戰過程,該如何在處理流程上進一步優化,需要消耗很多腦細胞。
歡迎加入深潮 TechFlow 官方社群
Telegram 訂閱群:https://t.me/TechFlowDaily
Twitter 官方帳號:https://x.com/TechFlowPost
Twitter 英文帳號:https://x.com/BlockFlow_News














