aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-01-14 14:04:38 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-01-14 14:04:38 +0200
commitdb0c1b91f44394e2056a30283c1376cc003e3f5f (patch)
tree7f2cb8601d11509a5bbf285039026b90887601e8
parent9c2496ec2ab98cfed8c87426dab4bd0eec5c7d29 (diff)
downloadzkVMs-benchmarks-db0c1b91f44394e2056a30283c1376cc003e3f5f.tar
zkVMs-benchmarks-db0c1b91f44394e2056a30283c1376cc003e3f5f.tar.gz
zkVMs-benchmarks-db0c1b91f44394e2056a30283c1376cc003e3f5f.zip
feat(zkvms): Add sp1 guest and it's macro
-rw-r--r--zkvms/sp1/Cargo.toml1
-rw-r--r--zkvms/sp1/guest/Cargo.toml13
l---------zkvms/sp1/guest/guests1
l---------zkvms/sp1/guest/guests_macro1
-rw-r--r--zkvms/sp1/guest/src/main.rs11
-rw-r--r--zkvms/sp1/wrapper_macro/Cargo.toml7
-rw-r--r--zkvms/sp1/wrapper_macro/src/lib.rs25
7 files changed, 59 insertions, 0 deletions
diff --git a/zkvms/sp1/Cargo.toml b/zkvms/sp1/Cargo.toml
index 3031ff8..608d075 100644
--- a/zkvms/sp1/Cargo.toml
+++ b/zkvms/sp1/Cargo.toml
@@ -2,4 +2,5 @@
resolver = "2"
members = [
"host",
+ "guest/guests/*",
]
diff --git a/zkvms/sp1/guest/Cargo.toml b/zkvms/sp1/guest/Cargo.toml
new file mode 100644
index 0000000..b98064d
--- /dev/null
+++ b/zkvms/sp1/guest/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "guest"
+version = "0.1.0"
+edition = "2021"
+
+[workspace]
+
+[dependencies]
+sp1-zkvm = { path = "/nix/store/8g5sf8h6nfypnd736x6ns4c44s8g6qd4-sp1-unstable-2024-12-23/crates/zkvm/entrypoint" }
+alloy-sol-types = "0.7.7"
+
+zkp = { path = "./src/zkp" }
+wrapper_macro = { version = "0.1.0", path = "../wrapper_macro" }
diff --git a/zkvms/sp1/guest/guests b/zkvms/sp1/guest/guests
new file mode 120000
index 0000000..69bc8ed
--- /dev/null
+++ b/zkvms/sp1/guest/guests
@@ -0,0 +1 @@
+../../../guests \ No newline at end of file
diff --git a/zkvms/sp1/guest/guests_macro b/zkvms/sp1/guest/guests_macro
new file mode 120000
index 0000000..143a0b5
--- /dev/null
+++ b/zkvms/sp1/guest/guests_macro
@@ -0,0 +1 @@
+../../../guests_macro \ No newline at end of file
diff --git a/zkvms/sp1/guest/src/main.rs b/zkvms/sp1/guest/src/main.rs
new file mode 100644
index 0000000..7884667
--- /dev/null
+++ b/zkvms/sp1/guest/src/main.rs
@@ -0,0 +1,11 @@
+#![no_main]
+
+use wrapper_macro::make_wrapper;
+use sp1_zkvm::io::read;
+use sp1_zkvm::lib::io::commit;
+
+sp1_zkvm::entrypoint!(main);
+
+pub fn main() {
+ zkp::entrypoint_expr!()
+}
diff --git a/zkvms/sp1/wrapper_macro/Cargo.toml b/zkvms/sp1/wrapper_macro/Cargo.toml
new file mode 100644
index 0000000..14348e5
--- /dev/null
+++ b/zkvms/sp1/wrapper_macro/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "wrapper_macro"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+proc-macro = true
diff --git a/zkvms/sp1/wrapper_macro/src/lib.rs b/zkvms/sp1/wrapper_macro/src/lib.rs
new file mode 100644
index 0000000..eb24c33
--- /dev/null
+++ b/zkvms/sp1/wrapper_macro/src/lib.rs
@@ -0,0 +1,25 @@
+use proc_macro::TokenStream;
+
+#[path = "../../../../guests_macro/src/parse_fn.rs"]
+mod parse_fn;
+use crate::parse_fn::{ split_fn, args_split, args_divide, group_streams };
+
+#[proc_macro]
+pub fn make_wrapper(item: TokenStream) -> TokenStream {
+ let (name, args, ret) = split_fn(&item);
+ let args_split = args_split(&args);
+
+ let mut out = TokenStream::new();
+ for arg in args_split {
+ out.extend(format!("let {} = read();", arg).parse::<TokenStream>());
+ }
+
+ let (patterns, _) = args_divide(&args);
+ let ts_patterns = group_streams(&patterns);
+
+ out.extend(format!("commit(&zkp::{}{});", name, ts_patterns).parse::<TokenStream>());
+
+ let mut block = TokenStream::new();
+ block.extend(format!("{{ {} }}", out).parse::<TokenStream>());
+ block
+}