@aztec/accounts 0.55.1 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"transpiled":true,"noir_version":"0.34.0+e0185e75e65df08b5334856f8bf63fa3aed7049a","name":"EcdsaRAccount","functions":[{"name":"constructor","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(initializer)"],"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":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"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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684i0s7WurOJtHO07hwi7VytO5dIO0/rziPSzte684m0C7TuAiLtQq27kEi7SOsuItLWad06Iu1irbuYSLtE6y4h0i7VukuJtMu07jIibb3WrSfSLte6y4m0K7TuCiLtSq27kki7SuuuItKu1rqribRrtO4aIu1arbuWSLtO664j0q7XuuuJtBu07gYibYPWbSDSbtS6G4m0m7TuJiLtZq27mUi7RetuIdJu1bpbibTbtO42Iu12rbudSLtD6+4g0u7UujuJtLu07i4i7W6tu5tIu0fr7iHS7tW6e4m0+7TuPiLtfq27n0jbqHUbibQHtO4BIu1BrXuQSNukdZuItM1at5lIe0jrHiLSHta6h4m0R7TuESLtUa17lEh7TOseI9K2aN0WIu1xrXucSHtC654g0p7UuieJtKe07iki7Wmte5pIe0brniHSntW6Z4m057TuOSLtea17nkh7QeteINK2at1WIu1FrXuRSHtJ614i0l7WupeJtFe07hUi7VWte5VIe03rXiPStmndNiLtda17nUh7Q+veINLe1Lo3ibTtWredSHtL694i0t7WureJtHe07h0i7V2te5dIe0/r3iPS3te694m0D7TuAyLtQ637kEj7SOs+ItI+1rqPibRPtO4TIu1TrfuUSPtM6z4j0j7Xus+JtC+07gsi7Uut+5JI+0rrviLSvta6r4m0b7TuGyLtW637lkj7Tuu+I9K+17rvibQftO4HIu1HrfuRSPtJ634i0n7Wup+JtF+07hci7Vet+5VI+03rfiPSfte634m0P7TuDyJth9btINJ2at1OIu1PrfuTSPtL6/4i0v7Wur+JtL2ebRmVVsnREWlpWpdGpKVrXTqRlqF1GURaptZlEmlZWpdFpGVrXTaRlqN1OURaZa2rTKRV0boqRFpVratKpOVqXS6RVk3rqhFp1bWuOpFWQ+tqEGk1ta4mkVZL62oRabW1rjaRVkfr6hBpdbWuLpFWT+vqEWn7ad1+RFp9ratPpDXQugZE2v5atz+R1lDrGhJpjbSuEZF2gNYdQKQ11rrGRNqBWncgkXaQ1h1EpOVpXR6R1kTrmhBpTbWuKZF2sNYdTKQ107pmRFpzrWtOpB2idYcQaS20rgWRdqjWHUqkHaZ1hxFph2vd4URaS61rSaS10rpWRFprrWtNpLXRujZEWluta0ukWVpnEWnO5pki0rxa5yXSfFrnI9L8Wucn0vK1Lp9IK9C6AiItoHUBIi2odUEirVDrCom0I7TuCCKtnda1I9Laa117Iq2D1nUg0jpqXUcirZPWdSLSOmtdZyKti9Z1IdK6al1XIq2b1nUj0rprXXcirYfW9SDSempdTyKtl9b1ItJ6a11vIq2P1vUh0vpqXV8irZ/W9SPS+mtdfyJtgNYNINIGat1AIm2Q1g0i0gZr3WAibYjWDSHShmrdUCJtmNYNI9KGa91wIm2E1o0g0kZq3UgibZTWjSLSRmvdaCJtjNaNIdLGat1YIm2c1o0j0sZr3XgibYLWTSDSJmrdRCJtktZNItIma91kIi2kdSEirUjrioi0Yq0rJtLCWhcm0kq0roRIi2hdhEibonVTiLSpWjeVSJumddOItOlaN51Im6F1M4i0mVo3k0ibpXWziLTZWjebSJujdXOItLlaN5dIm6d184i0+Vo3n0hboHULiLSFWreQSFukdYuItMVat5hIW6J1S4i0I7XuSCJtqdYtJdKO0rqjiLSjte5oIu0YrTuGSFumdcuItGO17lgibbnWLSfSVmjdCiLtOK07jkg7XuuOJ9JWat1KIu0ErTuBSDtR604k0k7SupOItFVat4pIO1nrTibSVmvdaiLtFK07hUhbo3VriLRTte5UIu00rTuNSDtd604n0tZq3Voi7QytO4NIO1PrziTSztK6s4i0s7XubCLtHK07h0g7V+vOJdLO07rziLTzte58Iu0CrbuASLtQ6y4k0i7SuouItHVat45Iu1jrLibSLtG6S4i0S7XuUiLtMq27jEhbr3XribTLte5yIu0KrbuCSLtS664k0q7SuquItKu17moi7Rqtu4ZIu1brriXSrtO664i067XueiLtBq27gUjboHUbiLQbte5GIu0mrbuJSLtZ624m0m7RuluItFu17lYi7Tatu41Iu13rbifS7tC6O4i0O7XuTiLtLq27i0i7W+vuJtLu0bp7iLR7te5eIu0+rbuPSLtf6+4n0jZq3UYi7QGte4BIe1DrHiTSNmndJiJts9ZtJtIe0rqHiLSHte5hIu0RrXuESHtU6x4l0h7TuseItC1at4VIe1zrHifSntC6J4i0J7XuSSLtKa17ikh7WuueJtKe0bpniLRnte5ZIu05rXuOSHte654n0l7QuheItK1at5VIe1HrXiTSXtK6l4i0l7XuZSLtFa17hUh7VeteJdJe07rXiLRtWreNSHtd614n0t7QujeItDe17k0ibbvWbSfS3tK6t4i0t7XubSLtHa17h0h7V+veJdLe07r3iLT3te59Iu0DrfuASPtQ6z4k0j7Suo+ItI+17mMi7ROt+4RI+1TrPiXSPtO6z4i0z7XucyLtC637gkj7Uuu+JNK+0rqviLSvte5rIu0brfuGSPtW674l0r7Tuu+ItO+17nsi7Qet+4FI+1HrfiTSftK6n4i0n7XuZyLtF637hUj7Vet+JdJ+07rfiLTfte53Iu0PrfuDSNuhdTuItJ1at5NI+1Pr/iTS/tK6v4i0v7XubyJtr8cGRKVVcnREWprWpRFp6VqXTqRlaF0GkZapdZlEWpbWZRFp2VqXTaTlaF0OkVZZ6yoTaVW0rgqRVlXrqhJpuVqXS6RV07pqRFp1ratOpNXQuhpEWk2tq0mk1dK6WkRaba2rTaTV0bo6RFpdratLpNXTunpE2n5atx+RVl/r6hNpDbSuAZG2v9btT6Q11LqGRFojrWtEpB2gdQcQaY21rjGRdqDWHUikHaR1BxFpeVqXR6Q10bomRFpTrWtKpB2sdQcTac20rhmR1lzrmhNph2jdIURaC61rQaQdqnWHEmmHad1hRNrhWnc4kdZS61oSaa20rhWR1lrrWhNpbbSuDZHWVuvaEmmW1llEmtI6RaR5tc5LpPm0zkek+bXOT6Tla10+kVagdQVEWkDrAkRaUOuCRFqh1hUSaUdo3RFEWjuta0ektde69kRaB63rQKR11LqORFonretEpHXWus5EWhet60KkddW6rkRaN63rRqR117ruRFoPretBpPXUup5EWi+t60Wk9da63kRaH63rQ6T11bq+RFo/retHpPXXuv5E2gCtG0CkDdS6gUTaIK0bRKQN1rrBRNoQrRtCpA3VuqFE2jCtG0akDde64UTaCK0bQaSN1LqRRNoorRtFpI3WutFE2hitG0OkjdW6sUTaOK0bR6SN17rxRNoErZtApE3UuolE2iStm0SkTda6yURaSOtCRFqR1hURacVaV0ykhbUuTKSVaF0JkRbRugiRNkXrphBpU7VuKpE2TeumEWnTtW46kTZD62YQaTO1biaRNkvrZhFps7VuNpE2R+vmEGlztW4ukTZP6+YRafO1bj6RtkDrFhBpC7VuIZG2SOsWEWmLtW4xkbZE65YQaUdq3ZFE2lKtW0qkHaV1RxFpR2vd0UTaMVp3DJG2TOuWEWnHat2xRNpyrVtOpK3QuhVE2nFadxyRdrzWHU+krdS6lUTaCVp3Akor7UmBlT2GngKhn15h6NkDFn4inXPZn5dj5vN2PQkHX/gJQ85nVvEYex7Crs/Pifr86N8Wwk8FxA+0cp4+l4N0zhPx8FN5RqWhe7Se+u0fp17Z9xTpe+yndpyo9c5l+8PtT/sLpe3Ru/Fpf6P1P87T/sr7hQf7SSnOU2lLZk1b2GN28fylc/XT/vrPmeKJutIJGX9O57Q96ZnEPY5fK2lgfVrU/c57bVv0Mtmu17pR6Z31/1Zy164jofXM5G3h2OPwr4dsQmazfSYue/yQujSkc9JzEJdK/FwUynLXZ0bHR/wU6koEpyoojfuBhlXN5L2Xzx3+VQk/ZBC2YzkNvZdKp3TViM+pQ+j+B+oaD7ToiQwA","debug_symbols":"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","brillig_names":["get_contract_instance_internal","get_public_data_witness","lt_32_hint","decompose_hint","lte_16_hint","key_registry_get_stored_keys_hint","get_public_keys_and_partial_address","notify_created_note","get_key_validation_request","unsafe_rand","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"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"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"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"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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8NJ/K8hoBTmtoKAVlLSCilZQ0woaWEF10QoSWkG0pC5aUhctqYuW1EVL6qIlddGSumhJ3bSkblpSNy2pm5bUTUvqpiV105K6aUndtKRuWlIPLamHltRDS+qhJfXQknpoST20pB5aUg8tqQeW1HbBktouWFLbBUtqu2BJbRcsqe2CJbVdsKS2C5bUdsGS2i5aUgstqYWW1EJLaqEltdCSWmhJLbSkFlpSCy2phZbUSktqpSW10pJaaUmttKRWWlIrLamVltRKS2qlJbXRktpoSW20pDZaUhstqY2W1EZLaqMltdGS2mhJ7bSkdlpSOy2pnZbUTktqpyW105LaaUnttKR2WlIHLamDltRBS+qgJXXQkjpoSR20pA5aUgctqYOW1ElL6qQlNc0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oOs0oOs0oOs0oOs0o+gVLaqcZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZxaAZxaAZxaAZxaAZxbhgSR00oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0o5g0o5g0o5g0o5g0o5gXLKmTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSLZhSLZhSLZhSLZhTrgiV10Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi04xi04xi04xi04xiX7CkbppRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpR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p7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkp7lkH1pS056N67Rn4/rQknpoST20pB5aUg8tqYeW1ANL6rhgSR00oxg0oxg0oxgXLKmDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSTZhSTZhSTZhSTZhTzgiV10oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0Yxi0Yxi0Yxi0YxiXbCkLppRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRbJpRbJpRbJpRbJpR7AuW1E0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zikMzikMzikMzikMzinPBknpoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFgRlEvmFE8BbGS+hTESupTECupT0GspD4FsZL6FMRK6lMQK6lPQaykPgXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BsKQWmlEUmlEUmlEUmlGUC5bUQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOKQjOK8glGsfvl4jF7X9DPF//YF/lSyI9FhPF6uUh+cH2OvlyeY/324n9rVj/BP35is7KpWd3UrG1q1jc1G5uazU3N1qZme1OzmyYoQU9Q5wtIv7701CU3mlWdfpmO1a5r/nD9bw2jp6i/omH0JPVXNIyepv6Khn1bw+ip6q9o+OGTVaW+XtzyH+8y6ONd+62CmlYQ7I650ly70ly7Pt613/gZerxrv1WQ0woKWkG0pFZaUistqR/v2m8URHPt+nDX/uPT6mUi0swb81ZkvpYfJfnz/PRwB3/3BuyrN+BfvQHaJ43RPmmM9knzcJf/D/7Mtb1+qcwrPvja93DHf+8GHu7+797APT75Muq1gUtvNOCXvDTg2jdeWqvt5eqWd/X3R1dbxEu7FvNWtph+cPVIvrz2nAHh3//lmxh3WXHwPMvfztKeZ3m3s/TnWd7tLON5lnc7y3ye5d3Osr76IPLVZ1n/6rNsfPVZNuB3cW43AL+Lc7sB2F/AK21Ti9I2tShtU4vSNrUobVOL0ja1KG1Ti9I2tShtU4vSNrUobVOL0ja1KG1Ti9I2tShtU4vSNrUobVOL0ja1KG1Ti9I2tShtU4vSNrUobVOL0ja1KG1Ti9I2tShtU4vSNrUobVOL0ja1KG1Ti9I2tShtU4vSNrUobVOL0ja1KG1Ti9I2teiw72vn1NufWV3Xu9/d/TPgcNh/yXjnZn1Ts7Gp2dzULPu353dulvaJPrBPdLtgn+h2wT7R7YJ997IL9t3LLqcVBPvuZRfsu5ddsO9edsGS2i5aUgstqYWW1EJLaqEltdCSWmhJLbSkFlpSCy2padsZjLadwWjbGUxpSa20pFZaUistqZWW1EpLaqUltdKSmradwYyW1EZLaqMltdGS2mhJbbSkNlpSGy2pjZbUTktqpyW105LaaUnttKR2WlI7LamdltROS2qnJXXQkjpoSR20pKZZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVqNZVhtaUg8tqYeW1ENL6qEl9dCSmmYUjWYUnWYUnWYUnWYUnWYU/YIltdOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMYtCMYtCMYtCMYtCMYlywpA6aUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUUyaUUyaUUyaUUyaUcwLltRJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4r5CUax++XiMXtf0M8X6xWvhZz/7ni9XCQ/uD5HXy7PsX578d+btU3N+qZmY1OzuanZ2tTsoz/Rf/xl/Uv5ed1ottVe6mjzP7b6W/l3+fxPey3/3Xl+WH5nvbxXXek/V3Qf+jr19hGqN356pvT1p2fenf5HPw0S9frKMW+vbPpSvnzt8vVrl28PLl+vfBnWVK64Uf5kv/5Dn7rkRvSoTr++ul3XfPCvxbc1HNsazm0NF7vhvt7Gh0s++Ey9D5r+qxr4h+effh0hskP/4/xzH5D9RZqta1OzsqlZ3dQsekr6x5vtfP2Cdv30Be0+uP6rNIueju7dLHoyunez6Kno3s1+swnq181+swnql832N5ugft3sN5ugft3sN5ugft3spgnqPksvvkqzmyao3jRB9aYJqjdNUL1pgppNE9RsmqBm0wQ1myao+yyj+SrNbpqgZtMENZsmqNk0Qc2iCaquRRNUXYsmqLoWTVB1LZqg6vJNzS6aoOpaNEHVtWiCqmvRBFXXpglKNk1QsmmCkk0TlGyaoO6zvO2rNLtpgpJNE5RsmqBk0wQlmyYo3TRB6aYJSjdNULppgrrPUsWv0uymCUo3TVC6aYLSTROUbpqgbNMEZZsmKNs0QdmmCeo+y06/SrObJijbNEHZpgnKNk1QtmmC8k0TlG+aoHzTBOWbJqj7LCH+Ks1umqB80wTlmyYo3zRB+aYJKjZNULFpgopNE1RsmqDus2T7qzS7aYKKTRNUbJqgYtMEFZsmqNw0QeWmCSo3TVDsveP3btY3NbtpgmLvGr93s5smqO+2k/zXzW6aoL7bTvJfN7tpgvpuO8l/3eymCWrTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8N+0k7007yXvTTvLetJO8L9/U7KIJqjftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvL/ZTvLReG3Wfm72e01QN5p9+ARloy/l+/t6Pipeoq1fXjqvmD80+1sD9tUbcHQDeb29dIr6Bw3EV28gv3oD9dUbaHYDUy9XS12X3fwwtdfI7dCfInf2NDuP38X9mc3KpmbZk8Odm2VPGf9ws7+a9ufyTc3Cp5f7NgufdO7bLHwqum+z32yC+nWz32yC+mWz8s0mqF83+80mqF83+80mqF83u2mCevwu7s9sdtMEJZsmKNk0QcmmCUo2TVC6aYLSTROUbpqgdNME9fhd3J/Z7KYJSjdNULppgtJNE5RumqBs0wRlmyYo2zRB2aYJ6vG7uD+z2U0TlG2aoGzTBGWbJijbNEH5pgnKN01QvmmC8k0T1ON3cX9ms5smKN80QfmmCco3TVC+aYKKTRNUbJqgYtMEFZsmqMfv4v7MZjdNULFpgopNE1RsmqBi0wSVmyao3DRB5aYJKjdNUI/fxf2ZzW6aoHLTBJWbJqjcNEHlpgmqNk1QtWmCqk0TVG2aoB6/i/szm900QdWmCao2TVC1aYKqTRNUb5qgetME1ZsmqN40QT1+F/dnNrtpgupNE1RvmqB60wTVmyao2TRBzaYJCr6L+87Nbpqg6Du+79vspgmKvjv8vs1umqC+207yXze7Z4Ky67vtJP91s3smqNPs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KDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKAbNKAbNKAbNKAbNKMYFS+qgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWkGcWkGcWkGcWkGcW8YEmdNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKNYNKNYNKNYNKNYNKNYFyypi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUm2YUm2YUm2YUm2YU+4IlddOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOM4tCM4tCM4tCM4tCM4lywpB6aURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyYUfQLZhRPQaykPgWxkvoUxErqUxArqU9BrKQ+BbGS+hTESupTECupT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLKmFZhSFZhSFZhSFZhTlgiW10Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0Iyi0oyi0oyi0oyi0oyiXrCkVppRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRVJpRNJpRNJpRNJpRNJpRtAuW1EYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzikYzik4zik4zik4zik4zin7BktppRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRtFpRjFoRjFoRjFoRjFoRjEuWFIHzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgGzSgmzSgmzSgmzSgmzSjmBUvqpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFpBnFohnFohnFohnFohnFumBJXTSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSjWDSj2DSj2DSj2DSj2DSj2BcsqZtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFJtmFIdmFIdmFIdmFIdmFOeCJfXQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOI83CjqldfvF6tc8b6gjy6O10LOf/fb5SIfXZ+jL5fn+d3k24v/3mxvanYWNftwt/mpzcqmZnVTs7apWd/UbGxqNjc1i56g5Nyk9NcBsC650azq+Sb48up2XfOH639rGD1F/RUNoyepuzcc14Wepv6KhtET1V/RMHqq+isavstkJa9Vlc2NL96Vr1+8q986qP69IKcVFLSC8tEF9XW9/UDXzwUVraCmFTSwn6H72PN7FiS0gpRWEC2phZbUQktqSVpBRSuIltQysIL0ohUktIIendSq+jpVa+b7gj545cjXCV+iJH+ewdW+egP+1RuIr94A7ZNGaZ802rSChv0z19YvL51XfHDrwK6v3oB89Qbu8cmX8Xq3qq5bd6v8kpcGXPvGS2u1vVzd8q7+/uhqi3hp12LeyhbTD64eyZfXnjMg/Pu/fCPsLmsInmf521n68yzvdpbxPMu7nWU+z/JuZ1nPs7zbWfZXH0S++izrX32W9a8+yzr8Ls7tBuB3cW434LAbex60gmi/eXXab16ddj/faffzg3Y/P2j380NpBRmtIFpSBy2pg5bUQUvqoCV10JI6aUmdtKROWlInLamTltRJS+qkJXXSkjppSZ20pC5aUhctqYuW1EVL6qIlddGSumhJXbSkLlpSFy2pm5bUTUvqpiV105K6aUndtKRuWlI3LambltRNS+qhJfXQknpoST20pB5aUg8tqYeW1ENL6qEl9cCSWi5YUssFS2q5YEktFyyp5YIltVywpBaauheauheaupeLltRCS2qhJbXQklpoSS20pBZaUgstqYWW1DR1LzR1LzR1LzR1L0pLaqUltdKSWmlJrbSkVlpSKy2plZbURktqoyW10ZLaaElttKQ2WlIbLamNltRGS2qjJbXTktppSe20pHZaUtOMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMojz8ie9q87LMVP39s54+fExJvnu4Zl3XWyX/xIOkTrO9qdlZ1Gxdm5qVTc3qpmZZz5s+BTmtINbzpk9BrOdNn4KKVlDTChpYQX3RChJaQUoriJbUTUvqpiV105K6aUndtKRuWlIPLamHltRDS+qhJfXQknpoST20pB5aUg8tqQeW1HrBklovWFLrBUtqvWBJrRcsqfWCJbVesKTWC5bUesGSWi9aUgstqYWW1EJLaqEltdCSWmhJLbSkFlpSCy2phZbUSktqpSW10pJaaUmttKRWWlIrLamVltRKS2qlJbXRktpoSW20pDZaUhstqY2W1EZLaqMltdGS2mhJ7bSkdlpSOy2pnZbUTktqpyW105LaaUnttKR2WlIHLamDltRBS+qgJXXQkjpoSR20pA5aUgctqYOW1ElL6qQlddKSOmlJnbSkTlpSJy2pk5bUSUvqpCV10ZK6aEldtKSmGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWjGUWjGUWjGUWjGUW7YEltNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKPoNKPoNKPoNKPoNKPoFyypnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUg2YUg2YUg2YUg2YU44IlddCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtKMYtKMYtKMYtKMYl6wpE6aUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUSyaUSyaUSyaUSyaUawLltRFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pNM4pNM4pNM4pNM4p9wZK6aUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUZxaEZxaEZxaEZxaEZxLlhSD80oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDswo5gUziqcgVlKfglhJfQpiJfUpiJXUpyBWUp+CWEl9CmIl9SmIldSnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKQiW1EIzikIzikIzikIzinLBklpoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFpRlFpRlFpRlFpRlEvWFIrzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSjqw43iCZrr94vPz0u8L+iji+O1kPPf/Xa5yEfX5+jL5TnWby/+e7O+qdnY1GxuarY2NdubmgV9on9wcdTrK8e8vbLp7x8mJPn6z5QPmhb+mfKV/C/l3Apqf222LrnxL0V1+vXV7brmD9f/1jB6dvkrGvZtDaNnmL+iYfQcc25WXm+fdpfEBw18r9mk7fXjukP/48e1fq/Z5Eazs6jZh8vwT21WNjWLnpL+8WY7X79PXD99n7DvdXfnRrO+qdnvdXfnRrPf6+7OjWa/2QT162a/2QT162a/2QT1y2b9m01Qv272m01Qv2520wTlmyaoh2/I+NRmN01QvmmC8k0TlG+aoHzTBBWbJqjYNEHFpgkqNk1QD99c86nNbpqgYtMEFZsmqNg0QcWmCSo3TVC5aYLKTRNUbpqgHr5R6lOb3TRB5aYJKjdNULlpgspNE1RtmqBq0wRVmyao2jRBPXzT26c2u2mCqk0TVG2aoGrTBFWbJqjeNEH1pgmqN01QvWmCevgGxk9tdtME1ZsmqN40QfWmCao3TVCzaYKaTRPUbJqgZtME9fDNqJ/a7KYJajZNULNpgppNE9QsmqDsWjRB2bVogrJr0QRl16IJyi7f1OyiCcquRROUXYsmKLsWTVB2bZqgZNMEJZsmKNk0QX2zbd83mvVNzW6aoL7Ztu8bzW6aoL7Ztu8bzW6aoHTTBKWbJij23vF7N7tpgmLvG793s5smKPae8Xs3u2mC+m47yX/d7KYJ6rvtJP91s5smqE07yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0k9007yX3TTnLftJPcN+0k98s3NbtogvJNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9007y2LSTPDbtJI9NO8lj007yuHxTs4smqNi0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO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XjnffdDUdb1V8vED+X78Mun3y3/c+np78d+blU3N6qZmbVOzvqnZ2NRsbmq2NjXbm5qdRc027a9nm/bXszQ7PDQ7PDQ7PDQ7PDQ7PDQ7PE27K9m0u5K055sO7fmmQ3u+6dCebzq055sO7fmmQ3u+6dCebzo0OzwwO3xmclZSn4JYSX0KYiX1j69RtIJYSX0KYiX1KYiV1KcgVlKfglhJfQqiJTXMDp+CaEkNs8OnIFpSw+zwKYiW1DA7fAqiJbXQklpoSa20pFZaUsOeb3oKoiU17PmmpyBaUsOeb3oKoiU1zA6fgmhJbbSkNlpSGy2pjZbURktqmB0+BdGS2mhJDXu+6SmIltROS2qnJTXMDp+CaEkNs8OnIFpSw+zwKYiW1E5LaqclNez5pqcgWlLDnm96CqIlNez5pqcgWlLDnm96CqIlNcwOn4JoSZ20pE5aUictqZOW1ElL6qQlddKSOmlJDXu+6SmIltRFS+qiJXXRkrpoSV20pIY93/QUREvqoiV10ZK6aEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKQiW1EIzikIzikIzikIzinLBklpoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFoRlFpRlFpRlFpRlFpRlEvWFIrzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgqzSgazSgazSgazSgazSjaBUtqoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFoxlFpxlFpxlFpxlFpxlFv2BJ7TSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSjGDSjGDSjGDSjGDSjGBcsqYNmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFJNmFJNmFJNmFJNmFPOCJXXSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLRjGLRjGLRjGLRjGJdsKQumlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlFsmlFsmlFsmlFsmlHsC5bUTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKQzOKQzOKQzOKQzOKc8GSemhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWBGsS+YUTwFsZL6FMRK6lMQK6lPQaykPgWxkvoUxErqUxArqU9BrKQ+BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0GwpBaaURSaURSaURSaUZQLltRCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pKM4pKM4pKM4pKM4p6wZJaaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUbRaEbRaEbRaEbRaEbRLlhSG80oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oOs0oOs0oOs0oOs0o+gVLaqcZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZxaAZxaAZxaAZxaAZxbhgSR00oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0o5g0o5g0o5g0o5g0o5gXLKmTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhTz4UZRr7x+v1jlivcFfXRxvBZy/rvfLhf56PrTzsvlOdZvL/57s7apWd/UbGxqNjc1W5ua7U3Nzp5m6+EG91OblU3NoicomfNV83UAPO/MjWZVp19f3a5r/nD9bw2jp6i/omHf1jB6mvorGkZP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ZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSNZhSNZhSNZhSNZhTtgiW10Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi04yi04yi04yi04yiX7CkdppRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRDJpRDJpRDJpRDJpRjAuW1EEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikkzikkzikkzikkzinnBkjppRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRrFoRrFoRrFoRrFoRrEuWFIXzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSg2zSg2zSg2zSg2zSj2BUvqphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFoRnFoRnFoRnFoRnFuWBJPTSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjOA83inrl9fvFKle8L+iji+O1kPPf/Xa5yEfX5+jL5TnWby/+e7OzqNmH28pPbVY2NaubmrVNzYI+0T+4OOr1lWPeXtn09w8Tknz9Z8oHTQv/TPlF/pcik+2vzdYlN/6lqE6/vrpd1/zh+t8aRs8uf0XD6PnlL2jY0DPMX9Eweo6RHwvDXj/tLokPGvhes0nb68d1h/7Hj2v7XrPJjWZ9U7Oxqdnc1Cx6SvrHm+18/T5x/fR9wr7X3Z0bzX6vuzu/bta/192dG81+r7s7N5r9ZhPUr5v9ZhPUr5v1Tc1+swnq181+swnq181umqB80wTlmyao2DRBxaYJKjZNULFpgnr4tpNPbXbTBBWbJqjYNEHFpgkqNk1QuWmCyk0TVG6aoHLTBPXwLUSf2uymCSo3TVC5aYLKTRNUbpqgatMEVZsmqNo0QdWmCerh28E+tdlNE1RtmqBq0wRVmyao2jRB9aYJqjdNUL1pgupNE9TDt/Z9arObJqjeNEH1pgmqN01QvWmCmk0T1GyaoGbTBDWbJqiHb9P81GY3TVCzaYKaTRPUbJqgZs8EJdd17RmhfnS7Z4b60e2eIepHt3umqB/d+qpu98xRP7rdM0j96HbPJPWj2z2j1I9uV81SsmqWklWzlKyapWTVLPXwZdSf2+2qWUpWzVKyapb6ZgvAb3W7apb6ZivAb3W7apb6ZkvAb3W7apZ6+Brwz+121Sylq2Yp9k7yu3e7apZibyO/d7fsVeR373bVLPXdlpbf6HbVLPXd1pbf6HbVLPXdFpff6HbVLLVodfmPblfNUouWl//odtUstWh9+Y9uV81SixaY/+h21Sy1aIX5j25XzVKLlpj/6HbVLLVojfmPblfNUosWmf/odtUstWiV+Y9uV81Si5aZ/+h21Sy1aJ35j25XzVKLFpr/6HbVLLVopfmPblfNUouWmv/odtUstWit+Y9uV81Sixab/+h21Sy1aLX5j25XzVKLlpv/6HbVLLVovfmPblfNUosWnP/odtUstWjF+Y9uV81Si5ac/+h21Sy1aM35j25XzVKLFp3/6HbVLLVo1fmPblfNUouWnf/odtUstWjd+Y9uV81Sixae/+h21Sy1aOX5j25XzVKLlp7/6HbVLLVo7fmPbjfNUrJq77ms2nsuq/aey6q953L5qm43zVKyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7rqv2nuuqvee6au+5rtp7rpev6nbTLKWr9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3n+s32no/Ga7f2Qbffa5a61e3DZykbfanf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ZtdFy+y6cJktuMwWXGYLLrNxz2kt3HNaC+eTC+eTC+eTC+eTC+eTC+eTC+eTC+eTS3GZrbjMVlxmKy6zcc9pLdxzWgv3nNbCPae1cM9pLdxzWgvnkwvnk8twmW24zDZcZhsusw2X2TifXDifXI7LbNxzWgv3nNZyXGY7LrNxPrlwPrlwPrlwPrlwPrlwPrkCl9mBy2zcc1oL95zWwj2ntXDPaS3cc1oL95zWwj2ntXDPaS2cTy6cT67EZXbiMjtxmZ24zE5cZhcuswuX2YXLbNxzWgv3nNYqXGYXLrMLl9mFy+zCZTbuOa2Fe05rNS6zG5fZjctsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnINsnINsnINsnINsnIPsi5bZjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQjXOQg3OQg3OQg3OQg3OQc9Eye3AOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcnAOcmgOUi6agzwVwTL7VATL7FMRLLNPRbDMPhXBMvtUBMvsUxEss09FsMw+FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvLHA2pxFeEym+Ygfzw6B1cRLrNpDvLHUl9cRbjMpjnIH+uGcBXhMpvmIH9ASFhFgnOQgnOQgnOQgnOQ59fruIpomS04Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4B6k4B6k4B6k4B6k4B6kXLbMV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAN5yAN5yAN5yAN5yDtomW24Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4xyk4xyk4xyk4xykX7TMdpyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDDJyDDJyDDJyDDJyDjIuW2YFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIlzkIlzkIlzkIlzkHnRMjtxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDrJwDrJwDrJwDrJwDrIuWmYXzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkEWzkE2zkE2zkE2zkE2zkH2RcvsxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIxjnIwTnIwTnIwTnIwTnIuWiZPTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTQHqRfNQZ6KYJl9KoJl9qkIltmnIlhmn4pgmX0qgmX2qQiW2aciWGafinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJaZgvOQQrOQQrOQQrOQcpFy2zBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjBOUjFOUjFOUjFOUjFOUi9aJmtOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAepOAdpOAdpOAdpOAdpOAdpFy2zDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecgDecg7eEOUq+8fr9Y5Yr3FX10cbwWcv673y4X+ej6HH25PMf67cVfuu1V3c6ibv3hNvRzu5VV3eqqbm1Vt76q21jVba7qFj1LyWT76yxYl9zo9sdGitdXt+uaP1z/e8foeeov6Rg9U/0VHQt6rvpLOkbPVn9Jx+j56i/p+C4zlryWVTY3volXvn4Tr35rofqlIsdVFLiK8tEV9XW9/VDXBxUVrqLGVTS0n6P7+Pa7ViS4ihRXES6zFZfZistsTVxFhasIl9k6tIrswlUkuIoendmq+jppa+b7ij545cjXqV+iJD+Yy82+fAf+5TuIL98B7jPHcJ851riKhv1z19YvL51XfHRXwa8v34F8+Q7u8RmY8Xovq65b97LOL2NfOjiT3I2X1mp7ubrlXQP90dUW8dKvxbyVLaYfXD2SL689Z1b493/9NtldVh08D/P3w/TnYd7vMON5mPc7zHwe5v0Os56Heb/D7C8/j3z5qTa+/FQbX36qDfidnb+jA/idnb+jA6fd74vAVYT7DW3gfkMbuLv9gbvbn7i7/Ym725+Kq8hwFeEyO3GZnbjMTlxmJy6zE5fZhcvswmV24TK7cJlduMwuXGYXLrMLl9mFy+zCZXbjMrtxmd24zG5cZjcusxuX2Y3L7MZlduMyu3GZPbjMHlxmDy6zB5fZg8vswWX24DJ7cJk9uMweWmbHRcvsuGiZHRcts+OiZXZctMyOi5bZcdEyOy5aZsdFy+y4cJktuMwWXGYLLrMFl9mCy2zBZTZO9gdO9gdO9ofgMltxma24zFZcZisusxWX2YrLbMVltuIyGyf7Ayf7Ayf7Ayf7w3CZbbjMNlxmGy6zDZfZhstsw2W24TLbcZntuMx2XGY7LrMdl9mOy2zHZbbjMttxme24zA5cZgcuswOX2YHLbJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDDJyDjIc/uf7H42l/v/jHVte3iz98lkq+eyJoXddbJf/UM6+ielW3s6nbvlZ1K6u61VXd0p6WHffxsnetiPa07Gja07KjC1dR4yoaWkVz4SoSXEWKqwiX2YPL7MFl9uAye3CZPbjMHlpm50XL7LxomZ0XLbPzomV2XrTMzouW2XnRMjsvWmbnRcvsvHCZLbjMFlxmCy6zBZfZgstswWW24DJbcJktuMwWXGYrLrMVl9mKy2zFZbbiMltxma24zFZcZisusxWX2YbLbMNltuEy23CZbbjMNlxmGy6zDZfZhstsw2W24zLbcZntuMx2XGY7LrMdl9mOy2zHZbbjMttxmR24zA5cZgcuswOX2YHL7MBlduAyO3CZHbjMDlxmJy6zE5fZicvsxGV24jI7cZmduMxOXGYnLrMTl9mFy+zCZXbhMrtwmV24zC5cZhcuswuX2YXL7MJlduMyu3GZ3bjMxjnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIwjnIwjnIwjnIwjnIumiZXTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgHWTgH2TgH2TgH2TgH2TgH2RctsxvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIBvnIAfnIAfnIAfnIAfnIOeiZfbgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTgHOTQHKRdNAd5KoJl9qkIltmnIlhmn4pgmX0qgmX2qQiW2aciWGafimCZfSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KaJktOAcpOAcpOAcpOAcpFy2zBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgBecgFecgFecgFecgFecg9aJltuIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOIcpOEcpOEcpOEcpOEcpF20zDacgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScg3Scg3Scg3Scg3Scg/SLltmOc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5CBc5CBc5CBc5CBc5Bx0TI7cA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycQ4ycQ4ycQ4ycQ4yL1pmJ85BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5B5sMdpF55/X6xyhXvK/ro4ngt5Px3v10u8tH1OfpyeY7124u/dOuruo1V3eaqbmtVt72qW9Bn+wcXR72+8rnZ/1aHvnymkHTtP1U/aG74p+pX8r8WmWx/7bYuufGvRXX69dXtuuYP1//eMXqK+Us69nUdo6eZv6Rj9EQjp4G3T71L4qMOvteU0vb6ud2hP31u2/eaUm51O5u6fbg+/9xuZVW36HnpH++28/XbxfXztwv/Xnd8bnXrq7r9Xnd8bnX7ve743Or2m81SN7r9ZrPUjW6/2Sz1627jm81SN7r9ZrPUjW5XzVKxapZ6+BaOz+121SwVq2apWDVLxapZKlbNUrlqlspVs1SumqVy1Sz18O04n9vtqlkqV81SuWqWylWzVK6apWrVLFWrZqlaNUvVqlnq4VurPrfbVbNUrZqlatUsVatmqVo1S/WqWapXzVK9apbqVbPUw7fJfW63q2apXjVL9apZqlfNUr1qlppVs9SsmqVm1Sw1q2aph295/NxuV81Ss2qWmlWz1KyapWbTLFXXplmqrk2zVF2bZqm6Ns1SdfmqbjfNUnVtmqXq2jRL1bVplqpr1Swlq2YpWTVLyapZSlbNUg/fivy53a6apWTVLCWrZilZNUvJqllKV81SumqW0lWz1DfbKH6rW1/V7apZ6pttFL/V7apZ6pttFL/V7apZylbNUrZqlmLvNr97t6tmKfZO87t3u2qWYu8yv3u3q2ap77b3/Ea3q2ap77b3/Ea3q2apVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe816197xX7T3vVXvPe9Xe8758VbebZqletfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+09n1V7z2fV3vNZtfd8Vu09n8tXdbtplppVe89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve8///+3d7W4kSXbe8VvK837O1RiSYBgLLHYNaW3AH/beHd3TLHaL3OawJiv452R/ETTYyoonqiseBpP5y5xL3fd8LnXf89l/33Mbfcrv1j+frURbP711HjE/zPbbDPTTz8DQM8jj+a1T1F+bgX/6GcSnn0F++hkUewbrV7Gnt67jsDeb155yZ4e+bN6+1GznSrPdf7/vD50tew9x9mzZ+413z/bn+8OB701Onq1farbwPc/Js4Xvj06e7Z9sL/XGbP9k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HGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGTjHGTjHGTjHGTjHGQftM5unINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnIMcnIMcnIMcnIMcnIOcg9bZg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQQ3OQcdAc5EoE6+yVCNbZKxGss1ciWGevRLDOXolgnb0SwTp7JYJ19kqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciViNbZgnOQgnOQgnOQgnOQctA6W3AOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnEOUnEOUnEOUnEOUg9aZyvOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQRrOQRrOQRrOQRrOQdpB62zDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjHOUjHOUjHOUjHOUg/aJ3tOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAcZOAcZOAcZOAcZOAcZB62zA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgE+cgE+cgE+cgE+cg86B1duIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOEcZOEcZOEcZOEcZB20zi6cgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycg2ycg2ycg2ycg2ycg+yD1tmNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CNc5CDc5CDc5CDc5CDc5Bz0Dp7cA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5ycA5y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OAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAcZOAcZOAcZOAcZOAcZB62zA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgE+cgE+cgE+cgE+cg86B1duIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOEcZOEcZOEcZOEcZB20zi6cgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyycgyyc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q+3p5br+beaH13+bgn7+Kdjnn4J//inE559Cfv4p1OefQn/+Kez+NVCPvGWSI77fdr324WR/9xP2kBNmvJ0Bf+SM13/9+3/+5a9//cv/+h9//ft//Ns//vL3v/3Xl6OPL//ndV5TcTzNrdqePwkxfWX8H17tP756fd6ve5lzh5iHD/G6aDl3CHn8EPr4IezxQ/jjh4jHD5GPH+Lxq9sev7rt8avbH7+6/fGr2x+/uv3xq9sfv7r98avbH7+6/fGr2x+/uv3xqzsev7rj8as7Hr+64/GrOx6/uuPxqzsev7rj8as7Hr+64/GrOx+/uvPxqzsfv7rz8as7H7+68/GrOx+/uvPxqzsfv7rz8au7Hr+66/Grux6/uuvxq7sev7rr8au7Hr+66/Grux6/uuvxq7sfv7r78au7H7+6+4TVbRb97dVW3786j1dPWdfT2XD1/PHVXwI5LVDQAiUtUNECNS3QwALNQQsktEBKC0Rr6qE19dCaemhNPbSmHlpTD62p5aBVtRy0rpaDVtZy0NpaDlpdy0HrazlohS0HrbHloFW2HLjOFlxnC66zBdfZgutswXW24DpbcJ0tuM4WXGcLrrMV19mK62zFdbbiOltxna24zlZcZyuusxXX2YrrbMN1tuE623CdbbjONlxnG66zDdfZhutsw3W24TrbcZ3tuM52XGc7rrMd19mO62zHdbbjOttxne24zg5cZweus+PBnf11DNswhm8Y44ymrJuqt0p/OUZuGKM2jNEnj1Hycox5/BhncJo3xzijFVpvY7S9/Pc4A9S8OYZtGOOM9dFhtzH6eDHGGVfde6p8e7Wnx8sxfsc88ocxvh5Vdx3Vdx019xz1ey5hf+Uouesovesou+sov+uouOuou74bfdd3o+/6bvRd342567sxd3035q7vxtz13Zi7vhtz13dj7vpuzF3fjbnruzH3fDf0OO46Su46Su86yu46yu86Ku46Ku86qu46qu866q7vhtz13ZC7vhty13dD7vpuyF3fDbnruyF3fTfkru+G3PXdkLu+G3rXd0Pv+m7oXd8Nveu7oXd9N/Su74be9d3Qu74betd3Q+/6bthd3w2767thd3037K7vht313fgdf5vzt36reeNskv6Ov7b98TFqwxi9YYx5/Bi/469Wf3wM+eNjVDzd8bNKb6+N/m0AffAAp5yrer7xtc1RLz6l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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)","aztec(view)"],"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":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]},{"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":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000004c141a0"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaRAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaRAccount::constructor_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_abi"},{"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"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"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"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_abi"}]}},"file_map":{"102":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/history/public_storage.nr","source":"use dep::protocol_types::{\n constants::GENERATOR_INDEX__PUBLIC_LEAF_INDEX, hash::poseidon2_hash_with_separator,\n address::AztecAddress, header::Header, utils::field::full_field_less_than\n};\nuse dep::protocol_types::merkle_tree::root::root_from_sibling_path;\n\nuse crate::{oracle::get_public_data_witness::get_public_data_witness};\n\ntrait PublicStorageHistoricalRead {\n fn public_storage_historical_read(header: Header, storage_slot: Field, contract_address: AztecAddress) -> Field;\n}\n\nimpl PublicStorageHistoricalRead for Header {\n fn public_storage_historical_read(self, storage_slot: Field, contract_address: AztecAddress) -> Field {\n // 1) Compute the leaf index by siloing the storage slot with the contract address\n let public_data_tree_index = poseidon2_hash_with_separator(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness for the tree index.\n let witness = unsafe {\n get_public_data_witness(\n self.global_variables.block_number as u32,\n public_data_tree_index\n )\n };\n\n // 3) The witness is made up of two parts: the preimage of the leaf and the proof that it exists in the tree.\n // We first prove that the witness is indeed valid for the public data tree, i.e. that the preimage is of a\n // value present in the tree. Note that `hash` returns not just the hash of the value but also the metadata\n // (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == root_from_sibling_path(witness.leaf_preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n // 4) Now that we know the preimage is valid, we determine the value that's represented by this tree entry. Here\n // we have two scenarios:\n // 1. The tree entry is initialized, and the value is the same as the one in the witness\n // 2. The entry was never initialized, and the value is default zero (the default)\n // The code below is based on the same checks in `validate_public_data_reads` in `base_rollup_inputs`.\n let preimage = witness.leaf_preimage;\n\n let is_less_than_slot = full_field_less_than(preimage.slot, public_data_tree_index);\n let is_next_greater_than = full_field_less_than(public_data_tree_index, preimage.next_slot);\n let is_max = ((preimage.next_index == 0) & (preimage.next_slot == 0));\n let is_in_range = is_less_than_slot & (is_next_greater_than | is_max);\n\n let value = if is_in_range {\n 0\n } else {\n assert_eq(preimage.slot, public_data_tree_index, \"Public data tree index doesn't match witness\");\n preimage.value\n };\n\n value\n }\n}\n"},"110":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\nuse crate::oracle::{execution::{get_chain_id, get_version, get_contract_address, get_block_number}, storage::storage_read};\n\nstruct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n fn block_number(self) -> u32 {\n self.block_number\n }\n\n fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n fn version(self) -> Field {\n self.version\n }\n\n fn chain_id(self) -> Field {\n self.chain_id\n }\n\n unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n unconstrained fn storage_read<T, let N: u32>(\n self,\n storage_slot: Field\n ) -> T where T: Deserialize<N> {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"},"116":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let NB: u32, let MB: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<NB, MB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> [u8; M] where Note: NoteInterface<N, NB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n\n let log: [u8; 448] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n for i in 0..encrypted_note_log_from_typescript.len() {\n assert_eq(log[i], encrypted_note_log_from_typescript[i]);\n }\n assert_eq(encrypted_note_log_from_typescript.len(), log.len());\n }\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::{get_current_public_keys, get_ovsk_app}, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash};\n\nfn compute_raw_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n // TODO(#8589): use typesystem to skip this check when not needed\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n let log_hash = sha256_to_field(encrypted_log);\n\n (note_hash_counter, encrypted_log, log_hash)\n}\n\nunconstrained fn compute_raw_note_log_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let ovsk_app = get_ovsk_app(ovpk.hash());\n compute_raw_note_log(context, note, ovsk_app, ovpk, ivpk, recipient)\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, iv);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Note: We could save a lot of gates by obtaining the following keys in an unconstrained context but this\n // function is currently not used anywhere so we are not optimizing it.\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n\n // See the comment in `encode_and_encrypt_note_with_keys_unconstrained` for why having note hash counter\n // and log hash unconstrained here is fine.\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, iv)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, recipient);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Having the log hash be unconstrained here is fine because the way this works is we send the log hash\n // to the kernel, and it gets included as part of its public inputs. Then we send the tx to the sequencer,\n // which includes the kernel proof and the log preimages. The sequencer computes the hashes of the logs\n // and checks that they are the ones in the public inputs of the kernel, and drops the tx otherwise (proposing\n // the block on L1 would later fail if it didn't because of txs effects hash mismatch).\n // So if we don't constrain the log hash, then a malicious sender can compute the correct log, submit a bad\n // log hash to the kernel, and then submit the bad log preimage to the sequencer. All checks will pass, but\n // the submitted log will not be the one that was computed by the app.\n // In the unconstrained case, we don't care about the log at all because we don't do anything with it,\n // and because it's unconstrained: it could be anything. So if a sender chooses to broadcast the tx with a log\n // that is different from the one that was used in the circuit, then they'll be able to, but they were already\n // able to change the log before anyway, so the end result is the same. It's important here that we do not\n // return the log from this function to the app, otherwise it could try to do stuff with it and then that might\n // be wrong.\n // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have\n // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause\n // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be\n // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log\n // for a note that doesn't exist).\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, recipient)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n"},"126":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\nstruct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{address::AztecAddress, scalar::Scalar};\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n for i in 0..outgoing_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]);\n }\n assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len());\n }\n}\n"},"127":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\nstruct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nfn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"128":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\nstruct EncryptedLogIncomingBody<let M: u32> {\n plaintext: [u8; M]\n}\n\nimpl<let M: u32> EncryptedLogIncomingBody<M> {\n pub fn from_note<T, let N: u32>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N, M> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T, let MR: u32>(\n event: T,\n randomness: Field\n ) -> Self where T: EventInterface<M, MR> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::NoteInterface},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: Field = 3;\n global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64;\n\n impl NoteInterface<ADDRESS_NOTE_LEN, ADDRESS_NOTE_BYTES_LEN> for AddressNote {\n fn compute_note_hiding_point(_self: Self) -> Point {\n crate::generators::Ga1\n }\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_nullifier(\n _self: Self,\n _context: &mut PrivateContext,\n _note_hash_for_nullify: Field\n ) -> Field {\n 1\n }\n\n fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] {\n [self.address.to_field(), self.owner.to_field(), self.randomness]\n }\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote {\n address: AztecAddress::from_field(fields[0]),\n owner: AztecAddress::from_field(fields[1]),\n randomness: fields[2],\n header: NoteHeader::empty()\n }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: Field = 3;\n global TEST_EVENT_BYTES_LEN = 32 * 3 + 64;\n global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32;\n\n impl EventInterface<TEST_EVENT_BYTES_LEN, TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime\n {\n EventSelector::from_signature(\"TestEvent(Field,Field,Field)\")\n }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 201, 247, 40, 80, 60, 188, 158, 251, 242, 103, 197, 79, 165, 195, 10, 160, 255, 35, 167, 152, 25, 233, 77, 145, 214, 243, 210, 119, 0, 20, 29, 95, 15, 63, 33, 190, 184, 67, 254, 96, 128, 243, 220, 228, 201, 130, 86, 163, 52, 127, 111, 10, 212, 7, 160, 16, 87, 13, 39, 11, 5, 1, 164, 65, 8, 56, 82, 245, 13, 68, 176, 90, 100, 69, 243, 78, 117, 188, 221, 34, 178, 31, 155, 89, 143, 176, 129, 118, 36, 236, 64, 179, 52, 239, 184, 51, 51, 199, 221, 49, 81, 197, 17, 199, 192, 99, 49, 168, 157, 164, 190, 33, 240, 182, 214, 173, 7, 156, 102, 95, 65, 217, 225, 123, 42, 21, 124, 144\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::NoteInterface, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N, M> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N, M> {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32, let M: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N, M> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N, M> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32, let M: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N, M>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N, M> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"134":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32, let M: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N, M> {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32, let M: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N, M> {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the \n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the \n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from \n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let M: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N, M> {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"135":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::NoteInterface,\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N, M>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, N, M>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, N, M>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, N, M>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N, M> {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"136":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\nstruct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting \n * a change note in a token's transfer function only when there is \"change\" left).\n */\nstruct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"144":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"145":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"147":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"150":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice};\n\nglobal LEAF_PREIMAGE_LENGTH: u32 = 4;\nglobal PUBLIC_DATA_WITNESS: Field = 45;\n\nstruct PublicDataWitness {\n index: Field,\n leaf_preimage: PublicDataTreeLeafPreimage,\n path: [Field; PUBLIC_DATA_TREE_HEIGHT],\n}\n\n#[oracle(getPublicDataTreeWitness)]\nunconstrained fn get_public_data_witness_oracle(\n _block_number: u32,\n _public_data_tree_index: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(\n block_number: u32,\n public_data_tree_index: Field\n) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, public_data_tree_index);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u32, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<let N: u32>(address: Field, storage_slot: Field, block_number: Field, length: Field) -> [Field; N] {}\n\nunconstrained pub fn raw_storage_read<let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> [Field; N] {\n storage_read_oracle(\n address.to_field(),\n storage_slot,\n block_number as Field,\n N as Field\n )\n}\n\nunconstrained pub fn storage_read<T, let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> T where T: Deserialize<N> {\n T::deserialize(raw_storage_read(address, storage_slot, block_number))\n}\n\nmod tests {\n use crate::oracle::storage::{raw_storage_read, storage_read};\n use dep::protocol_types::address::AztecAddress;\n\n use std::test::OracleMock;\n use crate::test::mocks::mock_struct::MockStruct;\n\n global address = AztecAddress::from_field(29);\n global slot = 7;\n global block_number = 17;\n\n #[test]\n fn test_raw_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: [Field; 2] = raw_storage_read(address, slot, block_number);\n assert_eq(read[0], 13);\n assert_eq(read[1], 42);\n }\n\n #[test]\n fn test_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: MockStruct = storage_read(address, slot, block_number);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n}\n"},"155":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"157":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"158":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"160":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let NB: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N, NB> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, constants::CONTRACT_INSTANCE_LENGTH,\n utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nunconstrained fn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained pub fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"162":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"164":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\nunconstrained pub fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\nunconstrained pub fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\nunconstrained pub fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\nunconstrained pub fn get_version() -> Field {\n get_version_oracle()\n}\n"},"167":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{storage::map::derive_storage_slot_in_map, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n\n"},"169":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T, Context> Storage<T> for PublicMutable<T, Context> {}\n\nimpl<T, Context> PublicMutable<T, Context> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, &mut PublicContext> where T: Serialize<T_SERIALIZED_LEN> + Deserialize<T_SERIALIZED_LEN> {\n // docs:start:public_mutable_struct_read\n pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write(self, value: T) {\n self.context.storage_write(self.storage_slot, value);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, UnconstrainedContext> where T: Deserialize<T_SERIALIZED_LEN> {\n unconstrained pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n}\n"},"185":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions, note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\nstruct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<N, M>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"189":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_positive_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]);\n }\n }\n\n #[test]\n fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_negative_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]);\n }\n }\n}\n"},"206":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{traits::{Empty, Serialize, Deserialize}, point::Point};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\nstruct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] }\n }\n}\n\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\nstruct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\nstruct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n// This is a hack as returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\nfn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint\n) -> EmbeddedCurvePoint\n// docs:end:embedded_curve_add\n{\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n EmbeddedCurvePoint { x, y, is_infinite: point_array[2] == 1 }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n"},"25":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained pub(crate) fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n unsafe {\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose, compute_lt, assert_gt, gt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"252":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr","source":"use crate::{merkle_tree::leaf_preimage::IndexedTreeLeafPreimage, traits::{Empty, Hash}};\n\nstruct PublicDataTreeLeafPreimage {\n slot : Field,\n value: Field,\n next_slot :Field,\n next_index : u32,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self { slot: 0, value: 0, next_slot: 0, next_index: 0 }\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash([self.slot, self.value, (self.next_index as Field), self.next_slot])\n }\n }\n}\n\nimpl IndexedTreeLeafPreimage for PublicDataTreeLeafPreimage {\n fn get_key(self) -> Field {\n self.slot\n }\n\n fn get_next_key(self) -> Field {\n self.next_slot\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl PublicDataTreeLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.slot == 0) & (self.value == 0) & (self.next_slot == 0) & (self.next_index == 0)\n }\n}\n"},"259":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr","source":"use crate::{hash::pedersen_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f);\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript = 0x2499880e2b1b831785c17286f99a0d5122fee784ce7b1c04e380c4a991da819a;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"265":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"266":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"270":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"276":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Deserialize, Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: Field = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n"},"277":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::CONTRACT_INSTANCE_LENGTH,\n traits::{Deserialize, Hash, Serialize}\n};\n\nstruct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4])\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"289":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr","source":"use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like\n// this because it means we never even need to consider cases where\n// the index is greater than p.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N]\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n assert(false, \"depth should be between 0 and 10\");\n 0\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"},"29":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\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\n#[no_predicates]\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 constrain 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\n#[no_predicates]\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 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\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 // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on 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) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\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();\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// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\ntrait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\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 fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default {\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 u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\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 u16 {\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 i16 {\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"},"293":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"3":{"path":"std/array/mod.nr","source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n // Apply a function to each element of an array, returning a new array\n // containing the mapped elements.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. This function is also sometimes\n // called `foldl`, `fold_left`, `reduce`, or `inject`.\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given array as its starting accumulator value.\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n // Returns true if all elements in the array satisfy the predicate\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n // Returns true if any element in the array satisfies the predicate\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Ord + Eq {\n pub fn sort(self) -> Self {\n self.sort_via(|a: T, b: T| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Eq {\n\n /// Sorts the array using a custom predicate function `ordering`.\n ///\n /// The `ordering` function must be designed to return `true` for equal valued inputs\n /// If this is not done, `sort_via` will fail to sort inputs with duplicated elements.\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n unsafe {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]), \"Array has not been sorted correctly according to `ordering`.\"\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Convert a sequence of bytes as-is into a string.\n /// This function performs no UTF-8 validation or similar.\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"311":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<let N: u32>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes: [u8; 31] = field.to_be_bytes();\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2: [u8; 31] = field.to_be_bytes();\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"},"313":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"326":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"328":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH = 1;\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"329":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\nstruct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"394":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[aztec(note)]\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN, ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret,\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"395":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on random version of the p256 curve (to use with touchID).\ncontract EcdsaRAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_current_public_keys\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n public_key: PrivateImmutable<EcdsaPublicKeyNote>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_current_public_keys(&mut context, this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[aztec(private)]\n #[aztec(noinitcheck)]\n #[aztec(view)]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256r1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"58":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\nstruct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::mem::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"74":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\nstruct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"76":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"78":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: Field = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS = 2;\n\n// docs:start:fee-payload-struct\nstruct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\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 if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nfn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr","source":"use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH};\nuse dep::protocol_types::traits::{Serialize, Deserialize};\n\n// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also\n// their hash, so that when reading in private we can perform a historical read for the hash and then show that it\n// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be\n// needed during public execution, and since we need to broadcast and produce hints in some standardized way.\n// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state\n// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction.\nstruct StoredKeys {\n public_keys: PublicKeys,\n hash: Field,\n}\n\nimpl StoredKeys {\n // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the\n // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but \n // Noir doesn't yet support private members.\n fn new(public_keys: PublicKeys) -> Self {\n Self { public_keys, hash: public_keys.hash().inner }\n }\n}\n\n// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field.\nglobal STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1;\n\nimpl Serialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn serialize(self) -> [Field; STORED_KEYS_LENGTH] {\n // The code below is equivalent to:\n // [ ...self.public_keys.serialize(), self.hash ]\n\n let mut array = [0; STORED_KEYS_LENGTH];\n\n let serialized_keys = self.public_keys.serialize();\n for i in 0..serialized_keys.len() {\n array[i] = serialized_keys[i];\n }\n\n array[PUBLIC_KEYS_LENGTH] = self.hash;\n\n array\n }\n}\n\nimpl Deserialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self {\n // The code below is equivalent to:\n // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] }\n\n let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH];\n for i in 0..serialized_keys.len() {\n serialized_keys[i] = array[i];\n }\n\n let hash = array[PUBLIC_KEYS_LENGTH];\n\n Self { public_keys: PublicKeys::deserialize(serialized_keys), hash }\n }\n}\n"},"86":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\nstruct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\ntrait ToPoint {\n fn to_point(self) -> Point;\n}\n\nstruct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nstruct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"88":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, address::AztecAddress, constants::CANONICAL_KEY_REGISTRY_ADDRESS,\n storage::map::derive_storage_slot_in_map\n};\nuse crate::{\n context::{PrivateContext, UnconstrainedContext},\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{\n public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys,\n constants::{NULLIFIER_INDEX, OUTGOING_INDEX}\n},\n state_vars::{public_mutable::PublicMutable, map::Map}\n};\n\nmod test;\n\n// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and\n// become invalid.\nglobal KEY_REGISTRY_UPDATE_BLOCKS = 5;\n\nglobal KEY_REGISTRY_STORAGE_SLOT = 1;\n\n// A helper function that gets app-siloed nullifier secret key for a given `npk_m_hash`. This function is used\n// in unconstrained contexts only - in Note::compute_nullifier_without_context which in turn is called by\n// `compute_note_hash_and_optionally_a_nullifier` function that is used by the NoteProcessor. The safe alternative\n// is `request_nsk_app` function define on `PrivateContext`.\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used\n// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\nunconstrained pub fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all current public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys {\n // We're going to perform historical reads from public storage, and so need to constrain the caller so that they\n // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow\n // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means\n // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased\n // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate\n // their keys frequently.\n // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of\n // an empty registry is also fresh.\n let current_header = context.get_header();\n context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS);\n\n get_historical_public_keys(current_header, account)\n}\n\n// Returns historical public keys for a given account at some block determined by a block header. We read all keys at\n// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key\n// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the\n// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of\n// breaking key rotation very well.\npub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys {\n // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them\n // once instead of having two different hints and twice as many constraints due to the double hashing.\n\n // The key registry is the primary source of information for keys, as that's where accounts store their new keys\n // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that\n // single field and then prove that we know its preimage (i.e. the current set of keys).\n let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account);\n if key_registry_hash != 0 {\n let hinted_registry_public_keys = key_registry_get_stored_keys_hint(\n account,\n historical_header.global_variables.block_number as u32\n );\n assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash);\n\n hinted_registry_public_keys\n } else {\n // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know\n // the canonical set (i.e. the ones that are part of the account's preimage).\n let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account);\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n }\n}\n\nfn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field {\n // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding\n // slot for this account.\n let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account);\n\n // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots\n // (prior to siloing!), we simply add the length to the base slot to get the last element.\n let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field;\n\n historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS)\n}\n\nunconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys {\n // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but\n // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical*\n // call!\n\n // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead\n\n let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number);\n let keys_storage = Map::new(\n context,\n KEY_REGISTRY_STORAGE_SLOT,\n |context, slot| { PublicMutable::new(context, slot) }\n );\n\n let stored_keys: StoredKeys = keys_storage.at(account).read();\n stored_keys.public_keys\n}\n"}}}
1
+ {"transpiled":true,"noir_version":"0.34.0+02fea6abe8637b9fb8f9535d1709b367d5e1da5c","name":"EcdsaRAccount","functions":[{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{"12265343917440897559":{"error_kind":"fmtstring","item_types":[],"length":20}},"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":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"constructor","is_unconstrained":false,"custom_attributes":["private","initializer"],"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":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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nBAYDYwRMLLihMDIihMCIytOCIysOCEwsuJEwDiw4oTAyIoTAiMrTgiMrDghMBoYI2BkxQmBkRUnBEZWnBAYWXFCYGTFiYAxseKEwMiKEwIjK04IjKw4ITAaGCNgZMUJgZEVJwRGVpwQGFlxQmBkxYmA0VhxQmBkxQmBkRUnBEZWnBAYDYwRMLLihMDIihMCIytOCIysOCEwsuK8BMbU5RljSukK48iKEwIjK04IjKw4ITCy4oTAaGCMgJEVJwRGVpwQGFlxQmBkxQmBkRUnAsbMihMCIytOCIysOCEwsuKEwGhgjICRFScERlacEBhZcUJgZMUJgZEVJwLGiRUnBEZWnBAYWXFCYGTFCYHRwBgBIytOCIysOCEwsuKEwMiKEwIjK04EjIUVJwRGVpwQGFlxQmBkxQmB0cAYASMrTgiMrDghMLLihMDIihMCIytOBIyVFScERlacEBhZcUJgZMUJgdHAGAEjK04IjKw4ITCy4oTAyIoTAiMrTgCMuWPFCYGRFScERlacEBhZcUJgNDBGwMiK8xIYc7YZY67jNUZWnBAYWXFCYGTFeQmMU1dnjFOq2weXYZyZl+GCyO2D80y6fD70vR6sQ9RjvR49qxP12KgHaxb12KgHKxn12KgH6xv12KiHUQ/qsV4P1kLqsVEPVkjqsVEP1k3qsVEPVlPqsVEPVlPqsV6PgdWUemzUg9WUemzUg9WUemzUg9WUemzUw6gH9VivB6sp9dioB6sp9dioB6sp9dioB6sp9dioB6sp9VivR2I1pR4b9WA1pR4b9WA1pR4b9WA1pR4b9TDqQT3W68FqSj026sFqSj026sFqSj026sFqSj026sFqSj3W62GsptRjox6sptRjox6sptRjox6sptRjox5GPajHej1YTanHRj1YTanHRj1YTanHRj1YTanHRj1YTanHej1GVlPqsVEPVlPqsVEPVlPqsVEPVlPqsVEPox7UY70erKbUY6MerKbUY6MerKbUY6MerKbUY6MerKbUY70emdWUemzUg9WUemzUg9WUemzUg9WUemzUw6gH9VivB6sp9dioB6sp9dioB6sp9dioB6sp9dioB6sp9Vivx8RqSj026sFqSj026sFqSj026sFqSj026mHUg3qs14PVlHps1IPVlHps1IPVlHps1IPVlHps1IPVlHqs16OwmlKPjXqwmlKPjXqw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","brillig_names":["get_contract_instance_internal","get_public_keys_and_partial_address","decompose_hint","notify_created_note","get_key_validation_request","unsafe_rand","lt_32_hint","lte_16_hint","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","build_msg_block_iter","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["private"],"abi":{"error_types":{"12265343917440897559":{"error_kind":"fmtstring","item_types":[],"length":20}},"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"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"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"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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Wy1pv3Ib7VdueCdWX23tdQFpvtk9/OdHDF8Bu58AmxT4Cwmw3/7/Cwmw3+j/Cwmw39K/nwC8A+lfSAD+W9T9BOC/Rd1PAP5b1P0EDGYNnPa+mdN+K3Lab0VO+63Iab8VBe23oqD9VhS0Z6agPTMFTamDptRBU+qgKXXQlDpoSp00pU6aUidNqZOm1ElT6qQpddKUOmlKnTSlTppSF02pi6bURVPqoil10ZS6aEpdNKUumlIXTamLptSTptSTptSTptSTptSTptSTptSTptSTptSTptQTptS1wJS6aB0sitbBomgdLGqBKXXROlgUrYNFLTClrgWm1LXQlHrQlHrQlHrQlHrQlHrQlHrQlHrQlJrWwaJoHSyK1sGiaB0sSmhKLTSlFppSC02phabUtI4ORevoULSODkXr6FC0jg5F6+hQSlNqpSm10pRaaUqtNKVWmlIrTamVptRGU2r7WjuDfbhjSdnX2hnsTrJfa2ewO8lap2S/1s5gd5L9WjuD3Um20c5gBeeId0620c5gBeeTd062k4Ny2nO0056jaVxy0bjkonHJReOSi8YlF41LLhqXXDQuuWhcctG45KJxyUXjkovGJReNSy4al1w0LrloXHLRuOSicclF45KLxiUXjUsuGpdcNC65aFxy0bjkonHJReOSi8YlF41LLhqXXDQuuWhcctG45KJxyUXjkovGJReNSy4al1w0LrloXHLRuOSicclF45KLxiUXjUueNC550rjkSeOSJ41LngtMqSeNS540LnnSuORJ45InjUueNC550rjkSeOSJ41LnjQuedK45EnjkieNS540LnnSuORJ45InjUueNC550rjkSeOSJ41LnjQuedK45EnjkieNS540LnnSuORJ45InjUueNC550rjkSeOSJ41LnjQuedK45EnjkqfRlJq2N+6k7Y07jabURlNqoym10ZTaaEptNKV2mlI7TalpjOKkMYqTxihOGqM4aYzipDGKk8YoThqjOGmM4qQxipPGKE4aozhpjOKkMYqTxihOGqM4aYzipDGKk8YoThqjOGmM4qQxipPGKE4aozhpjOKkMYqTxihOGqM4aYzipDGKk8YoThqjOGmM4qQxipPGKE4aozhpjOKkMYqTxihOGqM4aYzipDGKk8YoThqjOGmM4qQxipPGKE4YoygLjFFcA2Ip9RoQS6nXgFhKvQbEUuo1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ewGjOPV6aq23Ad0eLIssl/1Y1r91Xg9/ZPsWewH/+MJks1Oy1SnZ2SdZfwFv+sJkD9/tz8su4cdyJ9kaKj8OLnkT/LdUv4e/y/d/5DX8mh+HX56Xb7eKGBsR7WEAahnXr1CJO3fPtOv37cw3H/Dmmb2uZ/b588yql/vBPnf4/rnDj4PDl0X1KiZZd8Kfb+KfPuuO9Mg3eO5y9m/vtm3MluyWcHVLeDZLeBcI+okJ5yLXQObY+E7dBZp+WgK/7H9Kr/6nPP7R/+wCZH+aZLVTstYpWe+ULNol/Xqyc7k+oI2bB7SBdkh7J4t2R3sni3ZGOycraFe0d7JfzEF9nOwXc1AfJ/vFHNTHyVqnZL+Yg/o42U4OSjo5KOnkoKSTg9JODko7OSjt5KC0k4PapfHKp0m2k4PSTg5KOzko7eSgtJODsk4Oyjo5KOvkoKyTg9qlIdKnSbaTg7JODso6OSjr5KCsk4PyTg7KOzko7+SgvJOD2qVR2adJtpOD8k4Oyjs5KO/koLyTg4pODio6Oajo5KCik4PapYHgp0m2k4OKTg4qOjmo6OSgopODyk4OKjs5qOzkoLKTg9qlseenSbaTg8pODio7Oajs5KCyk4OqTg6qOjmo6uSgqpOD2qXh7qdJtpODqk4Oqjo5qOrkoKqTg5qdHNTs5KBmJwc1OzmoXRphf5pkOzmo2clBzU4OanZyULORg4qlkYOKpZGDiqWRg4qlkYOKxTol28hBBbvv+N7JNnJQwe43vneynRwUu8/43sl2clBfrSf5x8l2clBfrSf5x8l2clCdepJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depJHp57k0akneXTqSR6depLHF+tJPmVek7XbZL+Wg7qT7OEOSsMv4dsYHyc7PPVy9PDp8adkvydgnz0BZycwp11OHYuMjQTisyeQnz2B+uwJTHQC6y0+rwnMZbn7ZapXya03U/6H5B7fi/uVyY5OyUqnZNnOYedk7Wsl+6Hbn2xHsnOybPeyc7Jsp7NzsmxXtHOyX8xBfZRsLl/MQX2c7BdzUB8n+8Uc1MfJfjEH9XGy1inZRg4ql0YOKpdGDiqXRg4ql04OanRyUKOTgxqdHNTo5KCO78X9ymQ7OajRyUGNTg5qdHJQo5ODkk4OSjo5KOnkoKSTgzq+F/crk+3koKSTg5JODko6OSjp5KC0k4PSTg5KOzko7eSgju/F/cpkOzko7eSgtJOD0k4OSjs5KOvkoKyTg7JODso6Oajje3G/MtlODso6OSjr5KCsk4OyTg7KOzko7+SgvJOD8k4O6vhe3K9MtpOD8k4Oyjs5KO/koLyTg4pODio6Oajo5KCik4M6vhf3K5Pt5KCik4OKTg4qOjmo6OSgspODyk4OKjs5qOzkoI7vxf3KZDs5qOzkoLKTg8pODio7Oajq5KCqk4OqTg4K3ot752StU7KdHBS8H/jOyXZyUPA+4zsn28lBfbWe5B8n28lBfbWe5B8n28lBdepJnp16kmennuTZqSd5dupJnp16klennuTVqSd5depJXp16ktdinZJt5KCqU0/y6tSTvL5YT/IPd+esL9aT/ONkB3pH3TG9rqeePutOsrLW71pKMbM/Hf89YfSuus9IGL2z7jMS1m4JW7eEvVvC0S3h7JZwdUt4NktYujmtw/uXr6f266lT3ib8PSChBaS0gIwW0B7f9DnqcnSa3gkoI68H15vo60dAQQsoaQEVLaAJC2iXHsy7BjRoAQktIKUFZLSAHPbVoYcr9braf41e5bZCSQuoaAFNWEC20AKieWqjeWo7WqlF5OeDUI63H9nGmd39KqMeQ28fm8w+ewL+2ROIz55AfvYEiqYqExbQ4T007wZE+2Zy2jeT01Z7dunpGHENKJd7K5KWl4PF3iwxbp/620d4ObrqzYJkzY2j1a8/omu8/VVcto6eS1zed5hL5t9/e7Fzl5aRZy2/1zLOWu5WyzxruVst66zlbrWcZy33quUu3UDPWn6v5ThruVst5azlbrXUs5a71dJgD2JB++0k4CtgqdfwfXpsfMTwFbD7CdRnT2B+8gRy+ewJjM+egHz2BOC/Rd1PwD57AvDfou4nEDBrcHj3yrsB0X4rStpvRUX7rahovxUV7beiov1WVEd/E9x7E6acFhDtfbOivW9WtPfNiva+2aS9bzYHLSChBaS0gAz21TFpq1uTptSTptSTptQTptRzgSn1XGCeei4wTz0XmFLPBeap5wLz1HOBKfVcYEo9F9jqx1xgqx9zwFY/5qAp9aAp9YCtfsxBU+pBU+pBU+pBU+oB89Rz0Dy10Dy1wFY/psBWP6bQPDWtg8UU2OrHFJpSC02phabUQlNqpSm10pRaaUqtNKU+voPFvYBonlph735Mhb37MZW2+qG01Q+jrX7QOlhMWgeLabTVD6MptdGU2mie2mie2mie2mie2mme2mme2mme2mmeepeODnt+dTht9cNpSu00pXaaUjtNqYOm1EHz1EHz1EFT6l0Y1F0DonnqoCl10JQ6aKsfQVv9SNrqR9KUOmlKnbTVj6QpddKUOmlKnTSlTpqnTpqnLpqnLtrqR9FWP4rmqXdhFPf86ija6geNUZw0RnHSGMVJYxQnjVGcNEZx0hjFSWMU5y6M4q4B0Tz1pL37MWnvfkza6sdkrX7osrBWP9aAWKsfa0Cs1Y81INbqxxoQS6nXgFhKvQbE8tRrQCxPvQbE8tRrQCxPrctgeeo1IJanXgNieeo1IJanXgMy2FfHYK1+rAHRlBrGKK4B0ZQaxijqAmMU14Bonhq2y/YaEE2pd2EUdw2I5qlhjOIaEE2phbX6sQZEW/1Q2uqH0pRaaUqttNUPGKO4BkRTatgu22tANKWG7bK9BkTz1LBdtteAaKsfRlv9MJqn3oVR3POrw2irHzBGcQ2IptQwRnENiKbUMEZxDYim1DBGcQ2IptS7MIq7BkTz1H70ux+i1/34xMZ4+9WxceaomJdTx3y7fd/mhnwx5XJ4THuT7Y9ks1Oy1SnZ2SjZWDolOzolK52S1U7JWqdkvVOyrLdn14BYb8+uAdF+P4Kxw7rA2OE1INrvRzB2eA2I9vvRLuzwrgHRViVh+5uuAdGUGra/6RoQTalh+5uuAdGUGra/6RoQTalh7PAaEE2pi6bURVPqoil10ZR60pR60pR60pR60pQatr/pGhBNqWHs8BoQTalh7PAaEEypB40dHjR2eNDY4UFjh8cCU+qxwJR6LDClHgtMqQdsf9M1IJpSw/Y3XQOiKTVsf9M1IJpS09jhQWOHx6Ap9aAp9aAp9aAptdCUmsYODxo7PISm1LD9TdeAaEotNKUWmlLT2OFBY4cHjR0eNHZ40NjhQWOHh9KUWmlKDdvfdA2IptSw/U3XgGhKDdvfdA2IptSw/U3XgGhKTWOHB40dHkZTaqMptdGU2mhK7TSldppSO02pnabUsP1N14BoSu00pXaaUjtNqZ2m1EFTatj+pmtANKUOmlIHTamDptQ0RnHQGMVBYxQHjVEcNEZx0BjFQWMUB41RHDRGcdAYxUFjFAeNURw0RnHQGMVBYxQHjVEcNEZx0BjFQWMUB41RHDRGcdAYxUFjFAeNURw0RnHQGMVBYxQHjVEcNEZx0BjFQWMUB41RHDRGcdAYRaExikJjFIXGKAqNUZQFptRCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWlMYpKYxSVxigqjVHUBabUSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFozGKRmMUjcYoGo1RtAWm1EZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRacxik5jFJ3GKDqNUfQFptROYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGMWgMYpBYxSDxigGjVGMBabUQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFpDGKSWMUk8YoJo1RzAWm1EljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigmjVFMGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigmjVFMGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigmjVFMGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxTzcEZRFtUfB8uS9TagrYNlmdejRef18DF04/iYcjk8pr3J9key2SnZ6pTsbJTs4UzoS5MdnZKVTslqp2StU7LeKVm0gxrT63rq6bPuJCti42IY17/N/nT894TRLuoZCaOd1DMSRrup/ROuBe2onpEw2lU9I+E9nFWOuhydpncevNdfh64H15vq1I+AlBaQ0QLyowNaL3m9oVVuAwpaQEkLqGj30IQFtAt7vmtAgxYQTakHTakHTamH0wIKWkA0pR5FC2jCApKFFtDRSi0iP111jrcBbZzZ3a9TwGPorQcX+ewJ6GdPwD57ArRvGqF900jSAir2PZd6VV2fHhv33PzkCejy2RPY45sv4rqklMu91SrLy8Fib5aftk8t5XI5uurNYlXNjaPV45KuxrL8PFq2jp5LLD+Onkvm3397IWyXNgRnLb/XUs9a7lZLO2u5Wy39rOVutYyzlrvVMj+7EfnsXlY/u5e1z+5lDb6Kcz8B+CrO/QQUtrC3SzeVXQOi/fJqtF9ejbaeb7T1fKOt5zttPd8HLSChBURTaqcptdOU2mlK7TSldppSO02pg6bUQVPqoCl10JQ6aEodNKUOmlIHTamDptRBU+qkKXXSlDppSp00pU6aUidNqZOm1ElT6qQpddKUumhKXTSlLppSF02pi6bURVPqoil10ZS6aEpdNKWeNKWeNKWeNKWeNKWeNKWeNKWeNKWeNKWeNKWeMKWeC0yp5wJT6rnAlHouMKWeC0ypJ426nzTqftKo+7nAlHouNKUeNKUeNKUeNKUeNKUeNKUeNKUeNKWmUfeTRt1PGnU/adT9FJpSC02phabUQlNqoSm10JRaaEotNKUWmlIrTamVptRKU2qlKbXSlFppSq00pVaaUitNqZWm1EZTaqMptdGUmsYoThqjOGmM4qQxipPGKE4aozhpjOKkMYqTxihOGqM4aYzipDGKk8YoThqjOGmM4qQxipPGKE4aozhpjOKkMYqTxihOGqM4aYziPHzHd9Frgyyx8abXzOaZo+KyM9SI+baf1gMbSc3Dd5N/abLVKdnZKNlcOiU7OiUL2296Jmy/6bkLy7prQLD9pmcGLaCkBVS0gCYsoFpoAQ1aQDSlLppSF02pi6bURVPqoil10ZS6aEo9aUo9aUo9aUo9aUo9aUo9aUo9aUo9aUo9aUo9WUpty8JS6jUgllKvAbGUeg2IpdRrQCylXgNiKfUaEEup14BYSr0GxFLqNSCaUg+aUg+aUg+aUg+aUg+aUg+aUg+aUg+aUg+aUg+aUgtNqYWm1EJTaqEptdCUWmhKLTSlFppSC02phabUSlNqpSm10pRaaUqtNKVWmlIrTamVptRKU2qlKbXRlNpoSm00pTaaUhtNqY2m1EZTaqMptdGU2mhK7TSldppSO02pnabUTlNqpym105TaaUrtNKV2mlIHTamDptRBU+qgKXXQlDpoSh00pQ6aUgdNqYOm1ElT6qQpNYxRXAOiKTWMUVwDoik1jFFcA6IpNYxRXAOiKTWMUVwDoik1jFFcA6IpNYxRXAOiKTWMUVwDoik1jFFcA6IpNYxRXAOiKTWMUVwDoik1jFFcA6IpNYxRXAOiKTWMUVwDgin1oDGKg8YoDhqjOGiM4lhgSj1ojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOKgMYqDxigOGqM4aIzioDGKg8YoDhqjOGiM4qAxioPGKAqNURQaoyg0RlFojKIsMKUWGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigqjVFUGqOoNEZRaYyiLjClVhqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoGo1RNBqjaDRG0WiMoi0wpTYao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxija4YyiLKo/DpYl621AWwfLMq9Hi87r4WPoxvEx5XJ4THuT7Y9kvVOy0SnZ7JRsdUp2NkqWxLJuHOx1PbPPn2dWvYQP+v5/JHyQW3gkfCXPlDHfxD991p2ZImLjUpz1b7M/Hf89YeuWMNq/PCNhtId5RsJoH7OK1CLXQOaQjQS+ljcpvX5dl8fN1/XX8iYfJuuH09svTXZ0SlY6JYt2Sb+e7FyuzxNDbpK1Tsl+rdWdO8l+rdWdO8l+rdWdO8l+MQf1cbJfzEF9mOz4Yg7q42S/mIP6ONkv5qA+TraTgzq8i8VLk+3koEYnBzU6OajRyUGNTg5KOjko6eSgpJODkk4O6vDuMi9NtpODkk4OSjo5KOnkoKSTg9JODko7OSjt5KC0k4M6vOvTS5Pt5KC0k4PSTg5KOzko7eSgrJODsk4Oyjo5KOvkoA7vxvbSZDs5KOvkoKyTg7JODso6OSjv5KC8k4PyTg7KOzmow7skvjTZTg7KOzko7+SgvJOD8k4OKjo5qOjkoKKTg4pODurw7qUvTbaTg4pODio6Oajo5KCik4PKTg4qOzmo7OSgspODOryr8EuT7eSgspODyk4OKjs5qOzkoKqTg6pODqo6Oajq5KC+WLfvO8l2clBfrNv3nWQ7Oagv1u37TrKdHNTs5KBmJwc1Ozkodt/xvZO1Tsl2clDsXuN7J9vJQX21nuQfJ9vIQcVX60n+cbKNHFR8tZ7kHyfbyEHFYp2SbeSgolNP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw69SSPTj3Jo1NP8ujUkzw79STPTj3Js1NP8uzUkzwX65RsIweVnXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmenXqSZ6ee5NmpJ3l26kmeX6wn+ZR5TdZuk/1aDurjZI/vSa7hl/BtjI+THb6u4l9O7dPjT8l+T2B89gSEncCcdjl1LDI2EtDPnoB99gT8sycQ6ASiYl4TmMty98tUr5Jbb6b8RXKzU7LVKdnZKNlkO4edk2W7jF9O9kO3n2xHsnOybPeyc7LWKVm2K9o52S/moD5O9os5qI+T/WIO6uNkv5iD+jDZ+mIO6uNkOzmo6uSgqpODOr4X9yuT7eSgqpODqk4Oqjo5qOrkoGYnBzU7OajZyUHNTg7q+F7cr0y2k4OanRzU7OSgZicHNRs5qFoaOahaGjmoWho5qFoaOaharFOyjRxULY0cVC2NHFQtjRxULZ0c1OjkoEYnBzU6OajRyUEd34v7lcl2clCjk4ManRzU6OSgRicHJZ0clHRyUNLJQUknB3V8L+5XJtvJQUknByWdHJR0clDSyUFpJwelnRyUdnJQ2slBHd+L+5XJdnJQ2slBaScHpZ0clHZyUNbJQVknB2WdHJR1clDH9+J+ZbKdHJR1clDWyUFZJwdlnRyUd3JQ3slBeScH5Z0c1PG9uF+ZbCcH5Z0clHdyUN7JQXknBwXvxb1zsp0cFLzH987JdnJQ8N7hOyfbyUF9tZ7kHyfbyUF9tZ7kHyfbyUF9tZ7kHyfbyUF16klenXqSV6ee5NWpJ3l16klenXqSV6ee5NWpJ3l16klenXqSV6ee5NWpJ3l16klenXqSV6ee5NWpJ3l16klenXqSV6ee5NWpJ3l16klenXqSV6ee5NWpJ3l16klenXqSV6ee5NWpJ/ns1JN8dupJPjv1JJ+depLPxTol28hBzU49yWennuSzU0/y+cV6kk+Z12TtJtkv1pP8TrKHO6hF9ZLsknUn2el1PfX0WXeSlbV+11KKmf3p+O8JS7eEtVvC1i1h75ZwdEs4uyVc3RKezRI+vm/5qxPu5rQO71++ntqvp055m/D3gJQWkNECclpAe3zT56jL0Wl6J6CMvB5cb6KvHwElLaCiBTRhAe3S33nXgAYtIKEFpLSAjBaQ0wIK2FeHHq7UtVwDKpXbChUtoAkLyBZaQIMWEM1TG81T29FKLSI/H4RyvP3INs7s7lcZ9Rh6+9hk/tkTiM+eQH72BOqzJzBhqnJ4f867AQ1aQLRvJqd9Mx3eL/JuQHt800RcA8rl3oqk5eVgsTdLjNunlnK5HF31ZkGy5sbR6tcf0TXe/iouW0fPJS7vO8wl8++/vdi5S8vIs5bfa5lnLXerZZ213K2W86zlXrXcpV3nWcvvtRxnLXerpZy13K2WetZyt1raWcvdakn7lTtov50EfAUs9Rq+r49eGx8xfAXsfgLzkyeQy2dPYHz2BOSzJ6CfPQH77AnAf4u6nwD8t6j7CSTMGhzevfJuQLTfior2W1HRfisq2m9FRfut6PCuhHcDOvx9sztvwlTQAqK9b1a0982K9r7ZpL1vNmnvm02hBaS0gIwWEG11a9JWtyZNqSdNqSdLqX1ZWEq9BsRS6jUglqdeA2J56jUgllKvAbE89RoQy1OvAbGUeg2IpdRrQKzVD18Ga/VjDYi1+rEGRFPqQVPqwzu43A2IptSDptSDptSDptSD5qmF5qmF5qmFtfqxBsRa/VgDonlqWAeLNSDW6scaEE2phabUQlNqpSm10pRaaUqtNKVWmlIrzVMrzVMr692PNSDWux9rQLTVD6Otfhht9QPWwWINiLb6sUsHi10Doim10ZTaaJ7aaJ7aaJ7aaZ7aaZ7aaZ7aaZ56l44OuwZEW/1w2uqH05TaaUrtNKUOmlIHTamD5qmD5qmDptRB89RB89RBU+qgKXXQVj+StvqRtNWPpCl10pR6F2Zy14BoSp00pU6aUidNqZPmqYvmqYvmqYu2+lG01Y9dGMVdA6KtfhRt9QPGKK4B0ZQaxij6AmMU14BoSg1jFNeAaEoNYxTXgGieetI89aS9+zFp735M2OrHWGCrH2OBrX4MGqM4aIziWIwWEEypB41RHDRGcdAYxbHAPPUYME89BsxTjwHz1GPAPPXYhVHcNSDY6scYsNWPQWMUB41RHDRGcdAYxUFjFAdsl+01IJqnpjGKQ2ieWmiemsYoDhqjOIS2+qG01Q+lrX4oTamVptS7MIq7BkRTahqjOGC7bK8B0ZQatsu2D9gu22tANE9ttNUPo61+HL7L9t2AaKsfRlv9oDGKg8YoDhqjOGiM4qAxioPGKA4aozhojOJwmqd2mqf2o9/9EL3uxyc2xtuvjo0zR8W8nDrm2+37NjfkiymXw2Pam2x/JFudkp2Nko2lU7KjU7LSKVntlKx1StY7JRudkoW9PTsC9vbsoLHDg8YODxo7PGjs8KCxw4PGDo+krUombVUStr/pGhBNqWH7m/qA7W+6BkRTatj+pmtANKWG7W+6BkRTaho7PIqm1EVT6qIp9aQp9aQp9aQp9aQp9aQpNWx/0zUgmlLT2OFBY4cHjR0WGjssNHZYaOyw0NhhWWBKLQtMqWWBKbUsMKWWBabUQtvfVGj7mwptf1Oh7W8qtP1Nhba/qdDYYaGxwzJoSj1oSj1oSi00pRaaUtPYYaGxwyI0pabtbyq0/U1FaEotNKWmscNCY4eFxg4LjR0WGjssNHZYlKbUSlNq2v6mQtvfVGj7mwptf1Oh7W8qtP1Nhba/qdD2NxUaOyw0dliMptRGU2qjKbXTlNppSu00pXaaUjtNqWn7mwptf1NxmlI7TamdptRBU+qgKTVtf1Oh7W8qQVPqoCl10JSaxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoCo1RFBqjKDRGUWiMotAYRaExikJjFIXGKAqNURQaoyg0RlFojKLQGEWhMYpCYxSFxigKjVEUGqMoNEZRaIyi0BhFoTGKQmMUhcYoKo1RVBqjqDRGUWmMoi4wpVYao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKCqNUVQao6g0RlFpjKLSGEWlMYpKYxSVxigqjVFUGqOoNEZRaYyi0hhFpTGKSmMUlcYoKo1RVBqjqDRGUWmMotIYRaUxikpjFJXGKBqNUTQao2g0RtFojKItMKU2GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxigajVE0GqNoNEbRaIyi0RhFozGKRmMUjcYoGo1RNBqjaDRG0WiMotEYRaMxikZjFI3GKBqNUTQao2g0RtFojKLRGEWjMYpGYxSNxig6jVF0GqPoNEbRaYyiLzCldhqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoOo1RdBqj6DRG0WmMotMYRacxik5jFJ3GKDqNUXQao+g0RtFpjKLTGEWnMYpOYxSdxig6jVF0GqPoNEbRaYyi0xhFpzGKTmMUncYoBo1RDBqjGDRGMWiMYiwwpQ4aoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKAaNUQwaoxg0RjFojGLQGMWgMYpBYxSDxigGjVEMGqMYNEYxaIxi0BjFoDGKQWMUg8YoBo1RDBqjGDRGMWiMYtAYxaAxikFjFIPGKCaNUUwao5g0RjFpjGIuMKVOGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigmjVFMGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigmjVFMGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigmjVFMGqOYNEYxaYxi0hjFpDGKSWMUk8YoJo1RTBqjmDRGMWmMYtIYxaQxikljFJPGKCaNUUwao5g0RjFpjGLSGMWkMYpJYxSTxigWjVEsGqNYNEaxaIxiLTClLhqjWDRGsWiMYtEYxaIxikVjFIvGKBaNUSwao1g0RrFojGLRGMWiMYpFYxSLxigWjVEsGqNYNEaxaIxi0RjFojGKRWMUi8YoFo1RLBqjWDRGsWiMYtEYxaIxikVjFIvGKBaNUSwao1g0RrFojGLRGMWiMYpFYxSLxigWjVEsGqNYNEaxaIxi0RjFojGKRWMUi8YoFo1RLBqjWDRGsWiMYtEYxaIxikVjFIvGKBaNUSwao1g0RrFojGLRGMWiMYpFYxSLxigWjVEsGqNYNEaxaIxi0RjFojGKRWMUi8YoFo1RLBqjWDRGsWiMYtEYxaIxikVjFIvGKBaNUSwao1g0RrEOZxRlUf1xsCxZbwPaOliWeT1adF4PH0M3jo8pl8Nj2ptsfyRbnZKdjZI9nNt8abKjU7LSKVntlKx1StY7JRudkkU7qDG9rqeePutOsiI2LoZx/dvsT8d/Txjtop6RMNpJ7Z/wXNBu6hkJox3VMxJGu6pnJLyHs8pRl6PT9M6Dd0ZeD6431akfARktIKcFFEcHVMt1raRUbgNKWkBFC2jC7qFd2PNdAxq0gIQWEE2pB02pB02pR9ACSlpANKUeExaQLLSABi2go5VaRH666hxvA9o4s7tfp4DH0FsPLvrZE7DPnoB/9gRo3zRC+6aRogU02fdc6lV1fXrc3nO6fPYExmdPYI9vvojrklIu91arLC8Hi71Zfto+tZTL5eiqN4tVNTeOVo9LuhrL8vNo2Tp6XQVZfhy9rj/k3397IWyXNgRnLb/X0s5a7lZLP2u5Wy3jrOVutcyzlrvVsj67EfnsXtY+u5e1z+5lDb6Kcz8B+CrO/QQMtrBnTguI9sur0X55Ndp6vtHW8522nu+09XwXWkBKC4im1E5TaqcptdOU2mlK7TSlDppSB02pg6bUQVPqoCl10JQ6aEodNKUOmlIHTamTptRJU+qkKXXSlDppSp00pU6aUidNqZOm1ElT6qIpddGUumhKXTSlLppSF02pi6bURVPqoil10ZR60pR60pR60pR60pR60pR60pR60pR60pR60pR6spQ6loWl1GtALKVeA2Ip9RoQS6nXgFhKvQbEUuo1IJZSrwGxlHoNiKXUa0A0pR40pR40pR40pR40pR40pR40pR40pR40pYZR92tANKWGUfdrQDSlFppSC02phabUQlNqoSm10JRaaEotNKVWmlIrTamVptRKU2qlKbXSlFppSq00pVaaUitNqY2m1EZTaqMptdGUGsYorgHRlBrGKK4B0ZQaxiiuAdGUGsYorgHRlBrGKK4B0ZQaxiiuAdGUGsYorgHRlBrGKK4B0ZQaxiiuAdGUGsYorgHRlBrGKK4B0ZQaxiiuAR2+t5JeG2SJjTe9ZjbPHBWXnaFGzLf9tH59I6k12eqU7GyUbC6dkh2dkpVOybL2m14DMlpArP2m14BY+02vASUtoKIFNGEB1UILaNACElpANKUumlIXTamLptRFU+qiKXXRlHrSlHrSlHrSlHrSlHrSlHrSlHrSlHrSlHrSlHrClHosMKUeC0ypxwJT6rHAlHosMKUeC0ypxwJT6rHAlHosMKUeC02pB02pB02pB02pB02pB02pB02pB02pB02pB02pB02phabUQlNqoSm10JRaaEotNKUWmlILTamFptRCU2qlKbXSlFppSq00pVaaUitNqZWm1EpTaqUptdKU2mhKbTSlNppSG02pjabURlNqoym10ZTaaEptNKV2mlI7TamdptROU2qnKbXTlNppSu00pXaaUjtNqYOm1EFT6qApddCUOmhKHTSlDppSB02pg6bUQVPqpCl10pQ6aUpNYxQHjVEcNEZx0BjFQWMUB41RHDRGcdAYxUFjFAeNURw0RnHQGMVBYxQHjVEcNEZx0BjFQWMUB41RHDRGcdAYxUFj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ByWdHJR0clDSyUFJJwd1eJeWlybbyUFJJwclnRyUdHJQ0slBaScHpZ0clHZyUNrJQR3ePemlyXZyUNrJQWknB6WdHJR2clDWyUFZJwdlnRyUdXJQh3c1e2mynRyUdXJQ1slBWScHZZ0clHdyUN7JQXknB+WdHNTh3QZfmmwnB+WdHJR3clDeyUF5JwcVnRxUdHJQ0clBRScHdXgX0Jcm28lBRScHFZ0cVHRyUNHJQWUnB5WdHFR2clDZyUEd3p33pcl2clDZyUFlJweVnRxUdnJQ1clBVScHVZ0cVHVyUId3zX5psp0c1Bfr9n0n2U4O6ot1+76TbCcH9cW6fd9JtpODmp0c1OzkoA7vJP7SZDs5KHbP8b2T7eSg2L3G9062kYOqr9aT/ONkGzmo+mo9yT9OtpGDqsU6JdvIQVWnnuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSd5depJXp16klennuTVqSf57NSTfHbqST479SSfnXqSz8U6JdvIQc1OPclnp57ks1NP8tmpJ/ns1JN8dupJPjv1JJ+depLPTj3JZ6ee5LNTT/LZqSf57NSTfHbqST479SSfnXqSz049yWennuSzU0/y2akn+ezUk3x26kk+O/Ukn516ks9OPclnp57ks1NP8tmpJ/ns1JN8dupJPjv1JJ+depLPTj3JZ6ee5LNTT/LZqSf57NSTfHbqST479SSfnXqSz049yWennuSzU0/y2akn+ezUk3x26kk+O/Ukn516ks9OPclnp57ks1NP8tmpJ/ns1JN8dupJ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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["private","noinitcheck","view"],"abi":{"error_types":{"12265343917440897559":{"error_kind":"fmtstring","item_types":[],"length":20}},"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":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","pack_returns","directive_invert","directive_integer_quotient"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000004c141a0"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaRAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaRAccount::constructor_abi"},{"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"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"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"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_abi"}]}},"file_map":{"113":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.public_teardown_call_request = PublicCallRequest {\n contract_address,\n call_context,\n args_hash,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"121":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let N: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<N> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note,\n num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow).\n) -> [u8; M] where Note: NoteInterface<N> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n encrypted_bytes[64] = num_public_values; // TODO(#8558): This can be just a single bit if we store info about partial fields in ABI\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[65 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[97 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[145 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[193 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 337;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[337 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // num_public_values (1 byte)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n let num_public_values: u8 = 0;\n\n let log: [u8; 449] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note,\n num_public_values\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n assert_eq(encrypted_note_log_from_typescript, log);\n }\n\n #[test]\n unconstrained fn test_encrypted_note_log_of_finalized_partial_note_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note_public_value1 = 0x14172339287e8d281545c177313f02b6aa2fedfd628cfd8b7f11a136fd0d6557;\n let note_public_value2 = 0x0834d81e3f73c7e2809b08ae38600ffc76a2554473eeab6de7bff4b33a84feac;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n let num_public_values: u8 = 2;\n\n // First we compute the encrypted log without the public values\n let log_without_public_values: [u8; 449] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note,\n num_public_values\n );\n\n // Then we \"append\" the public values to the log by copying both the original log and the current log into a new byte array\n let mut log: [u8; 513] = [0; 513];\n for i in 0..449 {\n log[i] = log_without_public_values[i];\n }\n let note_public_value1_bytes: [u8; 32] = note_public_value1.to_be_bytes();\n let note_public_value2_bytes: [u8; 32] = note_public_value2.to_be_bytes();\n for i in 0..32 {\n log[449 + i] = note_public_value1_bytes[i];\n log[481 + i] = note_public_value2_bytes[i];\n }\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_of_finalized_partial_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38, 20, 23, 35, 57, 40, 126, 141, 40, 21, 69, 193, 119, 49, 63, 2, 182, 170, 47, 237, 253, 98, 140, 253, 139, 127, 17, 161, 54, 253, 13, 101, 87, 8, 52, 216, 30, 63, 115, 199, 226, 128, 155, 8, 174, 56, 96, 15, 252, 118, 162, 85, 68, 115, 238, 171, 109, 231, 191, 244, 179, 58, 132, 254, 172\n ];\n assert_eq(encrypted_note_log_of_finalized_partial_from_typescript, log);\n }\n}\n"},"122":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::{get_public_keys, get_ovsk_app}, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash};\n\nfn compute_raw_note_log<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow).\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n // TODO(#8589): use typesystem to skip this check when not needed\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note,\n num_public_values\n );\n let log_hash = sha256_to_field(encrypted_log);\n\n (note_hash_counter, encrypted_log, log_hash)\n}\n\nunconstrained fn compute_raw_note_log_unconstrained<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow).\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n let ovsk_app = get_ovsk_app(ovpk.hash());\n compute_raw_note_log(context, note, ovsk_app, ovpk, ivpk, recipient, num_public_values)\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_public_keys(ov).ovpk_m;\n let ivpk = get_public_keys(iv).ivpk_m;\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n // Number of public values is always 0 here because `encode_and_encrypt_note(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, iv, num_public_values);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Note: We could save a lot of gates by obtaining the following keys in an unconstrained context but this\n // function is currently not used anywhere so we are not optimizing it.\n let ovpk = get_public_keys(ov).ovpk_m;\n let ivpk = get_public_keys(iv).ivpk_m;\n\n // Number of public values is always 0 here because `encode_and_encrypt_note_unconstrained(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n\n // See the comment in `encode_and_encrypt_note_with_keys_unconstrained` for why having note hash counter\n // and log hash unconstrained here is fine.\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, iv, num_public_values)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n // Number of public values is always 0 here because `encode_and_encrypt_note_unconstrained(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, recipient, num_public_values);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Number of public values is always 0 here because `encode_and_encrypt_note_with_keys_unconstrained(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n\n // Having the log hash be unconstrained here is fine because the way this works is we send the log hash\n // to the kernel, and it gets included as part of its public inputs. Then we send the tx to the sequencer,\n // which includes the kernel proof and the log preimages. The sequencer computes the hashes of the logs\n // and checks that they are the ones in the public inputs of the kernel, and drops the tx otherwise (proposing\n // the block on L1 would later fail if it didn't because of txs effects hash mismatch).\n // So if we don't constrain the log hash, then a malicious sender can compute the correct log, submit a bad\n // log hash to the kernel, and then submit the bad log preimage to the sequencer. All checks will pass, but\n // the submitted log will not be the one that was computed by the app.\n // In the unconstrained case, we don't care about the log at all because we don't do anything with it,\n // and because it's unconstrained: it could be anything. So if a sender chooses to broadcast the tx with a log\n // that is different from the one that was used in the circuit, then they'll be able to, but they were already\n // able to change the log before anyway, so the end result is the same. It's important here that we do not\n // return the log from this function to the app, otherwise it could try to do stuff with it and then that might\n // be wrong.\n // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have\n // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause\n // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be\n // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log\n // for a note that doesn't exist).\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, recipient, num_public_values)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\npub struct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{address::AztecAddress, scalar::Scalar};\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n #[test]\n unconstrained fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n assert_eq(outgoing_body_ciphertext_from_typescript, ciphertext);\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\npub struct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nunconstrained fn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\npub struct EncryptedLogIncomingBody<let N: u32> {\n plaintext: [u8; N * 32 + 64]\n}\n\nimpl<let N: u32> EncryptedLogIncomingBody<N> {\n pub fn from_note<T>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T>(event: T, randomness: Field) -> Self where T: EventInterface<N> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: u32 = 3;\n\n impl NullifiableNote for AddressNote {\n fn compute_nullifier(\n _self: Self,\n _context: &mut PrivateContext,\n _note_hash_for_nullify: Field\n ) -> Field {\n 1\n }\n\n unconstrained fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n }\n\n struct AddressNoteHidingPoint {\n inner: Point\n }\n\n impl NoteInterface<ADDRESS_NOTE_LEN> for AddressNote {\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] {\n [self.address.to_field(), self.owner.to_field(), self.randomness]\n }\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote {\n address: AztecAddress::from_field(fields[0]),\n owner: AztecAddress::from_field(fields[1]),\n randomness: fields[2],\n header: NoteHeader::empty()\n }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_LEN * 32 + 64] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_LEN * 32 + 64] = [0; ADDRESS_NOTE_LEN * 32 + 64];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n\n fn compute_note_hash(_self: Self) -> Field {\n crate::generators::Ga1.x\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n unconstrained fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: u32 = 3;\n\n impl EventInterface<TEST_EVENT_LEN> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime\n {\n EventSelector::from_signature(\"TestEvent(Field,Field,Field)\")\n }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_LEN * 32 + 64] {\n let mut buffer: [u8; TEST_EVENT_LEN * 32 + 64] = [0; TEST_EVENT_LEN * 32 + 64];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_LEN * 32 + 32] {\n let mut buffer: [u8; TEST_EVENT_LEN * 32 + 32] = [0; TEST_EVENT_LEN * 32 + 32];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n unconstrained fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 201, 247, 40, 80, 60, 188, 158, 251, 242, 103, 197, 79, 165, 195, 10, 160, 255, 35, 167, 152, 25, 233, 77, 145, 214, 243, 210, 119, 0, 20, 29, 95, 15, 63, 33, 190, 184, 67, 254, 96, 128, 243, 220, 228, 201, 130, 86, 163, 52, 127, 111, 10, 212, 7, 160, 16, 87, 13, 39, 11, 5, 1, 164, 65, 8, 56, 82, 245, 13, 68, 176, 90, 100, 69, 243, 78, 117, 188, 221, 34, 178, 31, 155, 89, 143, 176, 129, 118, 36, 236, 64, 179, 52, 239, 184, 51, 51, 199, 221, 49, 81, 197, 17, 199, 192, 99, 49, 168, 157, 164, 190, 33, 240, 182, 214, 173, 7, 156, 102, 95, 65, 217, 225, 123, 42, 21, 124, 144\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"129":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N> + NullifiableNote {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N> + NullifiableNote + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N> + NullifiableNote + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].expect(f\"Failed to get a note\") // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"131":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{\n context::PrivateContext,\n note::{note_header::NoteHeader, note_interface::{NullifiableNote, NoteInterface}}\n};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32>(note: Note) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let note_hash = note.compute_note_hash();\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the\n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the\n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from\n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32>(note: Note) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N> + NullifiableNote {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n let note_hash = note.compute_note_hash();\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote},\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N> + NullifiableNote {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, let N: u32>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N> + NullifiableNote {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N> + NullifiableNote {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N> + NullifiableNote {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"133":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\npub struct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting\n * a change note in a token's transfer function only when there is \"change\" left).\n */\npub struct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"141":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub struct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"153":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"155":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"159":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"162":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"164":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"165":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, constants::CONTRACT_INSTANCE_LENGTH,\n utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nunconstrained fn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained pub fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"189":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes},\n note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions,\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\npub struct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<let N: u32>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N> + NullifiableNote {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<let N: u32>(self) -> Note where Note: NoteInterface<N> + NullifiableNote {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<let N: u32>(self) -> Note where Note: NoteInterface<N> + NullifiableNote {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"193":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n unconstrained fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign, compressed_point);\n }\n\n #[test]\n unconstrained fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign, compressed_point);\n }\n}\n"},"211":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{traits::{Empty, Serialize, Deserialize}, point::Point};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\npub struct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] }\n }\n}\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset+31 - i] as Field) * v;\n hi = hi + (bytes[offset+15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// This is a hack because returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n let x_coordinates_match = point1.x == point2.x;\n let y_coordinates_match = point1.y == point2.y;\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint { x: point1.x + (x_coordinates_match as Field), y: point1.y, is_infinite: x_coordinates_match };\n // point1_1 is guaranteed to have a different abscissa than point2\n let mut result = embedded_curve_add_unsafe(point1_1, point2);\n result.is_infinite = x_coordinates_match;\n\n // dbl if x_match, y_match\n let double = embedded_curve_add_unsafe(point1, point1);\n result = if double_predicate { double } else { result };\n\n // infinity if x_match, !y_match\n if point1.is_infinite {\n result= point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n let mut result_is_infinity = infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n\n EmbeddedCurvePoint { x, y, is_infinite: false }\n}\n"},"25":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained pub(crate) fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n unsafe {\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose, compute_lt, assert_gt, gt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"273":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\nuse crate::meta::{derive_deserialize, derive_serialize};\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic\n// if a value can actually be zero. In a future refactor, we can\n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\npub trait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\npub trait Hash {\n fn hash(self) -> Field;\n}\n\npub trait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\npub trait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\n#[derive_via(derive_serialize)]\npub trait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\n\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let bytes = self.as_bytes();\n let mut fields = [0; N];\n for i in 0..bytes.len() {\n fields[i] = bytes[i] as Field;\n }\n fields\n }\n}\n\n// docs:start:deserialize\n#[derive_via(derive_deserialize)]\npub trait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"274":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"278":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"284":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Deserialize, Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: u32 = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n"},"285":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::CONTRACT_INSTANCE_LENGTH,\n traits::{Deserialize, Hash, Serialize}\n};\n\npub struct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4])\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"29":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\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\n#[no_predicates]\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 constrain 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\n#[no_predicates]\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 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\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 // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on 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) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\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();\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// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\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.)\npub trait 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.\npub trait BuildHasher<H> where H: Hasher {\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere\n H: Hasher + Default {\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 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 u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\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 u16 {\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 i16 {\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"},"3":{"path":"std/array/mod.nr","source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n /// \n /// ```noir\n /// fn len(self) -> Field\n /// ```\n /// \n /// example\n /// \n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n /// \n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n /// \n /// Example:\n /// \n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n /// \n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n /// \n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n /// \n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n /// \n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Ord + Eq {\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n /// \n /// Example:\n /// \n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a: T, b: T| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Eq {\n /// Returns a new sorted array by sorting it with a custom comparison function. \n /// The original array remains untouched. \n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n /// \n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n /// \n /// Example:\n /// \n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n /// \n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n unsafe {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]), \"Array has not been sorted correctly according to `ordering`.\"\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n /// \n /// Example:\n /// \n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"301":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"323":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"337":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\npub struct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"339":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"340":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"35":{"path":"std/hash/sha256.nr","source":"use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{\n crate::sha256::digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> [u8; 32] {\n sha256_var(msg, N as u64)\n}\n\n// Convert 64-byte array to array of 16 u32s\nfn msg_u8_to_u32(msg: [u8; 64]) -> [u32; 16] {\n let mut msg32: [u32; 16] = [0; 16];\n\n for i in 0..16 {\n let mut msg_field: Field = 0;\n for j in 0..4 {\n msg_field = msg_field * 256 + msg[64 - 4*(i + 1) + j] as Field;\n }\n msg32[15 - i] = msg_field as u32;\n }\n\n msg32\n}\n\nunconstrained fn build_msg_block_iter<let N: u32>(msg: [u8; N], message_size: u64, msg_start: u32) -> ([u8; 64], u64) {\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut msg_byte_ptr: u64 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n for k in msg_start..msg_end {\n if k as u64 < message_size {\n msg_block[msg_byte_ptr] = msg[k];\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n (msg_block, msg_byte_ptr)\n}\n\n// Verify the block we are compressing was appropriately constructed\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u64,\n msg_block: [u8; 64],\n msg_start: u32\n) -> u64 {\n let mut msg_byte_ptr: u64 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n let mut extra_bytes = 0;\n if msg_end > N {\n msg_end = N;\n extra_bytes = msg_end - N;\n }\n\n for k in msg_start..msg_end {\n if k as u64 < message_size {\n assert_eq(msg_block[msg_byte_ptr], msg[k]);\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\nglobal BLOCK_SIZE = 64;\nglobal ZERO = 0;\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> [u8; 32] {\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut h: [u32; 8] = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]; // Intermediate hash, starting with the canonical initial value\n let mut msg_byte_ptr = 0; // Pointer into msg_block\n\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n if msg_start as u64 < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if msg_byte_ptr == 64 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n\n if msg_start as u64 < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if msg_byte_ptr == BLOCK_SIZE as u64 {\n msg_byte_ptr = 0;\n }\n\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n msg_block[msg_byte_ptr] = 1 << 7;\n let last_block = msg_block;\n msg_byte_ptr = msg_byte_ptr + 1;\n\n unsafe {\n let (new_msg_block, new_msg_byte_ptr) = pad_msg_block(msg_block, msg_byte_ptr);\n msg_block = new_msg_block;\n if crate::runtime::is_unconstrained() {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..64 {\n assert_eq(msg_block[i], last_block[i]);\n }\n\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n // Not enough bits (64) to store length. Fill up with zeros.\n for _i in 57..64 {\n if msg_byte_ptr <= 63 & msg_byte_ptr >= 57 {\n assert_eq(msg_block[msg_byte_ptr], zero);\n msg_byte_ptr += 1;\n }\n }\n }\n\n if msg_byte_ptr >= 57 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..56 {\n let predicate = (i < msg_byte_ptr) as u8;\n let expected_byte = predicate * last_block[i];\n assert_eq(msg_block[i], expected_byte);\n }\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let len = 8 * message_size;\n let mut reconstructed_len: Field = 0;\n for i in 56..64 {\n reconstructed_len = 256 * reconstructed_len + msg_block[i] as Field;\n }\n assert_eq(reconstructed_len, len as Field);\n }\n\n hash_final_block(msg_block, h)\n}\n\nunconstrained fn pad_msg_block(mut msg_block: [u8; 64], mut msg_byte_ptr: u64) -> ([u8; 64], u64) {\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n if msg_byte_ptr >= 57 {\n // Not enough bits (64) to store length. Fill up with zeros.\n if msg_byte_ptr < 64 {\n for _ in 57..64 {\n if msg_byte_ptr <= 63 {\n msg_block[msg_byte_ptr] = 0;\n msg_byte_ptr += 1;\n }\n }\n }\n }\n (msg_block, msg_byte_ptr)\n}\n\nunconstrained fn attach_len_to_msg_block(mut msg_block: [u8; 64], mut msg_byte_ptr: u64, message_size: u64) -> [u8; 64] {\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for _i in 0..64 {\n // In any case, fill blocks up with zeros until the last 64 (i.e. until msg_byte_ptr = 56).\n if msg_byte_ptr < 56 {\n msg_block[msg_byte_ptr] = 0;\n msg_byte_ptr = msg_byte_ptr + 1;\n } else if msg_byte_ptr < 64 {\n for j in 0..8 {\n msg_block[msg_byte_ptr + j] = len_bytes[j];\n }\n msg_byte_ptr += 8;\n }\n }\n msg_block\n}\n\nfn hash_final_block(msg_block: [u8; 64], mut state: [u32; 8]) -> [u8; 32] {\n let mut out_h: [u8; 32] = [0; 32]; // Digest as sequence of bytes\n\n // Hash final padded block\n state = sha256_compression(msg_u8_to_u32(msg_block), state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[7 - j] as Field).to_le_bytes();\n for k in 0..4 {\n out_h[31 - 4*j - k] = h_bytes[k];\n }\n }\n\n out_h\n}\n"},"405":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{NoteHeader, NoteInterface, NullifiableNote, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator},\n macros::notes::note_custom_interface, generators::Ga1 as Gx_1, generators::Ga2 as Gx_2,\n generators::Ga3 as Gy_1, generators::Ga4 as Gy_2, generators::Ga5 as Gnpk_m_hash, generators::G_slot\n};\n\nuse std::hash::from_field_unsafe;\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: u32 = 5;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[note_custom_interface]\npub struct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] = [0; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = EcdsaPublicKeyNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n\n fn get_note_type_id() -> Field {\n comptime\n {\n let bytes = \"EcdsaPublicKeyNote\".as_bytes();\n let hash = aztec::protocol_types::hash::poseidon2_hash_bytes(bytes);\n let hash_bytes = hash.to_be_bytes::<4>();\n aztec::protocol_types::utils::field::field_from_bytes(hash_bytes, true)\n }\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_note_hash(self) -> Field {\n let serialized = self.serialize_content();\n std::embedded_curve_ops::multi_scalar_mul(\n [Gx_1, Gx_2, Gy_1, Gy_2, Gnpk_m_hash, G_slot],\n [\n from_field_unsafe(serialized[0]),\n from_field_unsafe(serialized[1]),\n from_field_unsafe(serialized[2]),\n from_field_unsafe(serialized[3]),\n from_field_unsafe(serialized[4]),\n from_field_unsafe(self.get_header().storage_slot)\n ]\n ).x\n }\n}\n\nimpl NullifiableNote for EcdsaPublicKeyNote {\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator(\n [\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field\n )\n }\n\n unconstrained fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator(\n [\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"406":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on random version of the p256 curve (to use with touchID).\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract EcdsaRAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_public_keys,\n macros::{storage::storage, functions::{private, initializer, view, noinitcheck}}\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[storage]\n struct Storage<Context> {\n public_key: PrivateImmutable<EcdsaPublicKeyNote, Context>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[private]\n #[initializer]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_public_keys(this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[private]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[private]\n #[noinitcheck]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256r1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"58":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\npub struct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::mem::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"},"59":{"path":"std/panic.nr","source":"pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"74":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress, inner_hash: Field) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress\n) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress, inner_hash: Field) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(consumer: AztecAddress, chain_id: Field, version: Field, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"76":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"78":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: u32 = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS: u32 = 2;\n\n// docs:start:fee-payload-struct\npub struct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\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 if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nunconstrained fn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"87":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::address::AztecAddress;\nuse crate::{\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{public_keys::PublicKeys, constants::{NULLIFIER_INDEX, OUTGOING_INDEX}}\n};\n\nmod test;\n\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used\n// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\nunconstrained pub fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_public_keys(account: AztecAddress) -> PublicKeys {\n let (hinted_canonical_public_keys, partial_address) = unsafe {\n get_public_keys_and_partial_address(account)\n };\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n}\n"}}}