#guest #risc #zero #risc0 #zk-vm #risc-v #env

不使用std risc0-zkvm-guest

RISC Zero 零知识VM的客户端crate

17个版本 (8个重大更新)

0.11.1 2022年8月13日
0.10.0 2022年6月24日

#2003 in 加密学

Apache-2.0

4.5MB
23K SLoC

risc0-zkvm-guest

RISC Zero ZKVM的客户端RISC-V API。

由RISC Zero zkVM验证的代码在客户端运行。在最简单的情况下,必须通过调用[entry]来提供入口点(客户端的"main"函数)。当入口点函数被调用时执行的代码将是由zkVM验证的,并可供后续验证。在几乎所有实际情况下,客户端将想要使用env::read读取私有输入数据,并使用env::commit提交公开输出数据;[mod@env]中还有其他I/O功能可用。

例如[^starter-ex],以下客户端代码通过乘以两个无符号整数来证明一个数是合数,如果任意一个是1或者乘法溢出,则引发panic

use risc0_zkvm_guest::env;

risc0_zkvm_guest::entry!(main);

pub fn main() {
    // Load the first number from the host
    let a: u64 = env::read();
    // Load the second number from the host
    let b: u64 = env::read();
    // Verify that neither of them are 1 (i.e. nontrivial factors)
    if a == 1 || b == 1 {
        panic!("Trivial factors")
    }
    // Compute the product while being careful with integer overflow
    let product = a.checked_mul(b).expect("Integer overflow");
    env::commit(&product);
}

注意[entry]是如何用来表示入口点的,env::read用来加载两个因子,而env::commit用来使它们的合数乘积公开可用。

[^starter-ex]: 示例基于Risc Zero Rust Starter仓库

依赖项

~1.6–5.5MB
~97K SLoC