diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-02-06 14:59:57 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-02-06 14:59:57 +0200 |
| commit | 523000d75ac6c194ccaa3aec0d8b29ef07d3f504 (patch) | |
| tree | 22ffc9ba300c4c7a0548ebde135fbba5d390abdf /zkvms | |
| parent | f56218406dbe5e4918d560778b24b366cd3bda9f (diff) | |
| download | zkVMs-benchmarks-523000d75ac6c194ccaa3aec0d8b29ef07d3f504.tar zkVMs-benchmarks-523000d75ac6c194ccaa3aec0d8b29ef07d3f504.tar.gz zkVMs-benchmarks-523000d75ac6c194ccaa3aec0d8b29ef07d3f504.zip | |
feat(zkvms/zkwasm): Proper handling of input strings and hashmaps
Diffstat (limited to 'zkvms')
| -rw-r--r-- | zkvms/zkwasm/guest/src/lib.rs | 3 | ||||
| -rw-r--r-- | zkvms/zkwasm/host/Cargo.lock | 43 | ||||
| -rw-r--r-- | zkvms/zkwasm/host/Cargo.toml | 1 | ||||
| -rw-r--r-- | zkvms/zkwasm/host/src/main.rs | 46 | ||||
| -rw-r--r-- | zkvms/zkwasm/wrapper_macro/src/lib.rs | 7 |
5 files changed, 52 insertions, 48 deletions
diff --git a/zkvms/zkwasm/guest/src/lib.rs b/zkvms/zkwasm/guest/src/lib.rs index c7c0572..219c3a4 100644 --- a/zkvms/zkwasm/guest/src/lib.rs +++ b/zkvms/zkwasm/guest/src/lib.rs @@ -3,6 +3,9 @@ use wrapper_macro::{ make_wrapper, read }; // https://github.com/DelphinusLab/zkWasm-rust/blob/main/src/lib.rs use zkwasm_rust_sdk::{require, wasm_input, wasm_output}; +#[cfg(not(no_std))] +use std::collections::*; + fn read_private() -> u64 { unsafe { wasm_input(0) } } diff --git a/zkvms/zkwasm/host/Cargo.lock b/zkvms/zkwasm/host/Cargo.lock index 26502b5..6c2d77a 100644 --- a/zkvms/zkwasm/host/Cargo.lock +++ b/zkvms/zkwasm/host/Cargo.lock @@ -111,9 +111,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.27" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" dependencies = [ "clap_builder", "clap_derive", @@ -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.96", + "syn 2.0.98", ] [[package]] @@ -265,7 +265,6 @@ checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" name = "host-zkwasm" version = "0.1.0" dependencies = [ - "regex", "zkvms_host_io", ] @@ -282,6 +281,9 @@ dependencies = [ [[package]] name = "input_macros" version = "0.1.0" +dependencies = [ + "toml", +] [[package]] name = "is-terminal" @@ -457,9 +459,9 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] @@ -572,7 +574,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -586,9 +588,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "smallvec" @@ -598,12 +600,11 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "string_cache" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" dependencies = [ "new_debug_unreachable", - "once_cell", "parking_lot", "phf_shared", "precomputed-hash", @@ -628,9 +629,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -665,7 +666,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -679,9 +680,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -832,9 +833,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] diff --git a/zkvms/zkwasm/host/Cargo.toml b/zkvms/zkwasm/host/Cargo.toml index 581038b..d1a68e7 100644 --- a/zkvms/zkwasm/host/Cargo.toml +++ b/zkvms/zkwasm/host/Cargo.toml @@ -5,4 +5,3 @@ edition = "2021" [dependencies] zkvms_host_io = { path = "../../../zkvms_host_io" } -regex = "1.11.1" diff --git a/zkvms/zkwasm/host/src/main.rs b/zkvms/zkwasm/host/src/main.rs index 179d388..9263819 100644 --- a/zkvms/zkwasm/host/src/main.rs +++ b/zkvms/zkwasm/host/src/main.rs @@ -1,7 +1,6 @@ use zkvms_host_io::{PublicInput, PrivateInput, foreach_public_input_field, foreach_private_input_field, read_args, RunType::{Execute, Prove, Verify}, RunWith}; use std::io::{self, Write}; use std::process::{Command, Stdio}; -use regex::Regex; static PUBLIC_INPUT_PATH: &str = "public_input.bin"; static PRIVATE_INPUT_PATH: &str = "private_input.bin"; @@ -51,9 +50,6 @@ fn get_with_sizes(flat: &str) -> String { macro_rules! build_input { ($input:expr , $path:ident , $type:ident) => { |run_info: &RunWith| { - let numreg: Regex = Regex::new("(?:^|[^A-Za-z])([0-9]+)").unwrap(); - let stringreg: Regex = Regex::new("\\\"[^\"]*\\\"").unwrap(); - let mut ret: Vec<u64> = Vec::new(); $type!{ let flat = format!("{:?}", $input.yield) @@ -62,29 +58,35 @@ macro_rules! build_input { .replace('(', "[") .replace(')', "]") .replace('{', "[") - .replace('{', "]"); + .replace('}', "]"); let flat = get_with_sizes(&flat); - let numbers = numreg - .captures_iter(&flat) - .map(|cap| - cap.get(1) - .unwrap() - .as_str() - .to_string() - .parse::<u64>() - .unwrap()) + 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(numbers); - - // let strings: Vec<&str> = stringreg - // .captures_iter(&flat) - // .map(|cap| cap.get(0).unwrap().as_str()) - // .collect(); - // - // panic!("{:#?}", strings); + ret.extend(values); } let bytes = ret .iter() diff --git a/zkvms/zkwasm/wrapper_macro/src/lib.rs b/zkvms/zkwasm/wrapper_macro/src/lib.rs index e7a201c..76f49fc 100644 --- a/zkvms/zkwasm/wrapper_macro/src/lib.rs +++ b/zkvms/zkwasm/wrapper_macro/src/lib.rs @@ -64,10 +64,9 @@ fn return_string(readfn: &TokenTree) -> TokenStream { format!(" {{ let mut ret = Vec::new(); - let mut current_char = read!({readfn} char); - while current_char != '\\0' {{ - ret.push(current_char); - current_char = read!({readfn} char); + let size = read!({readfn} usize); + for _ in 0..size {{ + ret.push(read!({readfn} char)); }} ret.into_iter().collect() }} |
