硬核對話 Scroll 張燁:zkEVM 與 Scroll 及其未來

WEEX 唯客博客, 採訪者:Nickqiao & Faust,極客 Web3 受訪者:YeZhang,Scroll 聯創 編輯:Faust、Jomosis   6 月 17 日,極客 Web3 和 BTCEden 在 Scroll 的 DevRel —— Vincent Jin 的幫助下,有幸邀請到了 Scroll 的聯創張燁,來解答關於 Scroll 和 zkEVM 的諸多問題。 期間雙方不但談到了很多技術話題,還談到了 Scroll 的一些趣事,以及其賦能亞非拉實體經濟的宏大願景。本文是此次訪談的文字版記錄,超過 1 萬字,共包含至少 15 個話題: ZK 在傳統領域的應用空間 zkEVM 和 zkVM 在工程難度上的差異 Scroll 在實現 zkEVM 過程中遇到的難題 Scroll 對 Zcash 的 halo2 證明系統作出的改進 Scroll 是怎麼和以太坊 PSE 小組展開合作的 在代碼審計層面 Scroll 如何確保自己的電路安全可靠 Scroll 對未來的新版 zkEVM 及證明系統的簡單規劃 Scroll 的 Multi Prover 設計以及其 Prover 生成網路( zk 礦池)的搭建方式等。 除此之外,張燁老師在最後談到了 Scroll 將紮根在非洲、土耳其、東南亞等金融系統落後地區,打算為該地區人民創造實體經濟場景以「脫虛入實」的宏大願景。本文可能是讓更多人更好理解 Scroll 的絕佳資料之一,推薦大家仔細閱讀。 1. Faust : 請問張燁老師對於 ZK 在 Rollup 之外的應用怎麼看?不少人習以為常地認為, ZK 的主要用處在混幣器、隱私轉賬或 ZK Rollup 和 ZK 橋這些地方,但在 Web3 之外,比如傳統行業里對 ZK 的應用還是很多的。您覺得未來 ZK 最有可能在哪些方向上被採用? YeZhang :這是一個好問題,傳統行業里做 ZK 的人,在五、六年前就在探索 ZK 的各種場景,區塊鏈中用到 ZK 的場景其實非常小,這也是為什麼 Vitalik 覺得十年後, ZK 的場景會和 blockchain 一樣大。 我覺得在那些需要信任假設的場景中, ZK 會有很多用武之地。假設你現在需要處理一些繁重的計算任務,如果你在 AWS 上租伺服器,運行自己的任務並得到結果,相當於你在自己控制的設備上做計算,然後你要支付租伺服器的錢,但這筆錢往往並不便宜; 但如果我們搞計算外包的模式,很多人可以用自己閑置的設備或資源分擔你的計算任務,你付出的成本可能比自己租伺服器更便宜。但這裡存在信任問題,你不知道別人返回給你的計算結果是否正確。現在假設說你在做一個很麻煩的計算,然後你把計算交給我來做,再給我錢。我過了半小時后隨便交給你一個結果,你也沒有辦法相信這個結果是有效的,因為我可以隨便編個結果。 但如果我能向你證明,交付的這個計算結果是對的,那你就可以放心了,並且也敢把更多計算任務外包給我來做。 ZK 可以把很多不可信的數據來源變為可信的,這個功能非常強,通過 ZK ,你可以把不可信但很便宜的第三方計算資源更高效的運用起來。 我覺得這個場景非常有意義,可以催生類似於外包計算的商業模式。在一些學術文獻里,稱其為可信計算(verifiable computation),就是把一個計算變得值得信任。除此之外, ZK 可以應用到資料庫領域,假設在本地運行資料庫太貴了,你決定走外包的路子,恰好一個人有富餘的資料庫資源,然後你把數據存儲在他那邊。你會擔心對方更改你託管在他那的數據,或者說你一個 SQL query 后得到的結果對不對? 對此,你可以讓對方生成一個 proof,如果這件事能做到,你可以把數據存儲也外包出去,並得到一個 trustworthy 的結果。這和前面的可信計算彼此都是一大類應用場景。 此外還有很多應用實例,我記得有篇論文講了 Verifiable ASIC ,在生產晶元的時候,可以把 ZK 演算法寫到你的晶元上,當你用晶元運行程序的時候,產生的結果默認會帶一個 Proof。這樣一來我覺得很多東西都能代理給任何一台設備,生成可信的結果。 還有一個有點扯的東西,叫 Photo Proof 照片證明。比如說很多圖片,你不知道是不是 P 過的,但我們可以通過 ZK 去證明相片沒有被篡改過,比如可以在相機軟體中加一些設置,自動生成一些數字簽名,你拍完照片后,這個簽名相當於給照片蓋了章。如果有人把你拍的照片拿去 PS,搞「二次創作」,我們驗證下籤名就能識別出圖片是被改動過的。 這裡面我們可以引入 ZK ,當你對原圖進行了些許改動后,你可以用 ZK Proof 向別人證明自己只是對照片做了旋轉、平移等簡單操作,並沒有篡改照片的原始內容,證明自己微調后的圖片和原版圖片基本一樣,也就是證明自己沒有篡改圖片的核心內容搞「二次創作」。 這個場景還可以拓展到視頻音頻上,通過 ZK ,你不必告訴對方自己對原版視頻做了哪些改動,但可以證明自己沒有篡改原版的核心內容,證明自己只做了一些無傷大雅的調整。此外還有很多有意思的應用,都是 ZK 能插一腳的。 目前,我覺得 ZK 的應用場景還沒有被廣泛接納的原因,在於其成本太高,現有的 ZK 證明生成方案,還不能做到對任意計算都實時生成證明,因為 ZK 的開銷一般是原始計算的 100 倍到 1000 倍,當然我說的數字已經是壓的比較低的了。 所以你想象一下,一個計算任務本來要算 1 小時,你現在給它生成個 ZK Proof,Overhead 可能是 100 倍,也就是要花 100 個小時來生成證明,雖然你可以用 GPU 或 ASIC 把這個耗時給縮短,但還是要付出巨大的計算開銷,如果你要求我算一個很麻煩的東西,還要求我為此生成 ZK Proof,我可以拒絕這麼做,因為這要額外耗費 100 倍的計算資源,最後落實到經濟賬上就很不划算。所以對於一對一的場景來說,生成一次性的 ZK 證明很昂貴。 不過,這也是為什麼對於 Blockchain 來說,非常適合用 ZK ,原因是區塊鏈做的是冗餘計算,有很多 1 對多的場景。區塊鏈網路中不同節點做的是相同的計算任務,如果有 1 萬個節點,那麼相同的任務要被執行 1 萬次。但如果你在鏈下完成任務,生成 ZK 證明,1 萬個節點只驗證 ZK 證明而不重跑任務,就不必再把原始計算重放 1 萬遍了,相當於你用自己 1 個人的計算成本,和 1 萬台節點搞冗餘計算的成本做了置換,從整體的角度看,可以讓更多人節約資源。 所以,其實鏈越去中心化越適合搭配 ZK,因為任何人都能近乎零成本的驗證 ZK P ,我們只要在初始生成證明的時候付出一定成本,就可以換來對大多數人的解放,這就是為什麼區塊鏈的公開可驗證性非常適合 ZK ,因為區塊鏈里有很多 1 對多的場景。 還有一個上面沒提到的點。現在區塊鏈領域用到的 Overhead 比較大的這種 ZK 證明,都是非互動式的,就是你給我一個東西,我給你證明,然後就結束,因為在區塊鏈中,你不可能反覆的去跟鏈上交互。但有一種更高效、開銷更低的證明生成方式,也就是互動式證明。比如說,你給我發一個 Challenge ,我給你發一個東西,你再給我發一個東西,我再給你發一個,通過這種雙方多次交互的方式,有可能把 ZK 的計算量級再降低下來。如果這種方式可以,就有可能解決大的 ZK 應用場景的證明生成問題。 Nickqiao :如何看待 zkML ,也就是 ZK 和機器學習相結合的發展前景? YeZhang :zkML 也是一個很有趣的方向,能把 Machine Learning 給 ZK 化,但我覺得這方面還是缺乏殺手級的應用場景。大家普遍認為隨著 ZK 系統的性能提升,未來能夠支持 ML 這個級別的應用,目前 zkML 的效率能夠支持 gpt2 這種級別的應用,在技術上能做到,但只能做 ML 中的推理。歸根結底,我覺得大家還是在摸索這塊的應用場景,也就是到底什麼樣的東西才需要你證明其推理過程是對的,這個事情是挺刁鑽的。 2. Nickqiao : 想請教下張燁老師, zkEVM 和 zkVM 在工程實現難度上的差異具體有多大? YeZhang :首先,無論是 zkEVM 還是 zkVM ,本質都是為某個虛擬機的操作碼 / 指令集生成定製的 ZK 電路,而 zkEVM 的工程落地難度取決於你實現它的方式,在我們剛啟動項目時,因為 ZK 的效率還沒那麼高,通過為 EVM 的每個操作碼都寫一個對應的電路,然後把電路組合起來,定製一個 zk EVM 是最高效的方式。 但這種方案的工程實現難度肯定很大,比 zkVM 大很多,畢竟 EVM 的指令集有超過 100 個操作碼,每個操作碼都要定製一套東西,然後組合起來,一旦有 EIP 為 EVM 增添新的操作碼,比如 EIP -4844,zk EVM 都要相應的加新東西。最後你要寫很長的電路並進行漫長的審計工作,所以開發難度和工作量要比 zkVM 大很多很多。 反之, zkVM 是自己定義了一套指令集 / 操作碼,它自定義的指令集可以做的很簡單,可以很 ZK friendly,你做出來一套 zkVM 后,不必頻繁的更改底層代碼,就能支持各種升級和預編譯。所以 zkVM 的主要工作量和後續升級維護的難度,就放在了編譯器也就是把智能合約轉化為 zkVM 操作碼的那一步,這和 zkEVM 有很大不同。 所以,從工程難度來看,我覺得 zkVM 要比定製化的 zkEVM 更容易實現,但是如果要在 zkVM 上跑 EVM 的話,總體性能比定製化的 zk EVM 低很多,因為後者是專門定製的。但目前,Prover 生成證明的效率在過去兩年間有了至少 3~5 倍甚至 5~10 倍的飛躍,zkVM 的效率在隨之提升,現在用 zkVM 去跑 EVM,整體效率已經慢慢提上來了,未來 zkVM 在性能上的劣勢可能被它易於開發維護的優勢給掩蓋住。畢竟對於 zkVM 和 zkEVM 而言,除去性能外的最大瓶頸就在開發難度上,必須要有一個非常強大的工程團隊,才能維護好這樣一套複雜的系統。 3. Nickqiao : 能否講一下 Scroll 在 zkEVM 落地的過程中,是否遇到一些技術難題,又是怎麼解決的? YeZhang :一路走來的話,最大的挑戰還是在於,最初啟動項目時的不確定性太大。我們剛啟動項目時,基本沒有其他人做 zkEVM ,我們是最早探索 zkEVM 從不可能變成可能的一個團隊。在理論層面,項目剛開始的 6 個月就基本確定了一套可行的框架,而在後續實現的過程中, zkEVM 的工程量非常大,還有一些非常技術性的挑戰,比如說你怎麼動態的支持不同的 Pre-Compile(預編譯),怎麼去更高效地聚合操作碼(opcode),這涉及到很多工程上的難題。 而且我們是唯一一個,也是最早支持 EC Pairing 橢圓曲線配對這個 Pre – Compile 的,像 Pairing 這種電路實現起來難度非常大,涉及到很多數學等錯綜複雜的難題,對寫電路的人的密碼學 / 數學功底,以及工程能力要求都很高。 然後在後期發展上,還要考慮技術棧的長期可維護性,以及要在什麼樣的時間節點,升級到下一代的 zkEVM 2.0。我們有一個專門的研究團隊,一直在研究此類方案,比如通過 zkVM 的方式來支持 EVM ,我們也有相關的論文去做這方面的一些討論。 總結下來,我覺得之前的難點在於把 zkEVM 從不可能變為可能,面臨的難題主要在工程落地和優化上。而下一階段,更大的難點是在什麼時候、通過什麼樣的具體方式,切換到一個更高效的 ZK 證明系統,以及我們怎麼把目前的這套代碼庫過渡到下一代 zkEVM 身上,以及下一代的 zkEVM 能給我們提供什麼樣的新 Feature ,這裡面有大的探索空間。 4. Nickqiao : 聽起來是 Scroll 已經考慮切換到別的 ZK 證明系統上了。據我了解,目前 Scroll 用的是基於 PLONK + Lookup 的一套演算法,那麼這套演算法在目前是否是最適合實現 zkEVM 的,以及未來 Scroll 打算換用什麼證明系統? YeZhang : 首先我來簡單回答下關於 PLONK 和 Lookup 的問題,目前這一套還是最適合實現 zkEVM 或者 zkVM 的系統,大部分的實現跟具體的 PLONK 和 Lookup 是綁定的。一般提到 PLONK 時,其實更多是用 PLONK 的 arithmetization,也就是電路的算術化表達方式去寫 zkVM 的電路。 Lookup 是寫電路時用到的一種方式,一種約束類型。所以當我們提到 PLONK + Lookup ,指的是在寫 zkEVM 或 zkVM 電路時,使用 PLONK 的約束格式,這種方式目前是最常見的。 而在後端方面, PLONK 和 STARK 的界限已經變得模糊,它們只是用了不同的多項式承諾方式,但其實很類似。即使採用 STARK + Lookup 的組合,跟 PLONK + Lookup 也是類似的,大家看的只是演算法,兩者的差別主要體現在 Prover 的效率、證明大小等方面。當然,就前端而言, Plonk + Lookup 來實現 zkEVM 還是最適合的。 關於第二個問題,就是 Scroll 未來打算切換到什麼證明系統。因為 Scroll 的目的是永遠讓自己的技術和鏈的框架保持在 zk 領域裡最頂尖的位置,所以我們肯定會用最新的一些技術。我們一直以安全性、穩定性作為最優先的目標,所以不會過於激進地切換自己的 ZK 證明系統,可能先通過一些 Multi Prover 做過渡,一步一步的摸索遞進,來完成下一版的升級迭代。Anyway,要保證說這是一個平穩的過渡流程。 但就現在來說,切換到新的證明系統還很早,這其實是下一階段比如未來 6 個月到 1 年的發展方向。 5. Nickqiao : Scroll 在當前基於 PLONK 和 Lookup 的證明系統上,有沒有一些獨特的創新? YeZhang : 目前在 Scroll 主網上運行的是 halo2 ,halo2 最早源於 Zcash 這個項目團隊,他們最早做了一個能支持 Lookup,支持靈活地寫電路格式的一套後端系統。然後,我們和以太坊的 PSE 小組一起改造了 halo2 ,把它採用的多項式承諾方案從 IPA 換到了 KZG ,把 Proof Size 變小了,從而能在以太坊上更高效的驗證 ZK Proof 。 然後我們在 GPU 硬體加速上做了很多工作,跟用 CPU 生成 ZKP 來對比的話,能讓 ZKP 生成速度快 5~10 倍。總體來說,我們把原版 halo2 的多項式承諾方案替換成了更易於被驗證的版本,並做了很多關於 Prover 的優化,在工程化落地上下了不少功夫。 6. Nickqiao : 所以 Scroll 現在是和以太坊 PSE 團隊共同維護 KZG 版本的 halo2 。您能否給我們講一下,你們是怎樣和 PSE 團隊合作的? YeZhang :Scroll 在啟動項目前,我們本來就認識一些 PSE 團隊的工程師,我們就有和他們聊,說自己想做 zkEVM,我們估計了一下這個效率是 ok 的。剛好在同一個時間節點,他們也想做同樣的事,然後大家一拍即合。 所以,我們是從以太坊社區,從 Ethereum Research 那邊認識了一起想做 zkEVM 的人,大家都想把 zkEVM 產品化落地,都有為以太坊服務的想法,所以很自然地開始了開源合作的模式。這種合作方式更像開源社區,而不是商業化的公司,比如我們每周都會通一次電話,同步一下進度,討論遇到了哪些問題。 我們以這種方式去開源地維護了這套代碼,從改進 halo2 到實現 zkEVM,這中間有很多探索的過程,我們相互會幫忙 Review 代碼。你從 Github 的代碼貢獻量能看出來, PSE 他們寫了一半, Scroll 這邊寫了一半,後續我們完成了代碼的審計,並實現了一版真正產品化落地並在主網上運行著的代碼。總結下來,我們和以太坊 PSE 的合作模式,更像是一個開源社區的路徑,是自發的形式。 7. Nickqiao : 您剛才提到,要編寫 zkEVM 的電路,對數學和密碼學的要求非常高,既然如此,能摸清楚 zkEVM 的人估計很少。那麼 Scroll 怎麼保證電路編寫的正確性以及少出 bug ? YeZhang :因為我們是開源的代碼,基本上每一個 PR 都會有我們的人和以太坊的一些人,以及一些社區成員去 Review,有比較嚴格的審計過程。同時我們在電路審計方面也花了很多錢,超過 100 萬美元,找了這個行業里最專業的密碼學和電路審計機構,比如 Trail of Bits , Zellic 等。我們鏈上智能合約的部分也找了 openzepplin 來審計,基本上所有和安全相關的東西都動用了最高檔的審計資源。我們內部還有專門的安全團隊去做測試,持續提升 Scroll 的安全性。 Nickqiao : 除了這種審計方式,有沒有形式化驗證等在數學上比較嚴謹的方式? YeZhang :我們其實很早就看過就 Formal Verification(形式化驗證)這個方向,包括以太坊最近也在思考,怎麼給 zkEVM 做形式化驗證,這其實是一個很好的方向。但就目前來說,要給 zkEVM 做完整的形式化驗證還比較早,只能從一些小的模塊開始摸索,因為 Formal Verification 運行是有成本的,比如你要給一套代碼去運行 Formal Verification,你要給它先寫一個 spec,但寫 spec 並不容易,這套東西要完善需要很長時間。 所以我覺得目前還沒有到給 zkEVM 做完整的形式化驗證的階段,但我們會持續的跟以太坊在內的外部合作者去積極探索怎麼做 zkEVM 的形式化證明。 目前來說,最好的方式其實還是人工審計,因為你就算有了 spec,有了 Formal Verification,如果 spec 寫錯了,那你還是會出問題。所以我覺得,目前最好還是先通過人工審計,然後通過開源和漏洞懸賞的方式,確保目前 Scroll 代碼的穩定性。 但是,在下一代 zkEVM 中,關於怎麼去做形式化驗證,怎麼去設計一個更好的 zkEVM 進而更容易的寫出來 spec ,通過形式化驗證的方式去證明它的安全性,是以太坊的終極目標。就是說,當一個 zkEVM 被形式化驗證以後,他們就可以徹底放心地將其實施到以太坊主網上。 8. Nickqiao : 關於 Scroll 採用的 halo2 ,如果要支持 STARK 等新的證明系統,開發成本會不會很大。能否實現一種插件化的體系,同時支持多個證明系統? YeZhang : halo2 是一個非常模塊化的 ZK 證明系統,你可以替換它的域、多項式承諾等,只要把它用的多項式承諾從 KZG 換成 FRI,基本就可以實現一個 halo2 版本的 STARK,這個事也確實有人做了,所以 halo2 要支持 STARK ,這種兼容是完全 ok 的。 然後在實際落地中會發現,如果你要追求極致效率的話,越模塊化的框架越可能導致一些效率問題,因為你為了模塊化犧牲了定製化的程度,會有付出一些代價。我們在持續關注一個問題,就是未…

Previous:

Next: