2022 Aug 29
See all posts

不同類型的 ZK-EVM

特別感謝 PSE, Polygon Hermez, Zksync, Scroll, Matter Labs and Starkware 團隊參與討論和協助校稿

近來 各 家 ZK-EVM 紛紛 登場 。POLYGON 的 ZK-EVM 以 開源 的 釋出 , ZKSYC 公佈 了 了 ZKSYNC 2.0 的 規劃 , 相對 晚 進場 進場 的 的 的 的 的 也 了 他們 的 的 的 的 的 的 的 他們 他們 他們 了 了 推出 推出 推出 推出 推出,還有 PSE, Nicholas Liochon 等人,以及 Starkware 正在開發的 alpha compiler (能把 EVM 編譯成 Starkware 所開發的 Cairo),族繁不及備載。

上述 專案 一 個 共同 的 目標 : 利用 利用 zk-snark 進行 密碼 證明 , 驗證 以 太坊 生態 ((((((狀態 狀態 狀態 狀態 狀態 狀態 狀態 也 也 也 也 也 也 也 狀態 的 的 的 的 的 的 的 的 的 的 的 的 的 的 交易 交易 交易 交易 的 的 的 的 的 的 的 的以 太 等價 擴展性 更 好 的 的 zk -rolps。 但 這 個 專案 之間 些微 的 差異 , 反映 在 實用性 和 速度 之間 的 取捨。 本 文 文 試 著 提出 分類 不同 不同 不同 的 方法 方法 方法 並 說明 的利弊得失。

懶人包(以圖表呈現)

zkevm

第 1 類:等價以太坊(fully Ethereum-equivalent)的 ZK-EVM

第 1 類 ZK-EVM 志 在 完整 毫 無 妥協 的 達到 太坊 等 價。 它 改動 以 太坊 生態 任何 部份 的 設計 以 讓 證明 更 簡單 簡單 , , , 也 沒有 換掉 雜湊 運算 (()) 、 、 (state trees))、交易樹(transaction trees)、預編譯的合約(precompiles)

優點:完美的相容性

一切 的 在於 用 現況 下 的 以 太鏈 太鏈 至少 , 驗證 執行層 (也 不 包含 信 標鏈 (Beacon Chain) 的 共識 邏輯 , 但是 所有 交易 交易 執行 和 智能 合約 、 帳戶 的 概念 , , 都 有 涵蓋)))。。。。。。

第 1 類 的 ZK-EVM 是 以 太 坊 L1 更 有 的 最終 解。 來 看 , 對 以 太坊 的 修正 , 可能 會 在 第 2 類 或 或 第 3 類 測試 之後 , , 引入 到 以 太坊。。 然後 然後 然後 然後 然後 然後 然後 然後 然後 然後 然後 然後 然後 然後 然後要作架構的重規劃,則會有其複雜之處。

第 1 類 的 ZK-EVM 也 對 ROLLUPS 很 理想 , 因為 ROLLUPS 能夠 利用 許多 的 基礎 設施 舉例 來說 , , 太 坊 坊 的 端 端 可以 被 被 用來 生成 和 和 處理 處理 處理 處理 和 和 和 生成 用來 用來 被 被 可以 可以 端 的 的 的 的 坊 坊 坊 坊 坊 坊 坊 坊 坊 坊 坊 坊 坊 坊存款 生效 後 這個 功能 可以 被 重新 用 在 在 的 以 存款)) 所以 所以 比如 比如 區塊鏈 區塊鏈 區塊鏈 區塊鏈 瀏覽器 、 、 、 等 工具 都 很 容易 重複 重複 重複 利用 利用 利用 利用 利用 利用 利用 重複 工具 工具 工具 工具 工具 工具 工具 工具 工具 工具 等 等 等 所以 所以 所以 所以 所以 所以))))

缺點:證明者運算時間 (prover time)

以太坊原生不以零知識證明基礎建構,所以有許多以 太坊固有 元件 若 要 作 零 知識 驗證 , 需要 消耗 龐大 的 運算 時間 第 1 類 zk-evm 為求 完全 複製 以 太坊 運作 , 因此 沒有 避開 低 低 效率 的 證明 流程。 就 現 階段 來 說 說 說 說 說 說 說 說 說 說 說以 太坊 有 區塊 產生 零 知識 證明 , 要 花 上 幾 個 小時。 然而 , 這個 障礙 透過 巧妙 的 工程 設計 , 大幅 提升 驗證 者 平行化 產出 產出 零 知識 證明 的 能力 能力 , 或 或 出 出 出 出 出 出 出等方式,緩解其缺點。

實例

PSE 正在蓋的 ZK-EVM 屬於第 1類。

第 2 類:等價以太坊虛擬機(fully EVM-equivalent)的 ZK-EVM

第 2 類 ZK-EVM 試作 到 跟 EVM 等 價 , 但 又 完全 跟 以 太坊 價。 也就 是 說 , 他們 「內部」 跟 以 太坊 一樣 一樣 一樣 , , 從 外面 看上去 會 有些 差異 差異 , 尤其是 結構(block structure)、狀態樹(state tree)等資料結構。

一切的用意在於要跟既有的應用軟體完全相容,但是針對以太坊作一些微調,讓開發更容是、發更容是、發更容是、發更容易、發更容是、生

優點:等價於虛擬機

第 2 類 ZK-EVM 改動 了 儲存 諸如 諸如 諸如 諸如 諸如 諸如 諸如 諸如 的 存取 直接 存取 結構 結構 結構 結構 結構 結構 結構 結構 所以 所以 所以 所以 結構 結構 結構 所以 所以 , , , , , 本身 本身 本身 本身 無法 無法 無法 無法 無法 無法 無法 本身 本身 本身 本身 是 是 是 是 的 幸運 結構-EVM ROLLUP 上 使用。 無法 直接 利用 以 太 的 端 , 但 經過 之後 可以 , , EVM 的 除錯 工具 , 和 多數 的 開發 設施 , , 也 也 都 都 能 照常 使用 使用 使用 使用 使用 使用 使用。。。。 使用 使用 使用 使用

也 有 少數 例外 的 情況。 對於 使用 以 太坊 歷史 區塊 (Historical Ethereum Blocks) 的 數 驗證 (Merkle Proofs) 來 驗證 對 歷史 交易 、 、 交易 明細 、 或 狀態 (CLAIMS例如 : 有時候 會 這麼 作) 就 會 不 相容 的 情況 發生。 有 有 zk-evm 用 其他 雜湊函數 取代 取代 取代 取代 , 這些 失效 然而 然而 然而 然而 然而 然而 然而 失效 失效 證明會 證明會 證明會 證明會 證明會 證明會 證明會 證明會 證明會 這些 這些 這些 這些 這些 這些 這些 , 這些 這些 這些 用 用 用 用 其他 其他因為 未來 太坊 會 引用 的 改變 (例如 例如 例如 例如) 讓 這些 程式 連 在 以 太坊 上 不 能 使用。 好 好 的 替代 方案 方案 方案 方案 方案 是 是 以 以 太坊 本身 應該 要 不 容易 被 未來 科技 淘汰 淘汰 的用預編譯合約(future-proof history access precompiles)。

缺點:證明者運算時間稍有改善到仍然很慢

第 2 類 ZK-EVM 的 證明者 速度 , , 第 1 類 快 快 , 的 原因 , 是 因為 不 再 使用 某些 以 太坊 上 , 對 零 知識 知識 技術 毫 無 意義 地 不 友善 的 密碼學。 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其 尤其他們 可能 改變 改變 Ethereum 的 Keccak 和 基於 RLP 的 Merkle Patricia Tree , 還有 區塊 及 交易 明細 的 結構。 第 2 類 ZK-EVM 可能 會 使用 不同 的 雜湊函數 雜湊函數 , 例如 Poseidon。 也 很 自然 發生 的 的 的 的 的 的 改變 改變 改變 改變 改變 改變 改變 改變 改變 改變修正狀態樹,以儲存合約碼雜湊值(code hash)和 keccak,免除對於執行EXTCODEHASHEXTCODECOPY所需要的雜湊驗證。

這些 改動 的 改善 證明者 運算 時間 , 但 不 完全 解決 所有 問題。 證明 的 的 的 緩慢 效率 效率 , 以及 源自於 源自於 的 的 其他 不 效率 、 對 對 對 對 對 對 的 的 友善 友善 , 還 留 著。 舉 一簡單例子:記憶體。因為一個MLOAD只 能 一 讀 讀 32 bytes , 包含 「對齊 的」 字節 (和 終端 都 不 是 32 的 倍數) , 一 個 個 MLOAD 無法 被 直接 讀取 讀取 為 一 個 個 個 個 可能 需要 讀 超過 兩 兩 兩 個 個 個 個 個 個 個 個 個作一些運算,合併結果。

實例

Scroll 的 ZK-EVM 以及 POLYGON HERMEZ 都 屬於 第 2 類。 , , 個 專案 距離 到位 都 早。 尤其 因為 還 沒 加入 比較 複雜 的 預編譯 預編譯 預編譯 , 因此 , 以 目前 來說 來說 兩 個 專案 都 都 更 更 更 應該 應該 應該 應該 應該 應該 應該 應該 應該 應該 應該 應該分類在第 3 類。

第 2.5 類:跟以太坊虛擬機結構一樣,但是 gas 訂價例外

想要 大幅 最 壞 可能 的 證明者 運算 時間 (((((((((((((((((大幅 運算 運算 運算 運算 運算 運算 運算 運算 運算 提升 提升 所 所 所 所 所 需 需 訂價 訂價。。 這 會 會 會 這 這 , 運算 運算 運算 運算 運算 證明 證明 證明 證明 證明 證明 知識 知識 知識 知識 知識 零操作碼、以及或許呼叫合約的特殊模式(specific patterns of calling contracts?

改善 Gas 訂價 可能 會 開發者 工具 的 相容性 , 並 會 一些 應用 程式 不 能 用 (Break) , 但是 比起 更 「深 層 層」 的 的 的 的 改動 改動 風險 較 低。 開發者 要 注意 注意 , 不 在 在 在 在 在 在 在 在一 筆 中 花費 超過 一 個 區塊 能 容納 的 Gas , 也 永遠 要 把 呼叫 合約 時 所 花用 的 的 寫 死 (這 這 本來 就 是 會 給 給 開發者 的 標準 標準 建議)))。。。

另 一 解決 資源 限制 問題 的 替代 方式 , 是 對 每 一 個 運算 被 呼叫 的 次數 下 硬性 的 限制。 這 在 電路 上 更 更 容易 實作 實作 , 但是 對 對 的 安全性 假設 沒有 沒有 那麼 合適。。作法我認為屬於第 3 類而非第 2.5 類。

第 3 類:接近以太坊虛擬機等效(almost EVM-equivalent)

第3類ZK-EVM是接近 EVM

優點:更容易實作,證明者運算時間縮短

第 3 類 ZK-EVM 可能 會 拿掉 一些 特別 難 改成 ZK-EVM 的 功能 最 有 可能 被 的 的 , 就 是 預編譯。 此外 , 各 種 種 第 3 類 3 類 ZK-EVM , 在 處理 合約 程式碼 ((((程式碼 程式碼code)、記憶體(memory)或堆疊(stack)上,也有些微差異。

缺點:不相容性

第 3 類 ZK-EVM 的目標是跟多數的 應用 相容 , 並且 只 需要 重寫 極少。 即便 如此 , 還是 有 需要 重寫 的 應用 程式 , 因為 他們 要麼 使用 了 第 3 類 zk-evm 拿掉 的 預編譯 功能 , 或是 在 特殊 情況 情況 情況 情況 情況 情況 情況 情況 情況 情況 情況 情況(edge cases)之下,某些之間虛擬機處理方法不同的相依性問題(dependencies)。

實例

Scroll 和 Polygon,雖然它們預期會在未來改善相容性,但目前都屬於第 3 類。Polygon 有一個特別設計,是要驗證自己的語言,zkASM,而他們編譯 ZK-EVM 程式用的是 zkASM。雖然如此,我還是認為這是第 3類 ZK-EVM。它仍能驗證EVM程式碼,只是換了內部邏輯。

現況下,沒有哪個 ZK-EVM 團隊是想要成為第 3 類 ZK-EVM。 第 3 類 只 是 個 過渡期 , 正 在 預編譯 功能 完成 , 再 到 第 第 2.5 類。 但是 在 未來 , 第 1 或 2 類 可能 會 加入 加入 加入 加入 加入 加入 加入 加入 加入 會 友善 友善 的 預編譯的變成第 3 類,讓證明者運算時間和 gas 都降低。

第 4 類(等價高階語言(high-level-language equivalent))

第 4 類把(例如:Solidity、Vyper,或其他這兩種語言都會編譯成為的中間語言)然後把高階語言編譯成其他有特別設計過、對 ZK-SNARK 友善的語言。

優點:證明者所需運算時間非常短

上,就可接很多麻煩。

我 雖然 用 了 一 句 話 描述 這個 (但 下面 列出 多 相容性 的 缺點) , 但 並不 是 要 說 第 4 類 沒 什麼 優點。。 這 是 個 非常 大 的 優點! 從 從 高階 語言 語言可以大幅降低成本,也因為參與證明的門檻變低,所以更去中心化。

缺點:相容性低

通常 一 「一般」 的 , 由 Vyper 或 Solidity 寫成 的 程式 可以 編譯 就 能 用 了 , 但是 有 很多 應用 程式 沒 辦法 那麼 「一般 一般」 , 而且 而且 理由 很 重要 : : : : : : :

  • 因為在 CREATE2 合約地址要看 bytecode 決定,所以 「第 4 類系統中的合約地址」與「EVM 的合約地址」不一定相同。 這 造成 很多 應用 程式 不 能 使用 , 例如 倚賴尚 部署 的 「反 事實 合約 (Counterfactual Contracts)」 的 系統 、 、 ERC-4337 錢 包 、 、 EIP-2470 SINGLETONS 、 等 應用 程式 程式 程式 程式 程式 程式 程式。。。。。。。。
  • 手刻的 EVM bytecode 更難被利用。 許多 程式 部分 會 用 手刻 EVM BYTECODE 來 提高 效率 第 4 類 的 系統 就 支援。 雖然 有些 方法 可以 實作 有限 的 EVM BYTECOD SUPPORT 來 滿足 情況 情況 , 不 一定 要 直上 第 3 EVM。
  • 很多除錯的基礎設施無法被直接利用Li

以上都是工程師需要留意的問題。

實例

ZKSync 是第 4 類系統,雖然隨著時間他們可能會改善對 EVM bytecode 的相容性。Nethermind 的 Warp 專案正在蓋一個能把 Solidity 編譯成 Starkware 的 Cairo 語言的編譯器,這會因此把 StarkNet 在實然上變成第 4 類系統。

ZK-EVM 類型的未來展望

以上 不同 之間 沒有 誰 更 「好 或 更「 壞 」, 是 取捨 的 不同 : 靠近 第 1 類 的 類型 跟 既 有 的 基礎 設施 設施 相容性 更 高 , 但是 更 慢。 越 靠 4類 的 相容性 比較 差 , 但是 速度 更。 通常 來說 , 對 整 生態 比較 好 的 作法 , 就 是 每 種 不同 類型 , 都 有 有 人 研究 研究。。。。。。。。。。。。。 研究 研究 研究 研究 研究 研究 研究 研究 研究 研究

靠近 第 4 類 的 ZK-EVM 類型 , 也 隨著 時間 , 再 慢慢 靠近 第 1 類 的 類型 反之亦 然。 舉例 來說 : : :-ZK-EVM 可以 先 跳 過 很 很 難 用 證明 證明 證明 證明 證明 證明 證明 證明 證明 證明的 功能 , 當 第 3 類 就 好 之後 之後 , 慢慢 把 功能 加上 去 , 逐漸 第 2 類。。 – zk -evm 也 可以 先 當 第 2 類 , , , 然後 之後 提供 在 以 太坊 完全 等效 環境 環境 環境 環境 環境 環境 環境 環境 環境 環境中 , 或是 證明 更 快 、 改動 過 的 狀態 樹 , 變成 2 和 第 1 類 的 綜合體 。Scroll 正 在 考慮 用 這個 策略 發展。 – 原本 是 第 4 類 的 系統 , , 也 也 可以 慢慢 加上 處理 處理 處理 處理 處理EVM OPCODE 的 能力 雖然 開發者 仍然 被 鼓勵 直接 從 高階 編譯 , 以 節省 和 改善 證明者 運算 所 需 時間)。 – 假設 以 太坊 本身 變得 更 更 零 知識 友善 , , 是 第 第 第 類 類 或3 類 的 的 ZK-EVM , 就 會 變成 1 類。-如果 在 1 類 或 第 2 類 ZK-EVM 預編譯 元件 (((((((((((()) 這樣 這樣 就 能 使 使 使 其 其 其 其 其編譯 元件 驗證 效率 很 高 , 是 由 一 種 種 zk-snark 友善 的 撰寫 而 成。 這樣 就 能 在 ​​以 太 坊 的 相容性 和 速度 速度 之間 能 作 選擇 選擇。 這 種 種 種 種 種 種 種 這。。。 選擇Li客製化 預編譯 預編譯 然而 , 這 可以 被 改善 : 透過 開發者 開發者 手動 設定 檔 , 開發者 工具 可以 將 預編譯 元件 轉換 回 同等 功能 的 的 EVM 程式 碼 , , 這樣 就 就 能 適用於 所有 環境 環境 環境。。。。。。。。。。。

我 個人 希望 , 是 隨著 時間 時間 , zk-evm 技術 的 進步 以及 以 太坊 本身 對 對 zk-snark 的 設計 更 友善 之後 , 所有 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 所有 ,會 有 好幾 能夠 同時 作為 作為 ZK-ROLUP 以及 驗證 太鏈 本身 的 的 ZK-EVM。 理論 上 , 沒有 將 以 以 標準化 為 為 只 能 供 一 一 種 種 種 種 種 種 種 種 種 一 一 一 一 一 一 種 的。 有 不同 的 的 客戶 客戶 端 端 端 端 端 端 使用 使用 使用 使用 使用 使用 使用 使用證明方式,我們才能收穫冗餘實作(code redundancy)的好處。

然而 , 要 花 時間 , 才 會 抵達 這樣 未來。 在 這 條 , , 會 看到 很多 擴展 以 太 坊 、 以 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 太坊 can 太坊 太坊



Source link

Skip to content