Nexus zkVM 3.0 及未來:邁向模塊化、分布式的零知識證明

1. 引言

2025年3月,Nexus團隊發布了 Nexus zkVM 3.0,本文將更詳細地介紹其設計意圖與功能。

零知識虛擬機(zkVM)領域正在迅速演進,推動力來自于對可擴展、高效且可靠的系統的需求——這些系統應能夠在不受計算規模、編程語言或底層架構限制的前提下,證明任意程序的正確執行。

Nexus正是基于這一愿景推出了 Nexus zkVM 3.0,它是一次經過深思熟慮的虛擬機重構,解決了長期存在的限制問題,并為新一代零知識虛擬機引入了關鍵創新。

在 zkVM 3.0 中,引入了多個架構性進步,包括:

  • two-pass execution model 雙遍執行模型
  • 通過對數導數(logarithmic derivatives)進行的離線內存檢查,
  • 以及與 S-two 證明器的集成。

這些改進旨在提升證明效率、減少內存開銷,并為模塊化和可擴展的系統奠定基礎。更重要的是,zkVM 3.0 建立在前幾代產品的經驗教訓之上,為未來的分布式和按需選擇式(a la carte)證明打下了良好基礎。

2. 基礎回顧:zkVM 1.0 與 2.0

最初版本的 Nexus zkVM 為可擴展、可驗證的計算奠定了重要基礎。

zkVM 1.0 引入了一個通用型的遞歸零知識虛擬機,利用了如 Nova、SuperNova 和 CycleFold 等基于 folding 的證明系統。

這些系統展示了遞增式可驗證計算(incrementally verifiable computation,IVC)的可行性,能夠對任意長度的程序執行生成簡潔的證明。其架構采用了 RISC-V RV32I 指令集,支持標準編譯工具鏈,突顯了遞歸在大規模計算中的強大威力。

在此基礎上,zkVM 2.0 通過支持 HyperNova 和集成 Jolt(一個基于 Lasso lookup argument的證明系統)擴展了架構。

這些增強提升了前端表達能力和證明組合性。基于 Nova 和 HyperNova 的版本也采用了優雅而富有表現力的 folding 式遞歸方式,支持復雜程序,并保持低內存開銷。

然而,這些設計也面臨挑戰:

  • 基于 folding 的遞歸證明系統在內存檢查方面依賴于 Merkle Trie,雖然這是一種安全且成熟的結構,但它帶來了性能開銷,限制了可擴展性。

此外,Nexus的 folding 式證明系統實現的是統一的 IVC 方案,不支持成本模塊化 —— 即所有指令路徑的證明開銷近乎相同,無論實際使用與否。為了實現遞歸組合,依賴 Grumpkin 橢圓曲線循環,這又引入了非原生域運算的額外復雜性。最后,由于使用了 Kate、Zaverucha 和 Goldberg 提出的 KZG 多項式承諾方案,這兩個版本都需要可信設置。

盡管存在這些權衡,zkVM 1.0 與 2.0 在通用 zkVM 的發展過程中發揮了關鍵作用,并為 zkVM 3.0 中的創新提供了堅實基礎。

3. zkVM 3.0:為可擴展證明而優化的架構

通過 zkVM 3.0,Nexus在早期版本的基礎上,構建了一個重新設計的架構,以提升證明系統的效率與模塊化能力。本次發布解決了前幾代實現中的關鍵限制,提供了一個更具可擴展性、對開發者更友好的可驗證計算平臺。

Nexus將重點轉向可擴展性與靈活性,并引入了一系列關鍵創新,以簡化性能瓶頸并擴展系統能力:

  • 1)基于 LogUps 的離線內存檢查
  • 2)雙遍執行模型
  • 3)集成 S-two 證明器
  • 4)遷移至小數域(M31)
  • 5)支持 RISC-V RV32I
  • 6)基于組件的架構

3.1 基于 LogUps 的離線內存檢查

用一種基于對數導數的全新技術(稱為 LogUps)替代了基于 Merkle 樹的內存檢查。這種方法允許在不存儲或管理整個內存狀態的情況下,跟蹤并驗證內存訪問模式。

相反,只需維護緊湊的摘要,便可高效地總結內存的讀寫操作。這大大降低了證明復雜性,使得能夠以無狀態且可擴展的方式驗證內存行為。

3.2 雙遍執行模型

zkVM 3.0 引入了雙階段執行模型,以改進執行軌跡(execution trace)的生成方式。

  • 在第一遍中,程序采用較為傳統的哈佛架構執行,zkVM 執行程序以收集內存使用和執行統計信息,幫助建立固定的內存布局。
  • 在第二遍中,采用固定內存布局再次執行相同的程序,zkVM 在該布局下對程序進行確定性重執行,生成簡潔且優化后的執行軌跡。

這一策略幫助減少不必要的軌跡數據,同時實現精確的約束編碼,從而提升證明生成性能與驗證效率。

3.3 集成 S-two 證明器

為了避免可信設置并提升證明性能,集成了由 StarkWare 開發的透明 STARK 證明器 —— S-two。S-two 使用基于哈希的承諾方案,并支持代數中間表示(AIR),Nexus用其來編碼 zkVM 的約束系統。

這一選擇提升了安全性,簡化了部署流程,并進一步提供了可預期的后量子安全性。

3.4 遷移至小數域(M31)

zkVM 3.0 將其執行域遷移至 S-two 所使用的Mersenne素數域(M31),該域支持在 32 位架構上實現快速的原生算術運算。

這一遷移減少了承諾開銷,避免了非原生算術轉換的需要,簡化了約束的生成與評估流程。同時也確保證明和驗證兩個階段都能受益于硬件加速與更緊湊的執行軌跡表示。

3.5 支持 RISC-V RV32I

Nexus zkVM 指令集基于廣泛采用的開放指令集架構 RISC-V RV32I。這個決策確保開發者幾乎無需修改即可使用標準工具鏈和熟悉的編譯器基礎設施。這也為未來的擴展提供便利,并提升真實世界應用的可移植性。

3.6 基于組件的架構

Nexus團隊重構了其 zkVM 的執行軌跡矩陣,使其遵循組件化模型。更具體地說,執行軌跡現在被劃分為若干邏輯單元 —— 包括 CPU、寄存器內存、程序內存、數據內存以及執行邏輯 —— 每個組件負責執行軌跡中的一個特定部分。

這種設計實現了模塊化,簡化了未來的擴展(如分布式證明),并為“按需付費”的成本模型奠定基礎 —— 開發者只需為其程序實際使用的功能付費。

4. zkVM 3.0 組件

Nexus將 zkVM 3.0 的執行軌跡結構化為一個統一的矩陣,其中每一行對應一次指令執行周期,每一列則追蹤一個特定變量或子組件的狀態。這個軌跡記錄了虛擬機狀態的完整演化過程,并構成 zkVM 輸出證明的基礎。

為了支持模塊化和清晰的語義劃分,軌跡在概念上被劃分為以下幾個組件:

  • 1)CPU
  • 2)寄存器內存(Register memory)
  • 3)程序內存(Program memory)
  • 4)數據內存(Data memory)
  • 5)指令執行(Instruction execution)

4.1 CPU

CPU 組件負責取指、解碼并為指令執行做好準備。它包含的軌跡列包括:

  • 當前的程序計數器(PC)
  • 解碼后的操作碼(opcode)
  • 指令分類與跳轉行為的控制標志(control flags)

該組件確保程序能按正確的指令流推進,并強制執行跳轉目標與終止行為的規則。

4.2 寄存器內存(Register memory)

該組件模擬虛擬機的通用寄存器文件,用于存儲中間值和持久值。其內容包括:

  • 每個周期所有寄存器的值
  • 讀/寫操作的標志位
  • 用于確保讀、寫與執行之間數據一致性的約束

寄存器內存確保算術、邏輯和內存類指令在寄存器使用上的正確性。

4.3 程序內存(Program memory)

程序內存是只讀的,用于存儲按字節尋址的指令流。其列用于:

  • 表示程序的字節級內容
  • 支持取指邏輯(通過內存讀取約束)
  • 強制執行與數據內存的哈佛結構分離

這使驗證者可以確認每條指令確實來自已提交的程序區域。

4.4 數據內存(Data memory)

數據內存在程序執行過程中處理讀寫操作,用于堆棧操作、堆分配和基于內存的計算。
其軌跡列用于追蹤:

  • 每個周期讀/寫的內存地址和值
  • 離線內存檢查所使用的訪問模式
  • 基于 LogUp 的約束,用于驗證摘要正確性

與程序內存不同,數據內存是動態的,其訪問模式由執行過程中計算出的值決定。

4.5 指令執行(Instruction execution)

該組件負責指令的具體語義執行。包括:

  • 每條指令的輸入/輸出操作數
  • 定義指令類型的標志位(例如 ALU、內存、控制流等)
  • 用于強制執行算術與邏輯操作的約束

每一行都會激活與特定指令操作碼對應的約束,確保其在輸入有效的前提下執行正確的計算。

這些組件在執行軌跡矩陣中并不是物理上分離的,而是邏輯上區分開的,以便于理解。在內部,zkVM 3.0 使用共享列與專用列組合來表示這些組件,從而在保持模塊化語義的同時,實現高效的約束組合。這種組織方式也為未來版本中按組件進行證明提供了清晰路徑。

5. 算術化示例概覽

為了說明 zkVM 3.0 如何構造一個可驗證的執行證明,接下來看一個在虛擬機中運行的簡單 RISC-V 程序。算術化過程將該程序的行為轉換為結構化的執行軌跡,隨后通過代數約束進行驗證。

5.1 作為矩陣的執行軌跡

zkVM 3.0 將程序的執行表示為一個大型矩陣,其中:

  • 每一行對應一次指令執行周期
  • 每一列表示 zkVM 某個組件(如 CPU、內存、執行邏輯等)所用的狀態變量或控制信號

該執行軌跡捕獲以下內容:

  • 程序計數器以及當前正在執行的指令
  • 指令執行前后的寄存器值
  • 被讀寫的內存地址與數據值
  • 用于解碼、分支和算術操作的中間信號

隨著程序的運行,該矩陣逐行演化,最終形成完整的計算記錄。

下圖展示了該矩陣及其邏輯結構的可視化布局:
在這里插入圖片描述

5.2 基于 AIR 的約束系統

該軌跡的正確性通過代數中間表示(Algebraic Intermediate Representation,AIR)強制執行。AIR 系統定義了:

  • 代數轉移約束:用于將時間點 tttt+1t+1t+1 的狀態聯系起來
  • 邊界約束:如輸入/輸出條件等限制

如:

  • 針對如 ADD 這類 ALU 指令的轉移約束,會確保程序計數器(PC)在相鄰兩行之間增加 4。也就是說,如果第 iii 行對應一條 ADD 指令,則有 PC[i+1] = PC[i] + 4。這符合 RISC-V 的語義,其中大多數指令占用 4 個字節。
  • 邊界約束 會確保程序計數器從正確的入口點開始(通常是 0),并在執行結束時滿足一個終止條件。

這些約束均以有限域(zkVM 3.0 中為 M31)上的low-degree多項式 表示,從而能高效地在 S-two 證明系統中強制執行。

5.3 子列與子約束集(Subsets of columns and constraints)

并非所有列在每一行上都處于激活狀態:

  • 某些列僅在取指、內存讀寫或算術運算時相關。
  • zkVM 將這些列按邏輯組件組織,使得特定的約束只在需要時才激活。

這種結構在保持完整表達能力的同時,最大程度地減少了約束開銷。

下圖展示了不同組件如何映射到統一軌跡中的列子集:
在這里插入圖片描述

5.4 基于摘要的內存約束

為避免開銷高昂的 Merkle 證明,zkVM 3.0 使用 LogUps 實現離線內存檢查。zkVM 并不將內存表示為完整的狀態向量,而是構造多項式約束來驗證內存訪問摘要:

  • 執行軌跡中記錄了內存地址與訪問類型(讀/寫)。
  • 使用代數規則維護并更新一組摘要行(digest row)。
  • 約束確保該摘要在各時間步驟之間的行為是正確的。

這使得 zkVM 能以代數方式驗證內存使用,而無需保存完整的內存狀態。

這一算術化策略確保 zkVM 3.0 能將真實世界的計算轉化為緊湊、可驗證的證明,同時不犧牲通用性或性能。它也為未來的模塊化和分布式證明架構奠定了基礎。

6. 當前 Nexus zkVM 3.0 的限制

盡管 zkVM 3.0 在架構上進行了重大升級,仍然存在一些核心限制。這些權衡體現了系統快速演進過程中的挑戰,也為Nexus未來的開發路線提供了指導。在持續改進 zkVM 的過程中,Nexus團隊將專注于模塊化、可擴展性與適應性,確保系統能靈活應對日益復雜與分布式的應用需求。

zkVM 3.0 中的以下設計選擇既展示了現有成果,也揭示了未來的改進空間:

  • 單體式執行軌跡(Monolithic trace)
    所有組件共享同一個軌跡矩陣,導致存在大量未使用的列,從而使證明變得更大;此外組件之間耦合緊密,限制了對各組件定制優化的靈活性。
  • 無模塊化證明(No modular proofs)
    zkVM 目前僅生成一個統一的證明,限制了并行/分布式證明、子組件復用和跨模塊程序階段的組合能力。
  • 統一的指令成本(Uniform instruction cost)
    每條指令對軌跡施加的負載相近,這妨礙了基于使用頻率的優化策略,并對資源敏感的部署造成挑戰。
  • 約束復雜性(Constraint complexity)
    盡管基于 AIR 的約束系統具有強大表達力,但其可能生成高次多項式并引入組件間的強依賴。

在下一版本Nexus zkVM 的優先任務是引入模塊化證明、可定制的成本結構和分布式證明生成機制,讓開發者在多樣化環境中獲得更多控制力、更高效率與更強擴展性。

7. 對未來 zkVM 的愿景:模塊化與分布式證明

展望 zkVM 的下一次迭代,Nexus的目標是突破 zkVM 3.0 的單體架構,構建一個更加模塊化、可擴展的系統設計。

Nexus團隊計劃將統一的軌跡矩陣分解為每個組件獨立的軌跡(trace),每個軌跡只捕捉一個子系統(如 CPU、內存、算術邏輯單元)的行為。每個組件軌跡將配備自己的一組約束和獨立的證明。為了維護系統的一致性,將通過基于 LogUp 的摘要約束將共享變量在組件之間進行連接。

7.1 模塊化組件軌跡

通過分離各組件,可以實現:

  • 并行化證明生成:每個子系統可以獨立且同時進行證明生成
  • 按需計費(a la carte costing):開發者只需為其程序實際使用的組件支付資源費用
  • 精準優化:可以根據每個組件的語義特點與使用頻率,微調其約束系統

7.2 指令級拆分

除了劃分主要子系統之外,還計劃將每條指令的執行邏輯隔離到淺層、專用的軌跡片段中。如,像 ADDJUMPSHA256 這樣的指令可以在僅在相關時激活的輕量子組件中處理。這將使得能夠:

  • 最小化常見程序的軌跡規模
  • 降低多項式degree和約束數量
  • 以最小化影響的方式支持指令集擴展

通過這一演進,Nexus的目標是使未來版本的 zkVM 更具可擴展性、可定制性和開發者友好性,同時保持當前版本所定義的通用性與安全性保障。

7.3 預期成果

  • 全模塊化架構,支持可選組件
  • 支持預編譯模塊和新指令集
  • 跨電路的高效復用
  • 支持并行證明與軌跡壓縮
  • 采用透明、基于哈希的安全模型

8. 總結

通過 zkVM 3.0,Nexus朝著構建一個快速且模塊化的零知識虛擬機邁出了關鍵一步。通過引入小域算術、離線內存驗證機制以及 S-two 證明器,設計出了一個在性能與通用性之間取得良好平衡的系統。

同時,也意識到現有架構中的一些局限性——從單體式軌跡結構到固定成本的指令編碼。這些經驗教訓將直接引導未來 zkVM 的演進方向,其中包括模塊化證明、組件隔離和分布式證明生成等關鍵特性。

Nexus致力于打造一個開發者可以隨規模擴展、靈活適配,并在高可信環境中放心使用的 zkVM。zkVM 3.0 是這一目標的基石——Nexus團隊將繼續在此基礎上不斷構建前進。

參考資料

[1] Nexus團隊2025年5月30日博客 zkVM 3.0 and Beyond: Toward Modular, Distributed Zero-Knowledge Proofs
[2] Starkware團隊2025年6月25日博客 Nexus x S-two: Building the future of scalable zkVMs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88147.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

thinkphp使用redis搶單實例

問題:當客戶預約時產生一個訂單,該訂單需要業務人員搶單后跟進一,產生訂單時設置redis$redis new Redis(); $ydkey "yyqd_".$insertId; $exptime 600;//過期時間 600秒 $redis->lpush($ydkey,$$data);//壓入訂單ID $redis-&g…

Java SE--繼承

一.為什么要繼承呢?可以保持原有類的功能上擴展新功能,繼承主要解決的問題是共性的抽取,實現代碼的復用二.繼承的語法舉例:相關圖像:三.父類成員訪問1.子類中(注意)訪問父類的成員變量了解原因&…

掌握 Winget 安裝:從 Microsoft Store 到 winget-install 腳本的完整方案

掌握 Winget 安裝:從 Microsoft Store 到 winget-install 腳本的完整方案 Winget 作為 Windows 官方推出的命令行包管理工具,能極大簡化軟件的安裝、升級與卸載流程。本文將系統梳理從官方渠道到第三方工具的多種安裝方式,涵蓋普通用戶、開發…

簡單來說:Redis的增量同步是怎么一回事

簡單來說: 增量同步就是Master 只把比 Slave 新的數據發給 Slave,而不是發送全部數據。它像一個持續更新的直播流,或者我之前比喻的“每日更新期刊”。Slave 不用重新加載所有數據,只需要接收和應用這些新的更新。 這就像&#xf…

MySQL 安全優化指南:保護你的數據庫免受攻擊

在當今高度互聯的數字世界中,數據是企業的核心資產,而數據庫則是存儲這些資產的堡壘。作為最流行的開源關系型數據庫之一,MySQL 被廣泛應用于各種業務場景。然而,其普及性也使其成為網絡攻擊者青睞的目標。一旦數據庫被攻破,可能導致敏感數據泄露、業務中斷、聲譽受損,甚…

界面控件Telerik UI for WinForms 2025 Q2亮點 - 支持.NET 10 Preview

隨著2025年第二季度新版本的發布,Progress Telerik通過流行的集成IDE的AI編碼助手,基于提示的樣式和基于GenAI的報表見解重新定義了開發人員的工作效率! Telerik和Kendo UI在構建尖端應用程序時繼續推動開發人員工作效率提升,202…

DVWA靶場通關筆記-驗證碼繞過reCAPTCHA(Medium級別)

目錄 一、reCAPTCHA 二、代碼審計(Medium級別) 1、滲透準備 (1)配置security為Medium級別。 (2)配置RECAPTCHA參數 (3)再次打開靶場 2、源碼分析 (1)…

人工智能安全基礎復習用:對抗樣本檢測與防御

一、對抗樣本(Adversarial Examples)定義:對輸入樣本添加人眼無法察覺的細微干擾,導致模型以高置信度輸出錯誤結果。對抗樣本的分布通常偏離自然數據分布,與正常樣本在模型中間層/輸出層的分布存在差異。核心目標&…

[數學基礎] 矩陣的秩及其應用

深入淺出:矩陣的秩及其應用 文章目錄深入淺出:矩陣的秩及其應用一、數學定義二、核心作用三、計算方法與步驟方法1:高斯消元法(最常用)方法2:奇異值分解(SVD)方法3:行列式…

LKH-3算法求解TSP問題基本原理與應用

通俗理解LKH-3算法 LKH-3(Lin-Kernighan-Helsgaun)是求解**旅行商問題(TSP)**的最強啟發式算法之一,由丹麥計算機科學家Keld Helsgaun在LKH-2基礎上改進而來。它的核心思想是:通過智能的“局部破壞與修復”…

游戲開發學習記錄

初始化只是第一次實例化的時候調用,show和unshow是打開界面和關閉界面的時候,會多次調用 在一個腳本里面show是每一次打開界面的時候需要做的事情,而Init是初始化。UIMgr里面的數據結構:為什么我要先從數據結構入手呢?…

一級緩存與二級緩存深度剖析:作用域、配置與同步方案全解析

引言 在分布式系統與高并發場景下,緩存機制已成為提升系統性能的關鍵技術。本文從作用域、失效機制、配置實踐到同步方案,系統化解析一級緩存與二級緩存的核心差異與工程實踐。 一、一級緩存:會話級數據加速器 1.1 作用域與生命周期 作用域&a…

OneCode MQTT插件開發實戰:基于Paho.Client的物聯網通信解決方案

引言 在物聯網應用開發中,MQTT協議因其輕量、低帶寬占用的特性被廣泛采用。OneCode平臺提供的xui.MQTT插件基于Eclipse Paho.Client實現了完整的MQTT通信能力,本文將從插件用途、核心實現、開發要點和功能擴展四個維度,詳解如何基于該插件構建…

1.1_5_1 計算機網絡的性能指標(上)

在這個小節中我們要學習計算機網絡的性能指標,我們在考研當中主要掌握這樣的七個性能指標,分別是速率、帶寬、吞吐量、時延、時延帶寬積、往返時延和信道利用率。我會把相關性比較緊密的性能指標放在一起講解。在這個視頻中,我們先來學習前三…

Python 性能優化指南:深入剖析代碼分析與優化工具

Python 性能優化指南:深入剖析代碼分析與優化工具 在 Python 的廣泛應用場景中,性能優化既是挑戰,也是機遇。無論是構建 Web 應用還是處理數據分析,理解代碼性能瓶頸并有效優化至關重要。本文將探討 Python 代碼性能分析的核心方法,并逐步解析關鍵工具的使用技巧,帶您從…

力扣打卡第二十一天 中后遍歷+中前遍歷 構造二叉樹

106. 從中序與后序遍歷序列構造二叉樹 給定兩個整數數組 inorder 和 postorder ,其中 inorder 是二叉樹的中序遍歷, postorder 是同一棵樹的后序遍歷,請你構造并返回這顆 二叉樹 。 示例 1: 輸入:inorder [9,3,15,20,7], postor…

Notepad++正則表達全解

摘要:Notepad正則表達式符號大全包含11類常用語法:基礎符號(.^$?等)、預定義字符類(\d\w\s等)、錨點(\b\B)、量詞({n,m})、分組引用(()$1)、字符…

前后端分離(java) 和 Nginx在服務器上的完整部署方案(redis、minio)

一、準備工作 服務器環境要求 銀河麒麟 V10 操作系統 開放端口:MinIO (9000、9001)、 Redis (6379)、應用服務 jar包(18888)、前端服務(8080) 系統用戶:具有 sudo 權限的用戶 操作:需要先有必備的工具前端的vsCode,webStrom、后臺的idea&…

貪心算法:簡單而高效的求解策略C++

貪心算法詳解及C實現 1. 什么是貪心算法 貪心算法(Greedy Algorithm)是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是全局最好或最優的算法策略。 貪心算法與動態規劃不同在于它…

IDEA 中使用 <jsp:useBean>動作指令時,class屬性引用無效

問題&#xff1a;在 IDEA 中創建 Java Web項目&#xff0c;在src/model包下存在一個Student類該類中包含&#xff1a;全參構造器、私有屬性的get/set方法。然后在 jsp 頁面中使用 <jsp:useBean>創建Student類的對象&#xff1a;訪問頁面時報錯&#xff1a;原因&#xff1…