aboutsummaryrefslogtreecommitdiff
path: root/zkvms/zkwasm/host/src
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-02-06 14:59:57 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-02-06 14:59:57 +0200
commit523000d75ac6c194ccaa3aec0d8b29ef07d3f504 (patch)
tree22ffc9ba300c4c7a0548ebde135fbba5d390abdf /zkvms/zkwasm/host/src
parentf56218406dbe5e4918d560778b24b366cd3bda9f (diff)
downloadzkVMs-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/zkwasm/host/src')
-rw-r--r--zkvms/zkwasm/host/src/main.rs46
1 files changed, 24 insertions, 22 deletions
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()