aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zkvms/zkwasm/guest/src/lib.rs14
-rw-r--r--zkvms/zkwasm/wrapper_macro/src/lib.rs28
2 files changed, 25 insertions, 17 deletions
diff --git a/zkvms/zkwasm/guest/src/lib.rs b/zkvms/zkwasm/guest/src/lib.rs
index eba34b0..c92b97c 100644
--- a/zkvms/zkwasm/guest/src/lib.rs
+++ b/zkvms/zkwasm/guest/src/lib.rs
@@ -22,22 +22,12 @@ fn write(value: u64) {
static VERTICES: u64 = 10;
macro_rules! read {
- // HACK for graph_coloring
- (Vec , u32 $readfn:tt) => {
- {
- let mut ret = Vec::new();
- for _ in 0..2 {
- ret.push(read!(u32 $readfn));
- }
- ret
- }
- };
// Vec<Vec<...<Vec<primitive>>>> is converted by entrypoint_expr! to
// Vec,Vec,...,Vec,primitive
- (Vec , $($type:tt)*) => {
+ (Vec $size:literal , $($type:tt)*) => {
{
let mut ret = Vec::new();
- for _ in 0..VERTICES {
+ for _ in 0..$size {
ret.push(read!($($type)*));
}
ret
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);