
Morph:EIP-4844 zkEVM 與聚合證明集成解決方案
TechFlow Selected深潮精選

Morph:EIP-4844 zkEVM 與聚合證明集成解決方案
本文提出了一種在 EIP-4844 提案下實用且高效的電路設計方案。
撰文:Morph

背景
EIP-4844 提出了一種稱為「Blob-carrying 交易」的新交易類型,這種交易包含大量無法通過 EVM 執行訪問的數據,但這些交易的承諾可以被訪問。交易類型旨在與分片方案中使用的格式完全兼容。
一個 Blob 是一個包含 4096 個有限域元素的向量(該有限域為 BLS12-381 標量域)。在數學上,4096 個有限域元素可以插值出一個階數為 4095 的多項式 p(x),該多項式在 wi處的取值恰為第 i 個有限域元素。
而 Blob 承諾可以由 KZG commitment 計算而來,且通過相對應的驗證方法驗證。
EIP-4844 中介紹的部分常量:

EIP-4844 在 Rollup 過程中有著至關重要的作用。與將 Rollup 數據放入交易 calldata 中不同,rollup 希望 submitter 將數據放入 blob 中。這一方案既保證了數據可用性,又能夠減少因為使用大量的 calldata 而產生的鏈上花銷。Rollup 需要保證數據的可用性,在足夠長的時間內確保誠實的操作者可以構建狀態驗證,但是該數據不需要一直存在在鏈上。ZK rollup 將為其交易或狀態提供兩種承諾:Blob 承諾以及 zk 證明。
EIP-4844 KZG Commitment 的等價證明
在現階段零知識證明電路實現中,因為暫不支持以 BLS12-381 橢圓曲線為基礎的二元線性對驗證等複雜非原生有限域操作,所以通過對於多項式挑戰點取值一致性與承諾有限性的等價性將對於 Blob 承諾的驗證轉換為對於任意挑戰點取值的一致性驗證。
EIP-4844 的一致性證明包含三個部分:
-
通過電路證明 Blob 中的交易原文與 Blob 有限域元素的一致性。
-
通過電路證明有限域元素所編碼的多項式在挑戰點 x 的取值為 y。
-
通過預編譯合約證明承諾 c,挑戰值 x 與多項式值 y 的相關關係。
交易原文與 Blob 的一致性驗證
首先設計電路證明 Blob 中的交易原文與 Blob 的有限域的對應關係,該電路的輸入為交易原文以及 4096 個有限域元素, 約束編碼的計算邏輯,由交易原文編碼到 Blob 的編碼採用如下方案:
-
將輸入數據中的 31bytes 編碼成 32bytes,為一個 bls12-381 標量域元素,且編碼後的數據不超過標量域模數範圍。為了支持後續 blob 分片驗證的方式,我們將 Batch 中的輸入數據(交易原文信息)按照 chunk 劃分。
-
對於每一個 chunk 的 blob 編碼,我們將該 chunk 的輸入數據長度存入第一個 31bytes 中的前 4bytes,並且該 chunk 輸入數據分片的前 27bytes 數據編碼至剩餘的 27bytes 中,構成了 chunk 分片 blob 中的第一個有限域元素(32bytes,第一個 bytes 為 0,第二至第四個 bytes 表示該 chunk 輸入數據長度,剩餘 27 個 bytes 保存數據的前 27bytes 數據)。
-
將該 chunk 後續輸入數據按 31bytes 劃分存入 32bytes 中, 在該 chunk 最後數據不足 31bytes 時,末位補零。
該編碼方式將 Batch length 切分成多個 Chunk length 存入每個 chunk 分片中的 blob 元素中,更利於後續的可聚合方案設計。

Blob 多項式求值驗證
該電路用於驗證 Blob 差值得到的多項式 p(x) 在任意一點(Challenge Point)x 上的取值為 y。通過這種方法將無法直接驗證 blob commitment 的 EIP-4844 Blob 驗證轉變對於挑戰點 x,多項式取值 y,以及多項式承諾 c 的驗證。該電路的輸入為 4096 個有限域元素,以及挑戰點 x,輸出為多項式計算結果 y。
Blob 多項式求值邏輯主要採用 Barycentric 求值公式,對於有 4096 個有限域元素的 Blob:

求值公式為:

Blob 承諾與取值一致性驗證
在這一步之前,對於 Blob 和其承諾的一致性校驗已經轉換成 challenge point x, 函數值 y 和 Blob 承諾的一致性校驗, 在 EIP-4844 的支持下,智能合約可以拿到 Blob 的 commitment,這一部分的驗證可以直接由鏈上合約完成,下面我們討論上一步中電路求值的聚合優化。
Blob 可聚合驗證方案
在 Blob 中每 32bytes 數據可以用一個 BLS12-381 標量域表示,但是原始交易數據中每一筆交易原文數據的長度是不固定的,因此可能遇到下列問題:
-
無法保證對於一個 chunk 中的交易原文是 32bytes 的整數倍, 所以一個 chunk 中的交易數據不一定恰好編碼為整數個有限域元素
-
交易數據在編碼後可能分佈在兩個 Blob 中
-
一個 Batch 或者 chunk 數據編碼後可能不足 4096 個有限域元素,Blob 空間利用率不高
為了解決第一個問題,我們在一個 Chunk(對應的交易數據)進行補 0,使得一個 Chunk 所能容納的交易個數所編碼的有限域個數為整數個;對於第二個問題,我們要求一個交易不會跨過兩個 Blob 存儲,同時對於多個 Blob 採用 KZG commitment 的多點打開的方式進行優化。
對於第三個問題,我們提出新的聚合方案。首先我們會將原本前五位中的四位存放 batch 的長度信息修改為在每一個分片中的前五位中的四位存放分片 chunk 的長度信息,後續編碼方式一致,同時 Chunk proof 中除編碼一致性檢查外,輸入該 chunk 中交易數據所編碼的有限域元素索引值(chunk 中的第一筆交易以及最後一筆交易所在 Blob 中的元素索引值)。


我們的方案有以下優勢:
-
兼容性:EIP-4844 使用 Blob-data,我們方案具體考慮實現了交易原文數據到 Blob-data 的編碼過程,與現有的 ZKevm 電路兼容。
-
實用性:以太坊預編譯合約僅支持 BN254,使用 BLS12-381 去驗證 KZG commitment 將導致大量非原始曲線的標量域計算(如配對操作),導致消耗大量 gas;我們使用 Barycentric 公式大幅降低了錯域計算的數量,保證了實際計算量是可行的。
-
聚合性:聚合證明可以降低證明的數量並減少驗證的次數,降低鏈上 gas 消耗。我們的方案從 chunk-level 的角度提高了聚合的程度,結合 EIP-4844 可以更好的降低 gas 消耗。
結論
Layer-2 方案在以太坊的擴容路線圖中扮演著重要角色,然而也存在著安全性的爭議和性能上的不足。ZK-rollup 使用堅實的數學理論,有著很高的安全性保證,儘管這伴隨著生成證明和驗證證明的消耗。通過更好的算法和硬件,生成證明的代價可以有效降低;通過優化鏈上計算和存儲的邏輯,後者也可以得到優化。
EIP-4844 作為 rollup 方案的催化劑,可以給鏈上數據存儲的 gas 消耗帶來極大優化,也帶來了應用中實際問題的挑戰。本文提出了一種在 EIP-4844 提案下實用且高效的電路設計方案,有效降低 gas 消耗併兼容解決了 EIP4844 在應用時的一些問題。Morph 團隊始終追求創造更低成本和更高安全的交易生態,本著這一願景,不斷探索新技術並希望為社區生態貢獻更多。
歡迎加入深潮 TechFlow 官方社群
Telegram 訂閱群:https://t.me/TechFlowDaily
Twitter 官方帳號:https://x.com/TechFlowPost
Twitter 英文帳號:https://x.com/BlockFlow_News














