mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-07 07:43:11 +00:00
Merge pull request #21 from vacp2p/zkvm_impl
Zkvm module implementaition
This commit is contained in:
commit
3d86cc745e
27
.github/workflows/ci.yml
vendored
27
.github/workflows/ci.yml
vendored
@ -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
2632
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -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"]
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
10
zkvm/test_methods/Cargo.toml
Normal file
10
zkvm/test_methods/Cargo.toml
Normal 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"]
|
||||
3
zkvm/test_methods/build.rs
Normal file
3
zkvm/test_methods/build.rs
Normal file
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
risc0_build::embed_methods();
|
||||
}
|
||||
1027
zkvm/test_methods/guest/Cargo.lock
generated
Normal file
1027
zkvm/test_methods/guest/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
11
zkvm/test_methods/guest/Cargo.toml
Normal file
11
zkvm/test_methods/guest/Cargo.toml
Normal 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",
|
||||
] }
|
||||
9
zkvm/test_methods/guest/src/bin/multiplication.rs
Normal file
9
zkvm/test_methods/guest/src/bin/multiplication.rs
Normal 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));
|
||||
}
|
||||
9
zkvm/test_methods/guest/src/bin/summation.rs
Normal file
9
zkvm/test_methods/guest/src/bin/summation.rs
Normal 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));
|
||||
}
|
||||
1
zkvm/test_methods/src/lib.rs
Normal file
1
zkvm/test_methods/src/lib.rs
Normal file
@ -0,0 +1 @@
|
||||
include!(concat!(env!("OUT_DIR"), "/methods.rs"));
|
||||
Loading…
x
Reference in New Issue
Block a user