@aztec/protocol-contracts 0.47.1 → 0.48.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.
@@ -1 +1 @@
1
- {"transpiled":true,"noir_version":"0.32.0+92ff2fa2e944722e5c3fa43fb3363f093b8f1d12","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/+2b0W7aMBSGHRq6tGlTSAiBQgt0baXdpazt6N1eZnvuXU/aOwwHH/HXdZDRjmcsEQnFie3zf/6PbdIqRGJzJOtPpMpddT4VHw9q812d6387nhhj1S45o0A4O4FwngTCGTNyRgZOeY5VWa47ueY+ic16/FCJnWWiT6Be7AqkqyaqkGh1bKNd1W+nIIDwQsHHqo7Okfqkqh4BUzXYph3cowF34B5pncA92slIK1HmOBj3S7LF5o29no1yLGcqFvGnUMa6KVgYOxxr181Yn53laO2jwxw1q5zy0FWxE7imnJyDPuO3yxPqU+xzbX7EUJ5AW2pHbTrAK49LsV1L5zv6xVq/DNqcQr9E60fXlHfpV1+V5bmbbNtSfEc+1jJ26ib2uxzFmocpjC0Dfb45ulxJjQvx/oi0a/xiyYDp0gnTZk26Ge8ml1cQm+8p6eVZxutpvl1ovmXQ5gq87DnyMgJtYqLrXos+nyevKxmvb+FJ38DU9+BJv0Wf0ZM3GS+38CQ3MOUePMlb9Pk8+fZVxissPCkMTIUHT4oWfT5Pls3zw8DCk4GBaeDBk0GLPuPaaeZJaeFJaWAqPXhStugzevJTxhtaeDI0MA09eDJs0Wf05IeMV1l4UhmYKg+eVC36jHts83wysvBkZGAaefBk1KLP6MlSxhtbeDI2MI09eDJu0WdcO43+tYUn1wamaw+eoOY+3INAuatAuYsD4db1GddOs8dOLDyZGJgmHjxBzX24ywPh1vUZc/ki400tPJkamKYePEHNfbjzQLmLQLmHgXKXgXJXgXIfyvzW9Rmfv5s99sbCkxsD040HT1BzH+48UO5JoNzFgXDr+oxrp/n/4K2FJ7cGplsPnqDmPtyjQLn7B8Kt6zPOwVcZb2bhyczANPPgCWruwz0OlLsKlHsSKHcRKPcwUO4yUO7juvy/3PmBcMt79L7PH+dMy7dUYyINoXEKjTOFcgacc4jRZeOsa8zVHPQWTnzZ5EqfP3S9cK6/XMnYnx2NTca+dxO7+ZvjQcWidxrvDb49gn7EnLcHLTZpPUAuqfwb2lI7akP7BfHL99nuVPlxR7+Z1i+DNnfQ717rR9eUd+nfL1V2Odds5npPbNf5F2BytFc+4/vLAjSExknHDJjmbpieHI63xncaheBdjwvNszPNswza4F7uc289ch+5bbjxOeQM7lH9HO51tPHgb0UWEOMv7Ab1lOo2AAA=","debug_symbols":"ndpRattAGIXRveg5FN/fmhkpWymlOIlTDMEJsVMoJnuv3dIF9LxpJN237+kwl+lp//Dx4/vh+Px6mu6/XqaX18fd+fB6vJ4u0+ZLLX/ent52x9uL03n3fp7ut33cTfvj0/Vp1Ofd9Hx42U/386Z9fru7jVYYbTcyioxKRlsZzTJqMuoyGjKSIrZSxCxFzFLELEXMUsQsRcxSxCxFzFLELEXMUkSTIpoU0aSIJkU0KaJJEU2KaFJEkyKaFNGliC5FdCmiSxFdiuhSRJciuhTRpYguRQwpYkgRQ4oYUsSQIoYUMaSIIUUMKWJIEYsUsUgRixSxSBGLFLFIEYsUsUgRixSxSBGrFLFKEasUsUoRqxSxShGrFLFKEasUsUoR2WxoFVoVrba0mmnVaNVpNWi10IraCLURaiPURqiNUBuhNkJthNoItRFqo6iNojaK2ihqo6iNojaK2ihqg0AzJJoh0gyZZgg1Q6oZYs2Qa4ZgMySbIdoM2WYIN0O6GeLNkG+GgDMknCHiDBlnCDlDyhlizpBzhqAzJJ0h6gxZZwg7Q9oZ4s6Qd4bAMySeIfIMmWcIPUPqGWLPkHuG4DMknyH6DNlnCD9D+hniz5B/hgA0JKAhAg0ZaAhBQwoaYtCQg4YgNCShIQoNWWgIQ0MaGuLQkIeGQDQkoiESDZloCEVDKhpi0ZCLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRi5Zd9CQXLXLRIhctctEiFy1y0SIXrf920evp5+79sHt42d/u9t4+fhwf/131vR7Pv97+frn++xs="},{"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":"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":"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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"}],"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":{"127":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n traits::Hash, hash::{pedersen_hash, compute_siloed_nullifier, sha256_to_field}\n};\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n pedersen_hash([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 = (n as Field).to_be_bytes(4);\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 = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\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 pedersen_hash(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x11e40f2a780822f7971803048c9a2100579de352e7dadd99981760964da65b57);\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"},"141":{"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"},"146":{"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"},"247":{"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, messaging::l2_to_l1_message::ScopedL2ToL1Message,\n recursion::verification_key::VerificationKey, traits::is_empty,\n utils::field::field_from_bytes_32_trunc\n};\nuse std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = 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 pedersen_hash(\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, inner_note_hash: Field) -> Field {\n let inputs = [nonce, inner_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n pedersen_hash(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\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 pedersen_hash(\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 compute_siloed_encrypted_log_hash(address: AztecAddress, randomness: Field, log_hash: Field) -> Field {\n // TODO: Using 0 GENERATOR_INDEX here as interim before we move to posiedon\n // NB: A unique separator will be needed for masked_contract_address\n let mut masked_contract_address = pedersen_hash([address.to_field(), randomness], 0);\n if randomness == 0 {\n // In some cases, we actually want to reveal the contract address we are siloing with:\n // e.g. 'handshaking' contract w/ known address\n // An app providing randomness = 0 signals to not mask the address.\n masked_contract_address = address.to_field();\n }\n accumulate_sha256([masked_contract_address, log_hash])\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedEncryptedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_encrypted_log_hash(\n log_hash.contract_address,\n log_hash.log_hash.randomness,\n log_hash.log_hash.value\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 pedersen_hash([left, right], 0)\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 = inputs[i].to_be_bytes(32);\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 = input[offset].to_be_bytes(32);\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 = logs[offset].value.to_be_bytes(32);\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 = logs[offset].value.to_be_bytes(32);\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#[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 = 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"},"27":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::sha256::{digest, sha256_var};\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\n\n#[foreign(sha256)]\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constraint the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::from_slice(domain_generators.as_slice());\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n crate::assert_constant(starting_index);\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = crate::field::bn254::decompose_hint(scalar);\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes(32).as_array();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\ntrait Hash{\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"270":{"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"},"297":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, 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 {\n inner : 0\n }\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([pub_keys_hash.to_field(), partial_address.to_field(), GENERATOR_INDEX__CONTRACT_ADDRESS_V1])\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 = 0x1b6ead051e7b42665064ca6cf1ec77da0a36d86e00d1ff6e44077966c0c3a9fa;\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"},"405":{"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::std;\n\n use dep::aztec::prelude::AztecAddress;\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"},"5":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\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 pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Get an element from the vector at the given index.\n /// Panics if the given index points beyond the end of the vector (`self.len()`).\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 /// Get an element from the vector at the given index.\n /// Responds with undefined data for `index` where `self.len < index < self.max_len()`.\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Write an element to the vector at the given index.\n /// Panics if the given index points beyond the end of the vector (`self.len()`).\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 /// Write an element to the vector at the given index.\n /// Does not check whether the passed `index` is a valid index within the vector.\n ///\n /// Silently writes past the end of the vector for `index` where `self.len < index < self.max_len()`\n /// Panics if the given index points beyond the maximum length of the vector (`self.max_len()`).\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\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 pub fn len(self) -> u32 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\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 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 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 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 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::unsafe::zeroed();\n elem\n }\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 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"},"61":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::pedersen_hash, traits::{Hash, Serialize}};\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 pedersen_hash(\n self.serialize(),\n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\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_slice(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"},"99":{"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::{enqueue_public_function_call_internal, set_public_teardown_function_call_internal}\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, public_call_stack_item::PublicCallStackItem,\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 // TODO(#7112): This function is called with non-zero note hash only in 1 of 25 cases in aztec-packages repo\n // - consider creating a separate function with 1 arg for the zero note hash case.\n fn push_nullifier(&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 }\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, 0)\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<RETURNS_COUNT>(\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<RETURNS_COUNT>(\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<let ARGS_COUNT: u32>(\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<RETURNS_COUNT>(\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<let ARGS_COUNT: u32>(\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"}}}
1
+ {"transpiled":true,"noir_version":"0.32.0+32b4c6ed75387759b3d84df723a52679894feb2d","name":"MultiCallEntrypoint","functions":[{"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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p39x5nNnfvNYc85/zvnA0YdTL07+nHfBp7SWylpqa2mspbWWzlp6axmsZXRyYs1Yy+yMm7Ws1rJZy24th7Wc1nJZy20tj1fMA4P9Ow/5rOW3VuDTuBWyVthaEWtFrRWzVtzaN9ZKWCtprZS1b62VtlbGWllr31krZ628tQrWvrdW0Vola5Wt/WCtirWq1qpZq26thrWa1mpZq22tjrW61upZq2+tgbWG1hpZa2ytibWm1ppZa26thbWW1lpZa22tjbW21tpZa2+tgzV/ax2tdbLW2VoXa12tdbPW3VoPaz2t9bLW21ofa32t9bPW39oAJ1/WBlkbbG2ItaHWhlkbbm2EtZHWRlkbbW2MtbHWxlkbb22CtYnWJln70dpka1OsTbU2zdp0azOszbQ2y9psa3OszbU2z9p8awusLbS2yNpia0usLbW2zNpyayusrbS2ytpqa2usrbW2ztp6axusbbS2ydpma1usbbW2zdp2azus/WRtp7Vd1nZb+9naHmt7re2z9ou1/dYOWDto7Vdrh6wdtnbE2m/Wjlo7Zu24tRPWTlo7Ze20tTPWzlo7Z+28td+tXbB20dola5etXbF21do1a9et3bB209ota39Yu23tjrW71u5Zu2/tgbWH1h5Ze2ztibWn1p5Ze27thbWX1v609sraa2tvrL219s7ae2sfrH205pwMgloLZi24tRDWQloLZS20tTDWwloLZy28tQjWIlqLZC2ytSjWolqLZi26tRjW/KzFtBbLWmxrcazFtRbPWnxrCawltJbImsdaYmtJrCW1lsxacmsprKW0lspaamtprKW1ls5aemsZrGW05pzkjLXM1rJYy2otm7Xs1nJYy2ktl7Xc1vJYy2stn7X81gpYK2itkLXC1opYK2qtmLXi1r6xVsJaSWulrH1rrbS1MtbKWvvOWjlr5a1VsPa9tYrWKlmrbO0Ha1WsVbVWzVp1azWs1bRWy1pta3Ws1bVWz1p9aw2sNbTWyFpja02sNbXWzFpzay2stbTWylpra22stbXWzlp7ax2s+VvraK2Ttc7Wuljraq2bte7Weljraa2Xtd7W+ljra62ftf7WBlgbaG2QtcHWhlgbam2YteHWRlgbaW2UtdHWxlgba22ctfHWJlibaG2StR+tTbY2xdpUa9OsTbc2w9pMa7OszbY2x9pca/Oszbe2wNpCa4usLba2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","debug_symbols":"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"},{"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/9WZ204yMRDHW9mFhdXlw/MBFeTTxLsFAeHOl9Hn8drEd/ARpTAT/q1IbOloaGLa3U5nfjPTw1q0WpRs9qepnVJdVV8LyzxRXW5W+hF1lZKceks4d7aEs7IlnElETr2C09QJtc26M2uuphbr8UsnDjaJrkC/WqfItfpBdeb0RfN2Uk6rYADhFcEn1Me1pr+c+hEwJ2fncvCOHd6Bd2yrAu94J2NbGQVHwO9RtsSOq3s2G40vddLF/Dm0sa8NIUwEfU1lfB2K5WhWJHOkIQ8p6a7BM+ekAfa1kH3W3XDmRwLtC5BlOZbhdcj8e2q5lhprxiXOuAJkqjCu5oyrQXxMMfFqUdvUabaUZTmhOM7nSC6j28pR4sQwB98KsB9vjg4mxsausot2nvFgKYBpT4Sp7BvdTSHdOfiwC778A3vxvpxGwwLsoY1C2fHl5yYwtUSYxhNkanky7cswTZFp35PpQITp8QGZDjyZDkWYBiUyHXoyHYkwja04HXkyHcswvSDTsSfTiQzTMzKdeDKdijA9WvvTqSfTmQzTAJnOPJnORZjGfWQ692AKXRuhedlkf8Dvv4ixs+bYRaAvvmu4LePLCJnagb74nCWh+Qzda0Jj/hfz9RLkI+4/Vo4vA30JzXHonPKN3RXIR4yd9X1yFeiLz56/yXfjtUwMxsh0HehL6BkTuvZ+Y95t45606R6P9yvvVAv+Pz/NgUeBDeWwK2A2JVer10gHdKTROEtrn+iAva5IXBb3LN/lrytufzAxunsyvs3vp/4Lxu2WdPEdZm9F3O7Avhayz7rZ1i3kkttvIMtyLMP3Pcxv7q9uqH23ZlzhjCtA5gbG9Zxx/My5MfF7pbbkXPvJXDd3UbzO74FJZl8qh/h7hQIbyuHkUgBTR4bp1+4Z6+BLF3yMZMvaS3FO+ZxXfzUOz6s6vHPPBvwtsAnvKqCbdXwC3tPG3MogAAA=","debug_symbols":"ndlBboMwFEXRvXgcVTxj/29nK1VVkYRUSBGJAqlUoey90KoL6J1h4M3O6HoJp/7w+HgfxvN1CvvXJVyux24eruN6WkLzEsvP2+nWjduLae7uc9i35rvQj6f1yeNzF87DpQ/7pOb5tttGFYzahoxERpGMWjJKZJTJyMjIyYiIaImIREQkIiIREYmISEREIiISEZGIiEREJCIiExGZiMhERCYiMhGRiYhMRGQiIhMRmYgwIsKICCMijIgwIsKICCMijIgwIsKICCcinIhwIsKJCCcinIhwIsKJCCcinIgoREQhIgoRUYiIQkQUIqIQEYWIKEREISIqEVGJiEpEVCKiEhGViKhERCUiKhFRiQg1DVoJrSJatWiV0CqjlaGVo1VBK2RDyIaQDSEbQjaEbAjZELIhZEPIhpCNiGxEZCMiGxHZiMhGRDYishGRDRQ0hYqmUNIUappCUVOoagplTaGuKRQ2hcqmUNoUaptCcVOobgrlTaG+KRQ4hQqnUOIUapxCkVOocgplTqHOKRQ6hUqnUOoUap36d+xcT5/dfegOl367+9o+Psbj31XYepy/br9f1n+/AQ=="}],"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":{"100":{"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, public_call_stack_item::PublicCallStackItem,\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<RETURNS_COUNT>(\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<RETURNS_COUNT>(\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<let ARGS_COUNT: u32>(\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<RETURNS_COUNT>(\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<let ARGS_COUNT: u32>(\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"},"128":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n traits::Hash,\n hash::{\n pedersen_hash, compute_siloed_nullifier, sha256_to_field, pedersen_commitment,\n poseidon2_hash_with_separator\n}\n};\n// Note: pedersen_commitment is used only as a re-export here\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\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 = (n as Field).to_be_bytes(4);\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 = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"141":{"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"},"146":{"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"},"250":{"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, point::Point\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\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 = input[offset].to_be_bytes(32);\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 = logs[offset].value.to_be_bytes(32);\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 = logs[offset].value.to_be_bytes(32);\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 pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\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"},"273":{"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"},"300":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash_with_separator,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, 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 {\n inner : 0\n }\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"},"32":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\nglobal 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) -> [Field; RATE] {\n // zero-pad the cache\n for i in 0..RATE {\n if i >= self.cache_size {\n self.cache[i] = 0;\n }\n }\n // add the cache into sponge state\n for i in 0..RATE {\n self.state[i] += self.cache[i];\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n // return `RATE` number of field elements from the sponge state.\n let mut result = [0; RATE];\n for i in 0..RATE {\n result[i] = self.state[i];\n }\n result\n }\n\n fn absorb(&mut self, input: Field) {\n if (!self.squeeze_mode) & (self.cache_size == RATE) {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n let _ = self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else if (!self.squeeze_mode) & (self.cache_size != RATE) {\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 } else if self.squeeze_mode {\n // If we're in squeeze mode, switch to absorb mode and add the input into the cache.\n // N.B. I don't think this code path can be reached?!\n self.cache[0] = input;\n self.cache_size = 1;\n self.squeeze_mode = false;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n if self.squeeze_mode & (self.cache_size == 0) {\n // If we're in squeze mode and the cache is empty, there is nothing left to squeeze out of the sponge!\n // Switch to absorb mode.\n self.squeeze_mode = false;\n self.cache_size = 0;\n }\n if !self.squeeze_mode {\n // If we're in absorb mode, apply sponge permutation to compress the cache, populate cache with compressed\n // state and switch to squeeze mode. Note: this code block will execute if the previous `if` condition was\n // matched\n let new_output_elements = self.perform_duplex();\n self.squeeze_mode = true;\n for i in 0..RATE {\n self.cache[i] = new_output_elements[i];\n }\n self.cache_size = RATE;\n }\n // By this point, we should have a non-empty cache. Pop one item off the top of the cache and return it.\n let result = self.cache[0];\n for i in 1..RATE {\n if i < self.cache_size {\n self.cache[i - 1] = self.cache[i];\n }\n }\n self.cache_size -= 1;\n self.cache[self.cache_size] = 0;\n result\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 {\n _state: &[],\n }\n }\n}\n"},"410":{"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::std;\n\n use dep::aztec::prelude::AztecAddress;\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"},"5":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\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 pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Get an element from the vector at the given index.\n /// Panics if the given index points beyond the end of the vector (`self.len()`).\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 /// Get an element from the vector at the given index.\n /// Responds with undefined data for `index` where `self.len < index < self.max_len()`.\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Write an element to the vector at the given index.\n /// Panics if the given index points beyond the end of the vector (`self.len()`).\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 /// Write an element to the vector at the given index.\n /// Does not check whether the passed `index` is a valid index within the vector.\n ///\n /// Silently writes past the end of the vector for `index` where `self.len < index < self.max_len()`\n /// Panics if the given index points beyond the maximum length of the vector (`self.max_len()`).\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\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 pub fn len(self) -> u32 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\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 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 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 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 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::unsafe::zeroed();\n elem\n }\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 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"},"62":{"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(\n self.serialize(),\n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\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_slice(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"}}}