Merge pull request #21 from vacp2p/zkvm_impl

Zkvm module implementaition
This commit is contained in:
tyshko-rostyslav 2024-11-18 01:08:22 +01:00 committed by GitHub
commit 3d86cc745e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 3689 additions and 125 deletions

View File

@ -30,6 +30,14 @@ jobs:
profile: minimal
toolchain: nightly
override: true
- name: install risc0
if: success() || failure()
run: |
curl -L https://risczero.com/install | bash
- name: install risc0 step 2
if: success() || failure()
run: |
source /home/runner/.bashrc && rzup install && source /home/runner/.bashrc
- uses: Swatinem/rust-cache@v2
- run: cargo build
@ -59,6 +67,14 @@ jobs:
if: success() || failure()
run: |
cargo clippy --release -- -D warnings
- name: install risc0
if: success() || failure()
run: |
curl -L https://risczero.com/install | bash
- name: install risc0 step 2
if: success() || failure()
run: |
source /home/runner/.bashrc && rzup install && source /home/runner/.bashrc
- name: install taplo
if: success() || failure()
run: |
@ -85,9 +101,20 @@ jobs:
toolchain: nightly
override: true
- uses: Swatinem/rust-cache@v2
- name: install risc0
if: success() || failure()
run: |
curl -L https://risczero.com/install | bash
- name: install risc0 step 2
if: success() || failure()
run: |
source /home/runner/.bashrc && rzup install && source /home/runner/.bashrc
- name: test mempool
if: success() || failure()
run: cargo test -p mempool
- name: test storage
if: success() || failure()
run: cargo test -p storage
- name: test zkvm
if: success() || failure()
run: cargo test -p zkvm

2632
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,10 @@ env_logger.workspace = true
log.workspace = true
serde.workspace = true
#ToDo: Add necessary risc0 dependencies
risc0-zkvm = { git = "https://github.com/risc0/risc0.git", branch = "release-1.1" }
test-methods = { path = "test_methods" }
[dependencies.vm]
path = "../vm"
[features]
cuda = ["risc0-zkvm/cuda"]
default = []
prove = ["risc0-zkvm/prove"]

View File

@ -1 +1,75 @@
//ToDo: Add zkvm module
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)
}
pub fn verify(receipt: Receipt, image_id: impl Into<Digest>) {
receipt
.verify(image_id)
.expect("receipt verification failed");
}
#[cfg(test)]
mod tests {
use super::*;
use test_methods::{MULTIPLICATION_ELF, MULTIPLICATION_ID};
use test_methods::{SUMMATION_ELF, SUMMATION_ID};
#[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);
}
#[test]
fn bigger_sum() {
let message = 123476;
let message_2 = 2342384;
let (digest, receipt) = prove(vec![message, message_2], SUMMATION_ELF);
verify(receipt, SUMMATION_ID);
assert_eq!(digest, message + message_2);
}
#[test]
fn simple_multiplication() {
let message = 1;
let message_2 = 2;
let (digest, receipt) = prove(vec![message, message_2], MULTIPLICATION_ELF);
verify(receipt, MULTIPLICATION_ID);
assert_eq!(digest, message * message_2);
}
#[test]
fn bigger_multiplication() {
let message = 3498;
let message_2 = 438563;
let (digest, receipt) = prove(vec![message, message_2], MULTIPLICATION_ELF);
verify(receipt, MULTIPLICATION_ID);
assert_eq!(digest, message * message_2);
}
}

View File

@ -0,0 +1,10 @@
[package]
name = "test-methods"
version = "0.1.0"
edition = "2021"
[build-dependencies]
risc0-build = { git = "https://github.com/risc0/risc0.git", branch = "release-1.1" }
[package.metadata.risc0]
methods = ["guest"]

View File

@ -0,0 +1,3 @@
fn main() {
risc0_build::embed_methods();
}

1027
zkvm/test_methods/guest/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
[package]
name = "test"
version = "0.1.0"
edition = "2021"
[workspace]
[dependencies]
risc0-zkvm = { git = "https://github.com/risc0/risc0.git", default-features = false, features = [
"std",
] }

View File

@ -0,0 +1,9 @@
use risc0_zkvm::{
guest::env,
};
fn main() {
let lhs: u64 = env::read();
let rhs: u64 = env::read();
env::commit(&(lhs * rhs));
}

View File

@ -0,0 +1,9 @@
use risc0_zkvm::{
guest::env,
};
fn main() {
let data: u64 = env::read();
let data_2: u64 = env::read();
env::commit(&(data + data_2));
}

View File

@ -0,0 +1 @@
include!(concat!(env!("OUT_DIR"), "/methods.rs"));