本文基本结构为:
高级编程语言不专门针对某个架构,其便于人类编写。高级编程语言代码,经编译器编译后,会生成针对专门某架构的汇编代码,汇编代码是供机器使用的。
也可以直接编写汇编代码:
以上汇编代码示例中:
直接写汇编代码的好处之一是:
但汇编代码存在如下问题:
而借助编译器,使用高级编程语言,可解决以上问题,如:
各种高级编程语言,经相应的语言后端,可生成相应的LLVM bytecode,然后经LLVM编译出特定机器架构的汇编代码:
何为RISC-V?:
具体的RISC-V说明书见:
RISC-V有如下模块:
1)RV32I:Base整数指令集。每个寄存器为32位。有32个寄存器。【使用XLEN术语来表示x寄存器的宽度位数,如是32、64还是128。】
2)RV32E:Base整数指令集。每个寄存器为32位。为RV32I的子集,只有16个寄存器。
3)RV64I:Base整数指令集。每个寄存器为64位。
4)RV128I:Base整数指令集。每个寄存器为128位。
5)M:表示为对整数乘法和触发的标准扩展。以RV32M为例,其具有的指令集为:
RISC-V可实现为:
当将RISC-V用作虚拟机时,其:
相应的流程为:
zkVM的目的为:
RISC Zero zkVM的目的为:
为生成receipt,需:
这样,完整的流程即为:
实际在实现RISC-V虚拟机时,如何区分zkVM中所执行的是哪个程序代码呢?
答案就是Image ID。所谓Image ID,是加载到内存的ELF二进制的Merkle root。会将Image ID写入到seal中。
当前主流的机器芯片架构有:
选择RISC-V架构的原因在于:
[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