作者:Kernel Ventures Turbo Guo
審稿:Kernel Ventures Mandy, Kernel Ventures Joshua
TLDR:
ZK 協(xié)處理器是一種讓 dApp 利用鏈下計算資源的方案,本文主要討論了協(xié)處理器的實現(xiàn)方式、各類應(yīng)用以及未來的發(fā)展方向,主要內(nèi)容有:
RISC Zero 的 zkVM 是一種 ZK 協(xié)處理器解決方案,它讓鏈上合約能調(diào)用鏈下 zkVM 跑特定的 Rust 代碼,并將結(jié)果返回給鏈上,同時提供 zkp 供合約驗證計算是否正確。
ZK 協(xié)處理器有不同的實現(xiàn)方式,除了 zkVM,用戶還可以自行為程序?qū)懚ㄖ苹?ZK 電路,或者使用預(yù)制的框架寫電路,進(jìn)而讓合約能利用鏈下計算資源。
ZK 協(xié)處理器可以在 DeFi 上發(fā)揮作用,例如把 AMM 的計算放在鏈下進(jìn)行,進(jìn)而讓協(xié)議捕獲類似 MEV 的價值,或者讓 AMM 實現(xiàn)復(fù)雜且需要大量計算的運(yùn)行邏輯。ZK 協(xié)處理器還可以讓借貸協(xié)議實時計算利率,使保證金計算透明化等。zkAMM 有兩種實現(xiàn)方式,一種是用 zkVM,另一種是用 zkOracle。
ZK 協(xié)處理器還有其他潛在用法,比如錢包可以用 ZK 協(xié)處理器把身份驗證放在鏈下執(zhí)行,協(xié)處理器還可以讓鏈上游戲能執(zhí)行更復(fù)雜的計算,降低 DAO 治理所需的 gas 等。
ZK 協(xié)處理器的格局未定,但相比用戶自己寫電路,用一個項目做接口調(diào)用鏈下資源是更加友好的,但那“接口”項目背后接入了什么計算服務(wù)提供商(傳統(tǒng)云廠商、去中心化資源共享)就是另一個值得討論的問題了。
ZK 協(xié)處理器的含義與應(yīng)用
ZK 協(xié)處理器的核心是把鏈上計算挪到鏈下,用 ZK 證明鏈下計算過程的可靠性,使得智能合約能夠輕松處理大量的計算,同時讓合約能核實計算的可靠性。這和 zkRollup 的思路是類似的,但 Rollup 是鏈協(xié)議層利用鏈下計算資源,而 ZK 協(xié)處理器是 dApp 利用鏈下資源。
這里用 RISC Zero 來解釋一種 ZK 協(xié)處理器實現(xiàn)方式,但 ZK 協(xié)處理器有很多種實現(xiàn)方式,后文會繼續(xù)介紹。RISC Zero 開發(fā)了 Bonsai ZK 協(xié)處理器架構(gòu),其中的核心是 RISC Zero 的 zkVM, 開發(fā)者可以在 zkVM 上為“某段 Rust 代碼被正確執(zhí)行”這件事生成 zkp。有了 zkVM 后,實現(xiàn) ZK 協(xié)處理器的具體流程為:
開發(fā)者向 Bonsai 的中繼合約發(fā)起請求,即在 zkVM 中跑開發(fā)者要求的程序
中繼合約把請求發(fā)給鏈下請求池
Bonsai 在鏈下 zkVM 中執(zhí)行請求,進(jìn)行鏈下的大規(guī)模運(yùn)算,然后為其生成一個憑證(receipt)。
這些證明,也叫做“收據(jù)”,由 Bonsai 通過中繼合約發(fā)布回鏈上。
在 Bonsai 中證明的程序被稱作 Guest Program ,憑證(receipt)用來證明 guest program 被正確執(zhí)行。憑證包括一個 journal 和一個印章(seal)。具體而言,Journal 承載了 zkVM 應(yīng)用的公共輸出,而印章用于證明憑證的有效性,即證明 guest program 被正確執(zhí)行 ,印章本身也是一個由證明者生成的 zkSTARK。驗證憑證可以保證 journal 是用了正確的電路等構(gòu)建所得 。
Bonsai 為開發(fā)者簡化了從 Rust 代碼到 zkVM 字節(jié)碼的編譯、程序上傳、在 VM 中的執(zhí)行和證明反饋等流程,讓開發(fā)者能夠更聚焦于程序的邏輯設(shè)計。而且不僅是部分的合約邏輯,而且整個合約邏輯都可以放到鏈下跑。RISC Zero 還使用了 continuations,它把一個大的 proof 生成拆分成很多份,然后每份單獨(dú)進(jìn)行證明。這樣既可以為大型程序生成證明,也不會占用太多內(nèi)存。除了 RISC Zero, 還有 IronMill , =nil; Foundation 和 Marlin 幾個項目也提供了類似的通用解決方案。
ZK 協(xié)處理器在 DeFi 上的應(yīng)用
AMM - Bonsai 為協(xié)處理器
zkUniswap 就是一種利用了鏈下計算資源的 AMM,它的核心是把 swap 的部分計算放在鏈下,而且它使用了 Bonsai。用戶在鏈上發(fā)起一個 swap 請求。Bonsai 的中繼合約獲得請求,發(fā)起鏈下計算,Bonsai 完成計算后向 EVM 中的 callback 函數(shù)返回計算結(jié)果和 proof。如果 proof 被驗證為成功,swap 就會被執(zhí)行。
但 swap 不是一次完成的,請求和執(zhí)行過程分別在不同的 transactions 中,這帶來了一定風(fēng)險,即在提交請求后和 swap 完成前,池子的狀態(tài)可能發(fā)生變化。因為驗證是基于提交請求時池子的狀態(tài)。如果一個請求還在等待時,池子狀態(tài)變了,那么驗證就會失效。
為了解決這個問題,開發(fā)者設(shè)計了一個池子鎖。當(dāng)用戶發(fā)起請求時,除了結(jié)算 swap 以外的所有操作都被鎖了起來,直到鏈下成功觸發(fā)鏈上 swap 或者 swap 超時了(會預(yù)設(shè)這個時間)。有時間限制的話,即使中繼或 zkp 出問題,池子也不會被一直鎖著。而具體的時間限制可能是幾分鐘。
zkUniswap 對 MEV 有個特殊的設(shè)計,即開發(fā)者希望讓協(xié)議捕獲 MEV 價值。理論上 zkAMMs 同樣有 MEV,因為第一個提交易的人就能上鎖,所以大家還是會爭 gas, builders 同樣可以為請求交易排序。但 zkUniswap 會把 MEV 收益自己吃掉,用到的方法是可變利率漸變式荷蘭拍賣(VRGDA)。
zkUniswap 把 lock 拿出來自己降價拍賣,如果 lock 很快賣掉,那協(xié)議就知道目前需求量大,然后自動升價,如果售出 lock 的速度變慢,協(xié)議就會降低價格。這會成為新的收入來源。相當(dāng)于,協(xié)議提供了一個新東西決定交易順序,而競爭價格的錢直接通過新東西給到項目方,這個很有想象力。
AMM - zkOracle 為協(xié)處理器
除了用 zkVM,還有人提出用 zkOracle 來實現(xiàn)對鏈下計算資源的利用, 而zkOracle 是兼顧輸入和輸出的預(yù)言機(jī)。一般預(yù)言機(jī)有兩種,一種是輸入預(yù)言機(jī),一種是輸出預(yù)言機(jī),輸入預(yù)言機(jī)是把鏈下數(shù)據(jù)整理(計算)后放到鏈上,輸出預(yù)言機(jī)是把鏈上數(shù)據(jù)整理(計算)后提供給鏈下。I/O(輸入兼輸出)預(yù)言機(jī)(zkOracle ),是先做輸出,再做輸入,讓鏈上能利用鏈下計算資源。
zkOracle 一方面使用鏈上數(shù)據(jù)作為數(shù)據(jù)源,另一方面用 ZK 保證預(yù)言機(jī)節(jié)點(diǎn)的計算沒有作假,可以實現(xiàn)協(xié)處理器的功能。因此,可以把 AMM 的核心計算放在 zkOracle 中,實現(xiàn)傳統(tǒng) AMM 功能的同時,還可以用 zkOracle 實現(xiàn)更復(fù)雜更消耗計算資源的操作。
借貸利率計算、保證金計算等其他應(yīng)用
拋開實現(xiàn)方式,有了 ZK 協(xié)處理器后可以實現(xiàn)很多功能。比如,借貸協(xié)議可以不再預(yù)設(shè)參數(shù),而是根據(jù)實時的借貸情況調(diào)整利率。比如在借錢需求旺盛時提高利率吸引供給,然后在需求降低時降低利率。這要求借貸協(xié)議能實時獲得鏈上數(shù)據(jù),同時進(jìn)行大量的計算,得出合適的參數(shù),這就需要鏈下計算了(除非鏈上成本極低)。
計算保證金余額、未實現(xiàn)的盈虧、清算金額等的復(fù)雜運(yùn)算也可以將其轉(zhuǎn)移到協(xié)處理器來執(zhí)行。用協(xié)處理器的優(yōu)勢在于它讓這些應(yīng)用更透明、更可驗證,保證金引擎的邏輯不再是一個秘密的黑盒子。雖然計算是在鏈下完成的,但用戶可以完全信任其執(zhí)行的正確性。此外,這種做法也適用于期權(quán)的計算。
ZK 協(xié)處理器的其他應(yīng)用
錢包-用 Bonsai 為協(xié)處理器
Bonfire Wallet 用 zkVM 把驗證身份的計算放到了鏈下。這個錢包的目標(biāo)讓用戶能用生物信息(指紋),或加密硬件 yubikey 創(chuàng)建 burner 錢包。
具體而言,Bonfire Wallet 使用了 WebAuthn 這個通用的網(wǎng)頁驗證標(biāo)準(zhǔn),讓用戶不用密碼,直接用設(shè)備來完成網(wǎng)頁上的身份驗證。所以在 Bonfire 錢包中,用戶通過 WebAuthn 生成一個公鑰(不是鏈上的,給 WebAuthn 用的),然后用它來創(chuàng)建錢包。
每個 Burner 錢包在鏈上都有合約,其中包含了 WebAuthn 的公鑰,合約需要驗證用戶的 WebAuthn 簽名。但這個計算量是很大的,所以用到了 Bonsai 把計算放在鏈下,通過一個 zkVM guest 程序在鏈下驗證簽名,并生產(chǎn) zkp 供鏈上驗證。
鏈上數(shù)據(jù)索取-用戶自行寫 ZK 電路
Axiom 是一個沒有用 zkVM 但使用另一種協(xié)處理器解決方案的應(yīng)用。先介紹一下 Axiom 想做什么,它希望利用 ZK 協(xié)處理器讓合約能查閱歷史鏈上信息。其實讓合約讀歷史數(shù)據(jù)是很難的,因為智能合約一般是獲得實時的鏈上數(shù)據(jù),而且很貴,合約很難獲得賬戶過往余額或者交易記錄等有價值的鏈上數(shù)據(jù)。
Axiom 節(jié)點(diǎn)訪問所需鏈上數(shù)據(jù)并在鏈下執(zhí)行指定的計算,然后為計算生成一個零知識證明,證明結(jié)果是根據(jù)有效的鏈上數(shù)據(jù)正確計算出來的。這個證明在鏈上被驗證,確保合約可以信任這個結(jié)果。
為鏈下計算生成 zkp 就需要把程序編譯進(jìn) ZK 電路里,前文也提到了用 zkVM 來做這件事,而 Axiom 官方指出在這件事情上有很多方案,需要權(quán)衡性能,靈活度和開發(fā)體驗:
定制電路:開發(fā)者為程序定制電路,那性能肯定最好,但要花時間開發(fā);
eDSL/DSL:開發(fā)者還是自己寫電路,但有一些可選框架幫開發(fā)者把 ZK 相關(guān)的問題解決掉,這樣可以平衡性能和開發(fā)體驗。
zkVM:開發(fā)者直接用現(xiàn)成的虛擬機(jī)里跑 ZK,這非常方便但 Axiom 官方認(rèn)為效率很低
因此,Axiom 選了第二種,項目方還為用戶提供了一套優(yōu)化過的 ZK 模塊,使其可以自行設(shè)計電路。
與 Axiom 類似的項目還有 Herodotus ,但它想做的是跨鏈信息傳輸?shù)闹虚g件。由于信息處理是在鏈下,所以讓不同鏈獲得處理后的數(shù)據(jù)是很合理的思路。而另一個項目 Space and Time 則是用類似架構(gòu)實現(xiàn)了數(shù)據(jù)索引。
鏈上游戲、DAO 治理等其他應(yīng)用
除此以外,鏈上游戲,DAO 治理都可以用 ZK 協(xié)處理器。RISC Zero 認(rèn)為,任何需要 250k gas 以上的計算使用 ZK 協(xié)處理器的話成本都會更低,但具體如何得出的還有待考究。DAO 治理也可以用到 ZK 協(xié)處理器,因為涉及多人和多個合約,這很耗計算資源。RISC Zero 稱使用 Bonsai 后 gas 費(fèi)可以降 50%。ZKML 本質(zhì)上也是 ZK 協(xié)處理器的思路,因此 Modulus Labs ,Giza 也是這個領(lǐng)域的項目,只不過 ZK 協(xié)處理器的概念更大 。
此外,ZK 協(xié)處理器這個領(lǐng)域還有一些輔助性項目,比如 ezkl,它提供制作 ZK 電路的編譯器, ZK 部署的工具套件,把鏈上計算移到鏈下的工具等。
未來展望
協(xié)處理器使得鏈上應(yīng)用擁有了如“云”一樣的外部計算資源,它提供了相對廉價的大量計算,而鏈上只處理必要的計算。在實際情況下,zkVM 也可以在云上面跑,ZK 協(xié)處理器本質(zhì)上是一個架構(gòu),是把鏈上計算放到鏈下的方式,而鏈下計算資源由誰提供是不限制的。
本質(zhì)上說,鏈下計算資源由傳統(tǒng)的大廠商,甚至去中心化的計算資源共享,和本地設(shè)備都有可能。這三個方向各有差異,傳統(tǒng)大廠可以做到相對成熟的鏈下計算解決方案,在未來去中心化計算資源的“魯棒性”可能更強(qiáng),而用戶本地計算也很有想象空間。但目前很多 ZK 協(xié)處理器項目都選擇閉源提供服務(wù)的階段,因為這個賽道的上下游尚未形成,無法把服務(wù)細(xì)化并交給不同項目,未來有兩種可能:
ZK 協(xié)處理器的每一個環(huán)節(jié)都有大量的項目相互競爭
一個服務(wù)體驗良好的項目占據(jù)大部分市場
從開發(fā)者的角度,其使用 ZK 協(xié)處理器時可能只會用一個“接口”項目,這也是亞馬遜云占據(jù)市場大量的原因,開發(fā)者會習(xí)慣于一種部署方式。但作為那一個鏈下計算資源的“接口”項目,背后接入了什么計算服務(wù)提供商(傳統(tǒng)云廠商、去中心化資源共享)就是另一個賽道值得討論的問題了。
參考資料:
A Guide to ZK Coprocessors for Scalability:https://www.risczero.com/news/a-guide-to-zk-coprocessors-for-scalability
Defining zkOracle for Ethereum:https://ethresear.ch/t/defining-zkoracle-for-ethereum/15131
zkUniswap: a first-of-its-kind zkAMM:https://ethresear.ch/t/zkuniswap-a-first-of-its-kind-zkamm/16839
What is a ZK Coprocessor?:https://blog.axiom.xyz/what-is-a-zk-coprocessor/
A Brief Intro to Coprocessors:https://crypto.mirror.xyz/BFqUfBNVZrqYau3Vz9WJ-BACw5FT3W30iUX3mPlKxtA
Latest Applications Building on Hyper Oracle (Bonus: Things You Can Build Now):https://mirror.xyz/hyperoracleblog.eth/Tik3nBI9mw05Ql_aHKZqm4hNxfxaEQdDAKn7JKcx0xQ
Bonfire Wallet:https://ethglobal.com/showcase/bonfire-wallet-n1dzp