@aztec/protocol-contracts 0.55.0 → 0.56.0
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.
- package/artifacts/AuthRegistry.json +1 -1
- package/artifacts/ContractClassRegisterer.json +1 -1
- package/artifacts/ContractInstanceDeployer.json +1 -1
- package/artifacts/FeeJuice.json +1 -1
- package/artifacts/MultiCallEntrypoint.json +1 -1
- package/artifacts/Router.json +1 -1
- package/package.json +4 -4
- package/artifacts/KeyRegistry.d.json.ts +0 -3
- package/artifacts/KeyRegistry.json +0 -1
- package/dest/key-registry/artifact.d.ts +0 -2
- package/dest/key-registry/artifact.d.ts.map +0 -1
- package/dest/key-registry/artifact.js +0 -4
- package/dest/key-registry/index.d.ts +0 -7
- package/dest/key-registry/index.d.ts.map +0 -1
- package/dest/key-registry/index.js +0 -16
- package/src/key-registry/artifact.ts +0 -6
- package/src/key-registry/index.ts +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"transpiled":true,"noir_version":"0.33.0+cb20e078dd909656110d133339b2b425e6c3ebb0","name":"MultiCallEntrypoint","functions":[{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/9VW207DMAx1Wbum6yom+IHyhuCBVtqkPQ5x/QB+YBqV2MuG1sL3M3c2O8sKLzQSjRQ5ceLjE8e5eLQrZls9aQci+3RcdM5MZPa3kreIlbnk6XWE50lHePY6wtNvkafXwJOlL20+d3zmQtqdx6NBNOaN7sE4/QLkWU653ED7UuTL27JMF+tVtZkvqvR1XZTpal2lH2WRvm+Wn/Oq4H5RfgPdioyEEJKetRO1PLIW3hr2dLyIhLsD3hPGHbjBznhj78w+9gS+OCmeZEylJzWRcQL7hPaJcw86TbgH0OmL8Ai6kA59MR/jZr+mDvcrY9zYDXaewP4Q+MCCB1l5DMhZDtUvWmz5V196lut8kc00oPPNIc86X6x85G4K4wbWpOPX1tqQS8/iwriBi1hIXvVdYGfZGGPoN8QwaIhhvyGG59v6bOEw79A44V2/VgY4+uBLeZ7AHAM8Auhf0V4faRIInsZFcU957ZpH5mc737IbwZw+2IWWXQi867nbeiHtWOKJ90uLv77cfg/a/FHiWfYFW33pegKYo1+mMzouGAOiTtyvky7fr0OL0wh0mItDC2toYf0Hu4QOY6s6vctjkF9e6Ei/eg4AAA==","debug_symbols":"lZBBCsMgEEXvMmsXbbURvEopQRMNA6JBTaGId++kySJbN8O8mf82v8JszbaMGFzMoF4VfJx0wRiIamNgEnqPy3g9w20fgv/zedVhx1x0KqD4IBnYMNMmH+Q79BaU4Pf2ZiBEv/LsV4Z+RXYqjfCjE2rj7dmU28J0Ka581+ND4R8=","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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8SptvEobr9LGq7TxKm28Shuv0sartPEqbbxKG6/Sxqu08SptvEobr9LGq7TxKm28Shuv0sartPEqbbxKG6/Sxqu08SptvEobr9LGq7TxKm28Shuv0sartPEqbbxKG6/Sxqu08SptvEobr9LGq7TxKm28Shuv0sartPEqbbxKG6/Sxqu08SptvEobr9LGq7TxKm28Shuv0sartPEqbbxKG6/Sxqu08SptvEobr9LGq7TxKm28Shuv0sartPEqbbxKG6/Sxqu08SptvEobr9LGq7TxKm28Shuv0sartPEqbby2Nl5bG6+tjdfWxms/oQekHlB6wNYDjh6gk6yN19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18draeG1tvLY2Xlsbr62N19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18draeG1tvLY2Xlsbr62N19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18draeG1tvLY2Xlsbr62N19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxuto43W08TraeB1tvM4TekDqAaUHbD3g6AE6ydp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xkcbr6ON19HG62jjdbTxOtp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xkcbr6ON19HG62jjdbTxOtp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xkcbr6ON19HG62jjdbTxOtp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvFobr9bGq7Xxam28+gk9IPWA0gO2HnD0AJ1kbbxaG6/Wxqu18WptvFobr9bGq7Xxam28Whuv1sartfFqbbxaG6/Wxqu18WptvFobr9bGq7Xxam28Whuv1sartfFqbbxaG6/Wxqu18WptvFob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RuXVvVF5dW9UXt0blVf3RuXVvVF5dW9UXt0bVVf3RtXVvVF1dW9UXd0bVc/Nt7au7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6qu7o2qq3uj6ureqLq6N6o+oDdq9fy8T6zz9vYjz/r81KOe7L/a/i8bzZfbaP3cjerp/WWjMeM7G8XLbZQvt1G93Eb7J2/U+/Ojx36+evL/3SfFqs+fFCfXN58U5+rt++btP6Av6VduP67efr749m/e915Xbx9Xb59Xb19Xb//qt/bt7V/91r69/avf2re238+r39q3t3/1W/v29jff2v3cfGv3c/Ot3c/Nt3Y/N9/a/dx8a/dz863dz9W3dlx9a8fVt3ZcfWvH1bf2A/qSfuX2V9/acfWtHVff2nH1rR1X39p59a2dV9/aefWtnVff2g/oS/qV2199a+fVt3ZefWvn1bd2Xn1r19W3dl19a9fVt3ZdfWs/oC/pV25/9a1dV9/adfWtXVff2nX1rY2rb21cfWvj6lsbV9/aD+hL+pXbX31r4+pbG1ff2rj61sbVtzavvrV59a3Nq29tXn1rP6Av6Vduf/WtzatvbV59a/PqW5tX39q6+tbW1be2rr61dfWt/YC+pF+5/dW3tq6+tXX1ra2rb21dfWv31bd2X31r99W3dl99az+gL+lXbn/1rd1X39p99a3dV9/affWtPVff2nP1rT1X39pz9a396Z1NH7v91bf2XH1rX7436u3tr761L98b9eb2L98b9fb2V9/aq3uj9tW9Ufvq3qh9dW/Uvro3al/dG7Wv7o3aV/dGnat7o87VvVHn6t6oc3Vv1HluvrXn6t6oc3Vv1Lm6N+pc3Rt1ru6NOlf3Rp2re6PO1b1R5+reqHN1b9S5ujfqXN0bda7ujTpX90adq3ujztW9Uefq3qhzdW/Uubo36lzdG3Wu7o06V/dGnat7o87VvVHn6t6os37uvyU3uk583r73M97Zfs4+X559PV/t/+fH/+UVjOtfwbz+FazrX0Fc/wry+ldQ17+Cff0rONe/gr79FcT1N/nHO6bGV1/ldPfXr+AvEyafsPiE4BPyxyes339vfP1PFX6eUHzC5hMOn9B6wo/35Lw7YfAJk09YfELwCak/NbL4hM0nHD6h9YR6+AR+p4vf6Z/dPZH15Wur8ed/2+Xbr35+dp/Ev2KjfLmN6uU22i+3Ef8MK/4Ztvln2OafYZt/hm3+vcb3f+7+82/A551nXz3yt4euzvHtb9Xv/2D8xz192aff9umPffqmT//9n57+uKcf9umnffplnz7058Lh30387J+E/fOfYX7ep578zp9O/eyfbv1XbHRebqN+tY1+9k+W/is2Gi+30Xy5jdbLbRQvt1G+3Eb8T4Ca/wlQ8++eWn/31M/DJww+YfIJi08IPiH5hOITNp9w+ASe6cEzPXimB8/04JkePNODZ3rwTA+e6cEzPXimJ8/05JmePNOTZ3ryTE+e6ckzPXmmJ8/05JlePNOLZ3rxTC+e6cUzvXimF8/04plePNOLZzp4prl8bC4fm8vH5vKxg2c6eKaDZzp4poNnOnmmk2c6eaaTZzp5prl8bC4fm8vH5vKxuXxsLh+by8fm8rGLZ7p4potnunimi2eaS8DmErC5BGwuAZtLwOYSsDfP9OaZ3jzTm2d680xvnunDM314pg/P9OGZ5k6wuRPswzN9eKYPz/ThmW6e6eaZbp7p5plununmmeaOrLkja+7IWjuyerQj+zRh8AmTT1h8QvAJyScUn7D5hMMn8EwPnunBMz14pgfP9OCZHjzTg2d68EwPnunBMz15pifP9OSZnjzTk2d68kxPnunJMz15pifP9OKZXjzTi2d68UwvnunFM714phfP9OKZXjzTwTMdPNPBMx0808EzHTzTwTMdPNPBMx0808kznTzTyTOdPNPJM50808kznTzTyTOdPNPFM10808UzXTzTxTNdPNPFM10808UzXTzTm2d680xvnunNM715pjfP9OaZ3jzTm2d680wfnunDM314pg/P9OGZPjzTh2f68EwfnunDM908080z3TzTzTPdPNPNM908080z3TzT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","brillig_names":["enqueue_public_function_call_internal","call_private_function_internal","directive_invert","directive_integer_quotient"]}],"outputs":{"globals":{},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}}],"kind":"struct","path":"MultiCallEntrypoint::entrypoint_parameters"}}],"kind":"struct","path":"MultiCallEntrypoint::entrypoint_abi"}]}},"file_map":{"115":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"143":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"156":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"269":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"292":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"325":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"431":{"path":"/usr/src/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr","source":"// An entrypoint contract that allows everything to go through. Only used for testing\n// Pair this with SignerlessWallet to perform multiple actions before any account contracts are deployed (and without authentication)\ncontract MultiCallEntrypoint {\n use dep::authwit::entrypoint::app::AppPayload;\n\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload) {\n app_payload.execute_calls(&mut context);\n }\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiller can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"}}}
|
|
1
|
+
{"transpiled":true,"noir_version":"0.34.0+02fea6abe8637b9fb8f9535d1709b367d5e1da5c","name":"MultiCallEntrypoint","functions":[{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["private"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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m2etHqtnrayetbJ61p59I9ON7lfP2rNvZLrR/epZe/aNTDe6Xz1rZfWsldWzVlfPWl09a3X1rNXVs/bJ+6Ae3f3qWXv6vVHXu189a0+/N+p696tn7en3Rl3vfvWsXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oXb03SlfvjdLVe6N09d4oPfveqNG5dO/fdn/yWXuj+/tnrWW89uMi17uXKHs9WmK++gbyT91/7mhO1pE9YL/T93U0468d5aHyRkdyuo70dB3Z6Try53aUnXPpaI7j5lXaLleK/ioH9aX7WN19ru6+Vnffq7ufk3d/7d7K5FjdvazuXld3b6u7P/usvd792Wft9e7PPmuvd3/2WXu9+7PP2uvdr561unrW6upZq6tnra6etQ/Yl/SR3a+etbp61urqWaurZ62unrW2etba6llrq2etrZ61D9iX9JHdr561tnrW2upZa6tnra2etb561vrqWeurZ62vnrUP2Jf0kd2vnrW+etb66lnrq2etr561sXrWxupZG6tnbayetQ/Yl/SR3a+etbF61sbqWRurZ22snrW5etbm6lmbq2dtrp61D9iX9JHdr561uXrW5upZm6tnba6etbV61tbqWVurZ22tnrUP2Jf0kd2vnrW1etbW6llbq2dtrZ61vXrW9upZ26tnba+etQ/Yl/SR3a+etb161vbqWdurZ22vnrWzetbO6lk7q2ftrJ61D9iX9JHdr561s3rWzupZO6tn7WyetX5snrV+bJ61fmyetX5snrV+bJ61fvq9Ude73zxr/fR7o653v3nW+uq9Ub56b5Sv3hvlq/dG+eq9Ub56b5Sv3hvlq/dG+eq9Ub56b5Sv3hvlq/dG+eq9Ub56b5SffW/U1d3jfva9UTe6f+7OfZloee1+YvpG9/ryhFyeG3X3Xx3/+Qxy/RnU+jPo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","brillig_names":["enqueue_public_function_call_internal","call_private_function_internal","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{"3715688037512703171":{"error_kind":"fmtstring","item_types":[],"length":16}},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/9VYTXPaMBCVg41lUwe3gEnSQ3ttT3IwNNyY6ef/8KTX/IT89bBGOzw2xBkUaSZoxiNb0r59eitpbUdqV/T2iux9Yuuhel54zMbW5m2l9ohlQvKMzoTnxZnwHJwJz9gjz+gIT6pje0/7jvZcqnb78VknGlOgB9Cv+oCk10dbZxYInW08KZcJv96w75o2s9wD8F4Sbh4G21BAfuq99gp8UTD/2j6uI3sVtl+BfaH2Af8FbbxQfkMbn+R/oC1Vh76Ijw4Tr7uA8TIFaKjABxbcJLzecxUszl22GAn/ufDfxdQKrqEttg8jaEvEmqHHL9CvYU7c/13MDbkMBBfCTUJoYWM/DIFtTIMaxkc0TI5oODyi4WR7/RM4xDvVQXh3mUADxxh8Mc8LGKOBRwLP39S+PYOTPgZdGHdMc+d1pF+2i4VdCWOGYJcKuxR4d2O311d7P7J64hng701ltZZntj/sH4tM7feiZ973hP0hCHbTYReA7XP9EvZlGE1WhD0Og93l9jII9m2nyUfA9vjFUFMcP6nDQv4mQeJb1335k33mwClE/pwI/+wL8+dUcCqhDffVVGBNBRZpOYPxHtfcf+Q0O4ET2pWOdiNHu1N4knYVjPd49jbIqXKcy9jRLne0OyVWpN0cxntcdwfazR3n4qrdpaNd5mjnus5d5zcHvngG+/xLhJxii82+OM8kMObB1nQuXqnDQjyvgafHXHHblyuugRPfM7dccErewGmxWJt2tV6umrq9b9tFBNjMiZ/xf8eNGCNzDOn2OYxuBr9dbkAnfv9G7fibgLngt0sG9r459unIPkvBlXm8pj9pfQX3PJcC7DZe5rH7R4DvE+xrFkQ3s+zbE+wzV6He33bvTzPhfyL0J00qwamENoxlJbAqgfUe7PAfGc+V8sIT7yz2rOIYAAA=","debug_symbols":"tdnBaoNAEIDhd9mzBzW7Mzu+SilBEw0LokFNoYjvXm1DCeT8X8TR2f/2nXZ117Z53M5p6MbZVR+r68dLvaRx2Kd1y1wzpb5Pt/PrZ5cfD1/+7s/3ejjGeamnxVVl8Jlrh+vxZvv5LvWtq7zkW/a2q+VzVfV/cz/0mTl/AtsebAewLWBbwXYE28a1Qw62C7ANugygywC6DKDLALoMoMsAugygSwFdCuhSQJcCuhTQpYAuBXQpoEsBXQroUkGXCrpU0KWCLhV0qaBLBV0q6FJBlwq6jKDLCLqMoMsIuoygywi6jKDLCLqMoMsIujTQpYEuDXRpoEsDXRro0kCXBro00KWBLos8J+MFGS/J+ImMezIeyLiQcSXjkYyTQgtM6LZPX/WU6qZvnzcg3WO4vFyILN/3vz/78g8=","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}}],"kind":"struct","path":"MultiCallEntrypoint::entrypoint_parameters"}}],"kind":"struct","path":"MultiCallEntrypoint::entrypoint_abi"}]}},"file_map":{"113":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.public_teardown_call_request = PublicCallRequest {\n contract_address,\n call_context,\n args_hash,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"141":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub struct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"278":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"301":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"337":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\npub struct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"460":{"path":"/usr/src/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr","source":"// An entrypoint contract that allows everything to go through. Only used for testing\n// Pair this with SignerlessWallet to perform multiple actions before any account contracts are deployed (and without authentication)\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract MultiCallEntrypoint {\n use dep::authwit::entrypoint::app::AppPayload;\n use dep::aztec::macros::functions::private;\n\n #[private]\n fn entrypoint(app_payload: AppPayload) {\n app_payload.execute_calls(&mut context);\n }\n}\n"},"59":{"path":"std/panic.nr","source":"pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"76":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"}}}
|