目前全球比特VM計畫正在風頭上,據悉已經有比特幣層2計畫自稱採用了BitVM白皮書提出的方案。但是關於BitVM的文字資料大多未能通俗地解釋其原理。文章為了讓讀者理解,對BitVM進行了簡單總結,包括其核心思想和他們嘗試解決的問題。另外也提到了BitVM方案中的核心內容,如雙喜拉坎電路及的研究對煩瑣原理和資料處理流程。文章最後同時也提到了BitVM方案仍存在一些挑戰,例如操作碼的處理流程以及核心概念需要進一步最佳化。
作者:霧月&Faust,極客web3
顧問:Kevin He,BitVM中文社群發起人,前Web3技術負責人@Huobi
目前,比特幣Layer2已成為一股熱潮,不久後自我定位為「比特幣Layer2」的項目,據悉目前已有家。其中,明顯自封為「Rollup」的比特幣Layer2,聲稱採用了BitVM白皮書提出的方案,使BitVM 成為比特幣生態的顯著學。
但無奈的是,目前大多數關於BitVM的文字資料,都未能通俗的解釋其原理。
本文是我們讀完BitVM只有8頁的白皮書後,查閱了與Taproot、MASTTree、Bitcoin Script相關的資料後,進行了簡單的總結。為了便於讀者理解,其中一些表達方式與BitVM導出中闡述的內容不同,我們假設讀者對Layer2有一些了解,並且能夠理解「欺詐論證」的簡單想法。
前幾句話說出了全球BitVM的想法:耗盡鏈上的數據,先在鏈下發布並存儲,鏈上只存放承諾(承諾)。
發生挑戰/詐欺證明時,我們只把需要鏈上的數據,證明其與鏈上的承諾有關聯。之後,BTC主網重新驗證這些鏈上的資料是否有問題,資料生產者(處理)這一切都遵循奧卡姆剃刀原則-「若非必要,勿增實體」(能少在鏈上,就少在鏈上)。
正文:所謂以BitVM為基礎的BTC鏈上詐欺證明驗證方案,通俗總結:
1.首先,計算機/處理器,是一個由大量邏輯閘電路組合成的輸入輸出系統。 BitVM的核心思想之一,是用Bitcoin Script(比特幣腳本),模擬出邏輯閘電路的輸入輸出效果。
只要能模擬出邏輯閘電路,理論上就可以實現圖靈機,完成所有可計算任務。只要你人多錢多,就可以召集一群工程師,補救用功能簡陋的比特幣腳本程式碼,先模擬出邏輯閘電路,再用巨量的邏輯閘電路實現EVM或WASM的功能。
有人將BitVM的想法比喻為:在《我的世界》裡,用紅石電路做了一個M1處理器。或者說,實際上用積木撘出來紐約帝國大廈。
2. 那麼,為什麼非使用比特幣腳本模擬EVM或WASM?這樣不是很麻煩嗎?這是因為大多數比特幣Layer2往往選擇支援Solidity或Move等高級語言,而目前可以直接在比特幣鏈上運行的,是比特幣腳本這種簡單的、由大量獨特的操作碼組成的、非圖靈的程式語言。
如果比特幣Layer2打算像Arbitrum等以太坊Layer2一樣,在Layer1上驗證欺騙證明,極大程度繼承BTC安全性,需要在BTC鏈上直接驗證「某筆有爭議的交易」或「某個有爭議的「如此一來,就等於Layer2採用的Solidity語言/EVM對應的操作碼,放在比特幣鏈上重新運行一遍。問題歸結為:
使用比特幣腳本這種比特幣原生的簡陋程式語言,實現EVM或其他虛擬機器的效果。
所以,從編譯原理的角度去理解BitVM方案,就是把EVM / WASM / Javascript操作碼,轉譯為比特幣腳本的操作碼,邏輯閘電路作為「 EVM操作碼->比特幣腳本操作碼」兩者之間的一種中間形態(IR)。
(BitVM出口裡,談到比特幣鏈上某些執行「有爭議的指令」的大致想法)
不管怎樣,最終模擬出來的效果是,把具體在EVM / WASM上才能處理的指令,放到比特幣鏈上直接處理。這個方案雖然可行,但困難在於,如何用大量的邏輯閘電路作為中間形態,表達出所有的EVM / WASM操作碼。而且,用邏輯閘電路的組合,直接表達一些極為複雜的交易處理流程,可能產生龐大的工作量。
3.下面說下BitVM外匯中提到的另一個核心,與Arbitrum高度相似的「吸吮論證」。
行為詐欺論證會涉及一個叫做assert(斷言)的詞,一般而言,Layer2的提議者Proposer(往往由排序器扮演),會在Layer1上發布assert斷言,某些聲明交易數據、狀態轉換結果,是有效無誤的。
如果認為Proposer提交的斷言斷言有問題(關聯的資料有誤),就會發生爭議。此時,Proposer和Challenger會式輪詢的交易所信息,對有爭議的數據進行二分法查找,快速有人定位到某些粒度極細的操作指令,以及相關的數據片段。
這個有爭議的操作指令(OP Code),需要連帶其輸入參數對Layer1上直接執行,事務輸出結果做驗證(Layer1節點把自己計算得到的輸出結果,與Proposer之前發布的輸出結果進行比較)。在Arbitrum裡,這被稱為「單步欺騙論證」。
參考資料:前Arbitrum技術報告解讀Arbitrum的組件結構(上)
到了這裡,單步驟方案論證的想法很好理解了:大多數發生在Layer2的交易指令,不需要在BTC鏈上重新驗證。但其中一些有爭議的資料片段/操作碼,在被人挑戰時要在Layer1重播一次。
如果檢測結論為:Proposer先前發布的數據有問題,則砍掉Proposer質押的資產;如果是Challenger有問題,則砍掉Challenger質押的資產。如果Prover長時間不回應挑戰,也可以被Slash。
Arbitrum透過以太坊上的合約來實現上述效果,BitVM則要藉助比特幣腳本實現時間鎖、多簽等功能。
4.簡單講完「醉酒騙局論證」與「單步騙局論證」後,我們將談到MAST樹和Merkle Proof。
前面談到,BitVM方案中,不會將Layer2在鏈下處理的大量交易資料/涉及的巨量邏輯閘電路直接上鍊,只在必要時刻將極少的資料/邏輯閘電路直接上鍊。
但是,我們需要某種方式,證明這些「到底在鏈下,現在要上鍊」的數據,不是隨手捏造的,這就是密碼學中常提到的承諾。 Merkle Proof就是承諾的一種。
首先,我們說下全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樹上,就行。
因此,消耗將完整的MAST 樹存放在BTC 鏈上,只需要提前披露其根充當承諾,在必要時出示資料碎片+ Merkle Proof /Branch 即可。這樣可以極大程度壓縮鏈上的資料量,且能確保鏈上資料確實存在於MAST樹上。而且,僅在BTC鏈上公開小部分數據片段+Merkle Proof,否則不是公開所有數據,能很好的隱私保護效果。
參考資料:資料扣留與憑證證明:Plasma不支持智能合約的原因
BitVM 的方案,試著把所有的邏輯閘電路用比特幣腳本表達出來,再組織成一棵巨大的桅杆樹,這棵樹最底下的葉子葉(圖中的內容),就對應著用比特幣腳本實現的邏輯閘電路。
Layer2的Proposer,會關閉的在BTC鏈上發布MAST樹的根,每一棵MAST樹,都關聯著一筆交易,涉及其所有的輸入參數/操作碼/邏輯閘電路。某種程度上,這類似於Arbitrum的提議者在以太坊鏈上發布Rollup Block。
當爭議發生時,挑戰者在BTC鏈上聲明,自己要挑戰Proposer發布的哪個Root,然後要求Proposer揭示Root對應的某段數據。之後,Proposer出示梅克爾證明,反覆在鏈上揭露MAST樹的小部分資料分割,直到和挑戰者共同定位到有爭議的邏輯閘電路。之後就可以執行Slash。
5.到這裡,BitVM整個方案大部分的部分基本上講完了,雖然其中某些細節還是有點晦暗重要,但相信讀者已經可以得到BitVM的精華與要點。至於其白皮書裡提到的位值承諾,是為了防止Proposer在被挑戰而被迫在鏈上驗證邏輯閘電路時,給出該邏輯閘的輸入值“既賦值0,又賦值1”,產生二義性混亂。
總結:BitVM的方案,先用比特幣腳本表達邏輯閘電路,再用邏輯閘電路表達EVM/其他VM的操作碼,再用操作碼表達任意一條交易指令的流程處理組織,最後形成merkle tree/MAST樹。
這樣的一棵樹,如果表達的交易處理流程很複雜,很容易破掉1億個葉子,所以要盡量減少承諾佔用的區塊空間,以及欺詐證明波及的範圍。
雖然單步驟佈局證明,只需要鏈上極小的一段資料和邏輯閘腳本,但完整的Merkle Tree要在鏈下長期存儲,以備有人挑戰時,可以隨時鏈上樹上的資料。
Layer2每筆發生的交易,都會產生一個大號Merkle Tree,節點的計算和存儲壓力可想而知,大多數人可能不可能去運行節點(但這些歷史數據可以被淘汰淘汰,而B^2網絡專門引入類似Filecoin的zk儲存證明,激勵儲存節點長期保存歷史資料)
,基於發起倡議的OptimismRollup,本身也不需要有太多節點,因為其信任模型是1/N,只有N個節點中有1個是投票的,能夠然而在關鍵時刻發起倡議論證,Layer2網絡就是安全的。
但是,基於BitVM的Layer2方案設計中,還存在著許多挑戰,例如:
1)理論上說,為了進一步壓縮數據,需要直接在Layer1驗證碼操作,可以將操作碼的處理流程重新壓縮為zk證明,讓挑戰者對zk證明的驗證步驟進行挑戰。這樣可以將壓縮上鍊上的資料量。但具體的開發細節會很複雜。
2)Proposer和Challenger要在鏈下反覆產生交互,協議一起設計,承諾和挑戰過程,在處理上進一步優化,需要消耗很多腦流程細胞。
資訊來源:0x資訊編譯自網際網路。版權歸作者極客Web3所有,未經許可,不得轉載