aboutsummaryrefslogtreecommitdiff
path: root/zkvms/risc0
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-01-10 10:32:58 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-01-10 10:32:58 +0200
commit3bef1a12c1b3fb9310fbb0fde8d487005ece2913 (patch)
treea568090c87f2b1c693126a842d1cf1211825fffb /zkvms/risc0
parent7c33033c5284c1f958fed22c414ea69199c9509a (diff)
downloadzkVMs-benchmarks-3bef1a12c1b3fb9310fbb0fde8d487005ece2913.tar
zkVMs-benchmarks-3bef1a12c1b3fb9310fbb0fde8d487005ece2913.tar.gz
zkVMs-benchmarks-3bef1a12c1b3fb9310fbb0fde8d487005ece2913.zip
feat(zkvms): Add risc0 host
Currently only setup for proving
Diffstat (limited to 'zkvms/risc0')
-rw-r--r--zkvms/risc0/host/Cargo.toml9
-rw-r--r--zkvms/risc0/host/src/main.rs51
2 files changed, 60 insertions, 0 deletions
diff --git a/zkvms/risc0/host/Cargo.toml b/zkvms/risc0/host/Cargo.toml
new file mode 100644
index 0000000..de41bbc
--- /dev/null
+++ b/zkvms/risc0/host/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "host-risc0"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+risc0-zkvm = { path = "/nix/store/l1rxg23rrrdwi9cf6rc82mqavklvqc18-risc0-unstable-2024-12-21/risc0/zkvm" }
+tracing-subscriber = { version = "0.3", features = ["env-filter"] }
+serde = "1.0"
diff --git a/zkvms/risc0/host/src/main.rs b/zkvms/risc0/host/src/main.rs
new file mode 100644
index 0000000..de5417c
--- /dev/null
+++ b/zkvms/risc0/host/src/main.rs
@@ -0,0 +1,51 @@
+use risc0_zkvm::{default_prover, default_executor, ExecutorEnv};
+
+static HELLO_GUEST_ELF: &[u8] = include_bytes!("../../../../zkvms/risc0/guest/target/riscv32im-risc0-zkvm-elf/release/guest");
+
+fn main() {
+ let args: Vec<String> = std::env::args().collect();
+
+ let (graph, colors, coloring): (Vec<Vec<bool>>, u32, Vec<Vec<u32>>) = include!(env!("INPUTS"));
+
+ let env = ExecutorEnv::builder()
+ .write(&graph)
+ .unwrap()
+ .write(&colors)
+ .unwrap()
+ .write(&coloring)
+ .unwrap()
+ .build()
+ .unwrap();
+
+ match args[1].as_str() {
+ "execute" => {
+ let exec = default_executor();
+ let output = exec.execute(env, HELLO_GUEST_ELF).unwrap().receipt_claim.unwrap().output.value().unwrap();
+
+ println!("{:#?}", output);
+ },
+ "prove" => {
+ // Obtain the default prover.
+ let prover = default_prover();
+
+ // Produce a receipt by proving the specified ELF binary.
+ let receipt = prover.prove(env, HELLO_GUEST_ELF).unwrap().receipt;
+
+ // Extract journal of receipt
+ let journal: bool = receipt.journal.decode().unwrap();
+ // Print, notice, after committing to a journal, the private input became public
+ println!("Output from journal: {:?}", journal);
+ },
+ "verify" => {
+ let prover = default_prover();
+ let receipt = prover.prove(env, HELLO_GUEST_ELF).unwrap().receipt;
+
+ // receipt.verify(HELLO_GUEST_ID).unwrap();
+
+ // let journal: bool = receipt.journal.decode().unwrap();
+ // println!("Output from verify: {:?}", journal);
+ },
+ _ => println!("No arguments provided! Expected execute, prove or verify!"),
+ }
+}
+