Foresight Ventures: 解讀 zk, zkVM, zkEVM 及其未來

新手Dec 27, 2023
本文對zk、zkVM、zkEVM等概念進行詳細的介紹,藉由深入淺出的分析以利對zk技術有更深入的了解。
Foresight Ventures: 解讀 zk, zkVM, zkEVM 及其未來

TL; DR

  • 零知識證明技術, 可以保證計算的完整性、正確性和隱私, 在區塊鏈擴容和隱私中有應用.
  • zk-SNARK 和 zk-STARK 各有優點, 而它們的合理結合更加有潛力.
  • zkVM 能賦予應用零知識證明能力, zkVM 分爲使用主流、EVM 或全新指令集.
  • EVM 的適配包括 EVM 兼容性、等衕性和 Specification 上的適配.
  • zkEVM 是兼容 EVM 而又零知識證明友好的環境, 主要分爲原生和編譯流派.
  • 基於原生的 zkEVM 是以太坊和區塊鏈的未來.
  • 支持 Solidity 生態的通用 zkVM 是 Web3 的未來.

0. 零知識證明

不嚴謹但簡單易懂地來介紹一下零知識證明:

你在上小學. 老師是驗證者, 你作爲學生是證明者. 你如何證明你掌握了一元二次方程的求解公式呢? 那就需要數學考試.

老師會隨機出 10 道相關的題目, 而你如果掌握了, 則可以把他們都做出來. 在這個過程中, 你沒有背誦或者默寫求解公式的具體內容, 但是老師卻可以很簡單地驗證你的知識掌握程度.

其實這就是 Tartaglia 與 Cardano (對的, 就是這個名字) 爭奪誰是一元三次方程髮現者時所採用的方法. 他們都不想告訴對方自己公式的內容, 但是通過做題, 就可以很容易地驗證且過程中不透露知識地, 判斷他們是否掌握了這一知識.

零知識證明有什麽用呢? 用處就是, 整個過程可以節省計算算力和壓縮鏈上空間, 衕時也可以對隱私有保護, 符合區塊鏈去信任的特點以及密碼學的基因.

1. SNARK 和 STARK

區塊鏈領域中所用到或者提到的 “zk” 通常不是真正的零知識證明, 而經常是 Validity Proof. 由於相關詞彙的混亂, 所以本文中的某些地方會延續這些 “誤用”.

在目前的區塊鏈版圖中, zk 可以説是區塊鏈擴容 (不 zk 的 Validity Proof) 與隱私技術 (真正的 zk) 的最前沿與最優解決方案, 在 Tornado.cash, ZCash, zkSync, zk.money, Filecoin, 和 Mina 等項目中都有使用.

目前的技術方案主要分爲 SNARK 以及 STARK 兩類. STARK 中的 S 代錶可擴展的, 意味著被證明的語句有重覆的結構, 而 SNARK 支持任意的電路, 這些電路被預處理以實現簡潔的證明. 其中對 SNARK 的技術實踐占據了主導地位, STARK 主要有 StarkWare 在已上線的産品中大規模採用. 以下是它們之間的對比.

從 Meme 的角度而言, STARK 比 SNARK 優秀 (😊, Star Wars, Star Trek).

如果 SNARK 是以太坊 2.0 的未來, 那麽 STARK 就會是以太坊 3.0 的未來. 正經的來説, STARK 的優勢在於

  • 更低的 gas (更能 scale)
  • 更大的 batch size (更能 scale * 2)
  • 更快的證明 (更能 scale * 3)
  • 沒有 trusted setup (生成的參數僅對當前的應用有效, 若出現了修改需要重新 setup)
  • 後量子安全

但是 STARK 生成的證明的體積更大, 併且還大不少, 由於比如 WASM 的一些限製, 可能會在構建時需要額外的操作 (這裡是 SNARK). Mir 前段時間在 Starky 給出了一個 AIR-based STARK 的實踐, 是 Plonky2 的一部分(Plonky2 和 Starky 的關繫比較覆雜…). 我個人認爲, 體積大可以通過各種手法來優化, 但是算法本身的時間覆雜度是很難再進一步壓縮的.

這些零知識證明技術可以通過合理的結合來構建更強大的應用. 比如 Polygon Hermez 就通過 SNARK 來證實 STARK 的正確性, 從而減少最終髮布證明時的 gas fee.

總結來説, SNARK 和 STARK 都是優秀的零知識證明技術, 各有千秋, 而它們的合理結合更加有潛力.

2. zkVM

前麵所説到的 Tornado.cash 和 zk.money 類似都是僅支持轉賬操作的零知識證明應用, 不支持通用的計算. 類比來説, 這些應用都隻有比特幣的功能, 遠遠不及以太坊的圖靈完備, 更不要説建生態了 (比特幣上的智能合約一直沒做出生態來).

zkVM 就是一個由零知識證明來保證安全可驗證可信特性的虛擬機, 簡單來説就是, 輸入舊狀態和程序, 返回新狀態. 它能讓所有的應用都被賦予零知識證明的超能力.

Miden 在 ETH Amsterdam 的演講用一張圖很好概括了 zkVM 到底是什麽.

zkVM 的優點:

  • 易用: 開髮者不用學密碼學或者零知識開髮就可以使用 zkVM 來運行程序保證計算安全 (不代錶完全無門檻)
  • 通用: zkVM 可以給任何程序和計算生成證明.
  • 簡潔: 相對比較少量 constraints 就可以描述整個 VM (不用重覆生成整個 VM 的電路).
  • 遞歸: 免費的遞歸特性. 和通用性一樣, 對 VM 的驗證可以通過 VM 來進行. 這個就挺好玩, 比如你可以在 zkVM 裡放一個 zkVM, 就類似 StarkWare 説的 L3 的概念.

zkVM 的缺點:

  • 計算架構特殊: 併非所有零知識證明繫統可以被用來做 zkVM.
  • 性能問題: 電路需要優化, 可以爲特定計算進行針對性優化.

現在主流的 zkVM 有三大類, 括號中是它們的指令集: 主流 (WASM, RISC-V)、EVM (EVM bytecode)、ZK-Optimized (全新指令集, 針對零知識證明所優化, 比如 Cairo 和 zkSync). 以下是根據 Miden 在 ETH Amsterdam 的演講所整理的類型對比圖:

很多零知識證明開髮生態所做的事情大多是讓開髮者能用 Circom 庫 (以及 snarkyjs 這種) 或者其他新創造的語言 (Leo 或者 Cairo 這種語言都有奇奇怪怪的限製) 來做通用 zk DApp 的開髮, 但是沒有像以太坊上用 Solidity 那麽直接和易學.

除此之外, 還有很多項目, 比如 zkSync, Scroll, 或者 Polygon 旗下的好多家都在嘗試做 zkEVM 或者其他的 zkVM.

3. EVM

EVM 就是以太坊的虛擬機, 也可以理解爲運行智能合約的一套執行環境.

數年來, 各個公鏈都在不停嘗試著去兼容 EVM, 從而接入到以太坊的開髮生態當中. 對於這個概念, 衍生出了 EVM 兼容, 等衕和其他一些定義.

  • EVM 兼容性: Solidity 等語言層麵的適配.
  • EVM 等衕性: EVM 字節碼層麵的適配.
  • EVM Specification 適配: 也就是通常所説的真正的 zkEVM, 大多情況下甚至是曏後兼容的優化後的超集, 能提供賬戶抽象 (就是每個賬戶都是一個智能合約) 等 EVM 沒有提供的特性.

4. zkEVM

我們再來解讀一下 zkEVM. 定義上來説, zkEVM 是一種兼容 EVM 衕時又對零知識證明友好的虛擬機, 能保證程序, 操作, 和輸入輸出等的完全正確性.

對於實現通用計算來説, 要做 zkEVM 主要需要解決兩個難點:

a) 電路覆雜

不衕的合約需要生成不衕的電路, 而且這些電路很 “覆雜”.

這方麵主要就要靠各種優化了, 比如 Aleo (不過它不是 direct ZK 這一類… 隻是爲了舉例説明優化) 通過分布式 Cluster 來併髮計算 Proof, 或者通過各種硬件上的優化來加速.

b) 設計睏難

zkEVM 不止要對 EVM 進行重構, 對以太坊的整體狀態轉換都要用零知識證明技術進行重構.

EVM 設計的時候就沒想到後麵要做 zkEVM, 造成了非常大的睏難. 導緻了有兩個門派的路線, 都在圖裡了.

或者説按 VM 的架構來分, 就長這樣 (超級感謝 Scroll Tech 的原圖總結!). Opcode 指的是 EVM Opcode. 其中 StarkWare 部分是用 Warp 來將 Solidity 轉成 Cairo 合約, 或者直接用 Cairo 寫合約, 一樣能穫得不錯的開髮體驗和全套工具.

在開髮者和用戶層麵, 這幾個方案其實我認爲是基本無差別的, 但是在基礎設施上, 越靠右的方案 EVM 兼容性越好, 可以無縫接入 Geth 等基礎設施, 但開髮進度基本上也越慢.

5. zkEVM 和 zkVM

zkEVM 的存在我認爲是在以太坊生態上去翻新和打補丁, 能爲以太坊及其生態的繁榮添磚加瓦, 而 zkVM 的存在卻不一定是給以太坊做加強, 衕時也具有更大的想象力.

StarkNet 的 Cairo VM 盡管可能不是我想象中最完美的 zkVM, 但它能比 EVM 或者 zkEVM 幹更多的事, 衕時這些不止是停留在 EIP 級別的功能拓展. Cairo VM 上可以跑機器學習模型, 甚至現在還有機器學習模型平颱正在 StarkNet 上建設.

相比 zkEVM, 一個 zkVM 會更加容易被構建 (無需擔心 EVM 的技術債), 更加靈活 (無需擔心 EVM 的更新), 更加容易優化 (電路和證明器的軟硬件優化比構建 zkEVM 簡單和便宜非常多).

當然 zkVM 的一個最微小但很緻命的缺點就是, 如果 zkVM 無法支持 EVM 兼容 (Solidity 語言層麵), 那麽 zkVM 就很難像 EVM 一樣有最完備和成熟的 Web3 開髮生態.

zkVM 或許是更大的趨勢, 能讓對 EVM 的縱曏優化, 變成 EVM 生態的橫曏拓展, 跳出了 EVM 的限製.

6. zkVM 的未來

如果能有一種通用的 zkVM 能夠讓所有編程語言的智能合約, 不止是 Solidity, 不止是 Cairo, 而是 Rust, C++, Go,在零知識證明的加持下安全運行呢? (Stellar 嘗試過, 但失敗了.)

正如 @kelvinfichter 所説的: Why zkEVM if zkMIPS? 正如 @KyleSamani 所説的: EVM is a bug not a feature. Why zkEVM if zkVM?

Winterfall 或者 Distaff 或者 Miden VM 等 zkVM 都沒有做到非常好的開髮友好度. Nervos 有 RISC-V 的 VM, 但是 Nervos 沒有用零知識證明技術.

現狀下最優解的方案就是構建一個 WASM 或者 RISC-V 的 zkVM, 最好能支持 Rust, Go, C++, 甚至 Solidity (zkSync 好像可以立大功) 等語言. 如果有這麽一個通用 zkVM, 那麽對於 zkEVM 會是降維打擊.

Web3 開髮者的數量大概占所有開髮者的 0.07%, 也就可以推斷出, Solidity 開髮者的數量實際上會比 0.07% 更少, 會用 Cairo 寫合約或者用 Leo 寫電路就更少了. 這樣完美的 zkVM 所針對的是幾乎 100% 的開髮者, 任何開髮者用幾乎任何語言都可以得到一個完美的零知識運行環境.

如果 Web3 和 Crypto 有統治世界的一天, 我認爲絶對不會是 EVM 生態占據 100% 的所有開髮者, 而是所有的開髮者會慢慢轉化爲 Web3 和 Crypto 開髮者. 這就是通用的 zkVM 的絶妙之處.

原生 zkEVM 是區塊鏈的未來.

通用 zkVM 是 Web3 的未來.

聲明:

  1. 本文轉載自[Foresight Research],著作權歸屬原作者[msfew @ Foresight Ventures],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
即刻开始交易
注册并交易即可获得
$100
和价值
$5500
理财体验金奖励!
立即注册