33// for invoking contract functions across different contexts (private, public, static, utility).
44
55use crate::macros::utils:: {
6- add_to_field_array , AsStrQuote , compute_fn_selector , is_fn_private , is_fn_public , is_fn_view ,
6+ AsStrQuote , compute_fn_selector , is_fn_private , is_fn_public , is_fn_view ,
77};
8+ use protocol_types::meta::utils::derive_serialization_quotes ;
89use std::meta::unquote ;
910
1011comptime global FROM_FIELD : TypedExpr = {
@@ -17,8 +18,6 @@ comptime global FROM_FIELD: TypedExpr = {
1718 .as_typed_expr ()
1819};
1920
20- comptime global SERIALIZED_ARGS_NAME : Quoted = quote { serialized_args };
21-
2221pub comptime fn stub_fn (f : FunctionDefinition ) -> Quoted {
2322 let is_static_call = is_fn_view (f );
2423
@@ -42,7 +41,7 @@ pub comptime fn stub_fn(f: FunctionDefinition) -> Quoted {
4241/// Utility function creating stubs used by all the stub functions in this file.
4342comptime fn create_stub_base (
4443 f : FunctionDefinition ,
45- ) -> (Quoted , Quoted , Quoted , Quoted , u32 , Field ) {
44+ ) -> (Quoted , Quoted , Quoted , Quoted , Quoted , u32 , Field ) {
4645 // Dear privacy adventurer,
4746 // Chances are, you've command+clicked on the name of an external function
4847 // call -- seeking to view that function -- only to end up here.
@@ -63,51 +62,22 @@ comptime fn create_stub_base(
6362 let fn_parameters = f .parameters ();
6463 let fn_parameters_list =
6564 fn_parameters .map (|(name , typ ): (Quoted , Type )| quote { $name : $typ }).join (quote {,});
66- let params_num_fields =
67- fn_parameters .fold (0 , |acc , (_ , typ )| acc + crate ::macros::utils:: size_in_fields (typ ));
68-
69- let serialized_args_index_name = quote { serialized_args_index };
70- // Example of what the fold(...) below will generate for `target_address` and `fee_juice_limit_per_tx` function
71- // parameters:
72- // ```
73- // let mut serialized_args = [0;2];
74- // let mut serialized_args_index = 0;
75- // let target_address_serialized = aztec::protocol_types::traits::Serialize::serialize(target_address)
76- // for i in 0..target_address_serialized.len() {
77- // serialized_args[serialized_args_index] = target_address_serialized[i];
78- // serialized_args_index += 1;
79- // }
80- // serialized_args[serialized_args_index] = fee_juice_limit_per_tx as Field
81- // serialized_args_index += 1;
82- // ```
83- let serialized_args_array_construction = fn_parameters .fold (
84- quote {
85- let mut $SERIALIZED_ARGS_NAME = [0 ; $params_num_fields ];
86- let mut $serialized_args_index_name : u32 = 0 ;
87- },
88- |args , param : (Quoted , Type )| {
89- let (name , typ ) = param ;
90- let arg_to_append =
91- add_to_field_array (SERIALIZED_ARGS_NAME , serialized_args_index_name , name , typ );
92- quote {
93- $args
94- $arg_to_append
95- }
96- },
97- );
65+
66+ let (serialized_args_array_construction , _ , serialized_args_array_name ) =
67+ derive_serialization_quotes (fn_parameters , false );
9868
9969 let (fn_name_str , _ ) = fn_name .as_str_quote ();
10070 let fn_name_len : u32 = unquote !(quote { $fn_name_str .as_bytes ().len ()});
10171 let fn_selector : Field = compute_fn_selector (f );
10272
10373 (
104- fn_name , fn_parameters_list , serialized_args_array_construction , fn_name_str , fn_name_len ,
105- fn_selector ,
74+ fn_name , fn_parameters_list , serialized_args_array_construction , serialized_args_array_name ,
75+ fn_name_str , fn_name_len , fn_selector ,
10676 )
10777}
10878
10979comptime fn create_private_stub (f : FunctionDefinition ) -> Quoted {
110- let (fn_name , fn_parameters_list , serialized_args_array_construction , fn_name_str , fn_name_len , fn_selector ) =
80+ let (fn_name , fn_parameters_list , serialized_args_array_construction , serialized_args_array_name , fn_name_str , fn_name_len , fn_selector ) =
11181 create_stub_base (f );
11282 let fn_return_type = f .return_type ();
11383
@@ -119,15 +89,15 @@ comptime fn create_private_stub(f: FunctionDefinition) -> Quoted {
11989 self .target_contract ,
12090 selector ,
12191 $fn_name_str ,
122- $SERIALIZED_ARGS_NAME ,
92+ $serialized_args_array_name ,
12393 false
12494 )
12595 }
12696 }
12797}
12898
12999comptime fn create_private_static_stub (f : FunctionDefinition ) -> Quoted {
130- let (fn_name , fn_parameters_list , serialized_args_slice_construction , fn_name_str , fn_name_len , fn_selector ) =
100+ let (fn_name , fn_parameters_list , serialized_args_slice_construction , serialized_args_array_name , fn_name_str , fn_name_len , fn_selector ) =
131101 create_stub_base (f );
132102 let fn_return_type = f .return_type ();
133103
@@ -139,14 +109,14 @@ comptime fn create_private_static_stub(f: FunctionDefinition) -> Quoted {
139109 self .target_contract ,
140110 selector ,
141111 $fn_name_str ,
142- $SERIALIZED_ARGS_NAME ,
112+ $serialized_args_array_name ,
143113 )
144114 }
145115 }
146116}
147117
148118comptime fn create_public_stub (f : FunctionDefinition ) -> Quoted {
149- let (fn_name , fn_parameters_list , serialized_args_slice_construction , fn_name_str , fn_name_len , fn_selector ) =
119+ let (fn_name , fn_parameters_list , serialized_args_slice_construction , serialized_args_array_name , fn_name_str , fn_name_len , fn_selector ) =
150120 create_stub_base (f );
151121 let fn_return_type = f .return_type ();
152122
@@ -158,15 +128,15 @@ comptime fn create_public_stub(f: FunctionDefinition) -> Quoted {
158128 self .target_contract ,
159129 selector ,
160130 $fn_name_str ,
161- $SERIALIZED_ARGS_NAME ,
131+ $serialized_args_array_name ,
162132 false
163133 )
164134 }
165135 }
166136}
167137
168138comptime fn create_public_static_stub (f : FunctionDefinition ) -> Quoted {
169- let (fn_name , fn_parameters_list , serialized_args_slice_construction , fn_name_str , fn_name_len , fn_selector ) =
139+ let (fn_name , fn_parameters_list , serialized_args_slice_construction , serialized_args_array_name , fn_name_str , fn_name_len , fn_selector ) =
170140 create_stub_base (f );
171141 let fn_return_type = f .return_type ();
172142
@@ -178,14 +148,14 @@ comptime fn create_public_static_stub(f: FunctionDefinition) -> Quoted {
178148 self .target_contract ,
179149 selector ,
180150 $fn_name_str ,
181- $SERIALIZED_ARGS_NAME ,
151+ $serialized_args_array_name ,
182152 )
183153 }
184154 }
185155}
186156
187157comptime fn create_utility_stub (f : FunctionDefinition ) -> Quoted {
188- let (fn_name , fn_parameters_list , serialized_args_slice_construction , fn_name_str , fn_name_len , fn_selector ) =
158+ let (fn_name , fn_parameters_list , serialized_args_slice_construction , serialized_args_array_name , fn_name_str , fn_name_len , fn_selector ) =
189159 create_stub_base (f );
190160 let fn_return_type = f .return_type ();
191161
@@ -197,7 +167,7 @@ comptime fn create_utility_stub(f: FunctionDefinition) -> Quoted {
197167 self .target_contract ,
198168 selector ,
199169 $fn_name_str ,
200- $SERIALIZED_ARGS_NAME ,
170+ $serialized_args_array_name ,
201171 )
202172 }
203173 }
0 commit comments