如何透過 ZKP 構建 Web3 產品?
來源:《How to Leverage ZKPs as a Web3 Builder》
作者:Mohamed Fouda、Qiao Wang
編譯:深潮 TechFlow
零知識證明(ZKP)正在成為未來十年根本性變革的技術。ZKP 在 Web3 內外都有著應用。
在 Web3 中,ZKP 正在解決兩個主要瓶頸------可擴展性和隱私:
在可擴展性方面,幾個 ZK Rollups,又名 Validity Rollups,正在推出以將以太坊擴展 10-100 倍,同時通過降低交易成本來改善用戶體驗。
在隱私方面,ZKP 正從私密交易和交易混合時代擴展到更複雜和有用的領域,例如私密鏈上交易、身份和經過驗證的憑據。
關於 ZKP 有很多內容,包括我們自己對 ZKP 空間未來發展的願景以及為實現這一未來所需的創業公司。然而,建設者如何從 ZKP 中受益以及從哪裡開始仍存在一定的教育差距。
本文旨在通過匯集重要資源來填補這一差距,指導開發人員了解 ZKP 在實踐中的工作原理以及如何在其應用中使用 ZKP。
ZKP 在實踐中是如何運作的?
ZKP 實際上是通過證明者向驗證者證明他們知道特定信息而不洩露該信息的一種技術。
在實踐中,至少在 Web3 中,ZKP 的使用方式通常不同。大多數應用程序不使用 ZKP 來顯示專有數據的所有權。相反,ZKP 被用於通過可驗證性提高信任。我們預計 ZKP 將成為未來實體之間標準的信任模型。原因是 ZKP 的兩個主要組成部分------證明和驗證------正在以一種使信任尋求實體與其用戶之間具有獨特互動方案的方式被分離。
ZKP 的主要組成部分是證明生成和證明驗證。
證明生成涉及運行大量計算以生成執行過程的證明,這個證明用於消除對證明者的信任需求。
相反,任何人都可以在證明上運行一個簡單的過程來驗證證明者運行過程的完整性。
這種心理模型允許企業運行一個流程(通常是一個複雜的流程),並允許客戶信任所述流程的執行而不需要重複執行該流程。
讓我們舉個例子:
假設你訂閱了 OpenAI 的付費計劃,使用他們的大型語言模型(LLMs)之一,例如 chatGPT。您必須相信 OpenAI 確實運行了您請求的特定模型,而不是用更簡單、效率更低的模型替換它。如果 OpenAI 可以向您發送少量數據,證明它確實運行了您請求的特定模型呢?此外,想像一下,假如每個專有 SaaS 產品都能為其消費者提供這樣的保證,會發生什麼?
這種信任最小化是 ZKP 的承諾。例如,在 Web 2 中,ZKP 可以通過確保所有客戶使用相同的算法來保證公平的信用評估或公平的保險索賠處理。ZK 技術還沒有到達那個水平,因為運行 ZKP 過程仍然相對昂貴。然而,我們看到像 Modulus Labs 這樣的公司正在構建一種使用 ZKP 證明 AI 推斷的技術。
ZKP 的技術要求
在技術層面上,一個高效的 ZKP 系統需要同時實現以下目標:
降低證明系統的計算複雜度和延遲,即讓證明者可以高效生成證明並在最短時間內將其傳遞給驗證者。
實現小型證明大小。
實現高效驗證,即最小化驗證成本。
除了這些主要目標外,根據用例可能需要一些次要目標,例如:
在隱私焦點應用程序中保護數據的隱私,這意味著證明系統可以處理未在生成的證明中洩露的私有輸入。
儘可能避免信任設置以簡化安全假設。
實現證明遞歸以進一步減少驗證成本,即單個驗證可以驗證多個證明,並在不同證明之間分攤成本。
同時實現所有這些目標是具有挑戰性的。根據用例,ZKP 系統會優先考慮其中一些目標。例如,SNARK 證明系統可以產生簡潔的證明,但證明複雜度會增加。另一方面,STRAK 具有高效的證明者,但證明大小可能比 SNARK 大 100 倍。zk 的研究人員不斷努力推動技術前沿,通過發明新的證明機制同時提高三個指標。
不同證明系統的比較
對於構建與 ZKP 相關產品的開發人員來說,要考慮的一個重要問題是如何選擇底層證明系統,有幾個 ZKP 證明實現,還有更多處於研發階段。
ZKP 後端選擇不僅取決於技術方面,而且還取決於目標產品。以為 Rollup 選擇證明系統為例。Rollup 的關鍵特徵,例如提款時間、交易成本,甚至去中心化程度,將主要由 ZKP 證明架構決定,如下表所示。
在 Rollup 中,證明發生在業務方面,即通過 Rollup 運營商。現有的 ZK Rollups(zkRUs),例如 Starknet 和 Zksync 當前使用集中的證明者。因此,他們可以將證明委託給專門的證明者,即證明作為服務公司,以提高證明者性能。通過專業化和利用優化的軟件/硬件,對於與以太坊兼容的 zkEVMs,證明時間可以縮短到幾分鐘。例如,Polygon zkEVM 的證明時間目前約為 2 分鐘。幾分鐘的證明時間,即提款延遲,對於 Rollup 來說是可接受的。
另一方面,一些用例需要證明發生在用戶端,生成私人交易,如 Tornado Cash 交易。為了確保合理的用戶體驗,證明時間不能超過幾秒鐘。此外,由於用戶在使用錢包或在資源受限的設備上在瀏覽器中執行這些計算,所以選擇具有快速證明者的證明系統非常重要。一個很好的例子是 Zcash 在 2018 年 Sapling 升級中將其證明系統更改為 Groth16,這是提高屏蔽交易速度的一個主要因素。
比較證明系統
通常,很難獲得不同證明系統性能的準確比較,特別是對於證明和驗證速度,因為它們取決於庫實現、選擇的加密曲線和使用的硬件。
Mina 團隊在這篇文章中提供了一個很好的高級比較。還有一些用於不同的 ZK 系統的努力創建基準測試工具。
這個表格提供了 SNARK 實現的良好比較,並介紹了它們在速度方面從 Groth16 到 Plonk 再到 Halo 的進展情況。儘管有所進展,STARK 仍然在證明速度方面勝出,但代價是更大的證明大小。該表還討論了證明系統的兩個重要特徵:設置無信任性和電路可編程性。
設置無信任性部分討論了電路創建的預處理階段。一些證明技術需要通過多方計算參與,在預處理階段生成秘密隨機數。如果單個參與者是誠實的,則生成的隨機數確實是秘密的,預處理部分是安全的。這個過程稱為"信任設置",因為它信任至少一個預處理階段的參與者是誠實的。需要信任設置被認為是一種弱點。在這個意義上,STARK 和新的 SNARK 系統(如 Halo 2)具有優勢。然而,一些項目將信任設置作為吸引社區參與的工具,例如 Aztec 和 Manta。
可編程性部分討論了證明系統是否可以證明任意計算。SNARK 通常可以對任何計算進行編程。然而,證明效率取決於所執行的計算類型。對於某些類型的 STARK 系統來說,這並不是適應不同類型計算的容易的情況。
如何為您的產品利用 ZKP?
建立一個能夠從 ZKP 技術中受益的產品並非易事,需要建立正確的心理模型。
本節嘗試為開發人員提供一個框架,以選擇最佳方法來將 ZKP 集成到其產品中。根據產品需求、生態系統對齊和性能要求,將有幾個工具可供開發人員選擇。一些開發人員將能夠重複使用其現有的代碼,而另一些則必須學習新的領域特定語言(DSL)來創建其應用程序。
以性能為主的 zk 應用程序
開發人員可以使用 ZKP 通過將大部分應用程序計算脫離鏈外,並僅在鏈上發布證明來實現更高的吞吐量(TPS)或更低的費用。在這種情況下,有多個框架可供選擇。每個框架提供了一組工具,用於編譯應用程序代碼,生成 ZK 電路,實現 ZK 證明者,並為目標生態系統生成驗證器代碼。我們可以將這些框架分為兩個主要類別:以 EVM 為中心和非 EVM。
以 EVM 為主的 ZK 框架
這組 ZK 框架與以太坊保持一致,作為 Rollup 建立在其之上。交易和應用程序在 Rollup 的 ZK 虛擬機(zkVM)上執行。證明由專門的證明者生成,並發布到 L1,由智能合約驗證。
該組的第一個子集實現了與 EVM 兼容的 zkVM,因此稱為 zkEVM。這些的目標是通過允許以太坊開發人員使用 Solidity 和熟悉的工具(如 Hardhat 和 Foundry)而將摩擦最小化。它們通過創建適用於 EVM 的電路和證明器來抽象 ZK 複雜性。Polygon zkEVM 和 Scroll 都包括在此桶中。
該組的第二個子集是不本地兼容 EVM 的 zkVM。儘管不兼容,此組通過創建中間層來允許開發人員使用 Solidity,從而減少了摩擦。Vitalik 稱這個類型為 type-4 zkEVM。zkSync Era 和 Starknet 是這個組的好例子。使用 Type-4 zkEVM 的優點是可以提供比兼容 EVM 類型更高的吞吐量和更低的費用。這使得它們適用於構建高吞吐量的應用程序,例如鏈上遊戲或高性能金融產品,例如訂單簿 DEXs。
為 type-4 zkEVM 構建應用程序需要更多的開發人員努力,因為有關於可以使用的 Solidity 代碼的限制。或者,開發人員可以決定學習另一種語言,例如 Cairo,以針對這些框架開發原生應用程序。
非 EVM zk 框架
另一種框架類型是那些不針對 EVM 架構的框架,因為它們針對競爭的 L1 或通用計算。儘管如此,它們仍然可以通過專門的 SDK(如 Sovereign)用於在以太坊上構建應用程序特定的 zkRUs。
這裡有兩種方法:
開發人員使用高級語言編寫代碼,該代碼針對特定的 VM 架構,稍後編譯為 ZK 電路。
開發人員使用領域特定語言(DSL),例如 Circom,直接生成 ZK 電路。
前一種方法更適合開發人員,但通常會導致更大的電路,需要更長的證明時間。
專注隱私的 ZK 應用程序
使用 ZKP 開發隱私重點的應用程序通常對開發人員來說是一項更具挑戰性的任務。與可伸縮性重點的解決方案相比,使用 ZKP 開發隱私重點的解決方案的工作較少,使得學習曲線更加陡峭。現有的隱私應用主要關注支付隱私,並且不允許太多的可編程性。將隱私和可編程性結合起來是一項具有挑戰性的任務。隱私重點的應用程序遵循以下兩個實現選項之一:
1.在通用 L1 之上構建
要在 L1 上啟用隱私支付應用程序,ZKP 邏輯需要被構建為智能合約。該應用程序常常使用 ZKP 來創建私有資本池。用戶使用這些私人池作為混合器,為未與其原始錢包相關聯的新錢包提供資金。其中著名的例子是 Tornado Cash。對於這些應用程序,證明由用戶執行,驗證發生在鏈上。因此,使用具有快速證明、簡單驗證計算以及不洩露任何用戶信息的 ZKP 系統至關重要。
由於通用鏈並未針對昂貴的加密計算進行優化,驗證成本通常對主流用戶來說很昂貴,限制了這些應用程序的採用。將私人事務應用程序移動到 Rollup 以減少燃氣費用的直覺解決方案可能會帶來挑戰。在這種情況下,私人交易證明需要包含在 Rollup 證明中,即證明遞歸,而目前 Ethereum 上的通用 zk Rollup 無法實現證明遞歸。
2.構建重點隱私的新 L1/L2
為了為私人交易和應用程序降低成本,開發人員不得不構建一個新的以隱私為核心的 L1(例如 Manta Network 和 Penumbra)或專門的 Rollup(例如 Aztec)。大多數隱私重點鏈仍無法支持通用計算,並專注於專業用途。例如,Penumbra 和 Renegade 專注於私密交易。Aleo 正在通過創建專用語言 Leo 來編譯用高級語言編寫的程序以生成對應的 ZK 電路,從而構建用於私有應用程序的框架。應用程序的交互是在鏈外完成的,僅將證明作為私有交易發布到鏈上。Aztec 正在朝著類似的方向發展,但作為 Ethereum L2。他們最近宣布將重點放在創建使用 Noir 作為默認智能合約語言的廣義私人 Rollup 上。
ZK 加速
在開發人員選擇了適合其應用程序的正確 ZK 開發框架並選擇了底層證明系統之後,下一步是優化應用程序的性能,尋找改善用戶體驗的方法。這通常歸結為提高證明者的性能和延遲。正如前面討論的那樣,對於 Rollup,縮短證明時間意味著將證明提交到 L1 的延遲較短,因此取款延遲也較短。對於用戶生成的證明,即隱私應用程序,更快的證明意味著更短的交易生成時間和更好的用戶體驗。
正如我們在之前的文章中討論過的那樣,加速證明過程通常需要軟件優化和專用硬件。在過去的幾個月中,專用硬件競爭加劇,有多家公司進入了這場競賽。在本節中,我們將討論 ZK 加速的當前情況以及開發人員可以從這種競爭中獲益的方式。
證明即服務
到目前為止,執行 ZK 證明工作的標準模型是使用具有多核 CPU 和/或 GPU 的強大伺服器,並利用經過優化的開源庫(例如 Filecoin 的 Bellperson)來提高證明性能。這種模型增加了開發人員需要維護證明基礎設施的運營複雜性。解決這種複雜性並允許更好的專業化的更好模型是證明即服務模型。在這個模型中,需要為某個 ZK 電路或某個用例生成證明的實體連接到運行專有軟件執行證明計算的提供者。一些公司可以專門為特定用例生成證明。例如,Axiom 構建了一個系統,用於在以太坊上生成 Halo 2 證明的歷史數據。其他參與者可以專注於特定的 ZKP 後端,例如 Plonk 或 Halo 2,並構建專有的優化,以實現更快速和更高效的證明計算。=nil Foundation 正在進一步推廣這個概念,通過構建一個 ZKP 計算市場。在這個 Proof Market 中,證明買家提交要生成的 ZKP 的出價,由證明生成器進行匹配和履行。Mina 也有類似的概念,稱為 Snarketplace,但僅限於 Mina 網絡所需的 SNARK 證明。
硬件加速
隨著需要高效生成 zk 證明的幾個 L1 和 Rollup 的推出,生成這些證明並賺取相應獎勵的競爭將變得日益激烈。如果這些鏈和 L2 成功吸引了大量用戶,證明生成可能會發展成為類似於比特幣挖礦競爭的一種軍備競賽。有不同的 ZKP 加速方法,即 GPU vs FPGA vs ASIC。這篇來自 Amber Group 的文章對這些不同選擇和面臨的每種實現選項的挑戰進行了很好的討論。然而,從長遠來看,為證明生成生產最有效的 ASIC 的公司將在以 zk 為重點的鏈上擁有顯著的經濟優勢。
值得注意的是,在 ZK 證明競爭和比特幣挖礦之間存在一個重要區別值得強調。在比特幣中,挖掘過程基於簡單計算,即 SHA256 哈希。這個計算是固定的,不容易改變,因此重點放在晶片設計創新和進入最先進的半導體節點的機會上。在 ZKP 領域,不同證明協議之間存在顯著的分裂。即使使用相同的證明後端,例如 Plonk,目標電路大小也可能導致 ASIC 性能的差異。這種比特幣挖礦和 ZKP 生成之間的區別可能導致多個獲勝者,每個專業化於不同的 ZK 後端。
有多個參與者進入 ZK 特定晶片領域。每個參與者專注於提高證明生成的兩個主要操作之一:多標量乘法(MSMs)和數論變換(NTT)。最後一個走出隱秘狀態的參與者是 Cysic,在 ETH Denver 期間宣布了其 600 萬美元的種子輪融資。Cysic 專注於通過使用 FPGA 加速 MSMs。FPGA 的靈活性可以使它們支持不同的 ZK 系統。這種方法類似於 Ulventanna,該公司在 1 月份宣布了 1500 萬美元的種子輪融資。ZK 晶片開發空間中的其他參與者包括 Ingonyama,發布了一個名為 Icicle 的庫,可在 GPU 上加速 MSM 和 NTT 計算的計算,以及 Accseal、Snarkify 和 Supranational。除了這個列表,Web3 空間中的知名參與者還有其他隱秘公司和研究努力。後者的例子包括 Jump Crypto 的 CycloneMSM 實現,用於使用 FPGA 加速 MSM 計算,以及 Jane Street 的 FPGA 實現,用於加速 MSM 和 NTT。
由於 ZKP 加速的重要性越來越高,需要公平評估不同實現的競賽(例如 ZPrize)正在成為推動該領域前進的重要場所。2022 年的比賽獎金超過 400 萬美元。
有用的教育資源
在本節中,我們匯總了一些教育資源,幫助開發人員了解 ZKP 空間。這絕不是一個詳盡的列表,因為這個主題上有很多優秀的內容。可以在這裡和這裡找到包含所有 zk 資源的綜合列表。這是建立一個友好的方式,讓開發人員了解這個領域的努力。
對於那些有興趣了解 ZKP 基礎知識及其工作原理的人,第一个要检查的资源之一是 ZK Hack 的 ZK Whiteboard Sessions。特別是 Dan Boneh 的三個入門會議對於具有一定數學理解的任何人來說都是高層次的。系列的其餘部分涉及該領域的特定主題。
對於想直接使用 ZK 工具的開發人員,這個優秀的初學者指南非常實用。此後,Poseidon Labs 創建了一個應用 ZK 研討會,引導開發人員使用 Circom 和 Hardhat 構建 ZK 應用程序。針對其他 ZK 語言和框架的其他研討會包括使用 Noir 進行的這個研討會和使用 Risc Zero 進行的這個研討會。
結論
作為對 ZKP 潛力的信仰者,Alliance 努力幫助更多的建設者進入這個領域,並為他們提供資金和指導支持。在 Web3 中,ZKP 已經解決了妨礙主流採用的可擴展性和隱私痛點。在 Web 2 中,ZKP 可以將最小化信任的精神帶到包括 SaaS、保險和信用評分在內的廣泛業務範圍內。本文旨在幫助建設者將 ZKP 集成到他們的產品中。本文引導建設者通過不同的規劃 ZKP 集成階段,涵蓋實現選項以及部署後的性能改進。