@aztec/protocol-contracts 5.0.0-nightly.20260503 → 5.0.0-nightly.20260505

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -98,13 +98,17 @@
98
98
  "name": "create_public_self_enqueue_static_stub",
99
99
  "start": 11693
100
100
  },
101
+ {
102
+ "name": "create_utility_self_call_stub",
103
+ "start": 12756
104
+ },
101
105
  {
102
106
  "name": "create_public_self_enqueue_stub",
103
- "start": 12775
107
+ "start": 13609
104
108
  }
105
109
  ],
106
110
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/calls_generation/external_functions_stubs.nr",
107
- "source": "//! Stubs are auto-generated wrapper functions that provide an ergonomic interface for cross-contract calls. ! Instead\n// of manually serializing arguments and creating call interfaces, stubs allow natural syntax, e.g. for ! enqueuing\n// calls to public functions: ! ! ExternalContract.at(address).some_method(arg1, arg2).enqueue()\n\nuse crate::macros::utils::compute_fn_selector;\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::unquote;\n\ncomptime global FROM_FIELD: TypedExpr = {\n let from_field_trait = quote { crate::protocol::traits::FromField }.as_trait_constraint();\n let function_selector_typ = quote { crate::protocol::abis::function_selector::FunctionSelector }.as_type();\n function_selector_typ.get_trait_impl(from_field_trait).unwrap().methods().filter(|m| {\n m.name() == quote { from_field }\n })[0]\n .as_typed_expr()\n};\n\n/// Utility function creating stubs used by all the stub functions in this file.\ncomptime fn create_stub_base(f: FunctionDefinition) -> (Quoted, Quoted, Quoted, Quoted, u32, Quoted, u32, Field) {\n // Dear privacy adventurer, chances are, you've command+clicked on the name of an external function call -- seeking\n // to view that function -- only to end up here. Here's an explanation: The external contract that you're calling\n // was likely annotated with the `#[aztec]` annotation -- as all good aztec contracts are. This triggers a macro\n // which generates a \"contract interface\" for that contract, which is effectively a pretty interface that gives\n // natural contract calling semantics:\n //\n // `MyImportedContract.at(some_address).my_method(arg1, arg2).enqueue();\n //\n // Unfortunately, the usage of macros makes it a bit of a black box. To actually view the target function, you\n // could instead command+click on `MyImportedContract`, or you can just manually search it. If you want to view the\n // noir code that gets generated by this macro, you can use `nargo expand` on your contract.\n create_stub_base_from_parts(f.name(), f.parameters())\n}\n\n/// Variant of `create_stub_base` that takes raw `(name, parameters)` instead of a `FunctionDefinition`.\n///\n/// This lets macro-injected functions (e.g. `offchain_receive`) reuse the stub-generation machinery without needing a\n/// `FunctionDefinition`.\npub(crate) comptime fn create_stub_base_from_parts(\n fn_name: Quoted,\n fn_parameters: [(Quoted, Type)],\n) -> (Quoted, Quoted, Quoted, Quoted, u32, Quoted, u32, Field) {\n let fn_parameters_list = fn_parameters.map(|(name, typ): (Quoted, Type)| quote { $name: $typ }).join(quote {,});\n\n let (serialized_args_array_construction, serialized_args_array_len_quote, serialized_args_array_name) =\n derive_serialization_quotes(fn_parameters, false);\n let serialized_args_array_len: u32 = unquote!(quote { ($serialized_args_array_len_quote) as u32 });\n\n let fn_name_str = f\"\\\"{fn_name}\\\"\".quoted_contents();\n let fn_name_len: u32 = unquote!(quote { $fn_name_str.as_bytes().len()});\n let fn_selector: Field = compute_fn_selector(fn_name, fn_parameters);\n\n (\n fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name,\n serialized_args_array_len, fn_name_str, fn_name_len, fn_selector,\n )\n}\n\npub(crate) comptime fn create_private_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PrivateCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PrivateCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_private_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PrivateStaticCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PrivateStaticCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_public_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PublicCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PublicCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_public_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PublicStaticCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PublicStaticCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_utility_stub(f: FunctionDefinition) -> Quoted {\n create_utility_stub_from_parts(f.name(), f.parameters(), f.return_type())\n}\n\n/// Variant of `create_utility_stub` that takes raw `(name, parameters, return_type)` instead of `FunctionDefinition`.\npub(crate) comptime fn create_utility_stub_from_parts(\n fn_name: Quoted,\n fn_parameters: [(Quoted, Type)],\n fn_return_type: Type,\n) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base_from_parts(fn_name, fn_parameters);\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::UtilityCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::UtilityCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\n// Self-call stub generation functions for CallSelf, CallSelfStatic, EnqueueSelf, and EnqueueSelfStatic structs. Unlike\n// the stubs above, the self-call stubs directly perform the call instead of returning a struct that can be later used\n// to perform the call.\n\n/// Creates a stub for calling a private function (or static private function if `is_static` is true) from private\n/// context (for CallSelf<&mut PrivateContext> and CallSelfStatic<&mut PrivateContext>).\npub comptime fn create_private_self_call_stub(f: FunctionDefinition, is_static: bool) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, _, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let args_hash = aztec::hash::hash_args($serialized_args_array_name);\n aztec::oracle::execution_cache::store($serialized_args_array_name, args_hash);\n let returns_hash = self.context.call_private_function_with_args_hash(\n self.address,\n selector,\n args_hash,\n $is_static\n );\n returns_hash.get_preimage()\n }\n }\n}\n\n/// Creates a stub for calling a public function from public context (for CallSelf<PublicContext>)\npub comptime fn create_public_self_call_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, fn_name_str, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n // TODO: It makes sense to drop the use of PublicStaticCall struct here and just perform the call directly but\n // before doing that we need to drop the use of slices from return values because we cannot return slices from an\n // unconstrained function. This is not a priority right now.\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n unsafe {\n aztec::context::calls::PublicCall::new(\n self.address,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n ).call(self.context)\n }\n }\n }\n}\n\n/// Creates a static stub for calling a public view function from public context (for CallSelfStatic<PublicContext>)\npub comptime fn create_public_self_call_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, fn_name_str, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n // TODO: It makes sense to drop the use of PublicStaticCall struct here and just perform the call directly but\n // before doing that we need to drop the use of slices from return values because we cannot return slices from an\n // unconstrained function. This is not a priority right now.\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n unsafe {\n aztec::context::calls::PublicStaticCall::new(\n self.address,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n ).view(self.context)\n }\n }\n }\n}\n\n/// Creates a static stub for enqueuing a public view function from private context (for EnqueueSelfStatic<&mut\n/// PrivateContext>)\npub comptime fn create_public_self_enqueue_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _serialized_args_array_len, _fn_name_str, _fn_name_len, fn_selector) =\n create_stub_base(f);\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let calldata = [aztec::protocol::traits::ToField::to_field(selector)].concat($serialized_args_array_name);\n let calldata_hash = aztec::hash::hash_calldata_array(calldata);\n aztec::oracle::execution_cache::store(calldata, calldata_hash);\n self.context.call_public_function_with_calldata_hash(\n self.address,\n calldata_hash,\n /*is_static_call=*/ true,\n /*hide_msg_sender=*/ false,\n );\n }\n }\n}\n\n/// Creates a stub for enqueuing a public function from private context (for EnqueueSelf<&mut PrivateContext>)\npub comptime fn create_public_self_enqueue_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _serialized_args_array_len, _fn_name_str, _fn_name_len, fn_selector) =\n create_stub_base(f);\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let calldata = [aztec::protocol::traits::ToField::to_field(selector)].concat($serialized_args_array_name);\n let calldata_hash = aztec::hash::hash_calldata_array(calldata);\n aztec::oracle::execution_cache::store(calldata, calldata_hash);\n self.context.call_public_function_with_calldata_hash(\n self.address,\n calldata_hash,\n /*is_static_call=*/ false,\n /*hide_msg_sender=*/ false,\n );\n }\n }\n}\n"
111
+ "source": "//! Stubs are auto-generated wrapper functions that provide an ergonomic interface for cross-contract calls. ! Instead\n// of manually serializing arguments and creating call interfaces, stubs allow natural syntax, e.g. for ! enqueuing\n// calls to public functions: ! ! ExternalContract.at(address).some_method(arg1, arg2).enqueue()\n\nuse crate::macros::utils::compute_fn_selector;\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::unquote;\n\ncomptime global FROM_FIELD: TypedExpr = {\n let from_field_trait = quote { crate::protocol::traits::FromField }.as_trait_constraint();\n let function_selector_typ = quote { crate::protocol::abis::function_selector::FunctionSelector }.as_type();\n function_selector_typ.get_trait_impl(from_field_trait).unwrap().methods().filter(|m| {\n m.name() == quote { from_field }\n })[0]\n .as_typed_expr()\n};\n\n/// Utility function creating stubs used by all the stub functions in this file.\ncomptime fn create_stub_base(f: FunctionDefinition) -> (Quoted, Quoted, Quoted, Quoted, u32, Quoted, u32, Field) {\n // Dear privacy adventurer, chances are, you've command+clicked on the name of an external function call -- seeking\n // to view that function -- only to end up here. Here's an explanation: The external contract that you're calling\n // was likely annotated with the `#[aztec]` annotation -- as all good aztec contracts are. This triggers a macro\n // which generates a \"contract interface\" for that contract, which is effectively a pretty interface that gives\n // natural contract calling semantics:\n //\n // `MyImportedContract.at(some_address).my_method(arg1, arg2).enqueue();\n //\n // Unfortunately, the usage of macros makes it a bit of a black box. To actually view the target function, you\n // could instead command+click on `MyImportedContract`, or you can just manually search it. If you want to view the\n // noir code that gets generated by this macro, you can use `nargo expand` on your contract.\n create_stub_base_from_parts(f.name(), f.parameters())\n}\n\n/// Variant of `create_stub_base` that takes raw `(name, parameters)` instead of a `FunctionDefinition`.\n///\n/// This lets macro-injected functions (e.g. `offchain_receive`) reuse the stub-generation machinery without needing a\n/// `FunctionDefinition`.\npub(crate) comptime fn create_stub_base_from_parts(\n fn_name: Quoted,\n fn_parameters: [(Quoted, Type)],\n) -> (Quoted, Quoted, Quoted, Quoted, u32, Quoted, u32, Field) {\n let fn_parameters_list = fn_parameters.map(|(name, typ): (Quoted, Type)| quote { $name: $typ }).join(quote {,});\n\n let (serialized_args_array_construction, serialized_args_array_len_quote, serialized_args_array_name) =\n derive_serialization_quotes(fn_parameters, false);\n let serialized_args_array_len: u32 = unquote!(quote { ($serialized_args_array_len_quote) as u32 });\n\n let fn_name_str = f\"\\\"{fn_name}\\\"\".quoted_contents();\n let fn_name_len: u32 = unquote!(quote { $fn_name_str.as_bytes().len()});\n let fn_selector: Field = compute_fn_selector(fn_name, fn_parameters);\n\n (\n fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name,\n serialized_args_array_len, fn_name_str, fn_name_len, fn_selector,\n )\n}\n\npub(crate) comptime fn create_private_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PrivateCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PrivateCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_private_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PrivateStaticCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PrivateStaticCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_public_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PublicCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PublicCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_public_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PublicStaticCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::PublicStaticCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\npub(crate) comptime fn create_utility_stub(f: FunctionDefinition) -> Quoted {\n create_utility_stub_from_parts(f.name(), f.parameters(), f.return_type())\n}\n\n/// Variant of `create_utility_stub` that takes raw `(name, parameters, return_type)` instead of `FunctionDefinition`.\npub(crate) comptime fn create_utility_stub_from_parts(\n fn_name: Quoted,\n fn_parameters: [(Quoted, Type)],\n fn_return_type: Type,\n) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n create_stub_base_from_parts(fn_name, fn_parameters);\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::UtilityCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n aztec::context::calls::UtilityCall::new(\n self.target_contract,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n )\n }\n }\n}\n\n// Self-call stub generation functions for CallSelf, CallSelfStatic, EnqueueSelf, and EnqueueSelfStatic structs. Unlike\n// the stubs above, the self-call stubs directly perform the call instead of returning a struct that can be later used\n// to perform the call.\n\n/// Creates a stub for calling a private function (or static private function if `is_static` is true) from private\n/// context (for CallSelf<&mut PrivateContext> and CallSelfStatic<&mut PrivateContext>).\npub comptime fn create_private_self_call_stub(f: FunctionDefinition, is_static: bool) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, _, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let args_hash = aztec::hash::hash_args($serialized_args_array_name);\n aztec::oracle::execution_cache::store($serialized_args_array_name, args_hash);\n let returns_hash = self.context.call_private_function_with_args_hash(\n self.address,\n selector,\n args_hash,\n $is_static\n );\n returns_hash.get_preimage()\n }\n }\n}\n\n/// Creates a stub for calling a public function from public context (for CallSelf<PublicContext>)\npub comptime fn create_public_self_call_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, fn_name_str, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n // TODO: It makes sense to drop the use of PublicStaticCall struct here and just perform the call directly but\n // before doing that we need to drop the use of slices from return values because we cannot return slices from an\n // unconstrained function. This is not a priority right now.\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n unsafe {\n aztec::context::calls::PublicCall::new(\n self.address,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n ).call(self.context)\n }\n }\n }\n}\n\n/// Creates a static stub for calling a public view function from public context (for CallSelfStatic<PublicContext>)\npub comptime fn create_public_self_call_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, fn_name_str, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n // TODO: It makes sense to drop the use of PublicStaticCall struct here and just perform the call directly but\n // before doing that we need to drop the use of slices from return values because we cannot return slices from an\n // unconstrained function. This is not a priority right now.\n quote {\n pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n unsafe {\n aztec::context::calls::PublicStaticCall::new(\n self.address,\n selector,\n $fn_name_str,\n $serialized_args_array_name,\n ).view(self.context)\n }\n }\n }\n}\n\n/// Creates a static stub for enqueuing a public view function from private context (for EnqueueSelfStatic<&mut\n/// PrivateContext>)\npub comptime fn create_public_self_enqueue_static_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _serialized_args_array_len, _fn_name_str, _fn_name_len, fn_selector) =\n create_stub_base(f);\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let calldata = [aztec::protocol::traits::ToField::to_field(selector)].concat($serialized_args_array_name);\n let calldata_hash = aztec::hash::hash_calldata_array(calldata);\n aztec::oracle::execution_cache::store(calldata, calldata_hash);\n self.context.call_public_function_with_calldata_hash(\n self.address,\n calldata_hash,\n /*is_static_call=*/ true,\n /*hide_msg_sender=*/ false,\n );\n }\n }\n}\n\n/// Creates a stub for calling a utility function on the same contract (for CallSelfUtility).\npub comptime fn create_utility_self_call_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, _, _, fn_selector) =\n create_stub_base(f);\n let fn_return_type = f.return_type();\n\n quote {\n pub unconstrained fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let returns = aztec::oracle::call_utility_function::call_utility_function(\n self.address, selector, $serialized_args_array_name,\n );\n aztec::protocol::traits::Deserialize::deserialize(returns)\n }\n }\n}\n\n/// Creates a stub for enqueuing a public function from private context (for EnqueueSelf<&mut PrivateContext>)\npub comptime fn create_public_self_enqueue_stub(f: FunctionDefinition) -> Quoted {\n let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _serialized_args_array_len, _fn_name_str, _fn_name_len, fn_selector) =\n create_stub_base(f);\n\n quote {\n pub fn $fn_name(self, $fn_parameters_list) {\n $serialized_args_array_construction\n let selector = $FROM_FIELD($fn_selector);\n let calldata = [aztec::protocol::traits::ToField::to_field(selector)].concat($serialized_args_array_name);\n let calldata_hash = aztec::hash::hash_calldata_array(calldata);\n aztec::oracle::execution_cache::store(calldata, calldata_hash);\n self.context.call_public_function_with_calldata_hash(\n self.address,\n calldata_hash,\n /*is_static_call=*/ false,\n /*hide_msg_sender=*/ false,\n );\n }\n }\n}\n"
108
112
  },
109
113
  "105": {
110
114
  "function_locations": [
@@ -128,7 +132,7 @@
128
132
  }
129
133
  ],
130
134
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/external/private.nr",
131
- "source": "use crate::macros::{\n functions::initialization_utils::has_public_init_checked_functions,\n internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n utils::{\n fn_has_allow_phase_change, fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self,\n is_fn_view, module_has_initializer, module_has_storage,\n },\n};\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::type_of;\n\npub(crate) comptime fn generate_private_external(f: FunctionDefinition) -> Quoted {\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to\n // the Private Kernel Circuit. First we change the function signature so that it also receives\n // `PrivateContextInputs`, which contain information about the execution context (e.g. the caller).\n let original_params = f.parameters();\n\n let original_params_quotes =\n original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n let params = quote { inputs: aztec::context::inputs::PrivateContextInputs, $original_params_quotes };\n\n let mut body = f.body().as_block().unwrap();\n\n // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n // the correct values.\n let (args_serialization, _, serialized_args_name) = derive_serialization_quotes(original_params, false);\n\n let storage_init = if module_has_storage {\n // Contract has Storage defined so we initialize it.\n quote {\n let storage = Storage::init(&mut context);\n }\n } else {\n // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPrivate\n // requires a storage struct in its constructor. Using an Option type would lead to worse developer experience\n // and higher constraint counts so we use the unit type `()` instead.\n quote {\n let storage = ();\n }\n };\n\n let contract_self_creation = quote {\n #[allow(unused_variables)]\n let mut self = {\n $args_serialization\n let args_hash = aztec::hash::hash_args($serialized_args_name);\n let mut context = aztec::context::PrivateContext::new(inputs, args_hash);\n $storage_init\n let self_address = context.this_address();\n let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context: &mut context };\n let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context: &mut context };\n let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context: &mut context };\n let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context: &mut context };\n let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context: &mut context };\n aztec::contract_self::ContractSelfPrivate::new(&mut context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal)\n };\n };\n\n let original_function_name = f.name();\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_only_self(f) {\n let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n quote { assert(self.msg_sender() == self.address, $assertion_message); }\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n quote { assert(self.context.inputs.call_context.is_static_call, $assertion_message); }\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n let has_public_fns_with_init_check = has_public_init_checked_functions(f.module());\n (\n quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_private(*self.context); },\n quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_private_initializer(self.context, $has_public_fns_with_init_check); },\n )\n } else {\n (quote {}, quote {})\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n quote { aztec::macros::functions::initialization_utils::assert_is_initialized_private(self.context); }\n } else {\n quote {}\n };\n\n // Phase checks are skipped in functions that request to manually handle phases\n let initial_phase_store = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { let within_revertible_phase: bool = self.context.in_revertible_phase(); }\n };\n\n let no_phase_change_check = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { \n assert_eq(\n within_revertible_phase,\n self.context.in_revertible_phase(),\n f\"Phase change detected on function with phase check. If this is expected, use #[allow_phase_change]\",\n ); \n }\n };\n\n // Inject the authwit check if the function is marked with #[authorize_once].\n let authorize_once_check = if fn_has_authorize_once(f) {\n create_authorize_once_check(f, true)\n } else {\n quote {}\n };\n\n // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n // circuit expects.\n let return_value_var_name = quote { macro__returned__values };\n\n let return_value_type = f.return_type();\n let return_value = if body.len() == 0 {\n quote {}\n } else if return_value_type != type_of(()) {\n // The original return value is serialized and hashed before being passed to the context.\n let (body_without_return, last_body_expr) = body.pop_back();\n let return_value = last_body_expr.quoted();\n let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; };\n\n let (return_serialization, _, serialized_return_name) =\n derive_serialization_quotes([(return_value_var_name, return_value_type)], false);\n\n body = body_without_return;\n\n quote {\n $return_value_assignment\n $return_serialization\n self.context.set_return_hash($serialized_return_name);\n }\n } else {\n let (body_without_return, last_body_expr) = body.pop_back();\n if !last_body_expr.has_semicolon()\n & last_body_expr.as_for().is_none()\n & last_body_expr.as_assert().is_none()\n & last_body_expr.as_for_range().is_none()\n & last_body_expr.as_assert_eq().is_none()\n & last_body_expr.as_let().is_none() {\n let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }\n .as_expr()\n .unwrap());\n }\n quote {}\n };\n\n let context_finish = quote { self.context.finish() };\n\n // Preserve all attributes that are relevant to the function's ABI.\n let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n let to_prepend = quote {\n aztec::oracle::version::assert_compatible_oracle_version();\n $contract_self_creation\n $initial_phase_store\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $authorize_once_check\n };\n\n let body_quote = body.map(|expr| expr.quoted()).join(quote { });\n\n // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n // to re-enter into a half-initialized contract.\n let to_append = quote {\n $return_value\n $mark_as_initialized\n $no_phase_change_check\n $context_finish\n };\n\n quote {\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n $abi_relevant_attributes\n fn $fn_name($params) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n $to_prepend\n $body_quote\n $to_append\n }\n }\n}\n"
135
+ "source": "use crate::macros::{\n functions::initialization_utils::has_public_init_checked_functions,\n internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n utils::{\n fn_has_allow_phase_change, fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self,\n is_fn_view, module_has_initializer, module_has_storage,\n },\n};\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::type_of;\n\npub(crate) comptime fn generate_private_external(f: FunctionDefinition) -> Quoted {\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to\n // the Private Kernel Circuit. First we change the function signature so that it also receives\n // `PrivateContextInputs`, which contain information about the execution context (e.g. the caller).\n let original_params = f.parameters();\n\n let original_params_quotes =\n original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n let params = quote { inputs: aztec::context::inputs::PrivateContextInputs, $original_params_quotes };\n\n let mut body = f.body().as_block().unwrap();\n\n // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n // the correct values.\n let (args_serialization, _, serialized_args_name) = derive_serialization_quotes(original_params, false);\n\n let storage_init = if module_has_storage {\n // Contract has Storage defined so we initialize it.\n quote {\n let storage = Storage::init(&mut context);\n }\n } else {\n // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPrivate\n // requires a storage struct in its constructor. Using an Option type would lead to worse developer experience\n // and higher constraint counts so we use the unit type `()` instead.\n quote {\n let storage = ();\n }\n };\n\n let contract_self_creation = quote {\n #[allow(unused_variables)]\n let mut self = {\n $args_serialization\n let args_hash = aztec::hash::hash_args($serialized_args_name);\n let mut context = aztec::context::PrivateContext::new(inputs, args_hash);\n $storage_init\n let self_address = context.this_address();\n let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context: &mut context };\n let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context: &mut context };\n let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context: &mut context };\n let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context: &mut context };\n let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context: &mut context };\n let call_self_utility = CallSelfUtility { address: self_address };\n let utility: aztec::contract_self::PrivateUtilityCalls<CallSelfUtility> = aztec::contract_self::PrivateUtilityCalls { call_self: call_self_utility };\n aztec::contract_self::ContractSelfPrivate::new(&mut context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal, utility)\n };\n };\n\n let original_function_name = f.name();\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_only_self(f) {\n let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n quote { assert(self.msg_sender() == self.address, $assertion_message); }\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n quote { assert(self.context.inputs.call_context.is_static_call, $assertion_message); }\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n let has_public_fns_with_init_check = has_public_init_checked_functions(f.module());\n (\n quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_private(*self.context); },\n quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_private_initializer(self.context, $has_public_fns_with_init_check); },\n )\n } else {\n (quote {}, quote {})\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n quote { aztec::macros::functions::initialization_utils::assert_is_initialized_private(self.context); }\n } else {\n quote {}\n };\n\n // Phase checks are skipped in functions that request to manually handle phases\n let initial_phase_store = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { let within_revertible_phase: bool = self.context.in_revertible_phase(); }\n };\n\n let no_phase_change_check = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { \n assert_eq(\n within_revertible_phase,\n self.context.in_revertible_phase(),\n f\"Phase change detected on function with phase check. If this is expected, use #[allow_phase_change]\",\n ); \n }\n };\n\n // Inject the authwit check if the function is marked with #[authorize_once].\n let authorize_once_check = if fn_has_authorize_once(f) {\n create_authorize_once_check(f, true)\n } else {\n quote {}\n };\n\n // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n // circuit expects.\n let return_value_var_name = quote { macro__returned__values };\n\n let return_value_type = f.return_type();\n let return_value = if body.len() == 0 {\n quote {}\n } else if return_value_type != type_of(()) {\n // The original return value is serialized and hashed before being passed to the context.\n let (body_without_return, last_body_expr) = body.pop_back();\n let return_value = last_body_expr.quoted();\n let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; };\n\n let (return_serialization, _, serialized_return_name) =\n derive_serialization_quotes([(return_value_var_name, return_value_type)], false);\n\n body = body_without_return;\n\n quote {\n $return_value_assignment\n $return_serialization\n self.context.set_return_hash($serialized_return_name);\n }\n } else {\n let (body_without_return, last_body_expr) = body.pop_back();\n if !last_body_expr.has_semicolon()\n & last_body_expr.as_for().is_none()\n & last_body_expr.as_assert().is_none()\n & last_body_expr.as_for_range().is_none()\n & last_body_expr.as_assert_eq().is_none()\n & last_body_expr.as_let().is_none() {\n let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }\n .as_expr()\n .unwrap());\n }\n quote {}\n };\n\n let context_finish = quote { self.context.finish() };\n\n // Preserve all attributes that are relevant to the function's ABI.\n let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n let to_prepend = quote {\n aztec::oracle::version::assert_compatible_oracle_version();\n $contract_self_creation\n $initial_phase_store\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $authorize_once_check\n };\n\n let body_quote = body.map(|expr| expr.quoted()).join(quote { });\n\n // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n // to re-enter into a half-initialized contract.\n let to_append = quote {\n $return_value\n $mark_as_initialized\n $no_phase_change_check\n $context_finish\n };\n\n quote {\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n $abi_relevant_attributes\n fn $fn_name($params) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n $to_prepend\n $body_quote\n $to_append\n }\n }\n}\n"
132
136
  },
133
137
  "116": {
134
138
  "function_locations": [
@@ -148,7 +152,7 @@
148
152
  }
149
153
  ],
150
154
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/external/utility.nr",
151
- "source": "use crate::macros::utils::{fn_has_noinitcheck, module_has_initializer, module_has_storage};\n\npub(crate) comptime fn generate_utility_external(f: FunctionDefinition) -> Quoted {\n let module_has_initializer = module_has_initializer(f.module());\n\n // Initialize Storage if module has storage\n let storage_init = if module_has_storage(f.module()) {\n quote {\n let storage = Storage::init(context);\n }\n } else {\n // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfUtility\n // requires a\n // storage struct in its constructor. Using an Option type would lead to worse developer experience and higher\n // constraint counts so we use the unit type `()` instead.\n quote {\n let storage = ();\n }\n };\n\n // Create utility context\n let contract_self_creation = quote {\n #[allow(unused_variables)]\n let mut self = {\n let context = aztec::context::UtilityContext::new();\n $storage_init\n aztec::contract_self::ContractSelfUtility::new(context, storage)\n };\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !fn_has_noinitcheck(f) {\n quote {\n aztec::macros::functions::initialization_utils::assert_is_initialized_utility(\n self.context,\n );\n }\n } else {\n quote {}\n };\n\n // A quote to be injected at the beginning of the function body.\n let to_prepend = quote {\n aztec::oracle::version::assert_compatible_oracle_version();\n $contract_self_creation\n $init_check\n };\n\n let original_function_name = f.name();\n let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n let body = f.body();\n let params = f.parameters().map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n let return_type = f.return_type();\n\n quote {\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn $fn_name($params) -> pub $return_type {\n $to_prepend\n $body\n }\n }\n}\n"
155
+ "source": "use crate::macros::utils::{fn_has_noinitcheck, module_has_initializer, module_has_storage};\n\npub(crate) comptime fn generate_utility_external(f: FunctionDefinition) -> Quoted {\n let module_has_initializer = module_has_initializer(f.module());\n\n // Initialize Storage if module has storage\n let storage_init = if module_has_storage(f.module()) {\n quote {\n let storage = Storage::init(context);\n }\n } else {\n // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfUtility\n // requires a\n // storage struct in its constructor. Using an Option type would lead to worse developer experience and higher\n // constraint counts so we use the unit type `()` instead.\n quote {\n let storage = ();\n }\n };\n\n // Create utility context\n let contract_self_creation = quote {\n #[allow(unused_variables)]\n let mut self = {\n let context = aztec::context::UtilityContext::new();\n $storage_init\n let self_address = context.this_address();\n let call_self = CallSelfUtility { address: self_address };\n aztec::contract_self::ContractSelfUtility::new(context, storage, call_self)\n };\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !fn_has_noinitcheck(f) {\n quote {\n aztec::macros::functions::initialization_utils::assert_is_initialized_utility(\n self.context,\n );\n }\n } else {\n quote {}\n };\n\n // A quote to be injected at the beginning of the function body.\n let to_prepend = quote {\n aztec::oracle::version::assert_compatible_oracle_version();\n $contract_self_creation\n $init_check\n };\n\n let original_function_name = f.name();\n let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n let body = f.body();\n let params = f.parameters().map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n let return_type = f.return_type();\n\n quote {\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn $fn_name($params) -> pub $return_type {\n $to_prepend\n $body\n }\n }\n}\n"
152
156
  },
153
157
  "127": {
154
158
  "function_locations": [
@@ -6823,7 +6827,7 @@
6823
6827
  "custom_attributes": [
6824
6828
  "abi_private"
6825
6829
  ],
6826
- "debug_symbols": "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",
6830
+ "debug_symbols": "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",
6827
6831
  "is_unconstrained": false,
6828
6832
  "name": "set_authorized_private",
6829
6833
  "verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANnAAAAAAAAAAAAAAAAAAAAR/jCxgqlMdgzsvgxWzHg16IAAAAAAAAAAAAAAAAAAAAAAABBKtq5OWXwU7geA3B/SgAAAAAAAAAAAAAAAAAAAHVl+mktpAojL+lTt3ieLxc7AAAAAAAAAAAAAAAAAAAAAAAnPQj7FrR0c5Y05jyuezgAAAAAAAAAAAAAAAAAAABow7212uM1LZhSaHKwVhUsoAAAAAAAAAAAAAAAAAAAAAAABkYfwto4PNsJijnlJVRgAAAAAAAAAAAAAAAAAAAArup3IYxqRuo4SFtFGrSrOEcAAAAAAAAAAAAAAAAAAAAAAAHbX921M4vHX4oDFtgv5gAAAAAAAAAAAAAAAAAAAOn3Fjl8qDE0v5RYyPenJEUPAAAAAAAAAAAAAAAAAAAAAAASaKPLKEFA1uL+o4hkBIYAAAAAAAAAAAAAAAAAAABAeQm4zlBQDJ6Ogs67XRUuXQAAAAAAAAAAAAAAAAAAAAAACUlXTSh421FmP5O91AImAAAAAAAAAAAAAAAAAAAAs+wv4XxD8wvyn4O3vsOoHe8AAAAAAAAAAAAAAAAAAAAAAB8LseOYxxZeKg3KYFli8gAAAAAAAAAAAAAAAAAAAAWXNfKN0V9++ewv4E94EDrlAAAAAAAAAAAAAAAAAAAAAAAOoNSSRvlE9F/55PlFpDwAAAAAAAAAAAAAAAAAAABxgQDbV29TyrCRvLumRXxPWQAAAAAAAAAAAAAAAAAAAAAACADyCDIBydeiprbjnfoiAAAAAAAAAAAAAAAAAAAAmlB2XXPrHfoI0QCYWcrSo8gAAAAAAAAAAAAAAAAAAAAAAAoK02KbtPKkb5qSsQW+eQAAAAAAAAAAAAAAAAAAAFGFJlCRnqPxtnkBrA+0uJz3AAAAAAAAAAAAAAAAAAAAAAAd/1LpFg53tczt/xKpMxUAAAAAAAAAAAAAAAAAAAChLBT9rOueKIh08tsxD4TarAAAAAAAAAAAAAAAAAAAAAAAG2QkeBZrod+/9hcra4QbAAAAAAAAAAAAAAAAAAAATfniwRSH6WzeSjVDKMIyK34AAAAAAAAAAAAAAAAAAAAAAB5xOAUHv496ZfVCpmiWfgAAAAAAAAAAAAAAAAAAADh6h+H9Wk11WnK/QiPnLPF1AAAAAAAAAAAAAAAAAAAAAAAUDR1hRceKTNYLhVNNF08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMr6S6nlasbnMn8+tj8AcWy0AAAAAAAAAAAAAAAAAAAAAAAaKyzByaKFFUWQQ93QRqYAAAAAAAAAAAAAAAAAAABUB9uaQqrreic4sRojIxUr8QAAAAAAAAAAAAAAAAAAAAAAI+2MeUWR6zou+0UHnir/AAAAAAAAAAAAAAAAAAAAtWVQcNC8Rlan1x+jmY6bxeUAAAAAAAAAAAAAAAAAAAAAACL2xuhwjG8BwOZyelYE+wAAAAAAAAAAAAAAAAAAADVsgcckhz6Vq9wChtaSSQBfAAAAAAAAAAAAAAAAAAAAAAANtv73b4i/1QXT8hbfn18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBsG8pEArGSK+0dkfI7P6lwwAAAAAAAAAAAAAAAAAAAAAAFjXw3Axsbv0pePtwZAd5AAAAAAAAAAAAAAAAAAAABMsQW8o6w3TmU7m+JlZEuDgAAAAAAAAAAAAAAAAAAAAAAAs57if89cNk57gEedsm7AAAAAAAAAAAAAAAAAAAAEgwv5ofU3Wih3CGazWGNvWRAAAAAAAAAAAAAAAAAAAAAAAXIwcZdll2kcnNAbpDTEMAAAAAAAAAAAAAAAAAAACVY5OUq34IfFOUo3HCoCxavgAAAAAAAAAAAAAAAAAAAAAADYc/pih24wtKOnSw6z/yAAAAAAAAAAAAAAAAAAAAIGoNUhgBWQ+v6KrFwDEfcJgAAAAAAAAAAAAAAAAAAAAAABxvpl0o89e9oYYmae29cQAAAAAAAAAAAAAAAAAAADKpdBuqVwdTmwIgYF8bQhC1AAAAAAAAAAAAAAAAAAAAAAAm+TWVASlbi+9HQpKf9WgAAAAAAAAAAAAAAAAAAAADpphVlzSBa6qQgUz8x+YmAQAAAAAAAAAAAAAAAAAAAAAADucN3pBN4n0aweKzPaV7AAAAAAAAAAAAAAAAAAAAzUPZ/GYcQXe/k3VcFCKRTGQAAAAAAAAAAAAAAAAAAAAAACmYLEfT1xvD3k3IiIgVyAAAAAAAAAAAAAAAAAAAAH63D/3c7vuY+hXZoY6HrrTWAAAAAAAAAAAAAAAAAAAAAAAT9c/TCZLIVO6JFYo4qSsAAAAAAAAAAAAAAAAAAAAsTsJGvIOqhWoYhK0jcccanwAAAAAAAAAAAAAAAAAAAAAADN4z/JbcCEW6ThaVztZ0AAAAAAAAAAAAAAAAAAAA9mcZxqbjg3b7A6hGzVYeeTIAAAAAAAAAAAAAAAAAAAAAAAYUuOeuOxixbOne15IyswAAAAAAAAAAAAAAAAAAANG+0HnZhXTI9yzxeEOkmHXhAAAAAAAAAAAAAAAAAAAAAAAHERiJ/J1oju5z3hwn8MkAAAAAAAAAAAAAAAAAAABbwoDw4fT/3LpXSN0yk0BU3gAAAAAAAAAAAAAAAAAAAAAAIFxU2tTJZ88/bPik0DhMAAAAAAAAAAAAAAAAAAAAikh0a9I0Ri597qLNW6vrHRMAAAAAAAAAAAAAAAAAAAAAAAAuvODjFNn3KxCqp/INcQAAAAAAAAAAAAAAAAAAAAgIbjbiPQmP7N2aUTxAaOKBAAAAAAAAAAAAAAAAAAAAAAAbID2a2zLv5cYzaGOX/oMAAAAAAAAAAAAAAAAAAACJZoUQgA7xdMeBxBDHT6i6BAAAAAAAAAAAAAAAAAAAAAAAFbwZOLbf7x4R58PKpqC5AAAAAAAAAAAAAAAAAAAAD1U34PXrd95VD+kyuUbVQ8UAAAAAAAAAAAAAAAAAAAAAAA/o9iujUPnhq6Uv7btB4QAAAAAAAAAAAAAAAAAAAH3CeJsz+mQu0pCC4zfTLOypAAAAAAAAAAAAAAAAAAAAAAAW8LpeTcVeAsTSH8hbFuYAAAAAAAAAAAAAAAAAAAAHqhf+o8L2XpWbk3VR59OPXQAAAAAAAAAAAAAAAAAAAAAAGMeQnLwsuNNRnxw1o/0LAAAAAAAAAAAAAAAAAAAAjDwiTg3kh879XrmLlmV86MAAAAAAAAAAAAAAAAAAAAAAAAvSGprr/FIdKhvpK2MjQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhwWfGM733GOCD0CAo+l7yMgAAAAAAAAAAAAAAAAAAAAAAFnyL/fdPCY7+A2tkUuE1AAAAAAAAAAAAAAAAAAAA39PpR2f3n6paC1M5AaRjLCAAAAAAAAAAAAAAAAAAAAAAAAmE+Uv9pvxR/SbaWl2s7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYX836MbQkrf5oW0NDXNxWcAAAAAAAAAAAAAAAAAAAAAACcXQ5lJrPiDw4W8fCRtxgAAAAAAAAAAAAAAAAAAALl/D4Y6EAWlyIumKMHYuxdAAAAAAAAAAAAAAAAAAAAAAAAB9zZ2+Q+pLgvZzocWz7k="
@@ -6907,7 +6911,7 @@
6907
6911
  "custom_attributes": [
6908
6912
  "abi_utility"
6909
6913
  ],
6910
- "debug_symbols": "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",
6914
+ "debug_symbols": "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",
6911
6915
  "is_unconstrained": true,
6912
6916
  "name": "utility_is_consumable"
6913
6917
  },
@@ -42,7 +42,7 @@
42
42
  }
43
43
  ],
44
44
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/external/private.nr",
45
- "source": "use crate::macros::{\n functions::initialization_utils::has_public_init_checked_functions,\n internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n utils::{\n fn_has_allow_phase_change, fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self,\n is_fn_view, module_has_initializer, module_has_storage,\n },\n};\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::type_of;\n\npub(crate) comptime fn generate_private_external(f: FunctionDefinition) -> Quoted {\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to\n // the Private Kernel Circuit. First we change the function signature so that it also receives\n // `PrivateContextInputs`, which contain information about the execution context (e.g. the caller).\n let original_params = f.parameters();\n\n let original_params_quotes =\n original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n let params = quote { inputs: aztec::context::inputs::PrivateContextInputs, $original_params_quotes };\n\n let mut body = f.body().as_block().unwrap();\n\n // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n // the correct values.\n let (args_serialization, _, serialized_args_name) = derive_serialization_quotes(original_params, false);\n\n let storage_init = if module_has_storage {\n // Contract has Storage defined so we initialize it.\n quote {\n let storage = Storage::init(&mut context);\n }\n } else {\n // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPrivate\n // requires a storage struct in its constructor. Using an Option type would lead to worse developer experience\n // and higher constraint counts so we use the unit type `()` instead.\n quote {\n let storage = ();\n }\n };\n\n let contract_self_creation = quote {\n #[allow(unused_variables)]\n let mut self = {\n $args_serialization\n let args_hash = aztec::hash::hash_args($serialized_args_name);\n let mut context = aztec::context::PrivateContext::new(inputs, args_hash);\n $storage_init\n let self_address = context.this_address();\n let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context: &mut context };\n let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context: &mut context };\n let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context: &mut context };\n let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context: &mut context };\n let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context: &mut context };\n aztec::contract_self::ContractSelfPrivate::new(&mut context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal)\n };\n };\n\n let original_function_name = f.name();\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_only_self(f) {\n let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n quote { assert(self.msg_sender() == self.address, $assertion_message); }\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n quote { assert(self.context.inputs.call_context.is_static_call, $assertion_message); }\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n let has_public_fns_with_init_check = has_public_init_checked_functions(f.module());\n (\n quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_private(*self.context); },\n quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_private_initializer(self.context, $has_public_fns_with_init_check); },\n )\n } else {\n (quote {}, quote {})\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n quote { aztec::macros::functions::initialization_utils::assert_is_initialized_private(self.context); }\n } else {\n quote {}\n };\n\n // Phase checks are skipped in functions that request to manually handle phases\n let initial_phase_store = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { let within_revertible_phase: bool = self.context.in_revertible_phase(); }\n };\n\n let no_phase_change_check = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { \n assert_eq(\n within_revertible_phase,\n self.context.in_revertible_phase(),\n f\"Phase change detected on function with phase check. If this is expected, use #[allow_phase_change]\",\n ); \n }\n };\n\n // Inject the authwit check if the function is marked with #[authorize_once].\n let authorize_once_check = if fn_has_authorize_once(f) {\n create_authorize_once_check(f, true)\n } else {\n quote {}\n };\n\n // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n // circuit expects.\n let return_value_var_name = quote { macro__returned__values };\n\n let return_value_type = f.return_type();\n let return_value = if body.len() == 0 {\n quote {}\n } else if return_value_type != type_of(()) {\n // The original return value is serialized and hashed before being passed to the context.\n let (body_without_return, last_body_expr) = body.pop_back();\n let return_value = last_body_expr.quoted();\n let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; };\n\n let (return_serialization, _, serialized_return_name) =\n derive_serialization_quotes([(return_value_var_name, return_value_type)], false);\n\n body = body_without_return;\n\n quote {\n $return_value_assignment\n $return_serialization\n self.context.set_return_hash($serialized_return_name);\n }\n } else {\n let (body_without_return, last_body_expr) = body.pop_back();\n if !last_body_expr.has_semicolon()\n & last_body_expr.as_for().is_none()\n & last_body_expr.as_assert().is_none()\n & last_body_expr.as_for_range().is_none()\n & last_body_expr.as_assert_eq().is_none()\n & last_body_expr.as_let().is_none() {\n let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }\n .as_expr()\n .unwrap());\n }\n quote {}\n };\n\n let context_finish = quote { self.context.finish() };\n\n // Preserve all attributes that are relevant to the function's ABI.\n let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n let to_prepend = quote {\n aztec::oracle::version::assert_compatible_oracle_version();\n $contract_self_creation\n $initial_phase_store\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $authorize_once_check\n };\n\n let body_quote = body.map(|expr| expr.quoted()).join(quote { });\n\n // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n // to re-enter into a half-initialized contract.\n let to_append = quote {\n $return_value\n $mark_as_initialized\n $no_phase_change_check\n $context_finish\n };\n\n quote {\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n $abi_relevant_attributes\n fn $fn_name($params) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n $to_prepend\n $body_quote\n $to_append\n }\n }\n}\n"
45
+ "source": "use crate::macros::{\n functions::initialization_utils::has_public_init_checked_functions,\n internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n utils::{\n fn_has_allow_phase_change, fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self,\n is_fn_view, module_has_initializer, module_has_storage,\n },\n};\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::type_of;\n\npub(crate) comptime fn generate_private_external(f: FunctionDefinition) -> Quoted {\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to\n // the Private Kernel Circuit. First we change the function signature so that it also receives\n // `PrivateContextInputs`, which contain information about the execution context (e.g. the caller).\n let original_params = f.parameters();\n\n let original_params_quotes =\n original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n let params = quote { inputs: aztec::context::inputs::PrivateContextInputs, $original_params_quotes };\n\n let mut body = f.body().as_block().unwrap();\n\n // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n // the correct values.\n let (args_serialization, _, serialized_args_name) = derive_serialization_quotes(original_params, false);\n\n let storage_init = if module_has_storage {\n // Contract has Storage defined so we initialize it.\n quote {\n let storage = Storage::init(&mut context);\n }\n } else {\n // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPrivate\n // requires a storage struct in its constructor. Using an Option type would lead to worse developer experience\n // and higher constraint counts so we use the unit type `()` instead.\n quote {\n let storage = ();\n }\n };\n\n let contract_self_creation = quote {\n #[allow(unused_variables)]\n let mut self = {\n $args_serialization\n let args_hash = aztec::hash::hash_args($serialized_args_name);\n let mut context = aztec::context::PrivateContext::new(inputs, args_hash);\n $storage_init\n let self_address = context.this_address();\n let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context: &mut context };\n let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context: &mut context };\n let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context: &mut context };\n let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context: &mut context };\n let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context: &mut context };\n let call_self_utility = CallSelfUtility { address: self_address };\n let utility: aztec::contract_self::PrivateUtilityCalls<CallSelfUtility> = aztec::contract_self::PrivateUtilityCalls { call_self: call_self_utility };\n aztec::contract_self::ContractSelfPrivate::new(&mut context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal, utility)\n };\n };\n\n let original_function_name = f.name();\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_only_self(f) {\n let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n quote { assert(self.msg_sender() == self.address, $assertion_message); }\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n quote { assert(self.context.inputs.call_context.is_static_call, $assertion_message); }\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n let has_public_fns_with_init_check = has_public_init_checked_functions(f.module());\n (\n quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_private(*self.context); },\n quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_private_initializer(self.context, $has_public_fns_with_init_check); },\n )\n } else {\n (quote {}, quote {})\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n quote { aztec::macros::functions::initialization_utils::assert_is_initialized_private(self.context); }\n } else {\n quote {}\n };\n\n // Phase checks are skipped in functions that request to manually handle phases\n let initial_phase_store = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { let within_revertible_phase: bool = self.context.in_revertible_phase(); }\n };\n\n let no_phase_change_check = if fn_has_allow_phase_change(f) {\n quote {}\n } else {\n quote { \n assert_eq(\n within_revertible_phase,\n self.context.in_revertible_phase(),\n f\"Phase change detected on function with phase check. If this is expected, use #[allow_phase_change]\",\n ); \n }\n };\n\n // Inject the authwit check if the function is marked with #[authorize_once].\n let authorize_once_check = if fn_has_authorize_once(f) {\n create_authorize_once_check(f, true)\n } else {\n quote {}\n };\n\n // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n // circuit expects.\n let return_value_var_name = quote { macro__returned__values };\n\n let return_value_type = f.return_type();\n let return_value = if body.len() == 0 {\n quote {}\n } else if return_value_type != type_of(()) {\n // The original return value is serialized and hashed before being passed to the context.\n let (body_without_return, last_body_expr) = body.pop_back();\n let return_value = last_body_expr.quoted();\n let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; };\n\n let (return_serialization, _, serialized_return_name) =\n derive_serialization_quotes([(return_value_var_name, return_value_type)], false);\n\n body = body_without_return;\n\n quote {\n $return_value_assignment\n $return_serialization\n self.context.set_return_hash($serialized_return_name);\n }\n } else {\n let (body_without_return, last_body_expr) = body.pop_back();\n if !last_body_expr.has_semicolon()\n & last_body_expr.as_for().is_none()\n & last_body_expr.as_assert().is_none()\n & last_body_expr.as_for_range().is_none()\n & last_body_expr.as_assert_eq().is_none()\n & last_body_expr.as_let().is_none() {\n let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }\n .as_expr()\n .unwrap());\n }\n quote {}\n };\n\n let context_finish = quote { self.context.finish() };\n\n // Preserve all attributes that are relevant to the function's ABI.\n let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n let to_prepend = quote {\n aztec::oracle::version::assert_compatible_oracle_version();\n $contract_self_creation\n $initial_phase_store\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $authorize_once_check\n };\n\n let body_quote = body.map(|expr| expr.quoted()).join(quote { });\n\n // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n // to re-enter into a half-initialized contract.\n let to_append = quote {\n $return_value\n $mark_as_initialized\n $no_phase_change_check\n $context_finish\n };\n\n quote {\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n $abi_relevant_attributes\n fn $fn_name($params) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n $to_prepend\n $body_quote\n $to_append\n }\n }\n}\n"
46
46
  },
47
47
  "127": {
48
48
  "function_locations": [
@@ -5393,7 +5393,7 @@
5393
5393
  "custom_attributes": [
5394
5394
  "abi_private"
5395
5395
  ],
5396
- "debug_symbols": "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ifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItifItiboz2LdiudgujlsSdWfwdnfQY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyPge0xsD0GtsfA9hjYHgPbY2B7DGyvYtqrmPYqpr2Kaa9i2quY9iqmvYppr2Laq5j2Kqa9immvYtqrmPYqpr2Kaa9i2quY6x35C5WogiqpBtWkWlSbqqjoIXqIHqKH6CF6iB6ih+gheogeQY+gR9Aj6BH0CHoEPYIeQY+gR9Ij6ZH0SHokPZIeSY+kR9Ij6THoMegx6DHoMegx6DHoMegx6DHoMekx6THpMekx6THpMekx6THpMemx6LHoseix6LHoseix6LHoseix6LHpsemx6bHpsemx6bHpsemx6bHpUfQoehQ9ih5Fj6JH0aPoUfQoejQ9mh5Nj6ZH06Pp0fRoejQ94FxwLjgXnAvOBeeCc8G54FxwLjgXnAvOBeeCc8G54FxwLjgXnAvOBeeCc8G54Pzu5jzMoJhUx5cSPfScR1WP6UMPQede3TnXvRJVUKXzkh5Jj1xUm6qoDpNKD0XnoSdhLI1TWcJZGkhLA2tpbCq8Jc+mkodTydOp5PFU8nwqeUCVPKFKHlGliRo16THpseix6LHoseix6LHoseix6LHoseix6bHpsemx6bHpsemx6bHpsemx6VH0KHoUPYoeRY+iR9GjTo2MHkWPpkfTo+nR9Gh6ND2aHk2PPl21U1bDVrugq13w1S4IaxeMtQvK2gVn7YK0dsFau9BDpxFHD9FD9BA9RA/RA+UucO7ilO5O6+6NdkePU7w7zbtTvTvdu1O+O+079LvAvwsEvMjT7aMHDl4g4QUWXqDhBR5eIOIFJl6g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",
5396
+ "debug_symbols": "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",
5397
5397
  "is_unconstrained": false,
5398
5398
  "name": "entrypoint",
5399
5399
  "verification_key": "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"
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@aztec/protocol-contracts",
3
3
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/protocol-contracts",
4
4
  "description": "Canonical Noir contracts for the Aztec Network",
5
- "version": "5.0.0-nightly.20260503",
5
+ "version": "5.0.0-nightly.20260505",
6
6
  "type": "module",
7
7
  "exports": {
8
8
  ".": "./dest/index.js",
@@ -73,9 +73,9 @@
73
73
  ]
74
74
  },
75
75
  "dependencies": {
76
- "@aztec/constants": "5.0.0-nightly.20260503",
77
- "@aztec/foundation": "5.0.0-nightly.20260503",
78
- "@aztec/stdlib": "5.0.0-nightly.20260503",
76
+ "@aztec/constants": "5.0.0-nightly.20260505",
77
+ "@aztec/foundation": "5.0.0-nightly.20260505",
78
+ "@aztec/stdlib": "5.0.0-nightly.20260505",
79
79
  "lodash.chunk": "^4.2.0",
80
80
  "lodash.omit": "^4.5.0",
81
81
  "tslib": "^2.4.0"