TL; DR
零知識證明技術, 可以保證計算的完整性、正確性和隱私, 在區塊鏈擴容和隱私中有應用.
zk-SNARK 和 zk-STARK 各有優點, 而它們的合理結合更加有潛力.
zkVM 能賦予應用零知識證明能力, zkVM 分爲使用主流、EVM 或全新指令集.
EVM 的適配包括 EVM 兼容性、等同性和 Specification 上的適配.
zkEVM 是兼容 EVM 而又零知識證明友好的環境, 主要分爲原生和編譯流派.
基於原生的 zkEVM 是以太坊和區塊鏈的未來.
支持 Solidity 生態的通用 zkVM 是 Web3 的未來.
不嚴謹但簡單易懂地來介紹一下零知識證明:
你在上小學. 老師是驗證者, 你作爲學生是證明者. 你如何證明你掌握了一元二次方程的求解公式呢? 那就需要數學考試.
老師會隨機出 10 道相關的題目, 而你如果掌握了, 則可以把他們都做出來. 在這個過程中, 你沒有背誦或者默寫求解公式的具體內容, 但是老師卻可以很簡單地驗證你的知識掌握程度.
其實這就是 Tartaglia 與 Cardano (對的, 就是這個名字) 爭奪誰是一元三次方程發現者時所採用的方法. 他們都不想告訴對方自己公式的內容, 但是通過做題, 就可以很容易地驗證且過程中不透露知識地, 判斷他們是否掌握了這一知識.
零知識證明有什么用呢? 用處就是, 整個過程可以節省計算算力和壓縮鏈上空間, 同時也可以對隱私有保護, 符合區塊鏈去信任的特點以及密碼學的基因.
區塊鏈領域中所用到或者提到的 “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 都是優秀的零知識證明技術, 各有千秋, 而它們的合理結合更加有潛力.
前面所說到的 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.
EVM 就是以太坊的虛擬機, 也可以理解爲運行智能合約的一套執行環境.
數年來, 各個公鏈都在不停嘗試着去兼容 EVM, 從而接入到以太坊的开發生態當中. 對於這個概念, 衍生出了 EVM 兼容, 等同和其他一些定義.
EVM 兼容性: Solidity 等語言層面的適配.
EVM 等同性: EVM 字節碼層面的適配.
EVM Specification 適配: 也就是通常所說的真正的 zkEVM, 大多情況下甚至是向後兼容的優化後的超集, 能提供账戶抽象 (就是每個账戶都是一個智能合約) 等 EVM 沒有提供的特性.
我們再來解讀一下 zkEVM. 定義上來說, zkEVM 是一種兼容 EVM 同時又對零知識證明友好的虛擬機, 能保證程序, 操作, 和輸入輸出等的完全正確性.
對於實現通用計算來說, 要做 zkEVM 主要需要解決兩個難點:
不同的合約需要生成不同的電路, 而且這些電路很 “復雜”.
這方面主要就要靠各種優化了, 比如 Aleo (不過它不是 direct ZK 這一類... 只是爲了舉例說明優化) 通過分布式 Cluster 來並發計算 Proof, 或者通過各種硬件上的優化來加速.
zkEVM 不止要對 EVM 進行重構, 對以太坊的整體狀態轉換都要用零知識證明技術進行重構.
EVM 設計的時候就沒想到後面要做 zkEVM, 造成了非常大的困難. 導致了有兩個門派的路线, 都在圖裏了.
或者說按 VM 的架構來分, 就長這樣 (超級感謝 Scroll Tech 的原圖總結!). Opcode 指的是 EVM Opcode. 其中 StarkWare 部分是用 Warp 來將 Solidity 轉成 Cairo 合約, 或者直接用 Cairo 寫合約, 一樣能獲得不錯的开發體驗和全套工具.
在开發者和用戶層面, 這幾個方案其實我認爲是基本無差別的, 但是在基礎設施上, 越靠右的方案 EVM 兼容性越好, 可以無縫接入 Geth 等基礎設施, 但开發進度基本上也越慢.
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 的限制.
如果能有一種通用的 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 的未來.
作者: Suning Yao @ Foresight Ventures
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:Foresight Ventures: 解讀 zk, zkVM, zkEVM 及其未來
地址:https://www.torrentbusiness.com/article/2211.html
標籤: