aboutsummaryrefslogtreecommitdiff
path: root/zkvms/zkwasm/wrapper_macro
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-02-04 13:24:36 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-02-04 13:24:36 +0200
commit7a98d5ec0849f0d13235a8f09dadf736c9409aa2 (patch)
tree3a4e6fc1a868a025d58a982be93e09b69b37fb24 /zkvms/zkwasm/wrapper_macro
parentb8c709b87ad8b9fd1a74de4b73f9bbd1bf51e364 (diff)
downloadzkVMs-benchmarks-7a98d5ec0849f0d13235a8f09dadf736c9409aa2.tar
zkVMs-benchmarks-7a98d5ec0849f0d13235a8f09dadf736c9409aa2.tar.gz
zkVMs-benchmarks-7a98d5ec0849f0d13235a8f09dadf736c9409aa2.zip
feat(zkvms/zkwasm): Proper Vec input type handling
Also handles multidimentional vec
Diffstat (limited to 'zkvms/zkwasm/wrapper_macro')
-rw-r--r--zkvms/zkwasm/wrapper_macro/src/lib.rs28
1 files changed, 23 insertions, 5 deletions
diff --git a/zkvms/zkwasm/wrapper_macro/src/lib.rs b/zkvms/zkwasm/wrapper_macro/src/lib.rs
index 8fe7fd0..caebc4d 100644
--- a/zkvms/zkwasm/wrapper_macro/src/lib.rs
+++ b/zkvms/zkwasm/wrapper_macro/src/lib.rs
@@ -3,9 +3,11 @@ use proc_macro::TokenStream;
#[path = "../../../../guests_macro/src/parse_fn.rs"]
mod parse_fn;
use crate::parse_fn::{ split_fn, args_divide_grouped, args_divide_public, group_streams };
+use toml::Table;
-fn insert_reads(out: &mut TokenStream, patterns: &Vec<TokenStream>, types: &Vec<TokenStream>, readfn: &str) {
+fn insert_reads(out: &mut TokenStream, patterns: &Vec<TokenStream>, types: &Vec<TokenStream>, inputs: &Table, readfn: &str) {
for i in 0..patterns.len() {
+ let mut value = &inputs[&patterns[i].to_string()];
let type_note: String = format!("{}", types[i])
.chars()
.map(|c| match c {
@@ -13,7 +15,19 @@ fn insert_reads(out: &mut TokenStream, patterns: &Vec<TokenStream>, types: &Vec<
'>' => ' ',
_ => c,
})
- .collect();
+ .collect::<String>()
+ .split(" , ")
+ .map(|typ| match typ {
+ "Vec" => if let Some(array) = value.as_array() {
+ value = &array[0];
+ format!("{} {}", typ, array.len())
+ } else {
+ typ.to_string()
+ },
+ _ => typ.to_string()
+ })
+ .collect::<Vec<String>>()
+ .join(",");
out.extend(format!("let {} : {} = read!({} {});", patterns[i], types[i], type_note, readfn).parse::<TokenStream>());
}
}
@@ -22,16 +36,20 @@ fn insert_reads(out: &mut TokenStream, patterns: &Vec<TokenStream>, types: &Vec<
pub fn make_wrapper(item: TokenStream) -> TokenStream {
let (name, args, ret) = split_fn(&item);
- let public_inputs = toml::from_str::<toml::Table>(
+ let public_inputs = toml::from_str::<Table>(
include_str!(concat!(env!("INPUTS_DIR"), "/default_public_input.toml"))
)
.unwrap();
+ let private_inputs = toml::from_str::<Table>(
+ include_str!(concat!(env!("INPUTS_DIR"), "/default_private_input.toml"))
+ )
+ .unwrap();
let ((pub_pat, pub_typ), (prv_pat, prv_typ)) = args_divide_public(&args, &public_inputs.keys().collect());
let mut out = TokenStream::new();
- insert_reads(&mut out, &pub_pat, &pub_typ, "read_public");
- insert_reads(&mut out, &prv_pat, &prv_typ, "read_private");
+ insert_reads(&mut out, &pub_pat, &pub_typ, &public_inputs, "read_public");
+ insert_reads(&mut out, &prv_pat, &prv_typ, &private_inputs, "read_private");
let (ts_patterns, _) = args_divide_grouped(&args);