lssa/zkvm/src/lib.rs

50 lines
1.1 KiB
Rust
Raw Normal View History

2024-11-10 02:10:20 +01:00
use risc0_zkvm::{default_prover, sha::Digest, ExecutorEnv, Receipt};
pub fn prove<T: serde::ser::Serialize>(input_vec: Vec<T>, elf: &[u8]) -> (u64, Receipt) {
let mut builder = ExecutorEnv::builder();
for input in input_vec {
builder
.write(&input)
.unwrap();
}
let env = builder
.build()
.unwrap();
let prover = default_prover();
let receipt = prover.prove(env, elf).unwrap().receipt;
let digest = receipt.journal.decode().unwrap();
(digest, receipt)
}
2024-11-10 02:10:37 +01:00
pub fn verify(receipt: Receipt, image_id: impl Into<Digest>) {
receipt
.verify(image_id)
.expect("receipt verification failed");
}
2024-11-10 02:12:20 +01:00
#[cfg(test)]
mod tests {
use test_methods::{SUMMATION_ELF, SUMMATION_ID};
use test_methods::{MULTIPLICATION_ELF, MULTIPLICATION_ID};
use super::*;
#[test]
fn simple_sum() {
let message = 1;
let message_2 = 2;
let (digest, receipt) = prove(vec![message, message_2], SUMMATION_ELF);
verify(receipt, SUMMATION_ID);
assert_eq!(
digest,
message + message_2
);
}
}