
原文:Zoe,Puzzle Ventures
TL; DR
從眾多公鏈展開競爭以來,到以太坊路線圖中的Danksharding,再到op/zk 等二層解決方案,我們一直不間斷在討論區塊鏈的擴展性——大量用戶和資金進來了怎麼辦?通過接下來一系列的文章,我想向大家展示一個未來的圖景,該圖景由數據的獲取、鏈下計算、鏈上驗證三部分構成。
Trustless Data Access + Off-chain Computation + On-chain Verification
「證明共識」是這個藍圖中重要的一部分。本文探討了在以太坊PoS 的基礎上,用零知識證明共識的意義,包括:
1. 對於EVM 去中心化的重要性。
2. 去中心化數據訪問對於web3 擴容的重要性。
證明以太坊主網的全共識是一項複雜的任務,但是如果我們能夠實現共識層的zk 化,將會在確保安全信任的基礎上助力以太坊的擴容,同時增強整個以太坊生態的穩健性,降低參與成本,讓更多人融入其中。
一、為什麼證明共識層很重要?
利用zk 來驗證以太坊L1 的共識層在兩個大方向上有意義。首先,它可以彌補當前節點多樣性的缺陷,增強以太坊本身的去中心化和安全性。其次,它為以太坊生態各層協議面對更多用戶提供了可用性和安全性的基礎,包括跨鏈安全、無需信任的數據訪問、去中心化預言機、和擴容等方面。
1. 以太坊的角度
對於以太坊來說,要實現其去中心化和穩健性(robustness),它需要一個客戶端多樣性的環境。意味著更多的人參與其中,尤其是普通用戶,運行基於不同代碼環境的客戶端。然而,要求每個用戶都運行全節點是不現實的,因為這需要大量的資源,沒有幾個人能夠承擔至少16 GB+ RAM 和Fast SSD with 2+TB,而這些要求還在不斷增長。
目前的目標是實現輕節點(light node),既能提供與全節點相同的信任度(信任最小化),又能在內存、存儲和帶寬要求上具有更低的成本。然而,目前輕節點並不參與共識過程,或者說只受到部分的共識機制保護(Sync Committee)。
這一目標在以太坊的路線圖中被稱為「The Verge」。
Goal: verifying blocks should be super easy - download N bytes of data, perform a few basic computations, verify a SNARK and you’re done— The Verge on Ethereum’s Roadmap
「The Verge」旨在彌合客戶端差距,關鍵步驟是如何實現去信任的輕節點,安全程度應等同於今天的全節點,填補「the client gap」,從而讓更多人積極參與網絡的去中心化和穩健性。
https://www.ethernodes.org/network-types
https://clientdiversity.org/
2. 以太坊生態各層協議的角度
從第一性原理出發,我們需要解決鏈上數據訪問與鏈下計算驗證的結合問題。
目前鏈上數據的使用相對初級,不夠充分。在很多情況下,協議調整所需的數據過於復雜,無法進行鏈上計算,而以去信任方式獲取數據的成本又過高,需要大量歷史數據訪問和頻繁的數字計算等。
對於個人用戶和項目來說,我們的理想情況是實現去中心化的、端到端的無需信任假設數據傳遞和讀寫,以此為基礎,面向未來更多的用戶,應實現盡量低的計算成本,兼顧安全性、可用性和經濟性。
具體包括以下幾個方面:
1. 去中心化和無需信任的預言機(Oracle):目前的協議使用中心化預言機來避免直接在鏈上對大量歷史數據的訪問,增加了不必要的信任成本,並降低了可組合性。
2. 數據和資產敏感相關協議的數據讀寫:例如,DeFi 協議在運行過程中需要進行一些參數動態調整,但是否能夠無需信任地訪問歷史數據並進行更複雜的計算,如基於最近的市場波動調整AMM 費用,設計鏈上衍生品交易價格模型和動態波動,引入機器學習方法進行資產管理,根據市場情況調整借貸利息等。
3. 跨鏈安全:目前基於zk 技術的輕節點方案在安全性(security)、資金效率(capital efficiency)、狀態保留程度(statefulness) 和傳遞信息多樣性方面都更優秀。當前Succinct 的Telepathy 跨鏈方案和Polehedra 在LayerZero 上面做的跨鏈方案,都是基於Sync Committee 做的輕節點區塊頭zk 驗證。然而,Sync Committee 並非以太坊PoS 共識層本身,存在一定的信任假設,未來還有餘地可以做的更加完備。
目前,由於經濟成本、技術限制和用戶體驗等方面的考慮,開發者在利用鏈上數據時通常依賴於中心化的RPC 服務器,例如Alchemy、Infura 和Ankr 等。
二、區塊鏈數據來自何處?不同數據源的信任假設
區塊鏈中的計算數據有兩種來源:鏈上數據(on-chain data) 和鏈下數據(off-chain data)。對應鏈上和鏈下兩種去向,進行計算。比如前文提到的調整DeFi 協議參數的需求。
Data Access, computation, proof and verification
鏈上和鏈下數據的讀寫和計算有兩個顯著特點:
1. 為了實現去中心化和安全,最好能夠驗證我們所獲取的數據,即「不要相信,要驗證(Dont Trust, Verify)」。
2. 往往涉及許多複雜和昂貴的計算過程。
如果沒有找到合適的技術解決方案,以上兩點便會影響區塊鏈的可用性。
我們可以通過一個簡單的例子來說明不同數據獲取方式。假設你想查看自己的賬戶餘額,你會怎麼做?
一種最安全的方式是自己運行一個全節點,檢查本地存儲的以太坊狀態,並從中獲取賬戶餘額。
全節點Benchmark。同步模式(sync mode) 和客戶端選擇會影響所需的空間要求。
參考:
https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/; https://docs.google.com/presentation/d/1ZxEp6Go5XqTZxQFYTYYnzyd97JKbcXlA6O2s4RI9jr4/mobilepresent?pli=1&slide=id.g252bbdac496_0_109)
然而,自己運行全節點的成本很高,還需要自己維護。為了省事,很多人可能會直接向中心化的節點運營商請求數據。雖然這樣做沒有什麼問題,類似於Web2 中的操作,而且我們也從未見過這些供應商有過任何惡意行為,但是這也意味著我們必須相信一個中心化的服務商,這增加了整體的安全假設。
為了解決這個問題,我們可以考慮兩個解決方案:一是降低運行節點的成本,二是尋找一種驗證第三方數據可信度的方法。
那不如就只存儲必要的數據。為了更高效地訪問數據,降低信任成本,並獨立驗證數據,一些機構開發了輕客戶端(light clients),如Rust-based Helio(由a16z 開發)、Lodestar、Nimbus 和基於JavaScript 的Kevlar 等。輕客戶端不存儲所有的區塊數據,而只下載和存儲區塊頭——一個區塊全部信息的「總結」。輕客戶端能夠獨立驗證接收到的數據信息,因此當從第三方數據提供商獲取數據後,你不再需要完全信任該提供商的數據。
https://medium.com/coinmonks/ethereum-data-transaction-trie-simplified-795483ff3929
輕節點的主要特點包括:
理想情況下,輕節點可以在手機或嵌入式設備上運行。
理想情況下,它們可以與全節點具有相同的功能和安全保障。
但是輕節點不參與共識過程,或者說只受到部分的共識機制保護,即同步委員會(Sync Committee)。
Sync Committee 是輕節點的信任假設。
在The Merge 之前,從2020 年12 月開始,Beacon Chain 進行了一個名為Altair 的硬分叉,其核心目的是為輕節點提供共識支持。和PoS 全共識不同,組成這一組驗證者( 512 個) 的是一個較小的數據集,相隔更長的時間段( 256 個epoch,約27 小時) 進行隨機抽取。
Light clients such as Helios and Succinct are taking steps toward solving the problem, but a light client is far from a fully verifying node: a light client merely verifies the signatures of a random subset of validators called the sync committee, and does not verify that the chain actually follows the protocol rules. To bring us to a world where users can actually verify that the chain follows the rules, we would have to do something different.How will Ethereum's multi-client philosophy interact with ZK-EVMs?, by Vitalik Buterin*
這就是為什麼我們要驗證以太坊的全部共識層,以期迎來一個更加安全、可用性更強、擁有更多樣化協議、以及大規模採用的未來,目前來看最好的解決方案零知識(zero -knowledge) 技術。
三、用零知識證明共識層之路
要構建一個無需信任假設的環境,必須解決輕節點可信度、去中心化數據訪問、和鏈下計算驗證這些問題,在這些方面零知識證明是目前最被認可的核心技術,其中涉及到但不限於zkEVM、zkWASM、其他zkVM、zk Co-processor 等底層解決方案。
證明共識層是其中重要一環。
PoS 算法非常複雜,以ZK 方式實現它們需要大量的工程工作和架構考慮,我們先將其組件進行拆分。
1. 以太坊2.0 中共識形成的核心步驟
(1)驗證者(validator) 相關算法
其中包括以下步驟
成為驗證者:驗證者候選人需向存款合約發送32 ETH,並等待至少16 小時至幾天或幾週的時間,以使信標鏈(Beacon Chain)處理並激活成為正式驗證者。 ( 可參考FAQ - Why does it take so long for a validator to be activated)
行使驗證職責:涉及隨機數和區塊證明算法。
退出驗證者角色:退出驗證者的方式可以是自願退出或者因違規而被處罰(slashed)。驗證者可以隨時主動發起「退出」,每個epoch 對於退出的驗證者數量有限制。如果有過多的驗證者同時嘗試退出,他們將被放入一個隊列中,在排到之前,他們仍然需要履行驗證職責。成功退出後,經過1/8 個eek,驗證者將能夠提取質押資金。
(2)隨機數相關算法
每個epoch 包含32 個區塊(slot),提前2 個Epoch 進行隨機分組,將所有驗證者分成32 個委員會(committee),在當前epoch 行使職責,分別對每個區塊的共識負責。
每個委員會中有兩種角色,一個提議者(Proposer),其餘為區塊構建者(Builders),也被隨機選出。這樣將交易排序和區塊構建兩個過程分離開來( 詳見proposer/builder separation - PBS)。
(3)區塊證明(Block Attestation) 和BLS 簽名相關算法
簽名部分是共識層最核心的部分。
每個slot 的驗證委員會給投票( 使用BLS 簽名),需要獲得2/3 的通過率才能構建區塊。
在以太坊PoS 共識層中,BLS 簽名使用BLS 12 – 381 橢圓曲線,pairing-friendly, 適合聚合所有簽名,減少證明時間和大小。
在工作量證明中,區塊可能會發生重組(re-org)。在合併之後,引入了執行層上的「最終化(finalized) 區塊和安全頭(safe head)」的概念。要創建一個衝突的區塊(conflicting block);攻擊者需要銷毀至少總質押以太幣的1/3 ;很大程度上,PoS 比PoW 更可靠。
https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer
2023 年6 月底,《Puzzle Ventures 晚自習》中間介紹到了Hyper Oracle 的zkPoS ( 用zk 的方法去驗證以太坊全共識層)。詳情請見zkPoS: End-to-End Trustless
(4)其他:如弱主觀性檢查點(weak subjectivity checkpoints)
無需信任的PoS 共識證明面臨的其中一個挑戰是若主觀性checkpoint 的選擇,涉及到社會層面的共識(social consensus based on social information)。這些檢查點是回退限制(revert limits),因為位於弱主觀性檢查點之前的區塊無法更改。詳見:https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/weak-subjectivity/
檢查點(checkpoints) 也是共識層zk 化當中一個需要考慮的點。
2. 證明共識層的ZK 技術棧
在證明共識層中,證明簽名或其他計算本身是非常昂貴的,但相較之下驗證零知識證明卻十分便宜。
在選擇使用零知識證明共識層的方法時,協議需要考慮以下因素:
你要證明什麼?
證明之後的應用場景是什麼?
如何提高證明的效率?
以Hyper Oracle 為例,對於證明BLS 簽名,選擇了Halo 2 ,他們選擇了Halo 2 而不是Succinct Labs 使用的Circom,出於以下幾個原因:
Circom 和Halo 2 都可以生成BLS 簽名(BLS 12 – 381 橢圓曲線)的零知識證明。
Hyper Oracle 並不只是乾zkPoS 這一件事,其核心產品是可編程的鏈上零知識預言機(Programmable Onchain zkOracle)。其中直接面向用戶的有zkGraph、zkIndexing 和zkAutomation,並且還利用zkWASM 虛擬機去驗證鏈下計算。儘管Circom 對於工程師來說更易上手,但兼容性較差,無法確保所有功能的邏輯都能使用
Circom-pairing 會被編譯成為R 1 CS, 與zkWASM 和其他電路的Plonkish 約束系統不兼容,而Halo 2 Pairing 電路能夠非常容易地整合進zkWASM 電路;相比之下,R 1 CS 對於批處理證明( Proof Batching) 也並不理想。
從效率的角度,Halo 2-pairing 生成的BLS 電路更小,證明時長更短,對硬件要求更低,gas fee 也更低。
https://mirror.xyz/hyperoracleblog.eth/lAE9erAz5eIlQZ346PG6tfh7Q6xy59bmA_kFNr-l6dE
用零知識來證明共識層的另一個關鍵點在於遞歸證明(recursive proof) —— 即證明之證明(proofs of proofs),把之前發生的事情打包成一個證明。
如果沒有遞歸證明,最終會輸出O(block height) 大小的證明,即每個區塊證明(block attestation) 和相對應的zkp 。通過遞歸證明,除了初始狀態和最終狀態外,對於任意數量的區塊,我們只需要O( 1) 大小的證明。
Verify Proof N and Step N+ 1 to get Proof N+ 1, i.e. you know N+ 1 pieces of knowledge, instead of verify all N Steps separately.
回到最初的目標,我們的解決方案應該針對有計算和內存限制的「輕客戶端」。即使每個證明可以在固定的時間內進行驗證,如果區塊和證明的數量累加,驗證時間將變得非常長。
3. 終極目標: 多樣性的Level 1 zkEVM
以太坊的目標不僅僅是證明共識層,還希望通過zkEVM 實現整個Layer 1 虛擬機的零知識化,並最終實現多樣化的zkEVM,以增強以太坊的去中心化和魯棒性(robustness)。
針對這些問題,以太坊當前的解決方案和路線圖如下:
「輕量化light」—— 更小的內存、存儲和帶寬要求
目前通過輕節點(light node) 實現僅存儲和驗證區塊頭(block header) 的方式。
未來的發展還需要在verkle tree 和stateless clients 方面做進一步的努力,涉及改進主網數據結構。
「安全去信任trustless」—— 實現與全節點相同的最小信任(trust-minimization)
目前已經實現基礎的輕節點共識層,即同步委員會(Sync Committees),但這只是一個過渡方案。
使用SNARK 來驗證以太坊Layer 1 ,包括驗證執行層的Verkle Proof、驗證共識層、以及將整個虛擬機進行SNARK 化。
Level 1 zkEVM 用於實現整個以太坊Layer 1 虛擬機的零知識化,且實現zkEVM 的多樣化。
可能的風險
在理想情況下,當進入zk 時代時,我們需要多種開源的zkEVM —— 不同的客戶端具有不同的zkEVM 實現,每個客戶端在接受一個區塊之前會等待與其自身實現兼容的證明。
然而,多種證明系統可能會面臨一些問題,因為每種證明系統都需要一個點對點網絡,一個只支持某一種證明系統的客戶端只能等待相應類型的證明,才能被其驗證器(verifier)所識別。其中可能出現的兩個主要挑戰包括「延遲挑戰(latency challenge)」和「數據低效(data inefficiency)」,前者主要源於生成證明很慢,在生成針對不同證明系統的證明時,有一段時間差留給作惡者創建臨時分叉;後者因為你要生成多種類型的zk 證明,就得保存原始簽名,雖然理論上zkSNARK 本身的優勢是可以刪除原始簽名等數據,這裡就出現了一些矛盾需要優化和解決。
四、未來展望
要讓web3 迎來更多用戶、提供更流暢的體驗、創造更高的可用性和保障應用的安全性,我們必須為去中心化數據訪問、鏈下計算、鏈上驗證做好基礎設施建設。
證明共識層是其中一個重要組成部分,除了以太坊PSE 和前面提到的zkEVM layer 2 之外,還有一些協議正在通過零知識證明共識來實現自己的應用端目標,包括Hyper Oracle (Programmable zkOracle Network ) 計劃使用零知識證明以太坊PoS 的全部共識層來獲取數據;Succinct Labs 的Telepathy 是一個輕節點橋(Light Node Bridge) ,通過驗證Sync Committee 共識,提交state validity proof 來達到跨鏈通訊的比目的;Polyhedra 原本也是輕節點橋,但現在也聲明利用devirgo 實現了全節點全共識的zk 證明。
除了跨鏈安全、去中心化預言機之外,這種鏈下計算+ 鏈上驗證的方式,也可能參與到樂觀rollup 中fraud proof 當中,與OP L2 相互融合;或在基於意圖的架構(intent -based architecture) 中,針對更複雜的意圖結構提供鏈上證明等等。
這裡我們談論的是不僅限於以太坊的鏈下生態系統(off-chain ecosystem surrounding Ethereum),還涉及到以太坊以外的更廣闊市場。
這個話題仍然有很多值得深入研究的部分,比方說上週8 月24 日a16z 才發表了一篇認為「無狀態區塊鏈(stateless blockchain) 無法到達」的文章,再比如說弱主觀性檢查點(weak subjectivity checkpoints)、Sync Committee 安全性在數學上到底如何是否夠用等問題。
再次感謝各位同僚的指教和反饋,Alex @ IOBC (@looksrare_eth), Fan Zhang @ Yale University (@0x FanZhang), Roy @ Aki Protocol (@aki_protocol), Zhixiong Pan @ ChainFeeds (@nake 13), Suning Yao @ Hyper Oracle (@msfew_eth), Qi Zhou @ EthStorage (@qc_qizhou), Sinka @ Delphinus (@DelphinusLab), Shumo @ Manta (@shumochu)