零知識證明卷軸
最後編輯: @Joe-Chen(opens in a new tab), 2024年7月3日
零知識證明卷軸 (ZK-rollup) 是二層網路的擴張解決方案,透過將計算和狀態儲存遷移至鏈外來提高以太坊主網上的吞吐量。 零知識證明卷軸可以一次批量處理數千個交易,然後僅將一些最低限度的摘要資料發佈到主網。 此摘要資料定義了以太坊狀態應進行的變更以及一些確保這些更變正確的密碼學證明。
前置要求
你應該已經在我們的頁面上閲讀並理解有關以太坊擴張和二層網路的内容。
什麼是零知識證明卷軸?
零知識證明卷軸 (ZK-rollup) 將交易批量打包(或「捲起來」),然後在鏈外執行。 鏈外計算減少了必須發佈到區塊鏈的資料量。 零知識證明卷軸提交代表批次中所有交易所需變更的匯總,而不是單獨發送每一筆交易。 它們還產生來證明其變更的正確性。
零知識證明卷軸的狀態由部署在以太坊網路上的智慧型合約維護。 爲了更新該狀態,零知識證明卷軸必須提交有效性證明來進行驗證。 如上所述,有效性證明是一種加密保證,證明卷軸提交的狀態變更確實是執行給定批量交易的結果。 這意味著零知識證明卷軸只需要提供有效性證明就可以在以太坊上最終確定交易,而無需像樂觀卷軸一樣將所有交易資料發佈到鏈上。
將資金從零知識證明卷軸轉移到以太坊沒有延遲,因爲一旦零知識證明卷軸合約驗證有效性證明,退出交易就會被執行。 相反,從樂觀卷軸提取資金則可能會有延遲,以便任何人都可以使用來挑戰退出交易。
零知識證明卷軸將交易作爲 calldata
寫入以太坊。 對智慧型合約函式的外部調用中包含的資料就存儲在 calldata
中。 calldata
中的資訊被發佈到區塊鏈上,讓任何人都能夠獨立重建卷軸的狀態。 零知識證明卷軸使用壓縮技術來減少交易資料 — 例如,由索引而非地址來代表帳戶,這將節省 28 個位元組的資料。 鏈上資料發佈是卷軸的一大成本,因此資料壓縮能夠降低使用者的費用。
零知識證明卷軸如何與以太坊互動?
零知識證明卷軸鏈是一種在以太坊區塊鏈之上運作的鏈外協定,並由鏈上的以太坊智慧型合約管理。 零知識證明卷軸在主網之外執行交易,但定期將鏈外交易批次提交到鏈上卷軸合約。 這種交易記錄是不可變的(與以太坊非常像),並且形成了零知識證明卷軸鏈,
零知識證明卷軸的核心架構由以下部分構成:
鏈上合約:如前所述,零知識證明卷軸協定由在以太坊上執行的智慧型合約控制。 這包括存儲卷軸區塊、追蹤存款,以及監控狀態更新的主要合約。 另一個鏈上合約(驗證者合約)驗證區塊生產者提交的零知識證明。 因此,以太坊充當零知識證明卷軸的基礎層或「一層網路」。
鏈外虛擬機 (VM):儘管零知識證明卷軸活躍於以太坊上,但交易執行和狀態存儲發生在獨立於以太坊虛擬機的單獨虛擬機。 這種鏈外虛擬機是零知識證明卷軸交易的執行環境,並充當零知識證明卷軸協定的次層或「二層網路」。 在以太坊主網上驗證的有效性證明可保證鏈外虛擬機中狀態轉換的正確性。
零知識證明卷軸是「混合擴張解決方案」— 獨立運作但從以太坊獲得安全性的鏈外協定。 具體來講,以太坊網路在零知識證明卷軸上執行狀態有效性更新,並保證每次更新卷軸狀態時的背景資料可用性。 因此,零知識證明卷軸比純鏈外擴張解決方案安全很多,例如自行負責安全屬性的側鏈,或同樣使用有效性證明在以太坊上驗證交易,但將交易資料存儲在其他地方的 Validium。
零知識證明卷軸依賴以太坊協定來獲得:
資料可用性
零知識證明卷軸將鏈外處理的每筆交易的狀態資料發佈到以太坊。 透過這些資料,個人或企業能夠復現卷軸的狀態並自行驗證鏈。 以太坊將這些資料作爲 calldata
提供給所有網路參與者。
零知識證明卷軸不需要在鏈上發佈很多交易資料,因爲有效性證明已經驗證了狀態轉換的真實性。 盡管如此,在鏈上儲存資料仍然重要,因爲這樣便可以對二層網路鏈的狀態進行無需許可的獨立驗證,從而使任何人都能提交批次交易,防止惡意營運者審查或凍結鏈。
使用者需要在鏈上與卷軸互動。 如果無法存取狀態資料,使用者將無法查詢帳戶餘額或發起依賴狀態資訊的交易(如提款)。
交易最終性
以太坊充當零知識證明卷軸的結算層:只有當一層網路合約接受有效性證明時,二層網路交易才會最終確定。 這消除了惡意營運者破壞鏈的風險(例如,竊取卷軸資金),因爲每筆交易都必須在主網上得到批准。 此外,以太坊還保證使用者作業一旦在一層網路上最終確定,就無法被撤銷。
審查阻力
大多數零知識證明卷軸使用「超級節點」(營運者)來執行交易、生產批次,以及提交區塊到一層網路。 儘管這確保了效率,但也增加了審查風險:惡意零知識證明卷軸營運者可以透過拒絕將使用者的交易添加到批次交易來審查使用者。
作爲一項安全措施,零知識證明卷軸允許使用者在認爲自己受到營運者審查時,直接向主網上的卷軸合約提交交易。 這讓使用者能夠强制從零知識證明卷軸退出到以太坊,而無需依賴營運者的許可。
零知識證明卷軸如何運作?
交易
零知識證明卷軸中的使用者簽署交易,提交給二層網路營運者進行處理並添加到下一個批次中。 在某些情況下,營運者是一個被稱爲排序者的中心化實體,它會執行交易,將交易彙總到批次中,然後提交到一層網路。 該系統中的排序者是唯一被允許產生二層網路區塊並將卷軸交易新增到零知識證明卷軸合約的實體。
其他零知識證明卷軸可以透過使用一組權益證明驗證者來輪換營運者的角色。 潛在的營運者將資金存入卷軸合約,每份質押的大小會影響質押者被選中產生下一批次卷軸的機會。 如果營運者實施惡意行爲,其質押會被罰沒,這會激勵其發佈有效的區塊。
零知識證明卷軸如何在以太坊上發佈交易資料
如前所述,交易資料作爲 calldata
被發佈到以太坊上。 calldata
是智慧型合約中的資料區域,用於將引數傳送給函式,其行爲類似於記憶體。 儘管 calldata
不會存儲到以太坊的狀態中,但其作爲以太坊鏈歷史日志(opens in a new tab)的一部分一直存在於鏈上。 calldata
不會影響以太坊的狀態,這使其成爲一種在鏈上存儲資料的便宜方法。
calldata
關鍵字通常標識交易所呼叫的智慧型合約方法,並以任意位元組序列的形式保存對方法的輸入。 零知識證明卷軸使用 calldata
將壓縮的交易資料發佈到鏈上;卷軸營運者只需要透過呼叫卷軸合約中所需的函式來添加一個新批次,並將壓縮資料作爲函式引數進行傳送。 這有助於降低使用者的成本,因爲卷軸費用的很大一部分用於在鏈上儲存交易資料。
狀態承諾
零知識證明卷軸的狀態包括二層網路帳戶和餘額,用默克爾樹表示。 默克爾樹根(默克爾根)的加密雜湊儲存在鏈上合約中,這使卷軸協定能夠追蹤零知識證明卷軸狀態的變化。
在執行一組新交易后,卷軸轉換到新狀態。 發起狀態轉換的營運者需要計算新的狀態根並提交到鏈上合約。 如果與批次相關的有效性證明經過驗證者合約的驗證,新的默克爾根將成爲零知識證明卷軸的規範狀態根。
除了計算狀態根以外,零知識證明卷軸營運者還會建立一個批次根 — 包含批次中所有交易的默克爾樹根。 當提交新批次時,卷軸合約會儲存批次根,讓使用者能夠證明交易(如提款請求)包含在批次中。 使用者必須提供交易詳情、批次根和顯示包含路徑的默克爾證明。
有效性證明
零知識證明卷軸營運者提交到一層網路合約的新狀態根是更新卷軸狀態的結果。 假設 Alice 向 Bob 發送了 10 枚代幣,營運者只需要將 Alice 的餘額減少 10,並將 Bob 的餘額增加 10。 然後營運者對更新后的帳戶資料進行雜湊處理,重建卷軸的默克爾樹,並將新的默克爾根提交到鏈上合約。
但是,在營運者證明新默克爾根是由卷軸狀態的正確更新產生之前,卷軸合約不會自動接受提議的狀態承諾。 零知識證明卷軸營運者透過生成有效性證明來做到這一點,有效性證明是一種簡潔的加密承諾,用於驗證批次交易的正確性。
有效性證明允許各方在不揭露聲明本身的情況下證明聲明的正確性,因此又被稱爲零知識證明。 零知識證明卷軸使用有效性證明確認鏈外狀態轉換的正確性,而無需在以太坊上重新執行交易。 這些證明可以是 ZK-SNARK(opens in a new tab)(零知識簡潔非互動式知識論證)或 ZK-STARK(opens in a new tab)(零知識可擴展透明知識論證)兩種形式。
SNARK(簡潔非互動式知識論證)和 STARK(可擴展透明知識論證)都有助於證明零知識證明卷軸中鏈外計算的完整性,儘管每種證明類型都有不同的功能。
ZK-SNARK(零知識簡潔非互動式知識論證)
爲了使 ZK-SNARK 協定正常運作,需要建立公共參考串 (CRS):公共參考串提供公共參數來證明和驗證有效性證明。 證明系統的安全性取決於公共參考串設定;如果用於建立公共參數的資訊落入惡意行爲者手中,他們或許能夠產生虛假的有效性證明。
一些零知識證明卷軸嘗試透過采用多方計算儀式 (MPC)(opens in a new tab) 來解決該問題,即由可信的個人為 ZK-SNARK 電路產生公共參數。 每一方都貢獻一些隨機性(稱為「有毒廢棄物」)來構建公共參考串,而且必須立即將其銷毀。
使用可信的設定,因爲這會提高公共參考串設定的安全性。 只要誠實的參與者銷毀其輸入,ZK-SNARK 系統的安全性就會得到保證。 這種方法仍然需要信任相關人員刪除他們采樣的隨機性,並且不會破壞系統的安全保證。
抛開信任假設不談,ZK-SNARK 因其更小的證明大小和恆定時間驗證而受到歡迎。 由於執行零知識證明卷軸的大部分成本用於一層網路上的證明驗證,因此二層網路使用 ZK-SNARK 來產生可在主網上快速、便宜地進行驗證的證明。
ZK-STARK
與 ZK-SNARK 相似,ZK-STARK 在不揭露輸入的情況下證明鏈外計算的有效性。 然而,ZK-STARK 因其具有可擴展性和透明性,被認爲是對 ZK-SNARK 的改進。
ZK-STARK 是「透明的」,因爲它能夠在沒有可信的公共參考串 (CRS) 設定的情況下正常運作。 相反,ZK-STARK 則依賴可公開驗證的隨機性來設定用於產生和驗證證明的參數。
ZK-STARK 還提供了更多可擴展性,因爲證明和驗證有效性證明所需的時間相對於底層計算的複雜性呈准綫性增長。 對於 ZK-SNARK,證明和驗證時間相對於底層計算的規模呈綫性擴張。 這意味著當涉及大資料集時,ZK-STARK 相比 ZK-SNARK 需要的證明和驗證時間更少,因而適用於大批量應用程式。
ZK-STARK 對於量子電腦也是安全的,而 ZK-SNARK 中使用的橢圓曲綫密碼學 (ECC) 則被廣范認爲容易受到量子電腦攻擊。 ZK-STARK 的缺點是其產生的證明大小更大,在以太坊上進行驗證時更加昂貴。
有效性證明如何在零知識證明卷軸中運作?
證明產生
在接受交易之前,營運者會執行常規檢查。 這包括確認:
- 發送者和接收者帳戶是狀態樹的一部分。
- 發送者有足夠的資金處理交易。
- 交易是正確的並與卷軸上的發送者公鑰相符。
- 發送者的隨機數是正確的,等等。
一旦零知識證明卷軸節點擁有足夠的交易,就會將這些交易彙總成一個批次,並為證明電路編譯輸入,以編譯成簡潔的零知識證明。 這包括:
- 包含批次中所有交易的默克爾樹根。
- 用於證明交易包含在批次中的默克爾交易證明。
- 交易中每個發送者-接收者對的默克爾證明,用於證明這些帳戶是卷軸狀態樹的一部分。
- 一組中間狀態根,源於應用每筆交易的狀態更新(即減少發送者帳戶餘額並增加接收者帳戶餘額)後更新狀態根。
證明電路透過「遍歷」每筆交易並執行並營運者完成的相同檢查來計算有效性證明,然後處理交易。 首先,它使用提供的默克爾證明來驗證發送者的帳戶是現有狀態根的一部分。 然後,它會減少發送者的餘額,增加他們的隨機數,對更新的帳戶資料進行雜湊處理,並將其與默克爾證明合併以生成新的默克爾根。
該默克爾根反映了零知識證明卷軸狀態的唯一變化:發送者餘額和隨機數的變化。 這是有可能的,因爲用於證明帳戶存在的默克爾證明也用於產生新的狀態根。
證明電路對接收者帳戶執行相同的過程。 它會(使用默克爾證明)檢查接收者帳戶是否存在于中間狀態根下,增加它們的餘額,對帳戶資料重新進行雜湊處理,並將其與默克爾證明合併以產生新的狀態根。
該過程會對每一筆交易重複;每次「循環」都會透過更新發送者帳戶建立一個新的狀態根,隨後透過更新接收者帳戶建立一個新的狀態根。 如前所述,狀態根的每次更新都代表卷軸狀態樹一部分發生變更。
零知識證明電路迭代處理整個交易批次,並在執行最後一筆交易后對產生最終狀態根的更新序列進行驗證。 最後計算的默克爾根成爲零知識證明卷軸的最新規範狀態根。
證明驗證
在證明電路驗證狀態更新的正確性后,二層網路營運者將計算后的有效性證明提交給一層網路上的驗證者合約。 合約的驗證電路驗證證明的有效性,並檢查證明中包含的公開輸入:
前狀態根:零知識證明卷軸的舊狀態根(即在交易批次被執行之前),反映二層網路鏈的上一個已知有效狀態。
后狀態根:零知識證明卷軸的新狀態根(即交易批次執行之後),反映二層網路鏈的最新狀態。 后狀態根是在證明電路中應用狀態更新后產生的最終根。
批次根:批次的默克爾根,透過對批次中的交易進行默克爾化和對樹根進行雜湊處理得到。
交易輸入:與在已提交批次中執行的交易相關的資料。
如果證明滿足電路條件(即證明有效),則意味著存在一系列有效交易,這些交易將卷軸從先前狀態(由前狀態根提供加密指紋)轉換為新狀態(由后狀態根提供加密指紋)。 如果前狀態根與儲存在卷軸合約中的根相符,並且證明是有效的,则卷軸合約就會從證明中獲取后狀態根並更新其狀態樹以反映卷軸的狀態變化。
進入與退出
使用者透過向部署在一層網路鏈上的卷軸合約中存入代幣,來進入零知識證明卷軸。 該交易已排隊,因爲只有營運者能夠將交易提交到卷軸合約。
如果待處理的存款隊列開始填滿,零知識證明卷軸營運者將接受存款交易並將其提交到卷軸合約。 一旦使用者的資金進入卷軸,他們就可以開始交易,將交易發送到營運者進行處理。 使用者可以透過對其帳戶進行杂凑處理,將杂凑發送到卷軸合約,並提供針對當前狀態根進行驗證的默克爾證明,以此驗證他們在卷軸上的餘額。
從零知識證明卷軸提款到一層網路非常簡單。 使用者透過將其卷軸上的資產發送到指定帳戶進行銷毀,來發起退出交易。 如果營運者將該交易添加到下一個批次中,使用者就可以向鏈上合約提交提款請求。 該提款請求包含以下内容:
默克爾證明,證明使用者的交易添加到交易批次中的銷毀帳戶。
交易資料
批次根
用於接收存入資金的一層網路地址
卷軸合約對交易資料進行杂凑處理,檢查批次根是否存在,並使用默克爾證明檢查交易杂凑是否為批次根的一部分。 之後,合約會執行退出交易並將資金發送到使用者選擇的一層網路上的地址。
零知識證明卷軸和以太坊虛擬機的相容性
與樂觀卷軸不同,零知識證明卷軸不直接與以太坊虛擬機 (EVM) 相容。 在電路中證明通用以太坊虛擬機計算比證明簡單計算(如先前描述的代幣傳送)更加困難,且更消耗資源。
然而,零知識技術的進步(opens in a new tab)重新點燃了將以太坊虛擬機計算包裝在零知識證明中的興趣。 這些努力旨在建立一個零知識以太坊虛擬機 (zkEVM) 實作,能夠高效地驗證程式執行的正確性。 零知識以太坊虛擬機重新建立在電路中進行證明/驗證的現有以太坊虛擬機作業碼,使其能夠執行智慧型合約。
與以太坊虛擬機相似,零知識以太坊虛擬機在對某些輸入執行計算之後,會在狀態之間轉換。 區別在於,零知識以太坊虛擬機還會建立零知識證明,以驗證程式執行中每一步的正確性。 有效性證明可以驗證涉及虛擬機狀態(記憶體、堆棧、存儲)和計算本身的作業的正確性(即作業是否調用了正確的作業碼並正確地執行它們?)。
與以太坊虛擬機相容的零知識證明卷軸的引入,有望幫助開發者利用零知識證明的可擴展性和安全保證。 更重要的是,與原生以太坊基礎設施的相容性意味著,開發者可以使用熟悉(且經過實地檢驗)的工具和語言構建零知識友好的去中心化應用程式。
零知識證明卷軸費用如何運作?
使用者為零知識證明卷軸上的交易支付多少費用取決於燃料費,就像在以太坊主網上一樣。 然而,燃料費在二層網路上的運作方式不同,並且受以下費用影響:
狀態寫入:寫入以太坊狀態(即,在以太坊區塊鏈上提交交易)有固定費用。 零知識證明卷軸透過進行批次交易並將固定費用分攤給多名使用者,降低了該費用。
資料發佈:零知識證明卷軸將每筆交易的狀態資料作爲
calldata
發佈到以太坊。calldata
費用目前由 EIP-1559(opens in a new tab) 管控,它規定calldata
的非零位元組和零位元組的費用分別爲 16 燃料和 4 燃料。 每筆交易支付的費用受到需要在鏈上爲其發佈的calldata
數量所影響。二層網路營運者費用:這是支付給卷軸營運者的金額,作爲處理交易所產生的計算費用的補償,很像以太坊主網上的交易「優先費」(小費)。
證明產生和驗證:零知識證明卷軸營運者必須為交易批次生成有效性證明,這會消耗大量資源。 在主網上驗證零知識證明也會花費燃料(約 500,000 燃料)。
除了進行批次交易之外,零知識證明卷軸還透過壓縮交易資料來降低使用者的費用。 你可以查看即時概覽(opens in a new tab)來瞭解使用以太坊零知識證明卷軸的費用。
零知識證明卷軸如何擴張以太坊?
交易資料壓縮
零知識證明卷軸透過在鏈外計算來提高以太坊基礎層的吞吐量,但真正提升擴展的手段是壓縮交易資料。 以太坊的區塊大小限制了每個區塊能夠保存的資料,進而限制了每個區塊處理的交易數量。 透過壓縮交易相關的資料,零知識證明卷軸顯著增加了每個區塊處理的交易數量。
零知識證明卷軸能夠比樂觀卷軸更好地壓縮交易資料,因爲它不必發佈驗證每筆交易所需的所有資料。 它只需要發佈在卷軸上重建帳戶最新狀態和餘額所需的最少資料。
遞迴證明
零知識證明的一個優點是,證明可以驗證其他證明。 例如,單個 ZK-SNARK 可以驗證其他的 ZK-SNARK。 這種「證明的證明」被稱爲遞迴證明,它顯著提高了零知識證明卷軸的吞吐量。
目前,有效性證明是逐塊產生的,並被提交到一層網路合約進行驗證。 然而,驗證單個區塊證明限制了零知識證明卷軸可以實現的吞吐量,因爲當營運者提交證明時只能最終確定一個區塊。
然而,遞迴證明可以使用一個有效性證明最終確定多個區塊。 這是因爲證明電路會遞迴彙總多個區塊證明,直到建立一個最終證明。 二層網路營運者提交該遞迴證明,如果合約接受它,所有相關的區塊將會立即最終確定。 使用遞迴證明,可以定期在以太坊上最終確定的零知識證明卷軸交易的數量將會增加。
零知識證明卷軸的優勢和劣勢
優勢 | 劣勢 |
---|---|
有效性證明確保鏈外交易的正確性,並防止營運者執行無效的狀態轉換。 | 與計算和驗證有效性證明相關的成本很高,並且可能會增加卷軸使用者的費用。 |
一旦在一層網路上驗證了有效性證明,當狀態更新獲得批准後,交易會更快地最終確定。 | 由於零知識技術的複雜性,構建與以太坊虛擬機相容的零知識證明卷軸很困難。 |
依賴去信任加密機制來保證安全,而不是像樂觀卷軸一樣依賴受激勵行爲者的誠實。 | 生成有效性證明需要專業化硬體,這可能會鼓勵一些參與方對鏈進行集中化控制。 |
將恢復鏈外狀態所需的資料儲存在一層網路上,這保證了安全性、抗審查性和去中心化。 | 中心化營運者(排序者)可以影響交易的順序。 |
使用者從更高的資本效率中受益,並且可以立即從二層網路提取資金。 | 硬體要求可能會減少能夠强制推進鏈的參與者數量,這增加了惡意營運者凍結卷軸狀態和審查使用者的風險。 |
不依賴於活躍性假設,使用者不必驗證鏈也能保護其資金。 | 一些證明系統(如 ZK-SNARK)需要可信的設定,如果處理不當,可能會損害零知識證明卷軸的安全模型。 |
更好的資料壓縮有助於降低在以太坊上發佈 calldata 的成本,並將使用者的卷軸費用降到最低。 |
零知識證明卷軸之視覺解釋
觀看 Finematics 的零知識證明卷軸影片:
使用零知識證明卷軸
零知識證明卷軸存在多種實作,可供你整合到去中心化應用程式:
零知識以太坊虛擬機上有哪些項目?
零知識以太坊虛擬機上運作的專案包括:
zkEVM(opens in a new tab) - zkEVM 是由以太坊基金會資助的專案,旨在開發與以太坊虛擬機相容的零知識證明卷軸,以及為以太坊區塊產生有效性證明的機制。
Polygon zkEVM(opens in a new tab) - 是以太坊主網上的一個去中心化零知識證明卷軸,它在零知識以太坊虛擬機 (zkEVM) 上運作,以透明的方式執行以太坊交易,包括具有零知識證明驗證的智慧型合約。
Scroll(opens in a new tab) - 是一家技術驅動型公司,致力於為以太坊構建原生零知識以太坊虛擬機二層網路解決方案。
Taiko(opens in a new tab) - Taiko 是等同於以太坊的去中心化零知識證明卷軸(第一類零知識以太坊虛擬機(opens in a new tab))。
ZKsync(opens in a new tab) - ZKsync Era 是與以太坊個虛擬機相容的零知識證明卷軸,由 Matter Labs 構建,並由其自己的零知識以太坊虛擬機提供支援。
Starknet(opens in a new tab) - StarkNet 是一個與以太坊虛擬機相容的二層網路擴張解決方案,由 StarkWare 構建。
Morph(opens in a new tab) - Morph 是一個利用零知識證明來解決二層網路狀態挑戰問題的混合卷軸擴張解決方案。
深入閲讀零知識證明卷軸的相關内容
- 什麼是零知識證明卷軸?(opens in a new tab)
- 什麼是零知識證明卷軸?(opens in a new tab)
- STARK 和 SNARK 的比較(opens in a new tab)
- 什麽是零知識以太坊虛擬機?(opens in a new tab)
- 零知識以太坊虛擬機類型:等同於以太坊、等同於以太坊虛擬機、第 1 類、第 4 類,以及其他難以理解的拗口詞(opens in a new tab)
- 介紹零知識以太坊虛擬機(opens in a new tab)
- 超贊的零知識以太坊虛擬機資源(opens in a new tab)
- 深入瞭解 ZK-SNARK(opens in a new tab)
- 如何實現 SNARK?(opens in a new tab)