Citrea的ZK-Rollup: 比特幣未盡之事

最近,宣稱第一個採用ZK-Rollup 方案的Bitcoin Layer-2項目,Citrea,在即將上線測試網之際,受到了來自社區的疑問。其宣傳Citrea 採用了一些欺騙性的話術,將它們的項目進行了過度包裝。在這個風口浪尖,毫無疑問就是研究Citrea 和BitVM 最好的時機。

一切的起因是:ZKP 在基於以太坊的Layer2 上大顯身手,使得許多項目都在寄希望於ZKP 是否能夠同樣的用於Bitcoin Layer-2 上。顯然,大量的開發者(特別是最挑剔的那些人)對比特幣Layer2 的發展非常不看好,而它們的擔憂也是很有道理的。常規的Layer2, 如基於以太坊的optimisic, zkrollup, 都是透過鏈下計算,鏈上驗證的方式,對一層網路的資料進行壓縮,以及對計算資源進行擴展。單由於Bitcoin 網路並不支援複雜邏輯的validation,因此這個方案難以實現。因此,大部分聲稱自己採用了零知識證明技術的Bitcoin Layer-2 項目,都採用了一種稱為Sovereign Rollup 的方案。

The Sovereign Rollup

長話短說,Sovereign Rollup 的關鍵在於:bitcoin 網路只負責將關鍵的承諾資訊用銘文的方式儲存在Bitcoin Network 中,而驗證全部由鏈下進行(客戶端驗證)。總而言之,比特幣網路中的數據,解釋權屬於Layer2 網路。對於一個不清楚規則的參與者,這些比特幣網路中的數據毫無意義。但是如果參與者清楚這些資料的使用方式,那麼任何一個使用者都能夠自己建構節點。從這個角度來看,Sovereign Rollup 的確具有相當的正面意義,它能夠達到Layer2 網路的一些基本要求,即資料的finalized 能夠被比特幣共識所保護,同時其Layer2 的解析也可以是去中心化的。

聽起來第二種方案似乎是第一種方案的妥協,但這點事實上有極大的爭論。大量方案二的支持者認為,Bitcoin 本來就不必和Ethereum 一樣:第一種方案的支持者,事實上依然在用以太坊的觀點看待比特幣,即,它們認為數據的存儲以及驗證,都應該發生在Layer-1。但事實上這並不是必要的,因為數據的驗證非常浪費Layer-1 的效率。在理想的情況下,任何一個智能合約都應該只由一個節點執行,而其他節點只需要驗證執行的結果以及其對應的證據就足夠了。強制要求所有Layer-1 的節點進行驗證,本身就不一定是最佳答案。

sovereign rollup 原理: 在鏈上存證,鏈下驗證

這種哲學正是Sovereign Rollup 的核心,也就是基於客戶端驗證的想法。總之,妥協也好,創新也罷,就在大家已經準備接受Bitcoin 獨有的Layer-2 技術路線時,BitVM 誕生了。

BitVM

關於BitVM 到底是什麼,對於社群中的大部分人而言是神秘的:BitVM 似乎提出了一個能夠在一層進行ZKP 驗證的方案,但是這個方案最終需要用樂觀Rollup 的方法去執行。早期的BitVM 還提出要在比特幣上模擬CPU,以實現一切可能的計算- 聽起來就像在Minecraft 裡面使用紅石建造計算機一樣。這些怪異的說法讓多數人對其嗤之以鼻,並採用了更實際的路線如DLC 或是帳戶託管來保護Layer-2 的資產安全。然而,也有一部分計畫認為BitVM 是Layer-2 的未來,並且投入了大量的研究,例如今天的主角Citrea。顯然,搞清楚BitVM 究竟是什麼至關重要。

為了弄清楚BitVM 的真相,我們將採取最直接的方式:分析BitVM 的Github Repository。整體來看,BitVM 倉庫的核心包括:

  • 一個虛擬的Bitcoin Script 運行環境。

  • 用於拼接Bitcoin Script 腳本的輔助函數。

目前BitVM 的構建,主要是透過將Bitcoin 的Opcode 進行組合,來實現更複雜的計算;而並非採用初始版本中提到的,使用OP_XOR 去構建計算組件。顯然,這是一條更實際的路線。讓我們用一個實際的例子來看它到底是如何運作的:透過將Opcode 進行組合,進行uint32 類型的整數計算。

BitVM 其實很像是積木:由基礎的OP_CODE 拼接而成

在這裡例子中,我們能夠發現兩個不同的元素: Opcode,以及已經被封裝過的一系列新的Opcode。其中,有OP_ 前綴的是比特幣腳本原生的Opcode,而諸如u8_add_carry 這樣的函數,則代表著已經被封裝過的,由BitVM 自訂的新Opcode。顯然,這個函式u32_add 本身,也會被用於其他進一步的Opcode 建構。

這聽起來有些小兒科,但不要小看這些功能,它實際上是進一步構造ZKP 的基礎;透過u32 的計算,就能夠逐步構造bigint,乃至於bn256 的計算,最終得到證明構造系統。並且從倉庫看來,它們已經得到了許多值得一提的成就:它們已經能夠建立基於Groth16 的驗證函數!看起來,它們離最終構建出可用的ZKP 的距離已經不遙遠了。

Citrea與BitVM

在了解到了BitVM 的現狀之後,我們當然樂見其成,這對整個Bitcoin Layer-2 的生態都有著極為正面的意義。但我們也同時注意到,Bitcoin Layer-2 的爆發,和BitVM 的開發步調之間,存在著一定的不同步。畢竟時間不等人,宣稱自己採用了BitVM 的項目,其實更多應該被理解為“將會採用BitVM”,畢竟儘管成果喜人,但它還暫時不能夠投入商用。這樣看來,Citrea 宣稱自己為第一個Bitcoin 上的zk-rollup,就難免引起爭議了。

在BitVM 正式完成前,Citrea 是一種自主Rollup

我們首先最關心的問題是:目前Citrea與BitVM,甚至ZKP 之間的關係到底是怎麼樣的?顯然,最好的辦法依舊是深入Citrea 專案的程式碼,來觀察目前它們的進度。在分析了它們測試網的官方倉庫之後,我們發現了一些有趣的事情:

(1)Sovereign Rollup

Citrea 目前依舊是典型的Sovereign Rollup,而並沒有實現真正等效於Ethereum Layer-2 的zk-rollup。關於這一點,事實上Citrea 在它們的測試網公告中也提到,即目前BitVM 與它們的核心組件,Clamentiane (https://www.blog.citrea.xyz/unveiling-clementine/),還沒有完成。目前的情況是,它們會將Citrea 網路中的帳戶狀態保存為一個默克爾樹根,並且在比特幣上,透過Inscription 的方式,同時記錄默克爾樹根的變化以及其對應的ZKPs。顯然,在比特幣上進行銘刻是無需任何限制的;因此,這些ZKPs 和默克爾樹根,需要由Citrea 的節點進行主動的驗證。同時,比特幣只負責對其狀態進行最終化,但不負責保證其正確性。因此很遺憾,Citrea 目前依舊是典型的Sovereign Rollup;其BitVM 參與的部分也僅在於節點對ZKPs 進行主動驗證的部分。

自主驗證的限制:無法確保鏈上證據的有效性

(2)RISC0

Citrea 對於它們的ZKPs 以及zkEVM 部分,採用了RISC0 提供的SDK 作為它們構建的基礎。 RISC0 是一個2022年誕生的,比較新的ZKPs 解決方案。 RISC0 和Cairo 有著非常類似的願景- 透過建立一個zkVM,令ZKPs 能夠進行任何通用計算;但是相比於Cairo,RISC0 本身並不是一種語言,它可以直接透過Rust 當中提供的SDK 進行建構。之後,再透過其定制的zkVM 進行計算。除去RISC0,基於zk-STARK 的Cairo VM 也被Bitcoin Layer-2 所青睞。我們注意到不少專案都在採用這種通用運算+zkVM 的模式,來取代zk 語言+ zk Prover + zk Verifier 的模式。這是由於Bitcoin 中暫時無法提供zk Verifier,因此對於Sovereign Rollup 而言,直接採用zkVM 無疑是更經濟和高效的辦法。

結語

首先關於Citrea 最近的爭議,它們的團隊很明確的指出了,其對BitVM 的兼容還尚未完成;這個結論代表了能夠完全繼承比特幣安全性的Rollup 還沒有出現。但在觀察整個專案的過程中,我們也看到了基於Bitcoin Layer-2,還有著連續不斷地創新;同時,還有大量的專案在前僕後繼的挑戰比特幣的zk-rollup,如Bitlayer,Alpenlabs,BVM network 等,這些都在驅動我們持續追蹤和分析比特幣當中Rollup 的進展。

Total
0
Shares
Related Posts