17个版本 (8个重大更新)
0.11.1 | 2022年8月13日 |
---|---|
0.10.0 | 2022年6月24日 |
#2003 in 加密学
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