aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-03-05 10:26:27 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-03-05 11:47:28 +0200
commit776f0b6d501f97ded999d7842f0bdd100571610f (patch)
tree2f287e15a9d4859c3706ba16113939344446a3ef
parent298455c2dccfe0bcec7139c05e2f47e094ccfeb7 (diff)
downloadzkVMs-benchmarks-776f0b6d501f97ded999d7842f0bdd100571610f.tar
zkVMs-benchmarks-776f0b6d501f97ded999d7842f0bdd100571610f.tar.gz
zkVMs-benchmarks-776f0b6d501f97ded999d7842f0bdd100571610f.zip
feat(zkvms/zkwasm): Export macro which converts to bytes vector as a library
-rw-r--r--zkvms/zkwasm/host/Cargo.lock75
-rw-r--r--zkvms/zkwasm/host/Cargo.toml1
-rw-r--r--zkvms/zkwasm/host/src/main.rs81
-rw-r--r--zkvms/zkwasm/host/tobytes/Cargo.toml6
-rw-r--r--zkvms/zkwasm/host/tobytes/src/lib.rs79
5 files changed, 130 insertions, 112 deletions
diff --git a/zkvms/zkwasm/host/Cargo.lock b/zkvms/zkwasm/host/Cargo.lock
index e64c40a..9cdd77b 100644
--- a/zkvms/zkwasm/host/Cargo.lock
+++ b/zkvms/zkwasm/host/Cargo.lock
@@ -99,9 +99,9 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
[[package]]
name = "bitflags"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
[[package]]
name = "cfg-if"
@@ -111,9 +111,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
-version = "4.5.27"
+version = "4.5.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796"
+checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767"
dependencies = [
"clap_builder",
"clap_derive",
@@ -121,9 +121,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.5.27"
+version = "4.5.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7"
+checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863"
dependencies = [
"anstream",
"anstyle",
@@ -133,14 +133,14 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.5.24"
+version = "4.5.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
+checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.99",
]
[[package]]
@@ -190,9 +190,9 @@ dependencies = [
[[package]]
name = "either"
-version = "1.13.0"
+version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d"
[[package]]
name = "ena"
@@ -265,6 +265,7 @@ checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
name = "host-zkwasm"
version = "0.1.0"
dependencies = [
+ "tobytes",
"zkvms_host_io",
]
@@ -344,9 +345,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.169"
+version = "0.2.170"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
+checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
[[package]]
name = "libredox"
@@ -370,9 +371,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.25"
+version = "0.4.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
+checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
[[package]]
name = "logos"
@@ -474,27 +475,27 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "proc-macro2"
-version = "1.0.93"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.38"
+version = "1.0.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
+checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
-version = "0.5.8"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
+checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
dependencies = [
"bitflags",
]
@@ -547,9 +548,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "rustversion"
-version = "1.0.19"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
[[package]]
name = "scopeguard"
@@ -559,22 +560,22 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
-version = "1.0.217"
+version = "1.0.218"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
+checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.217"
+version = "1.0.218"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
+checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.99",
]
[[package]]
@@ -629,9 +630,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.98"
+version = "2.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
+checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2"
dependencies = [
"proc-macro2",
"quote",
@@ -666,7 +667,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.99",
]
[[package]]
@@ -679,6 +680,10 @@ dependencies = [
]
[[package]]
+name = "tobytes"
+version = "0.1.0"
+
+[[package]]
name = "toml"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -714,9 +719,9 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.17"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-xid"
@@ -833,9 +838,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603"
+checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1"
dependencies = [
"memchr",
]
diff --git a/zkvms/zkwasm/host/Cargo.toml b/zkvms/zkwasm/host/Cargo.toml
index d1a68e7..0ed78c0 100644
--- a/zkvms/zkwasm/host/Cargo.toml
+++ b/zkvms/zkwasm/host/Cargo.toml
@@ -4,4 +4,5 @@ version = "0.1.0"
edition = "2021"
[dependencies]
+tobytes = { path = "./tobytes" }
zkvms_host_io = { path = "../../../zkvms_host_io" }
diff --git a/zkvms/zkwasm/host/src/main.rs b/zkvms/zkwasm/host/src/main.rs
index 817def5..d04938a 100644
--- a/zkvms/zkwasm/host/src/main.rs
+++ b/zkvms/zkwasm/host/src/main.rs
@@ -10,44 +10,6 @@ use zkvms_host_io::{
static PUBLIC_INPUT_PATH: &str = "public_input.bin";
static PRIVATE_INPUT_PATH: &str = "private_input.bin";
-/// Inserts array sizes before every square bracket
-///
-/// # Example
-///
-/// If `flat` is "[[0,1], [2,3,4], []]"
-/// Output will be "3[2[0,1], 3[2,3,4], 0[]]"
-fn get_with_sizes(flat: &str) -> String {
- let mut values = flat.split('[').map(|x| x.trim()).skip(1);
- let current = values.next().unwrap_or(flat);
-
- // 1D collection or not a collection
- if current != "" {
- let size = 1 + current
- .clone()
- .to_string()
- .chars()
- .take_while(|x| *x != ']')
- .map(|x| (x == ',') as usize)
- .sum::<usize>();
-
- (if size > 1 {
- size.to_string()
- } else {
- String::new()
- }) + "["
- + current
- + &values.map(|x| "[".to_string() + x).collect::<String>()
- }
- // ND collection
- else {
- let size: usize = values.clone().count();
-
- let subcollections = values.map(|x| get_with_sizes(x)).collect::<String>();
-
- size.to_string() + "[" + &subcollections
- }
-}
-
/// Creates an anonymous function which takes `run_info`, "serializes" the
/// specified input, outputs it into a file and returns a "path:<PATH>"
/// argument, ready to be passed to zkWasm.
@@ -60,47 +22,12 @@ fn get_with_sizes(flat: &str) -> String {
macro_rules! build_input {
($input:expr , $path:ident , $type:ident) => {
|run_info: &RunWith| {
- let mut ret: Vec<u64> = Vec::new();
+ let mut all = Vec::new();
$type! {
- // Simplify input string
- let flat = format!("{:?}", $input.yield)
- .replace("false", "0")
- .replace("true", "1")
- .replace('(', "[")
- .replace(')', "]")
- .replace('{', "[")
- .replace('}', "]");
-
- let flat = get_with_sizes(&flat);
-
- let values = flat
- .replace('[', ",")
- .replace(']', " ")
- .replace(':', ",")
- .split(',')
- .map(|val| {
- let val = val.trim();
- if let Some(num) = val.parse::<u64>().ok() {
- vec![num]
- }
- else {
- let val = val.trim_matches('"');
- let mut size = vec![val.len() as u64];
- size.extend(val
- .bytes()
- .into_iter()
- .map(|x| x as u64)
- .collect::<Vec<u64>>());
- size
- }
- })
- .flatten()
- .collect::<Vec<u64>>();
-
- ret.extend(values);
+ all.extend(tobytes::to_bytes!($input.yield));
}
- let bytes = ret
- .iter()
+ let bytes = all
+ .into_iter()
.map(|x| x.to_be_bytes())
.flatten()
.collect::<Vec<u8>>();
diff --git a/zkvms/zkwasm/host/tobytes/Cargo.toml b/zkvms/zkwasm/host/tobytes/Cargo.toml
new file mode 100644
index 0000000..113d55b
--- /dev/null
+++ b/zkvms/zkwasm/host/tobytes/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tobytes"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/zkvms/zkwasm/host/tobytes/src/lib.rs b/zkvms/zkwasm/host/tobytes/src/lib.rs
new file mode 100644
index 0000000..2761458
--- /dev/null
+++ b/zkvms/zkwasm/host/tobytes/src/lib.rs
@@ -0,0 +1,79 @@
+/// Inserts array sizes before every square bracket
+///
+/// # Example
+///
+/// If `flat` is "[[0,1], [2,3,4], []]"
+/// Output will be "3[2[0,1], 3[2,3,4], 0[]]"
+pub fn get_with_sizes(flat: &str) -> String {
+ let mut values = flat.split('[').map(|x| x.trim()).skip(1);
+ let current = values.next().unwrap_or(flat);
+
+ // 1D collection or not a collection
+ if current != "" {
+ let size = 1 + current
+ .clone()
+ .to_string()
+ .chars()
+ .take_while(|x| *x != ']')
+ .map(|x| (x == ',') as usize)
+ .sum::<usize>();
+
+ (if size > 1 {
+ size.to_string()
+ } else {
+ String::new()
+ }) + "["
+ + current
+ + &values.map(|x| "[".to_string() + x).collect::<String>()
+ }
+ // ND collection
+ else {
+ let size: usize = values.clone().count();
+
+ let subcollections = values.map(|x| get_with_sizes(x)).collect::<String>();
+
+ size.to_string() + "[" + &subcollections
+ }
+}
+
+#[macro_export]
+macro_rules! to_bytes {
+ ($($arg:tt)+) => {
+ {
+ // Simplify input string
+ let flat = format!("{:?}", $($arg)+)
+ .replace("false", "0")
+ .replace("true", "1")
+ .replace('(', "[")
+ .replace(')', "]")
+ .replace('{', "[")
+ .replace('}', "]");
+
+ let flat = tobytes::get_with_sizes(&flat);
+
+ flat
+ .replace('[', ",")
+ .replace(']', " ")
+ .replace(':', ",")
+ .split(',')
+ .map(|val| {
+ let val = val.trim();
+ if let Some(num) = val.parse::<u64>().ok() {
+ vec![num]
+ }
+ else {
+ let val = val.trim_matches('"');
+ let mut size = vec![val.len() as u64];
+ size.extend(val
+ .bytes()
+ .into_iter()
+ .map(|x| x as u64)
+ .collect::<Vec<u64>>());
+ size
+ }
+ })
+ .flatten()
+ .collect::<Vec<u64>>()
+ }
+ }
+}