RISC-V与RISC Zero zkVM的关系

2023-11-04 23:12
文章标签 关系 risc zkvm zero

本文主要是介绍RISC-V与RISC Zero zkVM的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 引言

本文基本结构为:

  • 编程语言背景介绍
  • RISC-V虚拟机作为zkVM电路
  • 为何选择RISC-V?

2. 编程语言背景介绍

高级编程语言不专门针对某个架构,其便于人类编写。高级编程语言代码,经编译器编译后,会生成针对专门某架构的汇编代码,汇编代码是供机器使用的。
在这里插入图片描述

也可以直接编写汇编代码:
在这里插入图片描述
以上汇编代码示例中:

  • 蓝色框表示:所编码的数据和指令。
  • 黄色框:为对蓝色框的反汇编。
  • 黑色框:为这些op codes的位置信息。可将黑色框的内容看成是addresses。

直接写汇编代码的好处之一是:

  • 可对系统进行细粒度的控制。

但汇编代码存在如下问题:

  • 表达性有限
  • 专门针对特定机器
  • 难于维护

而借助编译器,使用高级编程语言,可解决以上问题,如:
在这里插入图片描述
各种高级编程语言,经相应的语言后端,可生成相应的LLVM bytecode,然后经LLVM编译出特定机器架构的汇编代码:
在这里插入图片描述

2.1 何为RISC-V?

何为RISC-V?:

  • RISC = Reduced Instruction Set Computer
  • V = This is UC Berkeley’s 5th RISC ISA(Instruction Set Architecture)

具体的RISC-V说明书见:

  • The RISC-V Instruction Set Manual
    在这里插入图片描述

RISC-V有如下模块:
在这里插入图片描述

  • 1)RV32I:Base整数指令集。每个寄存器为32位。有32个寄存器。【使用XLEN术语来表示x寄存器的宽度位数,如是32、64还是128。】

    • 有31个通用寄存器x1-x32来保存整数值,x0寄存器固定为常数值0。
      在这里插入图片描述
    • 没有固定子程序返回地址连接寄存器,但标准软件通常使用寄存器x1来保存返回地址。
    • 有一个额外的用户可见的寄存器:pc,为program counter,用于存储当前指令的地址。
    • 具有的指令集为:【其中ecall指令用于特殊功能】
      在这里插入图片描述
  • 2)RV32E:Base整数指令集。每个寄存器为32位。为RV32I的子集,只有16个寄存器。

  • 3)RV64I:Base整数指令集。每个寄存器为64位。

  • 4)RV128I:Base整数指令集。每个寄存器为128位。

  • 5)M:表示为对整数乘法和触发的标准扩展。以RV32M为例,其具有的指令集为:
    在这里插入图片描述

RISC-V可实现为:

  • 1)硬件芯片
  • 2)或 虚拟机:RISC Zero 将RISC-V用作虚拟机。
    在这里插入图片描述

当将RISC-V用作虚拟机时,其:

  • 以软件来实现RISC-V寄存器和内存
  • 运行RISC-V指令

相应的流程为:
在这里插入图片描述

  • 即,以程序代码编译后的RISC-V汇编代码(ELF二进制文件)作为RISC-V虚拟机的输入,经RISC-V执行,获得相应的程序结果。

3. RISC-V虚拟机作为zkVM电路

zkVM的目的为:

  • 为程序执行生成receipts

RISC Zero zkVM的目的为:

  • 为RISC-V程序执行生成receipts

为生成receipt,需:

  • 1)有RISC-V代码执行的execution trace
  • 2)有相应的一组约束,如:
    • 每个bit应为 0或1:x * (x-1) = 0。
    • 每个寄存器应包含32位数据。
    • 每个指令执行完后,program counter应变化。
  • 3)基于RISC-V虚拟机输出的程序结果 + execution trace + 约束,经某证明系统数学处理,生成相应的receipt。
    在这里插入图片描述

这样,完整的流程即为:
在这里插入图片描述

实际在实现RISC-V虚拟机时,如何区分zkVM中所执行的是哪个程序代码呢?

答案就是Image ID。所谓Image ID,是加载到内存的ELF二进制的Merkle root。会将Image ID写入到seal中。
在这里插入图片描述

4. 为何选择RISC-V?

当前主流的机器芯片架构有:
在这里插入图片描述
选择RISC-V架构的原因在于:

  • 1)minimal:所有指令可在一页PPT内展示:
    在这里插入图片描述
  • 2)模块化:可仅使用所需要的模块。
  • 3)编程语言支持:现有的语言和工具均成熟。

参考资料

[1] RISC Zero团队2023年2月视频 What does RISC V have to do with RISC Zero’s zkVM【slide见What RISC-V has to do with RISC Zero’s zkVM】
[2] ARM新规,芯片行业震动丨X86、ARM、RISC-V和MIPS对比汇总
[3] The RISC-V Instruction Set Manual

RISC Zero系列博客

  • RISC0:Towards a Unified Compilation Framework for Zero Knowledge
  • Risc Zero ZKVM:zk-STARKs + RISC-V
  • 2023年 ZK Hack以及ZK Summit 亮点记
  • 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的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345828

相关文章

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

数据依赖基础入门:函数依赖与数据库设计的关系

在数据库设计中,数据依赖 是一个重要的概念,它直接影响到数据库的结构和性能。函数依赖 作为数据依赖的一种,是规范化理论的基础,对数据库设计起着至关重要的作用。如果你是一名数据库设计的初学者,这篇文章将帮助你理解函数依赖及其在数据库设计中的应用。 什么是数据依赖? 数据依赖 是指同一关系中属性间的相互依赖和制约关系,它是数据库设计中语义的体现。在现实世界中,数据之间往往存在某种依赖关系,而这

c++ 和C语言的兼容性关系

C++ 和 C 语言有很高的兼容性,但也存在一些差异和限制。下面是它们的兼容性关系的详细介绍: 兼容性 C++ 是 C 的超集: C++ 语言设计为兼容 C 语言的语法和功能,大部分 C 代码可以在 C++ 编译器中编译运行。 标准库兼容性: C++ 标准库包含了 C 标准库的内容,如 stdio.h、stdlib.h、string.h 等头文件,但 C++ 的标准库也提供了额外的功能,如

RISC-V (十二)系统调用

系统模式:用户态和内核态         当前的代码都是实现在machine模式下。 系统模式的切换         epc寄存器的值存放的是ecall指本身的地址 。 用ecall指令 系统调用的执行流程         mret这条指令会利用status的mpp值恢复到之前的特权级别。  蓝色的线表示涉及到权限切换。  系统调用的传参

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序

file-max与ulimit的关系与差别

http://zhangxugg-163-com.iteye.com/blog/1108402 http://ilikedo.iteye.com/blog/1554822