zkVM设计性能分析

news2024/10/6 18:30:44

1. 引言

本文主要参考:

  • 2023年9月ZKSummit10 Wei Dai @1k(x) & Terry Chung @1k(x)分享视频 ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung

当前有各种zkVM,其设计思想各有不同,且各有取舍,本文重点对现有各zkVM设计进行分析。
zkVMs寒武纪大爆发:
在这里插入图片描述

  • 2020年之前的zkVM方案均是学术性的,不具备实用性,具体有:
    • TinyRAM(2013年)
    • vnTinyRAM
    • Buffet
    • Geppetto
    • Spice等
  • 2021年之后开始有商业化的zkVM方案,特别是近两年来各种zkVM方案开始大爆发,有:
    • Cairo-VM
    • Risc-Zero
    • zkSyncVM
    • polygon zkEVM
    • Scroll zkEVM
    • Delphinus zkWasm
    • Valida
    • Triton VM
    • powdr risc-v
    • Fluent zkWasm
    • Jolt
    • polygon Miden等

本文内容框架为:

  • 何为zkVMs?为何需要zkVMs?
  • zkVM设计性能分析:
    • ISA性能分析
    • Arithmetization性能分析
    • Proof system性能分析
  • 结论及开放性问题

2. 何为zkVMs?为何需要zkVMs?

2.1 为何需要zkVMs?

zk Circuits vs. zkVMs:
在这里插入图片描述

  • 编程语言:zk Circuits通常采用Circom、HDL等面向领域编程语言编写;而zkVMs采用Rust、WASM、Risc-V、LLVM等高级通用语言编写。
  • 易用性及生态:难于用zk Circuits来表达具有很多分支的复杂逻辑;而zkVMs的程序有大量现有可靠的软件。
  • 性能:zk Circuits性能较高,因其对特定计算的约束进行了手动调优;而zkVMs性能要慢约10~100倍。本文重点关注的是如何提升zkVMs的性能。

2.2 何为VMs?

虚拟机采用指令集架构(Instruction set architecture,ISA),即:

  • 具有固定语义的一组有限数量的指令集。

在这里插入图片描述

虚拟机(Virtual Machine,VM)的主要结构有:

  • 程序:由指令序列组成。虚拟机每次仅读取程序中的一条指令。
  • 内存
  • 虚拟机:主要工作为:
    • 1)读取输入
    • 2)对内存(RAM)读写
    • 3)修改本地机器状态:内部机器状态为:Stack和(或)Registers。
    • 4)写输出
    • 5)中止执行

现有的VM/zkVM架构,以及内部机器状态内存模型,选型情况为:
在这里插入图片描述

2.2.1 VM选择——Harvard架构 vs. Von Neumann架构

前序博客见:

  • 哈佛架构 VS 冯·诺依曼架构

在做zkVM设计时,对应虚拟机(VM)架构通常需考虑在哈佛架构 和 冯·诺依曼架构 之间二选一:

  • 哈佛架构:程序和内存分属不同区域。
    • 优点为:
      • 无program loader
      • 仅lookup table需要额外的cycles。
    • 缺点为:
      • 无JIT
      • per program setup(需对每个程序做setup)
  • 冯·诺依曼架构:程序在内存中。
    • 优点为:
      • 通用,更接近现代CPUs
    • 缺点为:
      • 必须约束所取指令的正确性
      • 需要program loader(来将程序加载到内存中), 意味着需要更多cycles

在这里插入图片描述

2.2.2 VM内部机器状态内存模型选择——Stack, Register, vs. Direct Memory

虚拟机内部机器状态内存模型,通常有3种选择:

  • 1)Stack Machine:通过访问stack top来进行数据移动,指令更简单。如:
    • EVM
    • Miden-asm
    • Wasm
  • 2)Register Machine:指令比Stack Machine要短,但更复杂,不过数据移动操作要少的多。如:
    • RISC-V
  • 3)Direct Memory Machine:无需数据移动(zero data movement),但有更多的读写操作。如:
    • LLVM-IR
      在这里插入图片描述
      在这里插入图片描述
      三种虚拟机内部机器状态内存模型的性能对比为:
      在这里插入图片描述

2.3 何为zkVMs?

zkVM的目的在于:

  • 给定初始程序、初始程序输入、初始内部机器状态,证明以上VM的有效执行。

zkVMs主要分为四大阶段:

  • 1)Setup阶段:根据参数(如最大trace行数、固定列数、哈希函数等),获得Proving key和Verification key。

  • 2)生成Witness阶段:(Executor)根据程序和程序输入,生成execution trace(即witnesses)。该execution trace中包含了:

    • 该程序的执行
    • 以及,帮助约束该执行有效性的额外信息。

    在生成Witness阶段,还包括将程序切分以供后续并行证明的工作。

  • 3)Proving阶段:根据execution trace和Proving key,生成proof。

  • 4)Verification阶段:根据proof和Verification key,生成验证是否通过的结果Y/N。

在这里插入图片描述

3. zkVM设计性能分析

传统虚拟机中,其效率分析的核心思想为:

  • VM效率 约等于 (程序中的指令数 x 执行单条指令用时) ,即:
    T ≈ P中指令数  × time instruction T\approx \text{P中指令数 }\times \frac{\text{time}}{\text{instruction}} TP中指令数 ×instructiontime

当使用zkVM证明某固定、抽象程序P时,借鉴相同的思想:

  • zkVM效率 约等于 (程序中的指令数 x 单条指令的约束复杂度 x 单个约束证明用时) ,即:zkVM证明用时 T T T以如下公式来表示:
    T ≈ P中指令数  × time instruction ≈ P中指令数  × "Constraint complexity" instruction × time "Constraint complexity" \begin{aligned}T &\approx \text{P中指令数 }\times \frac{\text{time}}{\text{instruction}} \\ &\approx\text{P中指令数 }\times \frac{\text{"Constraint complexity"}}{\text{instruction}} \times \frac{\text{time}}{\text{"Constraint complexity"}}\end{aligned} TP中指令数 ×instructiontimeP中指令数 ×instruction"Constraint complexity"×"Constraint complexity"time

其中的“约束”为:

  • 衡量某类proof system复杂度的单位。

取决于所采用的proof system类型,具体的“约束复杂度”是指,如:

  • R1CS约束数
  • 具有固定配置的Plonk电路中的cells数
  • 具有固定depth的GKR电路中的wires数

为此,在对zkVM做性能分析时,将“(程序中的指令数 x 单条指令的约束复杂度 x 单个约束证明用时)”拆分成3个维度来分析,其中:

  • 1)程序中的指令数:对应为ISA(Instruction set architecture)性能分析。
  • 2)单条指令的约束复杂度:对应为Arithmetization性能分析。
  • 3)单个约束证明用时:对应为Proof system性能分析。
    在这里插入图片描述

3.1 ISA性能分析

ISA(Instruction set architecture)性能分析,主要关注的是程序中的指令数。
传统ISA和“ZK ISA”是针对不同的场景进行了优化:

  • 传统ISA为:

    • 内存局限性:处理器具有内存上限。
    • 程序size(如压缩):无法有太多通用寄存器。
    • 执行速度
  • "ZK ISA"为:

    • 每个cycle,一条指令:具有指令上限。
    • 指令大小的影响小:指令可包含更多信息,如引用更多寄存器或本地变量。
    • 证明速度或性能。

在这里插入图片描述
以,在软件中实现SHA256 one-round压缩函数 所需的指令数,为例,不同虚拟机对比情况为:
在这里插入图片描述
其中:

  • 前三种(EVM、Miden-asm、Wasm)为stack machine,具有相对更多的local data movement操作。
  • RISC-V为register machine,具有少得多的local data movement操作。
  • LLVM-IR为direct memory模式,具有虚拟寄存器,从而具有zero data movement。

在这里插入图片描述
在这里插入图片描述
由此可知,实际的ISA性能,取决于所采用的机器内部状态内存模型:

  • 1)Stack machines:具有大量stack操作(数据移动操作)(高达50%~60%)。
  • 2)Register machines:
    • 当寄存器压力低时,其性能好。
    • 当寄存器压力高时(~30%),需要大量的数据移动。
  • 3)Direct memory machines:
    • 消除了local data movement,即无需数据移动。
    • Caveat(警告):可能会导致更复杂的arithmetization?
      在这里插入图片描述

3.2 Arithmetization性能分析

Arithmetization性能分析,关注的是:

  • 单条指令的约束复杂度。

在这里插入图片描述
实际在对Arithmetization性能分析时,主要分为2大块:

  • Segment性能分析
  • “Recursion复杂度”+“Continuation复杂度” 性能分析。

3.2.1 Segment性能分析

算术化是指将对程序执行segment的约束,转换为:

  • Permutation check、
  • Gate check、
  • lookup、
  • Copy check

等组合,然后进一步转换为2大类子约束表达:

  • Zero check
  • Product check

取决于具体所采用的PolyIOP方案,后续的方案以及影响性能的关键运算也有所不同:

  • 单变量PolyIOP:相关方案有Plonk、STARK、Plookup等,对应为Quotient check,影响性能的关键运算为FFT。
  • 多变量PolyIOP:相关方案有GKR、HyperPlonk、Jolt/Lasso、ProtoStar等,对应为Sum check,影响性能的关键运算为MLE。
    在这里插入图片描述

在这里插入图片描述
以基于STARK的zkVM为例,将程序正确执行的execution trace切分为多个segment。其Prover的证明用时由:

  • 派生多项式,以及对多项式进行承诺

所主导。根据RISC0、Triton、Plonky2所提供的数据:

  • 经典的STARK Provers有60%~80%的证明时长用于派生和commit多项式。
3.2.1.1 STARK VMs vs. SNARK VMs

在这里插入图片描述
当前基于STARK方案的zkVM有:

  • Risc0
  • Miden
  • Cairo
  • Valida
  • Nock
  • TritonVM
  • zkSync VM
  • Polygon zkEVM

这些STARK zkVMs的性能分析对比情况为:【关键数据见最后2列】
在这里插入图片描述
现有的基于SNARK方案的zkVMs,采用的都是基于Halo2的方案,具体有:

  • zkWasm
  • Powdr的Risc-v
  • Scroll的zkEVM

这些SNARK zkVMs性能对比为:
在这里插入图片描述

3.2.2.2 segment性能提升措施

为提升Arithmetization segment性能,其目标应为:

  • 尽可能使,单个指令的committed cells,数量最少。

具体措施有:

  • 1)移除重复的cells。仅对每个指令的“state change”进行commit。
    • 对“non-local” 数据/计算,采用permutation/lookups。
    • powdr risc-v中的寄存器(编码在列中),占约50%的列。
  • 2)采用表达性更好的IOP arguments:
    • fixed lookup tables可改进bitwise运算性能。
    • 改进关键IOP原语的性能,如在单个table中查找 M M M个列集合,采用更好的lookup argument会具有更好的性能:
      在这里插入图片描述
  • 3)具有“flexible area”的co-processors,有助于改进单个指令开销。

在这里插入图片描述

3.2.2“Recursion复杂度”和“Continuation复杂度” 性能分析

在这里插入图片描述
当将1个完整的execution trace切分为 t t t个segment时,总的复杂度为:

  • 证明所有 t t t个(具有 n n n-step)segments复杂度
  • 证明所有 t − 1 t-1 t1个 recursive proofs的复杂度

相应的关键路径为:

  • 1个segment proof
  • log ⁡ ( t ) \log(t) log(t)个recursive proofs

在这里插入图片描述
如Risc0中,有多达50%的开销用于对“continuation” state进行序列化。

对比SNARKs(Plonk)、Folding/Accumulation、STARKs等方案的recursion threshold开销为:
在这里插入图片描述
在这里插入图片描述

3.3 Proof system性能分析

Proof system性能分析,关注的是:

  • 单个约束证明用时。

对于多项式承诺方案(PCS,Polynomial Commitment Scheme),基于FRI的PCS性能要由于基于MSM的多项式承诺方案性能:【其中y轴表示的是每秒承诺的域元素数】
在这里插入图片描述
在这里插入图片描述

4. 结论及开放性问题

关于ISA的开放性问题有:

  • 如何将现有工具应用到zk-efficient ISA中?
  • 可进一步消除data movement么?如对memcpy进行direct argument?

关于Arithmetization的开放性问题有:

  • 降低单个指令的复杂度
  • 降低递归(recursion)复杂度
    • “doubly-fast”哈希函数(如Poseidon2、Tip5、XHash{8,12}、Monolith等)
  • 降低"continuation"复杂度

关于proof system/PCS的开放性问题有:

  • FFT、MLE、PCS应封装为库,项目方可受益于这些原语的更好实现。
  • 更好的bench工具,来对比各个方案的性能。

在这里插入图片描述

参考资料

[1] 2023年9月ZKSummit10 Wei Dai @1k(x) & Terry Chung @1k(x)分享视频ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung【1k(x)为早期密码学投资基金】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C语言】(指针解决)输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组

代码 下面是使用指针解决的代码示例&#xff1a; #include <stdio.h>void swap(int *a, int *b) {int temp *a;*a *b;*b temp; }int main() {int arr[100], n, max_index 0, min_index 0;printf("Enter the size of the array: ");scanf("%d"…

Maven(项目构建管理工具)

为什么要使用Maven&#xff1f; 传统项目管理状态分析&#xff1a; ①jar包不统一&#xff0c;jar包不兼容&#xff1b; ②工程升级维护过程操作繁琐&#xff1b; ........... Maven(JAVA书写)&#xff1a;管理jar包以及jar之间的依赖关系&#xff0c;完成项目编译&#xff0c;…

【算法】排序——归并排序和计数排序

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法头疼记&#xff1a;算法专栏…

回归预测|GWO-BPNN-Adaboost算法原理及其实现(Matlab)

在上一篇文章中介绍了BPNN-Adaboost算法的原理及其实现&#xff0c;Adaboost算法可以将多个BPNN作为弱分类器进行训练&#xff0c;使其相互补充&#xff0c;集成为具有较强鲁棒性的强分类器。但由于BPNN对于初始权值和阈值的选取具有随机性&#xff0c;这将导致模型精度的不定性…

【易语言】m3u8下载器源码

前阵子接了个下载视频的小单子&#xff0c;部分视频是m3u8链接的&#xff0c;临时弄了个批量下载器&#xff0c;如图&#xff1a; 这东西网上虽然很多&#xff0c;但还是喜欢自己折腾一下&#xff0c;就直接开源了。代码好不好&#xff0c;只看能不能跑。 原理就是调用ffmpeg&a…

Polygon Mide状态模型:解决状态膨胀,而不牺牲隐私和去中心化

1. 引言 前序博客有&#xff1a; Polygon Miden&#xff1a;扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型Polygon Miden交易模型&#xff1a;Actor模式 ZKP &#xff1e; 并行 隐私 在Polygon Miden交易模型&#xff1a;Actor模…

国庆day5

客户端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);socket new QTcpSocket(this);//此时&#xff0c;已经向服务器发送连接请求了&#xff0c;如果成功连…

安全防御—密码学

1. 什么是APT&#xff1f; APT&#xff08;Advanced Persistent Threat&#xff09;是指高级持续性威胁&#xff0c;本质是针对性攻击。 利用先进的攻击手段对特定目标进行长期持续性网络攻击的攻击形式&#xff0c;APT攻击的原理相对于其他攻击形式更为高级和先进&#xff0c;…

一文教你搞懂Redis集群

一、Redis主从 1.1、搭建主从架构 单节点的Redis的并发能力是有上限的&#xff0c;要进一步的提高Redis的并发能力&#xff0c;据需要大家主从集群&#xff0c;实现读写分离。 共包含三个实例&#xff0c;由于资源有限&#xff0c;所以在一台虚拟机上&#xff0c;开启多个red…

第八章 排序 一、排序的基本概念

目录 一、定义 二、排序算法的评价指标 1、算法的稳定性 2、时间复杂度和空间复杂度 三、排序算法的分类 &#xff08;1&#xff09;内部排序 &#xff08;2&#xff09;外部排序 一、定义 排序是将一组数据按照一定的规则或条件进行重新排列的过程&#xff0c;使得数据…

代码随想录第35天 | ● 01背包问题,你该了解这些! ● 01背包问题—— 滚动数组 ● 416. 分割等和子集

01背包 题目 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 代码 function testWeightBagProblem (weight, value, size) {// 定义 d…

【已解决】spring-boot项目使用maven打包时出现BOOT-INF文件夹的问题

jar中多了这个BOOT-INF文件夹的原因&#xff0c;主要是因为我们在maven的pom文件中加入了spring-boot-maven-plugin这个插件&#xff0c;如下所示&#xff1a; 只需要将加个configuration标签&#xff0c;并在里面嵌套加入一个skip子标签&#xff0c;并将skip的值设为true&…

实现文档AI搜索,提高问题解决效率

在当今的数字时代&#xff0c;以AI为动力的文档搜索变得越来越重要。随着在线提供信息的指数增长&#xff0c;传统的搜索方法通常效率低下且耗时。实施文档AI搜索可以显著提高搜索相关文档的效率和有效性。 | 在网站中实施文档AI搜索的好处很多 首先&#xff0c;它通过提供无缝…

联想M7216NWA打印一体机墨粉清零方法

在设备就绪状态下&#xff0c; 按“功能”键&#xff0c;进入设置菜单&#xff0c;按上下键进行选择&#xff0c;屏幕出现“设备信息”项时按"确认"键&#xff0c; 再按上下键选择&#xff0c;当屏幕出现“重置硒鼓”后长按“确认”键不松手&#xff0c;指导屏幕出现…

RPC 框架之Thrift入门(一)

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【Java 进阶篇】JDBC数据库连接池Druid详解

在Java应用程序中&#xff0c;与数据库进行交互是一个常见的任务。为了更有效地管理数据库连接并提高性能&#xff0c;数据库连接池是一种常见的解决方案。Druid是一个流行的JDBC数据库连接池&#xff0c;它具有丰富的功能和高性能。本博客将详细介绍Druid连接池&#xff0c;包…

基于ModbusTCP与西门子PLC通讯项目案例

目录 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 【1.2】编写PLC程序 二、C#代码编写 【2.1】窗口制作 【2.2】效果演示 【2.3】读取源码 【2.4】FrmSiemensSet源码 【2.5】Variable源码 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 搭建PLCSIM-Advacend模拟仿…

2023年【道路运输企业主要负责人】试题及解析及道路运输企业主要负责人复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人试题及解析参考答案及道路运输企业主要负责人考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业主要负责人操作证已考过的学员汇总&#xff0c;相对有效帮助道路运输企业主要负责人…

黑豹程序员-架构师学习路线图-百科:JavaScript-网页三剑客

文章目录 1、为什么需要JavaScript2、发展历史3、什么是JavaScript3.1、JavaScript介绍3.2、JavaScript内部结构3.3、主要功能 4、TypeScript 1、为什么需要JavaScript 前面我们已经了解了网页三剑客的HTML和CSS&#xff0c;已经明确了它们的职责。 HTML负责页面的展现&#x…

【Java】cron表达式

文章目录 1、语法2、取值3、cron表达式生成工具 定时任务相关的需求很多&#xff0c;对应的实现技术与框架也有不少&#xff0c;例如xxl-job、Quartz、Spring Task。不论怎么技术选型&#xff0c;cron表达式通常都是必要的。虽然现在生成cron表达式的小工具网站很多&#xff0c…