zkVM选型要点

1. 引言

当选择ZK工具,来做可验证链下计算来扩容区块链时,需考虑:

  • 1)为何应选择zkVM?
  • 2)zkVM有哪些基本功能?
  • 3)哪些zkVM可提供这些基本功能?

2. 为何应选择zkVM?

2年前,主流的ZK软件开发是:

  • 使用circom来手写电路

这种手写电路的方式是劳动密集型的:

  • 电路难以编写、更新、审计和维护

将基于电路的ZK项目上市所需的时间约为2年,成本约为1亿美金。

过去2年来,RISC Zero已证明,相比于直接编写电路,为zkVM编写应用程序能更快、更便宜地让项目上市。zkVM使得ZK技术对普通开发者可用,使得可在一个周末即可实现复杂应用。

早在2022年,RISC Zero团队就解锁了证明常规Rust代码正确执行的能力,如证明最受欢迎的Rust库等。使得ZK builders可专注于构建实际的应用程序,利用所有Rust生态的成熟工具。

3. zkVM有哪些基本功能?

当今有很多zkVM可供选择,实际应用时,应考虑如下4大基本功能:

  • 1)支持导入crates/packages。
  • 2)支持链上proof验证。
  • 3)支持unbounded计算,而不会让验证开销膨胀。即支持unbounded计算,但有constant proof size,从而具有constant验证开销。
  • 4)支持proof composition。

为了实现ZK的未来,以上四大功能是必需的。

4. 哪些zkVM可提供这些基本功能?

截止到2024年4月24日,当前市场上已有的zkVM有:

在这里插入图片描述

4.1 支持库导入

原因在于:

  • 若不支持库导入,软件开发将是噩梦。允许开发者导入库是任何复杂应用的基本诉求。

为何难以实现:

  • 数年前,ZK系统是效率低下的、难以构建的,以至于让ZK系统支持像Rust或C++这样的成熟语言,在技术上似乎遥不可及。如今,zkVM开发的趋势已经从定制指令集转向RISC-V、MIPS和WASM等标准指令集。

RISC Zero的方案:

  • 2022年4月,RISC Zero发布了首个zkVM,支持对像Rust或C++这样的高级语言生成proofs。如今,RISC Zero团队每晚都会进行测试,以检查前1000个Rust库与RISC ZerozkVM的兼容性:当前70%的库都是开箱即用。

4.2 支持链上proof验证

原因在于:

  • 链上验证是区块链领域ZK应用的基本要求:
    • 链下证明计算
    • 链上验证计算

为何难以实现:

  • 证明系统设计涉及Prover复杂度和Verifier复杂度之间的基本权衡。目前的趋势是,基于哈希和纠错码的SNARK(又名STARK)为zkVM提供了最好的prover开销,而基于椭圆曲线的SNARKs提供了更好的链上验证开销。如今的zkVM通常包括多个证明系统的合并,以便两全其美。

RISC Zero的方案:

  • RISC Zero使用STARK进行有效证明,然后在SNARK电路内验证STARK证明,以便将STARK“翻译”为SNARK。2023年8月,RISC Zero团队在Sepolia上发布并验证了首个proof。如今,RISC Zero支持适用于任何zkVM应用程序的链上verifier合约。

4.3 支持unbounded计算,但验证开销为constant

原因在于:

  • 若想要证明某以太坊区块或某OP区块 构建正确,对应的是需对a very large computation的证明。

为何难以实现:

  • 对large computations直接证明,并不能很好的扩展——增加2倍的computation size,对应的计算复杂度将增加超过2倍。为解锁unbounded computation size(而不妨碍链上验证),有2大技术难点:
    • 将large computation切分为chunks的能力,并对各chunks独立证明
    • 将“segment proofs”聚合为单个succinct proof的能力。

RISC Zero的方案:

  • RISC Zero引入了continuations来解决为unbounded sized computation生成proof的难题——可独立证明每个segment,然后使用recursion递归来聚合segment proofs。这样,RISC Zero可实现linear-time proving with constant verification costs。

4.4 支持proof composition

原因在于:

  • proof composition(又名proof of proof),解锁了大量不同应用,包括更复杂的隐私应用、更模块化的zkVM应用,以及proof聚合(所聚合的proof可源自RISC Zero,也可源自其它证明系统)。

为何难以实现:

  • 使proof composition高效是极具挑战的。解锁此功能不仅需要解决递归问题,还需要构建一个API,以允许开发人员从zkVM内部调用recursive prover。

RISC Zero的方案:

  • 用户可通过调用RISC Zero zkVM内的env::verify()函数来访问proof composition。该功能是2024年2月新加的。更多信息可参考:
    • 2024年2月视频 Proof Composition RISC Zero Study Club
    • 2024年2月博客 Proof Composition: Unlocking Recursion and Modularity for ZK Developers

5. 递归电路:ZK building的最难部分

zkVM四大功能中的3个(链上验证、unbounded computation、proof composition)都依赖于递归。在ZK世界,递归是指:

  • 证明,某proof正确验证,的能力。

换句话说,递归是指:

  • 在prover内运行verifier。

这听起来可能很直观,但构建递归电路是出了名的复杂。RISC Zero zkVM的设计尽可能易于使用,但在本质上,保持了三个相关但独立的ZK电路的兼容性。

  • 在RISC Zero中,实际上有两个基于STARK的zkVM:
    • 首先使用RISC-V电路来生成RISC-V执行的证明
    • 然后使用单独的递归电路来聚合这些证明。
  • 最后,将结果输入SNARK电路,以便进行链上验证。

为此,当前RISC Zero团队正在构建一种基于MLIR的语言,用于构建名为Zirgen的递归电路。更多Zirgen详情,可查看Julian Sutherland(Nethermind)的演讲:(Almost) effortless formal verification of ZK-circuits by Julian Sutherland (Nethermind Security)。

6. 如何对比现有zkVMs?

性能似乎是最自然的比较维度,但不幸的是,ZK项目的基准测试仍处于初级阶段。有很多基准项目,但事实证明,要为apples-to-apples的比较提供一个强大的框架是非常困难的。
在比较性能之前,需确保以上提及的4大功能的完整性。
当某个新加入者宣布其Zeth版本时,声称区块构造证明比RISC Zero快30倍。但不幸的是,其Zeth proof也比RISC Zero的大1000倍。若不能在链上验证proof,那能以多快的速度生成证明真的重要吗?

RISC Zero一直致力于为生产使用准备一个功能完整的zkVM。一旦RISC Zero完成了审计和可信的设置仪式,并在主网上部署了verifier,就可以指望得到一些重大的性能改进。目前,推荐使用唯一功能完整的zkVM:RISC Zero。

7. 其它重要功能?

除以上提及的4大功能之外,还有多个功能值得提及:

  • 1)Deterministic builds。zkVM原生支持某给定二进制文件的正确执行,但对于大多数应用场景,想要的是能证明某指定Rust(或其它高级语言)程序的正确执行。RISC Zero通过引入cargo-risczero工具来解决该问题。
  • 2)支持Accelerator电路。当识别某zkVM应用的性能瓶颈时,可修改zkVM来提供应用专用的acceleration。如,可添加Keccak accelerator来支持以太坊区块构建的高效证明。RISC Zero当前提供了大整数运算和SHA的accelerator。
  • 3)支持proof aggregation。proof aggregation是指将许多证明合并为单个证明的能力。这一功能对于使链上验证开销合理至关重要。proof composition启用了proof aggregation功能,但值得注意的是,其他系统可能会提供proof aggregation的解决方案,而不会完全解决proof composition的问题。

参考资料

[1] RISC Zero指令设计工程师Paul Gafni 2024年4月8日博客 The 4 Features of a zkVM: How to Choose your ZK Toolkit

RISC Zero系列博客

  • RISC0:Towards a Unified Compilation Framework for Zero Knowledge
  • Risc Zero ZKVM:zk-STARKs + RISC-V
  • 2023年 ZK Hack以及ZK Summit 9 亮点记
  • RISC Zero zkVM 白皮书
  • Risc0:使用Continunations来证明任意EVM交易
  • Zeth:首个Type 0 zkEVM
  • RISC Zero项目简介
  • RISC Zero zkVM性能指标
  • Continuations:扩展RISC Zero zkVM支持(无限)大计算
  • A summary on the FRI low degree test前2页导读
  • Reed-Solomon Codes及其与RISC Zero zkVM的关系
  • RISC Zero zkVM架构
  • RISC-V与RISC Zero zkVM的关系
  • 有限域的Fast Multiplication和Modular Reduction算法实现
  • RISC Zero的Bonsai证明服务
  • RISC Zero ZKP协议中的商多项式
  • FRI的Commit、Query以及FRI Batching内部机制
  • RISC Zero的手撕STARK
  • RISC Zero zkVM guest程序优化技巧 及其 与物理CPU的关键差异
  • ZK*FM:RISC Zero zkVM的形式化验证
  • Zirgen MLIR:RISC-Zero的ZK-circuits形式化验证
  • 以RISC Zero ZK Fraud Proof赋能Optimistic Rollups
  • zkSummit10 亮点记
  • 技术探秘:在RISC Zero中验证FHE——由隐藏到证明:FHE验证的ZK路径(1)
  • 技术探秘:在RISC Zero中验证FHE——RISC Zero应用的DevOps(2)
  • RISC Zero STARK证明系统时序图及规范
  • RISC Zero zkVM Host & Guest 101
  • RISC Zero zk-STARK证明系统代码解析
  • RISC Zero的Babybear域 及其 扩域
  • RISC Zero各功能模块代码解析
  • RISC Zero 的 cargo-risczero相关模块代码解析
  • RISC Zero v0.20升级:Proof Composition——为ZK开发者解锁递归和模块化
  • RISC Zero zkVM 2024年Q1、Q2路线图

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

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

相关文章

大模型培训老师叶梓:通过微调提升小型语言模型的复杂推理能力

在人工智能的快速发展中,复杂推理能力的提升一直是研究者们追求的目标。最近,一项发表在arXiv上的研究成果【1】,提出了一种创新的方法,即通过微调小型语言模型(LMs),并将其与大型语言模型&…

贪吃蛇游戏C语言破解:成为编程高手的必修课!

​ 个人主页:秋风起,再归来~ 文章专栏:C语言实战项目 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、游戏效果演示 贪吃蛇游戏效果演示 2、win32 A…

20240423给飞凌的OK3588-C开发板适配OV13855【绿屏】linux

20240423给飞凌的OK3588-C开发板适配OV13855【绿屏】 2024/4/22 20:29 开发板:飞凌的OK3588-C OS操作系统:linux R4/Buildroot 【OV13855接到CAM1上,如果要接到CAM2上请修改相关的DTS即可】 https://item.taobao.com/item.htm?_unju3ku2f4…

kerberos:适配华为FI

文章目录 一、hive1、hive thrift连接方式 一、hive 1、hive thrift连接方式 kerberos认证失败信息 缺少配置:{“hadoop.rpc.protection”:“privacy”},具体可参考:kerbros认证相关问题 华为FI参考资料: https://github.com…

【MySQL 数据宝典】【磁盘结构】- 004 redolog 重做日志

一、背景介绍 持久性要求: 对于已提交的事务,即使系统发生崩溃,其对数据库的更改也不能丢失。问题: 在事务提交前将所有修改的页面刷新到磁盘浪费资源。随机IO导致刷新速度慢。 解决方案: 【数据副本】记录事务执行过…

linux信号机制分析

概念 信号递达:实际执行信号的处理动作就是信号递达 信号未决:信号从产生到递达之间的状态就是信号未决(未决就是没有解决) 收到某信号后,把未决信号集中的此信号置为1(1表示未解决的信号)&a…

【Camera Sensor Driver笔记】四、点亮指南之EEPROM配置

很久之前写的一版&#xff1a; 【Qcom Camera】微距eeprom调试_cam_vio-supply <&l7p>-CSDN博客 <slaveInfo> EEPROMName cat24c64_imx585 eeprom型_sensor名字 slaveAddress 0xa0 i2c write address regAddrType …

国产PLC有哪些,哪个牌子比较好用?

你知道国产PLC有哪些吗,哪个牌子更好用吗&#xff1f; 今天拿出国产先锋的汇川与台达对比&#xff0c;注&#xff1a;视频后方有各品牌学习资料免费送&#xff0c;需要的移步自取。话说回来&#xff0c;只要基于Codesys开发的都比较好用&#xff0c;只是使用底层芯片不同&…

国产软件不背黑锅:4款功能强大的黑科技软件,且用且珍惜

国内软件常被冠以“流氓软件、需要额外付费、广告繁多”等负面标签&#xff0c;但实际上&#xff0c;其中不乏一些小众却功能强大、用户体验极佳的软件。 布丁扫描——免费专业的扫描APP&#xff08;安卓、ios&#xff09; 布丁扫描&#xff0c;无疑是我今年的最爱&#xff0…

服务器还在长期泄密,保护数据IPSSL证书必不可少

IP SSL&#xff0c;或称为安全套接层协议&#xff08;Secure Sockets Layer&#xff09;&#xff0c;是一种用于在互联网上进行通信加密的技术标准&#xff0c;它通过为数据提供加密服务&#xff0c;确保了数据在传输过程中的安全与完整。其工作方式是在客户端和服务器之间建立…

你们项目日志是如何处理的???

ELK日志采集系统 1.什么是ELK ELK 是一套流行的数据搜索、分析和可视化解决方案&#xff0c;由三个开源项目组成&#xff0c;每个项目的首字母合起来形成了“ELK”这一术语&#xff1a; Elasticsearch (ES): Elasticsearch 是一个基于 Apache Lucene 构建的分布式、实时搜索与…

Java 字符

Java 字符 Java教程 - Java字符 在Java中&#xff0c;char存储字符。Java使用Unicode来表示字符。Unicode可以表示在所有人类语言中找到的所有字符。 Java char是16位类型。 字符的范围是 0 到 65,536 。没有负字符。 Char文字 Java中的字符是Unicode字符集的索引。字符表…

OpenHarmony实战开发-减小应用包大小。

简介 减小应用包大小是提升应用下载、安装体验的重要方式之一。通过压缩、精简或者复用应用中的代码或资源&#xff0c;可以有效降低应用的大小&#xff0c;提升应用下载和安装速度&#xff0c;减少系统空间占用。 开发者可以参考下面三种方法减小应用包大小&#xff1a; 配…

介绍TCP三次握手、传输数据、四次挥手标志为确认号变化规律

TCP协议的三次握手是一个关键过程&#xff0c;用于在客户端和服务器之间建立可靠的连接。以下是三次握手的详细过程&#xff0c;包括标志位、序列号以及ACK的变化规律&#xff1a; 第一次握手&#xff1a; 客户端&#xff1a; 标志位&#xff1a;SYN1&#xff08;表示请求建立…

【行为型模型】迭代器模式

一、迭代器模式概述 迭代器模式定义&#xff1a;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露其内部的表示。把游走的任务放在送代器上&#xff0c;而不是聚合上。这样简化了聚含的接口和实现,也让责任各得其所。(对象行为型) 迭代器模式的优缺点&…

数据结构之顺序表的实现(C语言版)

Hello, 大家好&#xff0c;我是一代&#xff0c;今天给大家带来有关顺序表的有关知识 所属专栏&#xff1a;数据结构 创作不易&#xff0c;望得到各位佬们的互三呦 一.前言 1.首先在讲顺序表之前我们先来了解什么是数据结构 数据结构是由“数据”和“结构”两词组合⽽来。 什…

C语言—深度剖析函数指针,函数指针数组

我们先来看一段代码 #include <stdio.h> void test() {printf("hehe\n"); } int main() {printf("%p\n", test);printf("%p\n", &test);return 0; }输出的是两个地址&#xff0c;这两个地址是 test 函数的地址。 那我们的函数的地址…

Electron 30.0.0 发布,升级 Node 和 V8 引擎

近日&#xff0c;Electron 30.0.0 正式发布&#xff01;你可以通过 npm install electronlatest 进行安装&#xff0c;或者从 Electron 的发布网站下载&#xff0c;继续阅读了解此版本的详细信息。 &#x1f525; 主要更新 Windows 上支持 ASAR 完整性融合。如果未正确配置&am…

软件测试——Postman Script脚本功能

Postman作为软件测试里一款非常流行的调试工具&#xff0c;给我们提供了一个执行JavaScript脚本的环境&#xff0c;所以我们可以使用js语言编写脚本来解决一些接口自动化的问题&#xff0c;比如接口依赖、接口断言等等。Postman有Pre-RequestScript和Tests两个编写js脚本的模块…

Jenkins 哲学 - 插件初始化安装失败

到Jenkins官网查找最新的LST版本 最后的版本号一定要带&#xff0c;指定下载具体的版本号 docker pull jenkins/jenkins:2.426.1 自定义挂载目录&#xff0c;修改权限 mkdir /jenkins/jenkins_homechmod 777 /data/jenkins