Skip to content

Commit 1e65322

Browse files
committed
feat: risc0, sp1 zkvm programs
1 parent 2e6cb0e commit 1e65322

8 files changed

Lines changed: 1615 additions & 0 deletions

File tree

examples/L2/zkvm_programs/Cargo.lock

Lines changed: 1535 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[workspace]
2+
name = "zkvm_state_transition_programs"
3+
version = "0.1.0"
4+
edition = "2021"
5+
resolver = "2"
6+
members = ["sp1", "risc0"]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "risc0_state_transition_program"
3+
version = "0.1.0"
4+
edition = "2021"
5+
resolver = "2"
6+
7+
[dependencies]
8+
serde = { version = "1.0.203" }
9+
serde_json = "1.0.117"
10+
risc0-zkvm = { git = "https://github.com/risc0/risc0", tag="v2.0.0", default-features = false, features = ["unstable", "std"] }
11+
12+
[lib]
13+
path = "./src/lib.rs"

examples/L2/zkvm_programs/risc0/src/lib.rs

Whitespace-only changes.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#![no_main]
2+
3+
use lambdaworks_crypto::merkle_tree::merkle::MerkleTree;
4+
use risc0_aggregation_program::{Input, Risc0ImageIdAndPubInputs};
5+
use risc0_zkvm::guest::env;
6+
7+
risc0_zkvm::guest::entry!(main);
8+
9+
fn main() {
10+
let input = env::read::<Input>();
11+
12+
for Risc0ImageIdAndPubInputs {
13+
image_id,
14+
public_inputs,
15+
} in &input.proofs_image_id_and_pub_inputs
16+
{
17+
env::verify(image_id.clone(), &public_inputs).expect("proof to be verified correctly");
18+
}
19+
20+
let merkle_tree: MerkleTree<Risc0ImageIdAndPubInputs> =
21+
MerkleTree::build(&input.proofs_image_id_and_pub_inputs).unwrap();
22+
23+
env::commit_slice(&merkle_tree.root);
24+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "sp1_state_transition_program"
3+
version = "0.1.0"
4+
edition = "2021"
5+
resolver = "2"
6+
7+
[dependencies]
8+
sp1-zkvm = { version = "4.1.3", features = ["verify"] }
9+
serde = { version = "1.0.203", features = ["derive"] }
10+
serde_json = "1.0.117"
11+
12+
[lib]
13+
path = "./src/lib.rs"

examples/L2/zkvm_programs/sp1/src/lib.rs

Whitespace-only changes.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#![no_main]
2+
sp1_zkvm::entrypoint!(main);
3+
4+
use lambdaworks_crypto::merkle_tree::merkle::MerkleTree;
5+
use sha2::{Digest, Sha256};
6+
use sha3::Keccak256;
7+
use sp1_aggregation_program::{Input, SP1VkAndPubInputs};
8+
9+
pub fn main() {
10+
let input = sp1_zkvm::io::read::<Input>();
11+
12+
// Verify the proofs.
13+
for proof in input.proofs_vk_and_pub_inputs.iter() {
14+
let vkey = proof.vk;
15+
let public_values = &proof.public_inputs;
16+
let public_values_digest = Sha256::digest(public_values);
17+
sp1_zkvm::lib::verify::verify_sp1_proof(&vkey, &public_values_digest.into());
18+
}
19+
20+
let merkle_tree: MerkleTree<SP1VkAndPubInputs> =
21+
MerkleTree::build(&input.proofs_vk_and_pub_inputs).unwrap();
22+
23+
sp1_zkvm::io::commit_slice(&merkle_tree.root);
24+
}

0 commit comments

Comments
 (0)