@aztec/protocol-contracts 0.55.1 → 0.57.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 +7 -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.34.0+e0185e75e65df08b5334856f8bf63fa3aed7049a","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/9VWzU7DMAx2Wdqm6yomeAB6BA7QSUPacRK/D8ALTKMSu2xoLTw/S2dr39KyC4m0RaqcOLH95bOTNKBt05sv4H7IMqJ2kzVTlsX/2sihr8InzuBEcJ6dCM7eieBUDnEGHTiNVNw3586cuZi257E1icYm0T2YpwOOAiuoaXfQv2b5/rmo8vlqWa9n8zr/WJVVvlzV+XdV5l/rxc+sLs24rFosJwwIQU/dsDZKrI078z0ZzxPG7gH3g/Hb9+O7MIl91DvuCWKZonjlOZEBfxnPE9hntCucJ9BJwT2DTl6EF9DFtB/L4NF+8jXxmK8iAw4JYmDDwyb13idveW5endSK37fiNzllwjXoFA9S0IVWzZjhFcxr2JPM31p7Qyw9C4vxG/rggnMf+fBdFGPkUHVwGHZwGHVweLn53iw/BnesveBuXhQNGBXEEpxnsEYDjhDGN7TTJ1IE7E94Eb/nZu9SR/pvO2XZDWFNBHaxZRcD7mbt5su5nzKfeAc4/DMb2Xe2y78+PMuKfUss2U8Ia+5ZXlC7IQdEfu/ABDC5fiMP3a8S8xju14GFaQg6rMWB5Wtg+ToGu4z2uRWd3OUpyF9gHhYxHg4AAA==","debug_symbols":"lZDBCsMgDIbfJWcPpbUt+CpjFG21BCQWtYMhvvvSbYdevYR8yf9d/gKbNee+ILmQQD0K+LDqjIGYShVgInqP+3I/Q3cN2X/z6dB0Yco6ZlDDNAuwtPE29+w79BaUHLv6FCCHdkW2K2O7MjUqlfGlI2rj7b8pd9J6Ky6/j9+Hwx8=","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":"7d3RjhxIkh3Yf+lnPYS7m5m76VcWi8VIGgkNDGYEzWiBhaB/X9Z0Jau6mcqcmsxDhgN82VVLwTCLLN6wSPLk5f/603/5+//0P//b//Pnf/yv//TPf/qP/9f/+tM//NN//rt/+fM//eOX//W//jTrX//v/vm//90//vI///lf/u5//Muf/uPjP/zp7//xv3z5///v//Cn//rnf/j7P/3HyC//528eN3vMXx86e8XXR4+IVx69stevj15V9c6jx2Ovl4d/+T/Hb4+f+7Vdxvr67CPG/Pro9eqTj8fLaxwj+vcP/r//w5/m/vlF+faLcn5+Ub79ovTPL8o3X5T1+PlF+faLMn5+Ub79osyfX5Rvvyjr5xfl2y9K/PyifPtFyZ9flG+/KD8/0b7yRfn5ifaVL8rPT7SvfFF+fqL99osSPz/RvvJF+fmJ9pUvys9PtK98UX5+on3lixI/vyjfflF+fqJ95Yvy8xPtK1+Un59oX/mi/PxE+8oX5ecn2m+/KPnzE+0rX5Sfn2hf+aL8/ET7yhflmT/R7sdvX5QT731RTu6Xh59dH/qixM8vyrdflA99ol098uVldo7fXuaof33ykk/+6iestc+vvyYe650Bo/fLf9LR/dtX5pev6LcPzv31a579u3TOv2xznmqbfqZt6vHRbeajXn7XzPHId7bpOvF19/346985rzz57PP12dfj0X/7O63G5fvPy/dfl+8f33n/83h545yPx8hv9skP77P66zGMdd57dzjr5alHPfLbr0892T77++5Tj/769lljxjf7nCfbp59rn/14sn0uvxf78nuxL78XOy7fPy/fvy7ff1++/7l8/757/3P592vn8vt75se/e1+/bZTr9/v/8vwLP3/g5//e37/U198NX/6kY9Q3/73kH3OdLZ/8yCfv5/q2rh9Pts94sn3w207jt53Gbzst/6i85XtIy/eQvvzTWl/+ae3LX+/c/gIu/7w2Hpf/gcl4XP4nJuOB3/vHo/SArQec5/rUPB6NX/F4sg98Ywx4h8eY9NnXs30x49kWSv37Wb9FjKMHfO/PWnv1b3emv/mb0DEf+BVPGvlJIz8/4Ru2z1MkX/6i7bnWyeda5/K/tBjz8r+1GPPyb4THvP074fW9vxN+B9qM9X2/s52PzN8WypPvfEXrrJeH18nf3lP2X5afNy+/bl4+bl4+b16+nnz5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Nl6ljVdp41XaeJU2XqWNV2njVdp4lTZepY1XaeNV2niVNl6ljVdp41XaeJU2XqWNV2njVdp4lTZepY1XaeNV2niVNl6ljVdp41XaeJU2XqWNV2njVdp4lTZepY1XaeNV2niVNl6ljVdp41XaeJU2XqWNV2njVdp4lTZepY1XaeNV2niVNl6ljVdp41XaeJU2XqWNV2njVdp4lTZepY1XaeNV2niVNl6ljdfWxmtr47W18draeO1H6AGpB5QesPWAowfoJGvjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18draeG1tvLY2Xlsbr62N19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18draeG1tvLY2Xlsbr62N19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18draeG1tvLY2Xlsbr62N19bGa2vjtbXx2tp4bW28tjZeWxuvrY3X1sZra+O1tfHa2nhtbby2Nl5bG6+tjdfWxmtr47W18TraeB1tvI42Xkcbr/MIPSD1gNIDth5w9ACdZG28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xkcbr6ON19HG62jjdbTxOtp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xkcbr6ON19HG62jjdbTxOtp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xkcbr6ON19HG62jjdbTxOtp4HW28jjZeRxuvo43X0cbraON1tPE62ngdbbyONl5HG6+jjdfRxuto43W08TraeB1tvI42Xq2NV2vj1dp4tTZe/Qg9IPWA0gO2HnD0AJ1kbbxaG6/Wxqu18WptvFobr9bGq7Xxam28Whuv1sartfFqbbxaG6/Wxqu18WptvFobr9bGq7Xxam28Whuv1sartfFqbbxaG6/Wxqu18WptvFobr9bGq7Xxam28Whuv1sartfFqbbxaG6/Wxqu18WptvFobr9bGq7Xxam28Whuv1sartfFqbbxa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7XncfGvP4+Zbex4339rzuPnWnsfNt/Y8br6153HzrT2Pq2/tuPrWjqtv7bj61o6rb+3Hf/L0h25/9a0dV9/acfWtHVff2nH1rZ1X39p59a2dV9/aefWt/fhPhP/Q7a++tfPqWzuvvrXz6ls7r7616+pbu66+tevqW7uuvrUfb2r4odtffWvX1bd2XX1r19W3dl19a+PqWxtX39q4+tbG1bf24w0qP3T7q29tXH1r4+pbG1ff2rj61ubVtzavvrV59a3Nq2/tx5uNfuj2V9/aZ29kemf7q2/tszcyvbP91bf22RuZ3tn+6ltbV9/auvrWfrzt6Yduf/WtratvbV19a+vqW1tX39qn7416e/urb+3T90a9vf3Vt/bpe6Pe3v7qW3t1b9S5ujfqXN0bda7ujTpX90adq3ujztW9Uefq3qhzdW/Uubo36lzdG3Wu7o06V/dGnat7o87VvVHn6t6oc3Vv1Lm6N+pc3Rt1ru6NOlf3Rp2re6PO1b1R5+reqL66N6qv7o3qq3uj+ureqH7cfGv76t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujeqre6P66t6ovro3qq/ujepn743qmV+3X99u/+S39p3tP35rV8+XfeL3A17bZuRZL0896pH9V9v/ZaN8uo3q+25Uj95fNxozXtloP91G5+k26ufaaD4+oS/pj2305U8MXzbaj989+f/pXXp9fac4Of/6neLL9uPq7efV26+rt4+rt88n3/6Nz1Zftq+rt99Xb3+u3r5v3n48+619e/tnv7Vvb//st/bt7Z/91r69/bPf2re3v/rWjqtv7bj6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a+vqW1tX39qP//TcD93+6ltbV9/auvrW1tW3tq6+tfvqW7uvvrX76lu7r761H/+p1h+6/dW3dl99a/fVt3ZffWv31bf2XH1rz9W39lx9a8/Vt/bjP23+Q7e/+taeq2/tufrWnqtv7bn61vbVt7avvrV99a3tq2/tx1sgfuj2V9/avvrW9tW3tq++tX3zrY3Hzbc2Hjff2njcfGvjcfOtjcfNtzYeN9/aeNx8a+Nx862Nx823Nh5X39px9a0dV9/acfWtHVff2o+3Jv3Q7a++tc/eyPTO9lff2mdvZHpn+6tv7bM3Mr2z/dW3dl59a+fVt/Y7d0N99vZX39p59a2dV9/aefWtffreqDe3f/reqLe3v/rWPn1v1NvbX31rr+6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o+Lq3qi4ujcqru6Niqt7o/Lq3qi8ujcqr+6Nyqt7o/Jx863Nq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6Nyqv7o3Kq3uj8ureqLy6N6qu7o2qq3uj6ureqLq6N6oeN9/auro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6ouro3qq7ujaqre6Pq6t6o+oTeqNXzZZ9Y5+3tR5718tSjHtl/tf1fNoqn2yi/70b16P11ozHjlY3q6TbaT7fRebqN+jtv1Pvl0WM/fvfk/6d3ivXyxlIn59++U3xCX9KP3H5cvf28evt19fbx5Nu/ed9PXr19Xb39vnr7c/X2z35r39y+n/3Wvr39s9/at7d/9lv79vbPfmvf3v7qW9tX39q++tb21be2r761ffOt3Y+bb+1+3Hxr9+PmW7sfN9/a/bj51u7Hzbd2P26+tftx863dj5tv7X5cfWvH1bd2XH1rx9W3dlx9az+hL+lHbn/1rR1X39px9a0dV9/acfWtnVff2nn1rZ1X39p59a39hL6kH7n91bd2Xn1r59W3dl59a+fVt3ZdfWvX1bd2XX1r19W39hP6kn7k9lff2nX1rV1X39p19a1dV9/auPrWxtW3Nq6+tXH1rf2EvqQfuf3VtzauvrVx9a2Nq29tXH1r8+pbm1ff2rz61ubVt/YT+pJ+5PZX39q8+tbm1bc2r761efWtratvbV19a+vqW1tX39pP6Ev6kdtffWvr6ltbV9/auvrW1tW3dl99a/fVt3ZffWv31bf2e3crffL2V9/affWt3Vff2n31rX363qg3t3/63qi3t7/61j59b9Tb2199a6/ujdpX90btq3uj9tW9Ufvq3qh9dW/Uvro3al/dG7Wv7o3aV/dG7at7o/bVvVH76t6ofXVv1L66N2pf3Rt1ru6NOlf3Rp2re6PO1b1R53HzrT1X90adq3ujztW9Uefq3qhzdW/Uubo36lzdG3Wu7o06V/dGnat7o87VvVHn6t6oc3Vv1Lm6N+pc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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":{"116":{"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"},"144":{"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\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 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]\nfn 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]\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"},"157":{"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"},"162":{"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"},"270":{"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"},"293":{"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"},"326":{"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"},"450":{"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 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, 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.35.0+b848cc128d2dc2b461581f21a35509a1af9065a7-x8664","name":"MultiCallEntrypoint","functions":[{"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":"tdnBaoNAEIDhd9mzBzW7OzO+SilBEw0LokFNoYjvXm1DCeT8X8TR2f/2nXZ117Z53M5p6MbZVR+r68dLvaRx2Kd1y1wzpb5Pt/PrZ5cfD1/+7s/3ejjGeamnxVVl8Jlrh+vxZvv5LvWtq3zQLXvblfK5KvK/uR/6zJw/gW0PtgPYjmBbwLaCbePaIQfbBdgGXQbQZQBdBtBlAF0G0GUAXQbQZQRdRtBlBF1G0GUEXUbQZQRdRtBlBF1G0KWALgV0KaBLAV0K6FJAlwK6FNClgC4FdKmgSwVdKuhSQZcKulTQpYIuFXSpoEsFXRro0kCXBro00KWBLg10aaBLA10a6NJAl0Wek/GCjJdk/ETGPRkPZDyScSHjSsZJoQUmdNunr3pKddO3zxuQ7jFcXi5Elu/73599+Qc=","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"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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DSubG1Y2N6xsbljZ3LC6uWF1c8Pq5oY9+02n68tvbtiz33S6vvzmhj37Tafry29u2M03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSfdfNNJN9900s03nXTzTSc9+U2n0effiTz+evlzN+yN5T/esJbxtI6LXF9eIufpd9RLjMzL5b8v5GdbKB680ET9utC3z+nPC+XZFqqzLdRnW2geu1C26dNC2Wm3Xpyv/c53u8Mto09cXjYvr5uXt83L+7mXv/Zuyo7YvHxuXr42L9+blz95w15dXk7esNeXP3nDXl/+5A17ffmTN+z15Tc3rGxuWNncsLK5YWVzw8rmhtXNDaubG1Y3N6xubtg73DL6xOU3N6xubljd3LC6uWF1c8Pa5oa1zQ1rmxvWNjfsHW4ZfeLymxvWNjesbW5Y29ywtrlhfXPD+uaG9c0N65sb9g63jD5x+c0N65sb1jc3rG9uWN/csLG5YWNzw8bmho3NDXuHW0afuPzmho3NDRubGzY2N2xsbtjc3LC5uWFzc8Pm5oa9wy2jT1x+c8Pm5obNzQ2bmxs2NzdsbW7Y2tywtblha3PD3uGW0Scuv7lha3PD1uaGrc0NW5sbtjc3bG9u2N7csL25Ye9wy+gTl9/csL25YXtzw/bmhu3NDTubG3Y2N+xsbtjZ3LCPvnt03+U3N+xsbtjZ3LCzuWHPftPp2vJ+9ptO15df3LB+9ptO15df3LB+LG5Y33zTyTffdPLNN518800n33zTyTffdPLNN518800n33zTyTffdPLNN518800n33zTyU9+0+nq9W8/+U2n68vrYy/ey3jL0/Lj09eXV4t+Oix+eZKkXj78+/6yfH9dvr8t39+X7x/L98/l+9fy/Xv5/rN7f1vevx8/+nRZI543Kn25//cJik8wfILjE+LjE47n378xmq8nJD6h8AmNTxh6wscv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btjZ3LCzuWFnc8Oe/FjSjeU3N+zJjyXdWH5zw578WNKN5Rc3rB6LG1aPxQ2rx+KG1WNxw+qxuGH1WNyweixuWD0WN6ye/abT9eU3N+zZbzpdX35zw579ptP15Tc37OabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNuvumkm2866eabTrr5ppNtvulkm2862eabTrb5ppMdixvWNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90ss03nWzzTSfbfNPJNt90sjvcdLo8AU/ruMj15SVy+sejJUbm5fLfF6qzLdQPXmiifl3o2+f054XmZAvd4UbSnReSsy2kj10o2/Rpoey0Wy8RNk8vER3580vEHW4ZfeLyvnn52Lx8bl6+zr381U6v3rz8LF6+j83Ly+blT96w15c/ecNeX/7kDXt9+ZM37PXlT96w15ff3LC9uWF7c8PO5oadzQ07mxt2NjfsHW4ZfeLymxt2NjfsbG7Y2dyws7hh/VjcsH4sblg/FjesH4sb1o/FDevH4ob1Y3HD+rG4Yf1Y3LB+bG5Y2dywsrlhZXPDyuaGvcMto09cfnPD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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":{"146":{"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::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\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<let N: u32>(contract_address: AztecAddress, log: [u8; N]) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\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] = log[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 serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_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 serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_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 serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_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 serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"157":{"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) -> Field {}\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) -> Field {\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) -> Field {}\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) -> Field {\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\npub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n unsafe {\n notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter)\n };\n}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\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"},"264":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n 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"},"308":{"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"},"319":{"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"},"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 pub(crate) 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"},"458":{"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"},"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;\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"},"84":{"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, PUBLIC_DISPATCH_SELECTOR\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 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 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 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 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 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 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 // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = 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 // Public calls are rerouted through the dispatch function.\n let function_selector = comptime {\n FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR)\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 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 // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = 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 function_selector = comptime {\n FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR)\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"}}}
|