1. 引言
在RISC Zero zkVM应用程序中,host为运行RISC Zero zkVM的机器(或系统)。host为不可信agent,负责设置zkVM环境和处理执行过程中的输入输出。
host程序(代码),是指:
- zkVM应用中的host-native、不可信的部分。
- 负责加载guest程序,并为guest程序提供必要的输入。
若基于Bonsai构建,则无需编写host代码。
zkVM应用中,host负责构建并运行Executor和Prover。host具体作用为:
- 1)为guest程序运行Executor,构建执行环境。该执行环境中,host将提供配置并与guest通讯。
- 2)运行Prover,来执行并证明guest程序,并生成receipt。该receipt可传递给第三方验证。
而guest程序(代码),是指待zkVM执行和证明的程序。若基于Bonsai构建,则只需专注编写guest程序。
guest程序的基本功能为:
- 1)读取输入:相关接口有env::read、env::read_slice 和 env::stdin。
- 2)将private outputs写入host:相关接口有env::write、env::write_slice、env::stdout 和 env::stderr。
- 3)将public outputs附加到journal中:相关接口有env::commit 和 env::commit_slice。
- journal为receipt的一部分,包含了zkVM应用的public outputs。
guest程序的调试和性能分析工具有:
- cycle计数:相关接口有env::get_cycle_count。
- 打印调试信息:相关接口有env::log。
- 以及 技术探秘:在RISC Zero中验证FHE——RISC Zero应用的DevOps(2) 提及的gdb和profiler工具。
guest程序中的一些关键标记有:
- 1)
#![no_std]
:因性能原因,guest程序应尽可能轻。因此不使用std,将其排除。 - 2)
#![no_main]
:该guest程序永远不作为独立Rust可执行程序 启动,因此明确有#![no_main]
。 - 3)
risc0_zkvm_guest::entry!(main);
:必须让guest可供host启动,为此,需明确告知guest应调用哪个函数。使用risc0_zkvm_guest::entry!
宏来明确要调用的初始guest函数。
RISC Zero zkVM应用程序基本模板为:
project_name
├── Cargo.toml
├── host
│ ├── Cargo.toml
│ └── src
│ └── main.rs <-- [Host code goes here]
└── methods
├── Cargo.toml
├── build.rs
├── guest
│ ├── Cargo.toml
│ └── src
│ └── bin
│ └── method_name.rs <-- [Guest code goes here]
└── src
└── lib.rs
非常简单的host代码示例为:
use risc0_zkvm::{default_prover, ExecutorEnv};
let env = ExecutorEnv::builder().build().unwrap();
let prover = default_prover();
let receipt = prover.prove_elf(env, METHOD_NAME_ELF).unwrap();
对应的receipt验证示例为:
receipt.verify(METHOD_NAME_ID).unwrap();
更多详细例子,可见:
- https://github.com/risc0/risc0/tree/main/examples(Rust)
参考资料
[1] RISC Zero术语集
[2] Host Code 101
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证明系统时序图及规范