@aztec/accounts 0.53.0 → 0.54.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.33.0+eab944cbb77eb613e61a879312b58c415f8a0c13","name":"SchnorrAccount","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":"field"},"visibility":"private"},{"name":"signing_pub_key_y","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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WteNSOuudd2JtNO07jQirYfW9SDSTte604m0M7TuDCLtTK07k0jrqXU9ibSztO4sIu1srTubSOuldb2ItHO07hwi7VytO5dIO0/rziPSemtdbyKtj9b1IdIKta6QSCvSuiIiLaJ1ESItqnVRIq1Y64qJtJjWxYi0vlrXl0jrp3X9iLT+WtefSDtf684n0i7QuguItAFaN4BIG6h1A4m0QVo3iEgbrHWDibQhWjeESBuqdUOJtGFaN4xIG651w4m0EVo3gkgbqXUjibRRWjeKSButdaOJtAu17kIibYzWjSHSxmrdWCJtnNaNI9Iu0rqLiLSLte5iIm281o0n0iZo3QQibaLWTSTSLtG6S4i0S7XuUiJtktZNItIu07rLiLTLte5yIm2y1k0m0qZo3RQi7Qqtu4JIu1LrriTSrtK6q4i0qVo3lUi7WuuuJtKu0bpriLRrte5aIu06rbuOSLte664n0qZp3TQibbrWTSfSbtC6G4i0G7XuRiJthtbNINJu0rqbiLSZWjeTSJuldbOItNlaN5tIu1nrbibSbtG6W4i0OVo3h0i7VetuJdJu07rbiLS5WjeXSLtd624n0u7QujuItDu17k4ibZ7WzSPS7tK6u4i0u7XubiJtvtbNJ9Lu0bp7iLR7te5eIu0+rbuPSLtf6+4n0h7QugeItAe17kEi7SGte4hIe1jrHibSFmjdAiLtEa17hEh7VOseJdIe07rHiLSFWreQSFukdYuItMe17nEibbHWLSbSntC6J4i0J7XuSSJtidYtIdKWat1SIm2Z1i0j0p7SuqeItKe17mki7Rmte4ZIe1brniXSlmvdciLtOa17jkhboXUriLTnte55Im2l1q0k0l7QuheItBe17kUi7SWte4lIe1nrXibSVmndKiJttdatJtLWaN0aIm2t1q0l0tZp3Toibb3WrSfSXtG6V4i0DVq3gUh7VeteJdJe07rXiLSNWreRSHtd614n0t7QujeItE1at4lIe1Pr3iTS3tK6t4i0t7XubSLtHa17h0h7V+veJdLe07r3iLT3te59Im2z1m0m0j7Qug+ItA+17kMi7SOt+4hI26J1W4i0rVq3lUj7WOs+JtI+0bpPiLRtWreNSPtU6z4l0j7Tus+ItM+17nMi7Qut+4JI+1LrviTSvtK6r4i0r7XuayLtG637hkj7Vuu+JdK+07rviLTvte57Iu0HrfuBSPtR634k0n7Sup+ItJ+17mci7Ret+4VI+1XrfiXSftO634i037XudyLtD637g0j7U+v+JNL+0rq/iLTtWredSNuhdTuItL+17m8i7Z+vM1XaO62CoyPS0rQujUhL17p0Ii1D6zKItEytyyTSsrQui0jL1rpsIi1H63KItIpaV5FIq6R1lYi0ylpXmUironVViLSqWleVSKumddWItOpaV51Iq6F1NYi0/bRuPyKtptbVJNJqaV0tIm1/rdufSDtA6w4g0g7UugOJtNpaV5tIq6N1dYi0g7TuICKtrtbVJdLqaV09Iq2+1tUn0g7WuoOJtAZa14BIO0TrDiHScrUul0hrqHUNibRGWteISDtU6w4l0g7TusOItMO17nAi7QitO4JIa6x1jYm0JlrXhEg7UuuOJNKO0rqjiLSmWteUSGumdc2ItKO17mgirbnWNSfSjtG6Y4g0S+ssIk1pnSLS/FrnJ9ICWhcg0oJaFyTS8rQuj0jL17p8Ii2kdSEiLax1YSKtQOsKiLRjte5YIu04rTuOSDte644n0k7QuhOItBZa14JIa6l1LYm0VlrXikhrrXWtibQTte5EIq2N1rUh0tpqXVuUtq8nsuT4DH0LVn9719TzOPETVPDDIfDDHhyd881opzzs71NWT9sl73xQhNY7l/1tW+epSsUD+49oNygybMwQ/VSVzoP7+uKudEJ27N15pe1OzyLucf63ggbWp8Xd7/yvTbkisnX/uPRW+r3l7tr53dwDzORt4SdAOPyppzz5GD8Tl338bwP5tH3xP02Y49vTL62YyhZlufMz8WfYF35yWwWCUyWUxv3gmMpm8t7D5w7/yvvwQ7ztWE5D/0ulU7oqxOfUJHT/AxY/Kx9GigsA","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":"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":"H4sIAAAAAAAA/+2dB3gU1dfGN7sLhC5KrwEVbOjOZpNsbICCDRs27JoKKBCEoGJHxd57R8WGDVERFVEQFVERFRs2bFjAAhawgd+54Q4crkMIyTm7+z7/b5/nJXeHmTPvuffu/d2Z2Z3JCq1+ta4XCo2rt7qcRYrYv2FSjrPM/8vL9QPWaxKwrFnAsk0Clm0asKwNqbezrEvAejkBy7oGLOsWsKy7XcZfWfZvb/s3N5afSJQVxMu8XK8oFi8sTubFEnnF+Ukv6eUl80rjydzcsmQiWVBYXFgQK/QSuWVeeV5hbnls9evR8NpYsTq94iWaPieJ+YzFNH0+Vmufnucu8ftZlHk17bXKlnuE1pYnseWP2bK/3WR6/zjpCdKT4dXLg2JPZjEeZ+UnWPlJJ/YUev8UaSrp6WpiT2ExnmLlqaz8tBP7GXr/LGka6blqYj/DYjzLytNY+Tkn9nR6/zzpBdKMamJPZzGeZ+UXWHmGE3smvX+RNIv0UjWxZ7IYL7LyLFZ+yYn9Mr1/hTSb9Go1sXk/eTlcs34yh96/Rnqd9EY1seewGK+x8uus/IYTey69f5M0j/RWNbHnshhvsvI8Vn7Lif02vX+HNJ/0bjWx32Yx3mHl+az8rhP7PXr/PukD0ofVxH6PxXiflT9g5Q+d2Avo/Uekj0mfVBN7AYvxESt/zMqfOLE/pfefkRaSPg+vXe6/wvZvb/s3VreX1z0kN4Z+ITfWe5ynJm6OUw9ZwvUQFayH6nzWNfaXctwv0/T5Ve195rkLgj5bX7LPkHn55U6s/JXz2fqa3i8ifUP6NuCzFRHuU50FY30dlmub78I6czLp+ushGGuRYP19L1h/QX37O9a3v2flb1j5W6dvL6b3S0g/kH60fbsei7m+V2+h+m3AYv5kIfWz/bvU/l1m//5i//5q//4WDq17APVbwIDvgq+ujZglmPyycGoOcmJ1e3m/hmXrLzu09kOfZRve76A/s/JSW84n/U7l5eHVnTMaCu6c0nn/LvyB9V8rwoqGTXDpuH+EZWc5Gnn/EV5bwUJxY6nsbMuVOtufYUXDfyp0tr8yvLOZvP9S6GxBXuua/x/Wq3Tcv4UP2czp2kgooE4TXjye6yUKyFqMPJaWJONlyaK8vKLCvHhporQ8Hovn5ZeXxchbaWGikBYnvJKiWKw8VlRc7uWtcuMVJUso6/xYaYz+Kc8rTVLaicLSRLI8N5ZIlMbyvUSsuDBZVlrgFRQVFuflxovK83NjJV5ebqyg0Fsl3OYm93BQ3nWsU2mfJt4/ZHSlIbKlcD3Hu/+S/rytUpolCdd5nNfFv/4b97qF+Y+VzjJTcAkjfUy0SmBQLStf/fpXcoCO6DSu9PkuyZyzWM5eMjceL8g16yVLY16itCSejMdLixOxklhRSbysMOEVlifiidyS0pJiilnklcfKi0oKy5OrfaVyhpIV0ZmhhCOKhsMR+biRSGbPUEzeEYZTobgqM5SQ9SodNyrcWf3B2sTVPHz7W2G2Vi+i2wdidXtVzag18q6f4Xlrzc4bCPf9pjZ304/8czP1WbmB/fwa/cPO36xkZX+Sk01/G5IaRVJ7Luc3pcPrxhFFw40V4NUkw+Fl8m6iBK/1da661kNTuQ9crqbPZrX3mesuCLoC0ZQNCr+wD382W94ssu4ViOb0fhNSC9KmEf0r118IzuQ3iwhO2kJrJxkmbk5o7SF2KgbIxQoDJL9Y0pJyakVqTWpDaktqR2pP6kDqSOpE6kzqYvIndSV1I21O2oK0Jak7qQdpK9LWpG1I25K2I/UkbU/agRQjeaQ4KZeUIOWR8kkFpCSpkLQjaSfSzqRdSLuSepl2JfUh7UbandSX1I+0B2lP0l6kvUn7kPqT9iXtR9qfdADpQNIA0kGkgyOh1J4zaRnRGThDkj69WIzXxSF20D/UPWdi/mO5s8yslO2YiihWYt3OmcS8QwSpeyjIORPJnA9bJxatWxRP5JflxfLLknS2trCgPK8gVlJUXl5aEEuUFMeKixP5sVwvt7y4IB4rjhfSbgvL8kqqvnKZ0nMmhymdMxkYUTQ8UGHaeXiGTztN3ocrTTulp3GHWq/ScY9QOmdi4jYMpZaArQAJeKTtf0e5BDwygIBHpYCArQQJeKTgAHAUCAElcz4alIBHKxHwmIii4WMUCHhshhPQ5H0sCAGPsl6l4x6nRMDj0kDA1oAEPN72vyKXgMcHELAoBQRsLUjA4wUHgCIQAkrmXAxKwGIlApZEFA2XKBCwNMMJaPIuBSFgkfUqHbdMiYBlaSBgG0ACltv+N8glYHkAAQelgIBtBAlYLjgADAIhoGTOg0EJOFiJgEMiioaHKBDwhAwnoMn7BBACDrJepeOeqETAE9NAwLaABBxq+98wl4BDAwg4LAUEbCtIwKGCA8AwEAJK5jwclIDDlQhYEVE0XKFAwBEZTkCT9wgQAg6zXqXjnqREwJPSQMB2gAQcafvfKJeAIwMIOCoFBGwnSMCRggPAKBACSuZcCUrASiUCjo4oGh6tQMCTM5yAJu+TQQg4ynqVjnuKEgFPSQMB2wMS8FTb/8a4BDw1gIBjUkDA9oIEPFVwABgDQkDJnE8DJeBpSgQ8PaJo+HQFAp6R4QQ0eZ8BQsAx1qt03DOVCHhmGgjYAZCAZ9n+d7ZLwLMCCHh2CgjYQZCAZwkOAGeDEFAy53NACXiOEgHHRhQNj1Ug4LkZTkCT97kgBDzbepWOe54SAc9LAwE7AhLwfNv/xrkEPD+AgONSQMCOggQ8X3AAGAdCQMmcLwAl4AVKBLwwomj4QgUCXpThBDR5XwRCwHHWq3Tci5UIeHEaCNgJkICX2P53qUvASwIIeGkKCNhJkICXCA4Al4IQUDLny0AJeJkSAS+PKBq+XIGAV2Q4AU3eV4AQ8FLrVTrulUoEvDINBOwMSMCrbP+72iXgVQEEvDoFBOwsSMCrBAeAq0EIKJnzNaAEvEaJgNdGFA1fq0DA6zKcgCbv60AIeLX1Kh33eiUCXp8GAnYBJOANtv/d6BLwhgAC3pgCAnYRJOANggPAjSAElMz5JlAC3qREwJsjioZvViDgLRlOQJP3LSAEvNF6lY57qxIBb00DAXMACXib7X+3uwS8LYCAt6eAgDmCBLxNcAC4HYSAkjnfAUrAO5QIOD6iaHi8AgHvzHACmrzvBCHg7dardNy7lAh4VxoI2BWQgHfb/jfBJeDdAQSckAICdhUk4N2CA8AEEAJK5nwPKAHvUSLgvRFFw/cqEPC+DCegyfs+EAJOsF6l496vRMD700DAboAEfMD2v4kuAR8IIODEFBCwmyABHxAcACaCEFAy5wdBCfigEgEfiigafkiBgA9nOAFN3g+DEHCi9Sod9xElAj6SBgJuDkjAR23/m+QS8NEAAk5KAQE3FyTgo4IDwCQQAkrm/BgoAR9TIuDkiKLhyQoEfDzDCWjyfhyEgJOsV+m4TygR8Ik0EHALQAI+afvfFJeATwYQcEoKCLiFIAGfFBwApoAQUDLnp0AJ+JQSAadGFA1PVSDg0xlOQJP30yAEnGK9Ssd9RomAz6SBgFsCEvBZ2/+muQR8NoCA01JAwC0FCfis4AAwDYSAkjk/B0rA55QIOD2iaHi6AgGfz3ACmryfByHgNOtVOu4LSgR8IQ0E7A5IwBm2/810CTgjgIAzU0DA7oIEnCE4AMwEIaBkzi+CEvBFJQLOiiganqVAwJcynIAm75dACDjTepWO+7ISAV9OAwF7ABLwFdv/ZrsEfCWAgLNTQMAeggR8RXAAmA1CQMmcXwUl4KtKBJwTUTQ8R4GAr2U4AU3er4EQcLb1Kh33dSUCvp4GAm4FSMA3bP+b6xLwjQACzk0BAbcSJOAbggPAXBACSub8JigB31Qi4LyIouF5CgR8K8MJaPJ+C4SAc61X6bhvKxHw7TQQcGtAAr5j+998l4DvBBBwfgoIuLUgAd8RHADmgxBQMud3QQn4rhIB34soGn5PgYDvZzgBTd7vgxBwvvUqHfcDJQJ+kAYCbgNIwA9t/1vgEvDDAAIuSAEBtxEk4IeCA8ACEAJK5vwRKAE/UiLgxxFFwx8rEPCTDCegyfsTEAIusF6l436qRMBP00DAbQEJ+JntfwtdAn4WQMCFKSDgtoIE/ExwAFgIQkDJnD8HJeDnSgT8IqJo+AsFAn6Z4QQ0eX8JQsCF1qt03K+UCPhVGgi4HSABv7b9b5FLwK8DCLgoBQTcTpCAXwsOAItACCiZ8zegBPxGiYDfRhQNf6tAwO8ynIAm7+9ACLjIepWO+70SAb9PAwF7AhJwse1/S1wCLg4g4JIUELCnIAEXCw4AS0AIKJnzD6AE/EGJgD9GFA3/qEDAnzKcgCbvn0AIuMR6lY77sxIBf04DAbcHJOBS2/+WuQRcGkDAZSkg4PaCBFwqOAAsAyGgZM6/gBLwFyUC/hpRNPyrAgF/y3ACmrx/AyHgMutVOu7vSgT8PQ0E3AGQgMtt/1vhEnB5AAFXpICAOwgScLngALAChICSOf8BSsA/lAj4Z0TR8J8KBPwrwwlo8v4LhIArrFfpuH8rEfDvNBAwBkjAf2z/W+kS8J8AAq5MAQFjggT8R3AAWAlCQMmcV4EScJUSAf+NKBr+V4GApsalOoNW3lW9QjauCgFXWq/ScbOiOgQ0cVNNQA+QgGHb/yL+6ORXoPkPl4BmJW0CeoIEDAsOAJEoBgElc45GMQkYjeoQsF5U0XC9qHzc+hlOQJN3fRACRqxX6bgNlAjYIA0EjAMSMNv2v4YuAbMDCNgwBQSMCxIwW3AAaAhCQMmcG4ESsJESARtHFQ03ViBgkwwnoMm7CQgBG1qv0nGbKhGwaRoImAtIwGa2/zV3CdgsgIDNU0DAXEECNhMcAJqDEFAy501ACbiJEgFbRBUNt1Ag4KYZTkCT96YgBGxuvUrH3UyJgJulgYAJQAK2tP2vlUvAlgEEbJUCAiYECdhScABoBUJAyZxbgxKwtRIB20QVDbdRIGDbDCegybstCAFbWa/ScdspEbBdGgiYB0jA9rb/dXAJ2D6AgB1SQMA8QQK2FxwAOoAQUDLnjqAE7KhEwE5RRcOdFAjYOcMJaPLuDELADtardNwuSgTskgYC5gMSMMf2v64uAXMCCNg1BQTMFyRgjuAA0BWEgJI5dwMlYDclAm4eVTS8uQIBt8hwApq8twAhYFfrVTrulkoE3DINBCwAJGB32/96uATsHkDAHikgYIEgAbsLDgA9QAgomfNWoATcSomAW0cVDW+tQMBtMpyAJu9tQAjYw3qVjrutEgG3TQMBk4AE3M72v54uAbcLIGDPFBAwKUjA7QQHgJ4gBJTMeXtQAm6vRMAdooqGd1AgYCzDCWjyjoEQsKf1Kh3XUyKglwYCFgISMG77X65LwHgAAXNTQMBCQQLGBQeAXBACSuacACVgQomAeVFFw3kKBMzPcAKavPNBCJhrvUrHLVAiYEEaCLgjIAGTtv8VugRMBhCwMAUE3FGQgEnBAaAQhICSOe8ISsAdlQi4U1TR8E4KBNw5wwlo8t4ZhICF1qt03F2UCLhLGgi4EyABd7X9r5dLwF0DCNgrBQTcSZCAuwoOAL1ACCiZc29QAvZWImCfqKLhPgoE3C3DCWjy3g2EgL2sV+m4uysRcPc0EHBnQAL2tf2vn0vAvgEE7JcCAu4sSMC+ggNAPxACSua8BygB91Ai4J5RRcN7KhBwrwwnoMl7LxAC9rNepePurUTAvdNAwF0ACbiP7X/9XQLuE0DA/ikg4C6CBNxHcADoD0JAyZz3BSXgvkoE3C+qaHg/BQLun+EENHnvD0LA/tardNwDlAh4QBoIuCsgAQ+0/W+AS8ADAwg4IAUE3FWQgAcKDgADQAgomfNBoAQ8SImAB0cVDR+sQMBDMpyAJu9DQAg4wHqVjnuoEgEPTQMBewES8DDb/wa6BDwsgIADU0DAXoIEPExwABgIQkDJnA8HJeDhSgQ8Iqpo+AgFAh6Z4QQ0eR8JQsCB1qt03KOUCHhUGgjYG5CAR9v+d4xLwKMDCHhMCgjYW5CARwsOAMeAEFAy52NBCXisEgGPiyoaPk6BgMdnOAFN3seDEPAY61U6bpESAYvSQMA+gAQstv2vxCVgcQABS1JAwD6CBCwWHABKQAgomXMpKAFLlQhYFlU0XKZAwPIMJ6DJuxyEgCXWq3TcQUoEHJQGAu4GSMDBtv8NcQk4OICAQ1JAwN0ECThYcAAYAkJAyZxPACXgCUoEPDGqaPhEBQIOzXACmryHghBwiPUqHXeYEgGHpYGAuwMScLjtfxUuAYcHELAiBQTcXZCAwwUHgAoQAkrmPAKUgCOUCHhSVNHwSQoEHJnhBDR5jwQhYIX1Kh13lBIBR6WBgH0BCVhp+99ol4CVAQQcnQIC9hUkYKXgADAahICSOZ8MSsCTlQh4SlTR8CkKBDw1wwlo8j4VhICjrVfpuGOUCDgmDQTsB0jA02z/O90l4GkBBDw9BQTsJ0jA0wQHgNNBCCiZ8xmgBDxDiYBnRhUNn6lAwLMynIAm77NACHi69Sod92wlAp6dBgLuAUjAc2z/G+sS8JwAAo5NAQH3ECTgOYIDwFgQAkrmfC4oAc9VIuB5UUXD5ykQ8PwMJ6DJ+3wQAo61XqXjjlMi4Lg0EHBPQAJeYPvfhS4BLwgg4IUpIOCeggS8QHAAuBCEgJI5XwRKwIuUCHhxVNHwxQoEvCTDCWjyvgSEgBdar9JxL1Ui4KVpIOBegAS8zPa/y10CXhZAwMtTQMC9BAl4meAAcDkIASVzvgKUgFcoEfDKqKLhKxUIeFWGE9DkfRUIAS+3XqXjXq1EwKvTQMC9AQl4je1/17oEvCaAgNemgIB7CxLwGsEB4FoQAkrmfB0oAa9TIuD1UUXD1ysQ8IYMJ6DJ+wYQAl5rvUrHvVGJgDemgYD7ABLwJtv/bnYJeFMAAW9OAQH3ESTgTYIDwM0gBJTM+RZQAt6iRMBbo4qGb1Ug4G0ZTkCT920gBLzZepWOe7sSAW9PAwH7AxLwDtv/xrsEvCOAgONTQMD+ggS8Q3AAGA9CQMmc7wQl4J1KBLwrqmj4LgUC3p3hBDR53w1CwPHWq3TcCUoEnJAGAu4LSMB7bP+71yXgPQEEvDcFBNxXkID3CA4A94IQUDLn+0AJeJ8SAe+PKhq+X4GAD2Q4AU3eD4AQ8F7rVTruRCUCTkwDAfcDJOCDtv895BLwwQACPpQCAu4nSMAHBQeAh0AIKJnzw6AEfFiJgI9EFQ0/okDARzOcgCbvR0EI+JD1Kh13khIBJ6WBgPsDEvAx2/8muwR8LICAk1NAwP0FCfiY4AAwGYSAkjk/DkrAx5UI+ERU0fATCgR8MsMJaPJ+EoSAk61X6bhTlAg4JQ0EPACQgE/Z/jfVJeBTAQScmgICHiBIwKcEB4CpIASUzPlpUAI+rUTAZ6KKhp9RIOCzGU5Ak/ezIAScar1Kx52mRMBpaSDggYAEfM72v+kuAZ8LIOD0FBDwQEECPic4AEwHIaBkzs+DEvB5JQK+EFU0/IICAWdkOAFN3jNACDjdepWOO1OJgDPTQMABgAR80fa/WS4BXwwg4KwUEHCAIAFfFBwAZoEQUDLnl0AJ+JISAV+OKhp+WYGAr2Q4AU3er4AQcJb1Kh13thIBZ6eBgAcBEvBV2//muAR8NYCAc1JAwIMECfiq4AAwB4SAkjm/BkrA15QI+HpU0fDrCgR8I8MJaPJ+A4SAc6xX6bhzlQg4Nw0EPBiQgG/a/jfPJeCbAQSclwICHixIwDcFB4B5IASUzPktUAK+pUTAt6OKht9WIOA7GU5Ak/c7IAScZ71Kx52vRMD5loAu+aTbcHFYzn+OjfMueX+P9D7pA9KHpAWkj0gfkz4hfUr6jLSQ9DnpC9KXpK9IX5MWkb4hfUv6jvQ9aTFpCekH0o+kn0g/k5aSlpF+If1qRylel+9a8PFl7wUsez9g2QcByz4MWLYgYNlHAcs+Dlj2ScCyTwOWfRawbGHAss8Dln0RsOzLgGVfBSz7OmDZooBl3wQs+zZg2XcBy74PWLY4YNmSgGU/BCz7MWDZTwHLfg5YtjRg2bKAZb8ELPs1YJLlD5G97d9Y3V7rfGbrOn69G5WbsL0nyKvflSZsblvUJWfTFu+L1N/qdv2g7rHitv68DwXbYnkmt0VijU9vQd1yjrGcvY/qEiu+Tv15Hwu2xYrMbIuY49P7pJY555f/J2fv09rFSgbUn/eZYFv8kWltkQz06S3c+JwL1pOz9/nGxipYb/15Xwi2xZ+Z0xbxanx6X25MzgXV5ux9VfNYJRuoP+9rwbb4KxPaomCDPr1FNcs5VoOcvW9qEitWo/rzvhVsi7/T2xZ5NfTpfbehnBM1ztn7vtpYifKNqD9vsWBb/JOutijYKJ/ekvXnnNzInL0f1hOrsHyj68/7UbAtVqa+LWK18On9FJRzrFY5ez//N5ZXy/rzlgq2xapUtkVprX16y9bNObcOOXu/sFjx8jrVn/erYFv8m6K2iNXt5QmeH/AEj2+9FYJtYS59IrSF4HGQJziP9/4SbIsskLYQnO95gvMVb6VgW4RB2kKQa57guOzxcaWubRFRagvpLyYIfn49wf7nSdafuf7QIGSvddA1glW2/DMrHxpZe83iKFYuYuVBrDyMlUex8hhWPpuVx7Hypax8NSvfyMq3s/IEVp7IypNYeQorT2Plmaw8m5XnsvJ8Vl7AygtZeRErL2HlZay8gpVXsnKEXQ9qyMrNWbkVK3dg5a6s3IOVe7JyLisXsnIvVu7Hyv1ZeQArD2TlY1i5hJWHsHIFK49m5dNZeSwrX8jKl7Pytax8MyuPZ+V7WfkhVp7MylNZeTorz2LlOazsf/EpJ7T6xa/Tudfx+HU+fh2QXyfk1xH5dUZ+HZJfp+TXMfl1Tn4dlF8n5ddR+XVWfh2WX6fl13H5dV5+HZhfJ+bXkfl1Zn4dml+n5tex+XVufh2cXyfn19H5dXb/OvxvPmhZe5hXb/s3VreX95vgXMN88cmwKBxa/0vKdxarC+l9FBXTQWZRaSIwuPstNokvG9XVsF8pW4V0JhjSOWcJ5rw1SM5hwZy3Ack5Ipjztko5Sw+o24Vkx4b1tU2sbi+vp6DPT8MYbbM9i+Ul43mJkoRXVBArKPHKSpOlpclYvLwgN68wLy+/pLSg2MvNpauKeYkYrVmWV+Z5MS9ZWOSVFycLc/NLNX3uEMKozxiITw/EZ1zYp7S/bBrQm0T+G7eu48dm9XTzrqs/k3NzhbxbgpycyxXMOVvup0OeYL/xtNpCmtsJwbb4AoTbeSEMn/kgPgtAfCZBfBaC+NwRxOdOID53BvG5C4jPXUF89gLx2RvEZx8Qn7uB+NwdxGdfEJ/9QHzuAeJzTxCfe4H43BvE5z4gPvuD+NwXxOd+ID73B/F5AIjPA0F8DgDxeRCIz4NBfB4C4vNQEJ+HgfgcCOLzcBCfR4D4PBLE51EgPo8G8XkMiM9jQXweB+LzeBCfRSA+i0F8loD4LAXxWQbisxzE5yAQn4NBfA4B8XkCiM8TQXwOBfE5DMTncBCfFSA+R4D4PAnE50gQn6NAfFaC+BwN4vNkEJ+ngPg8FcTnGBCfp4H4PB3E5xkgPs8E8XkWiM+zQXyeA+JzLIjPc0F8ngfi83wQn+NAfF4A4vNCEJ8Xgfi8GMTnJSA+LwXxeRmIz8tBfF4B4vNKEJ9Xgfi8GsTnNSA+rwXxeR2Iz+tBfN4A4vNGEJ83gfi8GcTnLSA+bwXxeRuIz9tBfN4B4nM8iM87QXzeBeLzbhCfE0B83gPi814Qn/eB+LwfxOcDID4ngvh8EMTnQyA+Hwbx+QiIz0dBfE4C8fkYiM/JID4fB/H5BIjPJ0F8TgHx+RSIz6kgPp8G8fkMiM9nQXxOA/H5HIjP6SA+nwfx+QKIzxkgPmeC+HwRxOcsEJ8vgfh8GcTnKyA+Z4P4fBXE5xwQn6+B+HwdxOcbID7ngvh8E8TnPBCfb4H4fBvE5zsgPueD+HwXxOd7ID7fB/H5AYjPD0F8LgDx+RGIz49BfH4C4vNTEJ+fgfhcCOLzcxCfX4D4/BLE51cgPr8G8bkIxOc3ID6/BfH5HYjP70F8LgbxuQTE5w8gPn8E8fkTiM+fQXwuBfG5DMTnLyA+fwXx+RuIz99BfC4H8bkCxOcfID7/BPH5F4jPv0F8/gPicyWIz1UgPv8F8WkCIvjMAvEZBvEZAfEZBfFZD8RnfRCfDUB8ZoP4bAjisxGIz8YgPpuA+GwK4rMZiM/mID43AfHZAsTnpiA+NwPx2RLEZysQn61BfLYB8dkWxGc7EJ/tQXx2APHZEcRnJxCfnUF8dgHxmQPisyuIz24gPjcH8bkFiM8tQXx2B/HZA8TnViA+twbxuQ2Iz21BfG4H4rMniM/tQXzuAOIzBuLTA/EZB/GZC+IzAeIzD8RnPojPAhCfSRCfhSA+dwTxuROIz51BfO4C4nNXEJ+9QHz2BvHZB8TnbiA+dwfx2RfEZz8Qn3uA+NwTxOdeID73BvG5D4jP/iA+9wXxuR+Iz/1BfB4A4vNAEJ8DQHweBOLzYBCfh4D4PBTE52EgPgeC+DwcxOcRID6PBPF5FIjPo0F8HgPi81gQn8eB+DwexGcRiM9iEJ8lID5LQXyWgfgsB/E5CMTnYBCfQ0B8ngDi80QQn0NBfA4D8TkcxGcFiM8RID5PAvE5EsTnKBCflSA+R4P4PBnE5ykgPk8F8TkGxOdpID5PB/F5BojPM0F8ngXi82wQn+eA+BwL4vNcEJ/ngfg8H8TnOBCfF4D4vBDE50UgPi8G8XkJiM9LQXxeBuLzchCfV4D4vBLE51UgPq8G8XkNiM9rQXxeB+LzehCfN4D4vBHE500gPm8G8XkLiM9bQXzeBuLzdhCfd4D4HA/i804Qn3eB+LwbxOcEEJ/3gPi8F8TnfSA+7wfx+QCIz4kgPh8E8fkQiM+HQXw+AuLzURCfk0B8PgbiczKIz8dBfD4B4vNJEJ9TQHw+BeJzKojPp0F8PgPi81kQn9NAfD4H4nM6iM/nQXy+AOJzBojPmSA+XwTxOQvE50sgPl8G8fkKiM/ZID5fBfE5B8TnayA+Xwfx+QaIz7kgPt8E8TkPxOdbID7fBvH5DojP+SA+3wXx+R6Iz/dBfH4A4vNDEJ8LQHx+BOLzYxCfn4D4/BTE52cgPheC+PwcxOcXID6/BPH5FYjPr0F8LgLx+Q2Iz29BfH4H4vN7EJ+LQXwuAfH5A4jPH0F8/gTi82cQn0tBfC4D8fkLiM9fQXz+BuLzdxCfy0F8rgDx+QeIzz9BfP4F4vNvEJ//gPhcCeJzFYjPf0F8hsIYPrNAfIZBfEZAfEZBfNYD8VkfxGcDEJ/ZID4bgvhsBOKzMYjPJiA+m4L4bAbiszmIz01AfLYA8bkpiM/NQHy2BPHZCsRnaxCfbUB8tgXx2Q7EZ3sQnx1AfHYE8dkJxGdnEJ9dQHzmgPjsCuKzG4jPzUF8bgHic0sQn91BfPYA8bkViM+tQXxuA+JzWxCf24H47Anic3sln2HHZ24sP5EoK4iXebleUSxeWJzMiyXyivOTXtLLS+aVxpO5uWXJRLKgsLiwIFboJXLLvPK8wtxyG7u7YM47pCjnWN1eXiwsV3+bRTD6owfyuYmD+MwF8ZkA8ZkH4jMfxGcBiM8kiM9CEJ87gvjcCcTnziA+dwHxuSuIz14gPnuD+OwD4nM3EJ+7g/jsC+KzH4jPPUB87gnicy8Qn3uD+NwHxGd/EJ/7gvjcD8Tn/iA+DwDxeSCIzwEgPg8C8XkwiM9DQHweCuLzMBCfA0F8Hg7i8wgQn0eC+DwKxOfRID6PAfF5LIjP40B8Hg/iswjEZzGIzxIQn6UgPstAfJaD+BwE4nMwiM8hID5PAPF5IojPoSA+h4H4HA7iswLE5wgQnyeB+BwJ4nMUiM9KEJ+jQXyeDOLzFBCfp4L4HAPi8zQQn6eD+DwDxOeZID7PAvF5NojPc0B8jgXxeS6Iz/NAfJ4P4nMciM8LQHxeCOLzIhCfF4P4vATE56UgPi9T8hl2fNb1d9D1BHO+HCTn+oI5XwGScwPBnK8EyTlbMOerQHJuKJjz1SA5NxLM+RqQnBsL5nwtSM5NBHO+DiTnpoI5Xw+SczPBnG8Aybm5YM43guS8iWDON4Hk3EIw55tBct5UMOdbQHLeTDDnW0FybimY820gObcSzPl2kJxbC+Z8B0jObQRzHg+Sc1vBnO8EybmdYM53geTcXjDnu0Fy7iCY8wSQnDsK5nwPSM6dBHO+FyTnzoI53weScxfBnO8HyTlHMOcHQHLuKpjzRJCcuwnm/CBIzpsL5vwQSM5bCOb8MEjOWwrm/Ihgzub7AFEbayuWf5atg4j9f3P93FxPNtdXzfVGc/3NXI8y12fM9Qpz/t6czzbnd835TnP+z5wPM+eHzPkSc/7AHE+b40tzvGWOP8x83MxPzXzNzF8Mzw3fckhm/DPjgfl8mP5i6s/cC74H83hBeK3vrUnbkLYlbUfqSdqetIOpI5JHipt2JCVIeaR8UgEpSSok7UjaibQzaRfSrqRett36kHYj7U7qS+pH2oO0J2kv0t6kfUj9SfuS9iPtTzqAdCBpAOkg0sGkQ0iHkg4jDSQdTjqCdCTpKNLRpGNIx5KOIx1PKiIVk0pIpaQyUjlpEGkwaQjpBNKJpKGkYaThpArSCNJJpJGkUaRK0mjSyaRTSKeSxpBOI51OOoN0Juks0tmkc0hjSeeSziOdTxpn6p90Ieki0sWkS0iXki4jXU66gnQl6SrS1aRrSNeSriNdT7qBdCPpJtLNpFtIt5JuI91OuoM0nnQn6S7S3aQJpHtI95LuI91PeoA0kfQg6SHSw6RHSI+SJpEeI00mPU56gvQkaQrpKdJU0tOkZ0jPkqaRniNNJz1PeoE0gzST9CJpFukl0sukV0izSa+S5pBeI71OeoM0l/QmaR7pLdLbpHdI80nvkt4jvU/6gPQhaQHpI9LHpE9In5I+Iy0kfU76gvQl6SvS16RFpG9I35K+I31PWkxaQvqB9CPpJ9LPpKWkZaRfSL+SfiP9TlpOWkH6g/Qn6S/S36R/SCtJq0j/ksxgkEUKkyKkKKkeqT6pASmb1JDUiNSY1ITUlNSM1Jy0CakFaVPSZqSWpFak1qQ2pLakdqT2pA6kjqROpM6kLqQcUldSN9LmpC1IW5K6k3qQtiJtTdqGtC1pO1JP0vakHUhmkPNIcVIuKUHKI+WTCkhJUiFpR9JOpJ1Ju5B2JfUi9Sb1Ie1G2p3Ul9SPtAdpT9JepL1J+5D6k/Yl7Ufan3QA6UDSANJBpINJh5AOJR1GGkg6nHQE6UjSUaSjSceQjiUdRzqeVEQqJpWQSkllpHLSINJg0hDSCaQTSUNJw0jDSRWkEaSTSCNJo0iVpNGkk0mnkE4ljSGdRjqddAbpTNJZpLNJ55DGks4lnUc6nzSOdAHpQtJFpItJl5AuJV1Gupx0BelK0lWkq0nXkK4lXUe6nnQD6UbSTaSbSbeQbiXdRrqddAdpPOlO0l2ku0kTSPeQ7iXdR7qf9ABpIulB0kOkh0mPkB4lTSI9RppMepz0BOlJ0hTSU6SppKdJz5CeJU0jPUeaTnqe9AJpBmkm6UXSLNJLpJdJr5Bmk14lzSG9Rnqd9AZpLulN0jzSW6S3Se+Q5pPeJb1Hep/0AelD0gLSR6SPSZ+QPiV9RlpI+pz0BelL0lekr0mLSN+QviV9R/qetJi0hPQD6UfST6SfSUtJy0i/kH4l/Ub6nbSctIL0B+lP0l+kv0n/kFaSVpH+JZmJQBYpTIqQoqR6pPqkBqRsknkuvXnmu3meunlWuXkOuHnGtnl+tXk2tHnusnmmsXlesHkWr3nOrXmGrHk+q3n2qXmuqHlmp3kepnnWpHmOo3lGonn+YA7JPDfPPJPOPO/NPEvNPKfMPAPMPF/LPLvKPBfKPHPJPM/IPCvIPIfHPOPGPPPFPE/FPF/EPLvDPBfDPHPCPM/BPCvBPIfA3OPf3D/f3Jve3Pfd3FPd3K/c3Au86j7bJHN/aHPvZXNfY3PPYHM/XnOvW3MfWXOPVnP/U3NvUXPfTnNPTHO/SXMvR3OfRHMPQnN/P3PvPHNfOnPPN3M/NXOvMnMfMHOPLXP/KnNvKHPfJXNPI3O/IHMvHnOfm+NJ5v4s5t4n5r4i5p4d5n4Y5l4T5j4O5h4J5v4D5rf95nfz5jfp5vfe5rfU5nfK5jfA5ve15rer5neh5jeX5veM5reC5nd45jdu5vdj5rdZ5ndP5jdF5vc65rcw5ncm55DM7yPMbw/M9/rNd+bN99HN/Mt8j9p8R9l8/9d8t9Z8b9V8J9R8R9J8Z9B8h858p8x8x8p858h8B8d8J8V8R8N8Z8FcwzfXtM01XnPN01wDNNfEzDUic83EXEMw59TNOWZzztWcgzTn5Mw5KnPOxpzDMMf05hjXHPOZYyBzTGDmyHw+24mVO9q/RZWVZcNGVOZUVuQUlZbmnDKkcnBOxcllI8uHVphpUdV81H/tYv/uMXp4SeWQiuE5tN6Q8jHHjRg55OSiyrLjikZXDqYAOSVFw3Mqhg8dk1NcRuWhQ8tKc0ZVFlUOMWUzx1pnAtvd/t1vyKhhRZUlg3OGV1SW5QwuKyotG5lTUjG8cmRRSaXxNrJs1Cgzm10npW7VbT2qsmJk0aCynFFDKyqrttyzFhXwd3jtNl39vZEVE5h2lmOSrhg55DRKsnhMTlFJScXo4QYuVbN18zqX7bSd/dtn5MiiMTlDhpeWnZpTMboyp6I8p5i2Kx3FN7yothteUdsNr6/thrfWdsO7a7vhxNpuOJtt6Lcn6wPDRg+tHDKC+u46HYEHeJ0FqEkn4tvOq63r9+qw0wW13emXddipme/WqZpbZtXSdU5W7V1vUdudxuqw00Rtd9q7DjvtW9udHliHnR5S250eX4edltZ2pyPqsNPK2u70nDrs9Pza7vT6Oux0fB22nVBbwxNru+GUjXVb3640z25ozvv5MwKzyJwX7G3fx+r28rLXepONnUwUZ4fWnuPU8F1PJ3bV73d2txXj+/f3Zc65RmzZX8ecm23O/r+vXR5hy/o58cyyPbL/G3tPu6w+W7YX24+/bG+7LJst28e+aWiXbcq8+Ntms9jC9RZvwnIJsX3wV5SV6wd4Csn5ifnnyxVyTTZhdVqTXBuyXLN1PHlN2H54ezdi+8uS21/Vd8r9/fF9NHTqwH/vj2F8u/r/v12dtzNt3JitLzkWck+NmU//c87HJH+9erXMOZv9baSTj6c4JlT9fojz1N9HyKkD/8XzbqCYb1Od2DHe5jXJtynLt4livs11YseasBxqkm9zlm8zxXxbqMT2CpqwHGqSbwuW7yaA+Wax2H5uLZy2NHWyqbPMbLeZLdez220aUCct2fqCHPb4/v3Y/r42Y7n45b2Yf98n542/LOTkEmY59mF5abWHW2fSn2Wep7+PkJO7/2rJ8t1Mx1NV326tE7sq35YbkW9rlm8rxXzb6sSuyrf1RuTbluXbJkX5hkOyxzrtdGJX+e6oUydV7dQ+VPN26sjaqYNiO3XWiV2Vb8eNyLczy7eTYr45OrGr8u28EfnmsHy7KObbTSX26jlTzkbk243l21Up38ahtcclg8oq96fLlaOy2L5ybLmN4zcr9F/v/jqbsGURVubjW9BcOagvBI3TQccVQZ+bIKYFHYMFjTEu/82rESs3ZuV2rMznO/4cMKhe+L7Cof/Wp7+cv5f8/5BibOn/95dF11N2z39X1zfN8q5seZS953HceW6OLfvtbo7Z/LkenwP77e/OA8Oh/877/W3cODyPFuvx0Yj5cOM2Ca2tH9+vmZePZPG7sJjRgPUVOZenyKu4Ox+RPJZSnFfkRlmbTGdtNoa1c3u23G/nts6yLLbMb1//fZjF8sesttVs5++P9/l6znaK83TzFdA1n1v/2LmRs/8oW+c8+5d/ZkLMW5v15Mc/S36ubVh+SnP+JK9zP79Ozv55+128gfzW136dWH5u/aW6/To4++ftd+UG8ltf+3Vg+bn1p/iZTWjXXesa1J2/zg0bqLvWNag7v8748b3SOYfAvt/Z2T/v+7dtIL/19f3OLD+3/hQZl69dd61qUHf+OhM2UHetalB3fp210q+7Au26a1mDuvPXeXADddeyBnXn11lLtp7P0Ueric/PBzRmy3x2N2LL3LGeH1u3Yct8Dx3YMj/vtmyZPydtxZb5x3Id2TJ/3tiOLfNza8+W+eeQO7Nl/nWtlmyZf3zWmi3zj/d8TyZvPof12zHqrMfnVDPYutfYgwN+7Bd2YvBzK1rnIbNYvfn7buvsP8rWeZX58OvH/y2g2+84L/3YvH/7f9s4sdfXz/mxOZ+ntGfr+N7rO+vwXPx13qhmf3p1vvo6jl+f7uefc9Vf561Q9fXCj/358Rn//Pt11K6a7fz1+bVttz47O3F4fb5fjU+98XR1fbpzPN8f72/+Oh9V4zNojpfj5MxZ5K8bZmW334TZtjx2mK3bztmmuvbpFOC1uvbx1/nK/l1f+ygdY8Q39hwrnzcrXdvJbRJaty025InPOZTmBVXfj2rl1EFztoxfA3XnS/77sMJ2ZlkQx/31OtcyPuerz0h+rmg5i+t+vv31O7B9+evclLV23T/tsmZsG87/dgE5uJ+7dk4OfB7PP7cdnO06ONsFxXbzbhb672c4aEzyt+PnDdwxJuiYy9+OH4+7x1z8GJaf5+niLOPzHzd+UF35/6d47WSdY1Z3PsX3r3Xdnn8G/H23dPbPPxct2DzQPzfvz6daO9vxc7F+7E3Ye/9vCyf2+sZ7pbE1yXOp5+TC68Zfp1U1Pqvm/HZCzrlXL3vdenA/a1Xf7c7Wyc8cMzyXtdaf3z712XeelfqXx+vWz9/fv1/Hzdk6/Dy0Oz756/P5nl/H9Z11+Djrr9N1A/1L6Zp8YP/q4OTL+9eWNexf/HPm9i+/PdPRv/w24P1L61p7UP9y+wDvX5yb7vGZvz7vX3491nfW4cdn/jreBvqXJkPc/uX742O4v05eDfsXnze6/ctvz3T0L78N0jV+uX2A9y8+B+rkbBd0vLrmsxIKPmbi/bnPBvpXO506COxfnZx8ef/qV8P+xa8xZNL45bcB719ax1BB/cvtA7x/8bmyO8f2169u/Aq6VuavM2AD/UvpmlBg//L9cY776xxaw/7Fx3q3f/E5t59fqvrXmjlLmsYvtw/w/sW/T+Eei/nr8/615rPirMPPY/nrFG2gfyl9xz3J55Lu/J4fj/jrlAnM79M5fq05x8b6l9J1Jy9onu72geZsHX7u270OtDHze35dyF/npA30r/Y6dRDYv1o6+fL+NbqG/YuP9W7/8tvzf2F+v77jQL+Oef+KMB/u/N5fn/cv93y0vw6f3/vrjE0jH/n3mHj7cz7664wDn9+vmbOw/qX1GwJet37+bh9oztZpy5b55xX5tVh/G37O0e2H7mc36Hy1e83VPW/pnz+rjsXueUS+7xs20Efcbfl3Ifk5WH5uujbn100s91xb0Ha+D36M485tuzhxeFveuYHPruZv4Ny57Zpzqcynv8491fgMmsvlODk3Yzlvop5fzNyGcs13tt1rHTw/f50HBdiXwrl7rjs2rbnWxMYmrd9m8rr18/f379dxc7YOP4Zw51bu9Zegcw9dnDi8rp+qpt34+MW/++Jv2zlgn258Pha6c/MmAd749TYTx+8jz7NraTNYu/nt5fcv8/9vBvx/iHkNOV7XlFnbZ+v0u6rrMg2Z1yjbF99/I7b/rJBs32voxPb31ZB9Hv3yXMaqRtnr1ptf575/M0Y1sGXu392uvrNdc7ZOA7ZdtrOd/57/vnYW6xd+u5vPwiGhtXXp/iait30fq9tL855AVd+ZjCr6zqR7AvHv7tXknkD8fj2cFSo5eat/M5qtETsWr4qtdU8L/l3DENsHf/Hxz8/RjM+tWBuYjfw4OTxQAyeQ/543SkQxuY25iVIkwFNIzk+MHzjwfWndoGVjbyri++A3kkmVz0gtfHJPIUE/zZmfRvr5x/hBl78P00+6sX3rDC5e1WSD75MfPGazuvfX6cnW9e/924ytW48t88t+X+L9MZsta+Bsy/sD39b31YDVVTPHvx9b56Y48ar6ahoKri9/n1G2Ttz+Xd9BHf9hb9XEh5VDoXV/ZOWvG2Zl/sNavi7/PDXZwHa83MjZho9ZjQP2w28A1SS0bi5uP+J9zT1RwevOX2dX+3d9B+46n8fgNm7i1A9v492q8VldG/sx+eeHt3ETlmsoYF3exhvajpfd/hR047Cg/WSH1s2lt/0bq8vLW/3QosbMf3aAv4jjPTukdqM2L6jNos7+s5hPty83Zdv56xxk/27opBvvd/74z78MiHegkkz8Lx2o8C9fq/hKJqrqU+fGownFAxl7YoPVI/988BuYKt1k0+P7X3Niw773l0dZmZ9U4/PMqhMbzK95VZ3YsOVG1WxXz9muOVuHH+RlO9v57/mJDX87frDbm8XX6iN8vAqxfYQcz/6Lt63SZ7Xqxiz+jQEHlVX2GV05eOCQyuFlo9a5PYvvqrfjOiv03wzcdcwrErDMvPhhNJ/RVDez5bOAoJktv90d4OmpPMXTFnHNUYqP+vzWvyHbDv7/7e6c/g0ighr5VCmgSlWP/2yVf1bcowVND/w242b07Mc/CKHVszx/pjeiqOTEg8oqR48cPop/7HnX5q8wK0fYMncCwdfz0wsHxDNDAZ+ca31bzMRW+pVFjJ9h9P3ziRKvC6l98vrnJwH9fQVBPDu0bv33FqpbFrJqn24b87snZQV4UjrxFFc8iFqnzX3/jdfTDm7uvBwOrYs/9/+DljUJ2M+mAcv+D9npwjjyOAQA","debug_symbols":"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aEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaUbRaUbRaUbRaUZxV5g2IFhSO80oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oBs0oBs0oBs0oBs0oxgRL6qAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaQZxaQZxaQZxaQZxZxgSZ00o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)"],"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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r+/5vL4X8foe4vW9uNf3sl7fK3t9f83re12v7429vrfw+t7W63sHr+9dvL738Pre1+v7IK/vw72+j/b6PsHr+zSv7596fZ/n9f1Lr+/LvL6v9Pq+zuv7Rq/vW72+7/T6vt/r+xGv76e8vp/3+n7V6/ttr+8PvL77ee1JJfT6ntzre1qv7xm9vmfz+p7L63sBr++BXt/DvL6X9Ppe3ut7Va/vNb2+1/f63tTreyuv71Fe3zt6fe/m9b2X1/f+Xt8He32PvvApu99fH+99upj7eN77fN77gN77hN77iN77jN77kN77lN77mN77nN77oN77pN77qN77rN77sN77tN77uN77vN77wN77xN77yN77zN770N771N772N773N774N775N776N777NH78F8F+P3TJ57n37KefwOf7WO+AvZD9qn66sKn0n5YLYj+fB1APGH74OjjLgVOICvupV4gBh2XemXhduBFA8sCcOcV2/w86/mV8cwPOodlgOf4TQAWN2iM23P8TQB+br4NwBa56Atv7ONm9/vrknH7t4R+//pxcsFmnmcpkfMsKXKe2xNwufusHLOPYy9moOufP/BYZUlz7YeNOTAmhuBgQgpBgGfi3eL3j/N0ix/2PN3iF3eKX3yvYy73NDwrbFPI6PjKxDJpiE4AdaylwK7H27kuD/jH0lT0Bw3e5cCO+jty9xf4bB8T3f0lEMHSsx5rpcPnw8bLSkInuYrUSa4K+OelYmQuWF316gCOoKDrMRL33zsc9/acfE+Y6zUk3K8h4p5VA9Y6fBXNnv+1hLjXkTCwjogBFh865Y+bGOjso0svnvU8fwDWaeBcm875ORz6gcghezGDUUd/FKijPxLiXk+qo+v/Awae9ZyjFyLQl0ixFjieNd4NDsemvSDG4ORPApz8iRD3RhInNxLr8nKSv90kgIFNhLg3kzCwmazNjN7+ZwEM/EyI+xcSBn4hYsDWAgYGtghgYAsh7q0kDGyNZc0d3ff8Gsf6nl/JvFpKwNdvJHz99l/gK/DZPgaJr9+A67LbSDndRsSXfTEDw79td3jdjkeKe0ccXU/YScL+TiL27fnfQMjFLodjoCQJ+7sdHvcKUq+6J46uV+wlcX4vkfOsvn0fKRf7yNrP6Nn2C2g/I+7f4+h6xQES9g8Qsf8NSfsPCmg/A/uH4ug6zWES9g973dXjq9swK/hh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","debug_symbols":"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akZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxaUZxaUZxaUZxaUZxXVhSL80oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0oLs0opmYUUzOKqRnF1IxiXlhSp2YUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpR3JpR3JpR3JpR3JpR3BeW1FszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszilszikczikczikczikcziufCkvpoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFoRvFgRjEuzCjeBVlJfRdkJfVdkJXUd0FWUt8FWUl9F2Ql9V2QldR3QVZS3wVpSY0ZxbsgLakxo3gXpCU1ZhTvgrSkxoziXZCW1JhRvAvSkhozindBWlJjRvEuSEtqzCjeBWlJjRnFuyAtqTGjeBekJTVmFO+CtKTGjOJdkJbUmFG8C9KSGjOKd0FaUmNG8S5IS2rMKN4FaUmNGcW7IC2pMaN4F6QlNWYU74K0pMaM4l2QltSYUbwL0pIaM4p3QVpSY0bxLkhLaswo3gVpSY0ZxbsgLakxo3gXpCU1ZhTvgrSkxoziXZCW1JhRvAvSkhozindBWlJjRvEuSEtqzCjeBWlJjRnFuyAtqTGjeBekJTVmFO+CtKTGjOJdkJbUmFG8C9KSGjOKd0FaUmNG8S5IS2rMKN4FaUmNGcW7IC2pMaN4F6QlNWYU74K0pMaM4l2QltSYUbwLwpK6aUaxaUaxaUaxaUaxXVhSN80oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0ods0ods0ods0ods0o9gtL6q4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4Zxa4ZxaEZxaEZxaEZxaEZxXFhST00ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0ozg0oxiaUQzNKIZmFEMz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QzOKoRnF0IxiaEYxNKMYmlEMzSiGZhRDM4qhGcXQjGJoRjE0oxiaUQzNKIZmFEMziqEZxdCMYmhGMTSjGJpRDM0ohmYUQzOKoRnF0IxiaEYxNKMYmlEMzSiGZhRDM4qhGcXQjGJoRnFqRnFqRnFqRnFqRnFeWFJPzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzSguzSguzSguzSguzSiu662Tul9jP730tcePBb108f2X/PnqNa7ny9svKsn+VEnu+Xz1/LPZWanZVanZrNTsrtTsKdTsm1vWd222VWq2V2p2VGo25Gbvoa+f7wNgrFea7ePq8+nVxzXj767/o2F6ivorGqYnqb+iYXqa+isapieqv6Jheqr6Cxp+jD1v8fxGMM4rH7xzrOeL5/d3jYw/C2paQV0raLx5Qfl88b7azwWFVtDUClra36HUCtpaQQcraGhJPbSkHlpSj6EVFFpBWlKPpRWUWkFbK+itk7q383Rx73H9WNALrzzzeprB7/9e7ecZPK6P3kD76A30j96A9k7zGDv/yIKmVtCy/87tPZ5e+v7+5YVbB5EfvYH90Rt4xDvfms93q/J67W5Vtqdb/j0jX3npvtvTS/c9v9/bavul1x7z+V7VmOuHLx/6fuHqc98t+/Pq0/v813/6RthD1hB8neUfZ9m+zvJhZ9m/zvJhZzm+zvJhZxlfZ/mws5wffBCZH32WnR99lp0ffZad+F2cVxtY+F2c1xto2I291bWCtG9eH7NN5ZEFaffzl3Y/f2n385d2P38drKC8tIK0pE4tqVNL6tSSOrWkTi2pU0vq1JI6taTeWlJvLam3ltRbS+qtJfXWknprSb21pN5aUm8t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UrNUoXXm37otNUsVWmj+rdtSs1Shlebfui01SxVaav6t21KzVKG15t+6LTVLFVps/q3bUrNUodXm37otNUsVWm7+rdtSs1Sh9ebfui01SxVacP6t21KzVKEV59+6LTVLFVpy/q3bUrNUoTXn37otNUsVWnT+rdtSs1ShVeffui01SxVadv6t21KzVKF159+6LTVLFVp4/q3bUrNUoZXn37otNUsVWnr+rdtSs1Shteffuq00S7VSe89bqb3nrdTe81Zq73m7olS3lWapVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m9563U3vNWau95K7X3vJXae95K7T1vpfaet1J7z1upveet1N7zVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m9563U3vNWau95K7X3vJXae95K7T1vpfaet1J7z1upveet1N7zVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m9563U3vNWau95K7X3vJXae95K7T1vpfaet1J7z1upveet1N7zVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8fba959mfu90vdPvJZqnfd/v2e89HPr90tPX7bu+vl/fzX83Vrvi7bv/soH34DjrdwWrRv3ewzksdjA/fQXz4DuaH72DRHeT9Ofs5Sq8fKvlF8q79veFzfk7eLNXtLtXtKdRtv+wZ4tHd2vPGv7fb38/+/bJnk0d3a88xj+42SnVrz0eP7vZzzVKvdfu5ZqnXuv1cs9Rr3X6uWeqVbtvnmqVe67bULNVKzVKt1Cz19vu+37XbUrNUKzVLtVKzVCs1S7VSs1QvNUv1UrNULzVL9VKz1Nvv+37XbkvNUr3ULNVLzVK91CzVS81So9QsNUrNUqPULDVKzVJvv+/7XbstNUuNUrPUKDVLjVKz1Cg1S0WpWSpKzVJRapaKUrPU2+/7ftduS81SUWqWilKzVJSapaLULDVLzVKz1Cw1S81Ss9Qs9fb7vt+121Kz1Cw1S81Ss9QsNUvNUrPUKjVLrVKz1Co1S61Ss9Tb7/t+125LzVKr1Cy1Ss1Sq9Qs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yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yM45yME5yME5yME5yME5yHFpmT04Bzk4Bzk4Bzk4Bzne3EH2a+ynl772+LGily5e13Mh1xrX8+XtF5Vkf6ok93y+ev7Z7Zsby/fttpXqtpfqdpTqNkp1O0t1u0p1m6W63aW6pWepe/7r5/ssGOuVbr99MpxPr35/3oi/u/6Pjjs9T/0lHdMz1V/SMT1X/SUd07PVX9JxlOv4ITNWi+f3g3Fe+SSeYz1fPL+/eWQ8VbS4ipKraL95Rfl88b7aCxUdraLH+PaHVtS0v0eP8e0PrWhwFQVXEZfZg8vswWX22FxFR6souMyOxlXUuYoGV9FbZ/a3td5PL93j+rGiF1555vU0l9//vdoLc3nMD9/B+vAd5IfvgHvPCe49Z15cRc3+e7f3eHrp1a6X7irM/uE7GB++g0e8B675fC8rr9fuZWV7+lqgZ+QrL913e3rpvuf3O19tv/Ta99+op6wbc/3wBUXfL1x97ntpf159ep//+s/fJnvIqoOvw/zzMNfXYT7uMPPrMB93mPvrMB93mOfrMB92mOv66PPI+vBT7frwU+368FPtYzaqvGsH+J2df6CDpd3vW8lVxH1Du7hvaJO725/c3f7k7vYnd7c/g6tochVxmZ1cZieX2cll9uYye3OZvbnM3lxmby6zN5fZm8vszWX25jJ7c5l9uMw+XGYfLrMPl9mHy+zDZfbhMvtwmX24zD5aZselZXZcWmbHpWV2XFpmx6VldlxaZselZXZcWmbHpWV2XFxmNy6zG5fZjcvsxmV24zK7cZnduMxuXGY3LrMbl9mdy+zOZXbnMrtzmd25zO5cZncuszuX2ZzsD072Byf7Y3CZPbjM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ZalZKkvNUllqlnrzLTPv222pWSpLzVJZapbKUrNUlpqldqlZapeapXapWWqXmqXefPvT+3ZbapbapWapXWqW2qVmqV1qljqlZqlTapY6pWapU2qWevOtbO/bbalZ6pSapU6pWeqUmqVOpVlqXZVmqXVVmqXWVWmWWlelWWpdUarbSrPUuirNUuuqNEutq9Ista5Ss1QrNUu1UrNUKzVLtVKz1JtvMX3fbkvNUq3ULNVKzVKt1CzVSs1SvdQs1UvNUr3ULNVLzVJvvl34fbstNUv1UrNULzVL9VKzVC81S41Ss9QoNUuNUrPUKDVLvfnW7/ftttQs9dk2ir/SbalZ6rNtFH+l21Kz1GfbKP5Kt6VmqSg1S0WpWcrebf7wbkvNUvZO84d3W2qWsneZP7zbUrPUJ9t7/lq3pWapT7b3/LVuS81Spfaer1J7z1epveer1N7zVWrv+Sq193yV2nu+Su09X6X2nq9Se89Xqb3nq9Te81Vq7/kqtfd8ldp7vkrtPV+l9p6vUnvPV6m956vU3vNVau/5KrX3fJXae75K7T1fpfaer1J7z1epveer1N7zVWrv+Sq193yV2nu+Su09X6X2nq9Se89Xqb3nq9Te81Vq7/kqtfd8ldp7vkrtPV+l9p6vUnvPV6m956vU3vNVau/5KrX3PEvtPc9Se8+z1N7zLLX3PK8o1W2lWSpL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPs9Te8yy19zxL7T3PUnvPd6m957vU3vNdau/5LrX3fF9RqttKs9Qutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/kutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/kutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/kutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7z/fZ7z0c+v3S09ftu27yHvaeXXu2Kv+v2zw7iw3cw6Q5Wi/69g3Ve6mB9+A7yw3ewP3wHh+4gr/b80nn9UMkvknft7w2f82+T97z9vu937baV6raX6taeIR7dbXyqbn8/H57Lnk0e3a09xzy6W3vmeXS39nz06G4/1yz1Srftc81Sr3X7uWap17r9XLPUa91+rlnqtW6jVLelZqlWapZqpWapVmqWaqVmqV5qluqlZqleapbqpWapt9/3/a7dlpqleqlZqpeapXqpWaqXmqVGqVlqlJqlRqlZapSapd5+3/e7dltqlhqlZqlRapYapWapUWqWilKzVJSapaLULBWlZqm33/f9rt2WmqWi1CwVpWapKDVLRalZapaapWapWWqWmqVmqVnq7fd9v2u3pWapWWqWmqVmqVlqlpqlZqlVapZapWapVWqWWqVmqbff9/2u3ZaapVapWWqVmqVWqVlqlZqlstQslaVmqSw1S2WpWert932/a7elZqksNUtlqVkqS81S///27mhHjhxLD/ArBXkOycOnMdYLwxhgsGvsrg34Yt/d0T2qknpV02rVZLE/OXXTkNARycNQ8C8WM77geqq5VD3VXKqeai5VTzWXqqeaS51/3/ef2tunmkvVU82l6qnmUvVUc6l6qrnUfqq51H6qudR+qrkU/r7vR/c2n6q3TzWXwt85/ujePtVcCn+X+aN7+0Rzqbz+P3vv+bd6+0Rzqbu3TzSXunv7RHOpu7f5VL19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F+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgF+cgi3OQxTnI4hxkcQ6yLi2zi3OQxTnI4hxkcQ6yOAdZnIMszkEW5yCLc5DFOcjiHGRxDrI4B1mcgyzOQRbnIItzkMU5yOIcZHEOsjgHWZyDLM5BFucgi3OQxTnI4hxkcQ6yOAdZnIMszkEW5yCLc5DFOcjiHGRxDrI4B1mcgyzOQRbnIItzkMU5yOIcZHEOsjgHWZyDLM5BFucgi3OQxTnI4hxkcQ6yOAdZnIMszkEW5yCLc5DFOcjiHGRxDrI4B1mcgyzOQRbnIItzkMU5yOIcZHEOsjgHWZyDLM5BFucgi3OQxTnI4hxkcQ6yOAdZnIMszkEW5yCLc5DFOcjiHGRxDrI4B1mcgyzOQRbnIItzkMU5yOIcZHEOsjgHWZyDLM5Bbs5Bbs5Bbs5Bbs5B7kvL7M05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yM05yK05yHFpDvKuCMvsuyIss++KsMy+K8Iy+64Iy+y7Iiyz74qwzL4rwjL7rojLbM1B3hVxma05yLsiLrM1B3lXxGW25iDvirjM1hzkXRGX2ZqDvCviMltzkHdFXGZrDvKuiMtszUHeFXGZrTnIuyIuszUHeVfEZbbmIO+KuMzWHORdEZfZmoO8K+IyW3OQd0VcZmsO8q6Iy2zNQd4VcZmtOci7Ii6zNQd5V8RltuYg74q4zNYc5F0Rl9mag7wr4jJbc5B3RVxmaw7yrojLbM1B3hVxma05yLsiLrM1B3lXxGW25iDvirjM1hzkXRGX2ZqDvCviMltzkHdFXGZrDvKuiMts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4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk4Bzk5Bzk5Bzk5Bzk5BzkvLTMnpyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDnJyDXJyDXJyDXJyDXJyDXJeW2YtzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkItzkMU5yOIcZHEOsjgHWZeW2cU5yOIcZHEOsjgHWZyDLM5BFucgi3OQxTnI4hxkcQ6y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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":"lookup_validity","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"consumer","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"kind":"boolean"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["lookup_validity"]},{"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":3,"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":"7Z3djuzKcaXf5VzrIn+CZNKvMhgYsi0bBxAkw5IHGBh69+ndtYtVvVlk9p6d7IjM+G6Ec3TYVRnf6mauFSSD//Pbv/3pX/77P/7597/8+1//9ts//a//+e3Pf/3XP/7997/+5e3f/ucff/jtX/7r9z//+ff/+Ofn//u38O1/cng//m//+ce/fPvXv/39j//199/+aQrLH37701/+7e2fSnj7+X///c9/+u2fJKZ//O8//Jbjz//I8upHSg7ff6Tkafcj5ed/ZP3pH5mmVz8yh/uPLEv+8CN/2B8bp/j94Dmuj6NjDi+OljhN34+W+PTZSd5XM5tazWJqNcXUalZLq5mDqdVEU6tJplaTTa1GTK3G1Ll4NnUunk2di2dT5+LZ1Ll4MXUuXkydixdT5+Lli//Cp+XhkNft2Bzj+2IWQ4spX/xb8/jkOcy7xSRLi8mWFiOWFjNZWkyDP+38tBipLCbm+fvBcZKnT87vi1ksLaZ88WLmcl9MmXeLWQ0tZg1fu5gU1u8Hp7TsFhMtLSZZWky+cjHfvkCu/oLp6i+Yr/6C5eovKFd/wXrxF8QQLv+GePk3pMu/IV/+DXL5N0yXf8N8+Tcsl39DufwbLv+bjpf/TcfL/6bj5X/T8fK/6fjrf9PpER9SnH6pjxDjZGs5s63lLLaWU2wtZzW1nBRsLefXT4c53TPfnKdSC4jxnjyilB+TR0zJ1GqyqdWIqdVMX7uaJPL94Bzyh9W8+JUPcfuVD0+f/C3q7g5e5vuxy1ObNr383HhfsOR4fmgOS97W+/y58v/xJzqD+qtQL6D+KtQF1F+FegX1F6HOAdRfhTqCejv0HUhyCGS+tzFkTjsgGSAfgQhAPgLxmGJOgXjMGuu9Oln3J1WPieAUiEfffgrEo7s+AyIOPfC0fewU5x0Qh071HIhDp3oOxKFTPQciAPkIxKEPmfJ9DVPeA3HoQ06BTA5PqrPc77Gf57AD4vCkeg7E8kn1zSU9mn3rM5D3pVsO6pWlW47UlaVb3nQqS7e8PVSWbjlQni99thz9Kku3HNIqS7e887/1WM+WbnmPjnHZlv40ceO+dNO76fnSTe+m50v/4t00y/1RL1mksvQYZHN1b//8vPh5enX84ybcGMu0K3XxU2rxU+rqptQl+Ck1+ik1+Sk1+ylV/JQ6+SnVj1ta/LilxY9bWvy4peLHLRU/bqn4cUvFj1tqMBfIUKnrdnh6as/cSx3KLZ2XOpRbei617EodyS2lmLdSU9yVOpJbqpQ6klv6UOr8Y6nrUG5plUepy67UkfbV/BidlkV2pY60r1ZKHWlfzbI9K56n/S/wSPvqaakpfLGqU7gv/u07KqXmx1Xk/GYAHktPt6XP/S596Xfppd+lr90uPYZ+lx77XXrqd+m536VLv0vvdzeN/e6msd/dNPa7m8Z+d9PU726a+t1NU7+7aep3N/3qKWwtl97vbpr63U1Tv7tp6nc3Tf3uprnf3TT3u5vmfnfT3O9u+tUDiVouvd/dNPe7m+Z+d9Pc726a+91Npd/dVPrdTaXf3VT63U2/emhKy6Vb3k3T9kRiTs9jN78v3fJuWlm65d00bbdP5DSF3dIt76aVpVveTdM2aySn58e1b0ufLO+mlaVb3k2fl74/OU6Wd9PK0i3vppWlf/FuOsf7TYDzD+/b2B8bQ9zuLQvyYen7g0Vy+n6wyIs/jMlJnbOTOhcndRYnda4+6vzq2UEX1rne71yXKez2la8eNKRWZwPXsm4vKRSpvegsrlvWievznLzX9/GGuA2lefvnIh+Of19/7nz90vn6p87XP3e+/qXz9ZfO17/2vf4W039U1x87X3/n++/S+f7bYqLOpevf3uEQw4eHoV8fP0/b45jz08rzzewt1jfrpsVa39mbFmvdBjQt1rpnaFqsdYPRsthi3Y00Lda6dWlarHWf07RY66aoabHiqVhPDqp4clDFk4MqnhxU8eSgVk8OavXkoFZPDmr15KBazFPqp1hPDmr15KBWTw5q9eSgVkcOKgdHDioHRw4qB0cOKgdHDioH8VSsIweVgyMHlYMjB5WDJ1MRPZmK6MlURE+mInoyFS1GMvZTrCdTET2Zimh8n01Pd+ilaf5w/Lf1J+PnnLfwsa0/x/JLx7/Xa/y007xe42ee5vUaP/k0r9d4qGler/HOcPN6je8vrevNxqNc83qNp7nm9RoPdM3rdeavWkwzNFTv8rDPy5x+NP95LHNVKXYsZ1UpdixbVabt08syPxf7ainbI+0phHlHZiwD1pLMWFatIRkZy9S1JDOW/WtJZiyj2JLMWJayJRmBzAGZsZxqSzJj2dqWZPz6mZLuRZYkP3KZHO9MIeXHZ+9+YybHO1OFjOOdqULG8c5UIeN4Z6qQcdydqZBx3J2pkHHcnTknMzvuzsStyhhl3ZFx3J2pkHHsgStkHHvgChmBzAEZxx64QsaxB66QceyBK2Qce+AKGS8e+Fux1mfv/mSx571a64N62xY7lvmsFDuWn6wUK56KHcv1VYody8hVih3Lm1WKHctuVYody0GdF2t9XnDbYj05qAbzgmXZXqk0yVwpNoVyPzqlVL/LvPJegdxgBLDu+qXz9U+dr3/ufP1L5+svna9/7Xv9DebY6q4/dr7+zvfftfP9t8FM2GvX33JExWp9s25arPWdvWmx1m1A02Kte4amxVo3GA2LlWDdjTQt1rp1aVqsdZ/TtFjrpqhpseKpWEcOSoIjByXBkYOS4MhBSfDkoKInBxU9OajoyUFFTw6qwQDcjor15KCiJwcVPTmo6MlBRU8OKnlyUMmTg0qeHFTy5KAazPLuqFhPDip5clDJk6lInkxF9mQqsidTkT2ZiuzJVDQYYN1RsZ5MRTa+z1Ze1SNi/ATbeJS8iPFzbPN6jZ9mm9dr/EzbvF7jJ9vm9RoPcc3rNd4Jb16v8f20eb3Go2vreifj6bV5vc781TSWvzp9oYtMY5mrSrHiqdixbFW7Ae4yjWXAWpIZy6q1JDOWqWtJZiz715DMPJZRbElmLEvZksxY5rMlmbGcaksyApkDMn79zNmremRxvDOdDv2XxfHOVCHjeGeqkHG8M1XION6ZKmQcd2cqZBx3ZypkHHdnKmQcd2dOR9vL4rg7c06mOPbAFTKOPXCFjGMPXCHj2ANXyAhkDsg49sAVMo49cIWMFw/8XuxYtva8V2t9dnDTYq0PGm5b7Fh+slLsWBaxUuxYrq9SrHgqdixvVil2LLtVKXYsB1Up1pODsj4cuWWxU7j0bPz+DdPl3zBf/g3L5d9QLv+G9epvuHZM5Ps3/LoFnsN8/4ZZpPKnGXOc7n9reQpPn51fHD0t29HTMk21zw6Pp49jCrWj43o/WMqHdbxzSXB5ySXD5SUXgctLLpNXLo/pADnkyjokbOuQMD0ZkOXFwct8P3Z5fg3hy8+N5f6xOZ4fmsOSt/U+f668/NxpW298UvDt4HfRZ0T3J/qC6P5EL4juT/QV0d2J3mDeLqK3F/1dGrcZ3oQ08/0l4vL0rPtdGrdtBPvSuO1k2JdGkMaqNPRzNKXZFizr3gbQdTErDb0Rs9LQwTArDX0GRWmmR3lx/lGaTDfArDR0A8xKQzfArDTkGk1p8n0NU95Lg0NTlGaWZUMXdtLg0KxKIzi0z0gTZWt2xWV9luYdIl7qUxDzdAYR1/MpiHHZIJawg8jVigYQBYi/DtGtU85yX7YsUllHDPJYdpBnjK8fKnkrc1tJmXbQ3fb2NaG77dprQneb9jShu81xitAntwlNE7rbRKcJ3W0C1ITuNjFqQhegfz10EqkCdBKpAnQSqQJ0EqkCdBLp10OfSaQK0EmkCtBJpJdAX7fD09N1pjt0EqkCdAH61dDLDjqJ9AroKW7vWkkp7qCTSBWgk0gvhz7voJNIrzmnywP68iP0BZ9+BfSc563KJyZ36Ph0Bej49Eugy/qocn96EaB/OfTi9jd9CvePfqu2so78uEk+x/IE8Tbwurj9zW0J0W1ibAnRbQJsCdFtomsJ0W1CawnR7TXAhhBXt9f0WkJ0m/1bQnSb5VtCJLE0gChA/HWIJJYGEEksDSCSWBpAJLE0gEhi+WWIbz8PxF+HSGJpAJHE0gAiiaUBRAHir0MksTSASGJpAJHE0gAiiaUBRBLLZyCmbSRWTs8vYLpBjCSWBhBJLJ+CuN26l9PTqu8QSSwNIJJYPgVxm1Sb0/PUz+8QBYi/DpHE8rMQ9xbH79uoW0IksTSA6DaxvG0H92VLqawjhrg9nRDkA8T9wSI5fT9Y5MUJ1G280SLu9z3BasTdBic14m5Tlhpxt5FMjbhAvDnx9f5Ut0xh5w79vlpXjfhIyTDljXiS9OHo91pHCnC1WkfKWZVah3rdYyrbBIb8NPbi4Oh1u54Q1+d3Zb1+EjjE7R0ob/9c5MPx7yRHcnW6JEdya7okBZKNSI7krnRJDuWaVEkO5clUSQ7l+FRJjtQxVyU51BtYdUmScVqRJOO0IknG+SzJRyswfBhQ/Pr4edpGX85PDPOtZTfUK1w7wk56UsFO1FLBTi5TwU6IU8FO4tPAPtTrXzvCTpZUwU7wVMFOSlXBLmDXwE5KVcFOSlXBTkpVwU5KVcFOStXAPtQrYTvCTkpVwU5KVcFOSlXBLmDXwE5KVcFOSlXBTkpVwU5KVcFOStXAvpBSVbCTUlWwk1JVsJNSVbAL2DWwE5dUsBOXVLATl1SwE5c0sBfikgp24pIKduKSCnbikgp2fPsnsaenJ3zTNH84/p0k5uSTJHN4kMyx/NLx38gP9c76vshjUbTI41K0yGNUtMgL5JXIcw+SFnn8uRZ5Wuta5Omua5Enw+qQXwIZ9hryy6Nts8zph/bXEgiwKthJryrYia7XYC/T9ullmZ+xv1rK9pKRFMK800jQyLxGxGH7GhGc7WtExLavEWHcvkbEdvMaRQK+fY3oBtjXiNaBfY3IR/oalXTHXZLsFMLVGfgrCik/Pnv/V4SrM69RwtXZ1whXZ18jXJ19jbh6ZF8jQSPzGpGO7GvE1SMDGsWNd4yy7jTi6pF9jegz2NeIPoN5jTJ9Bvsa0WewrxF9Bvsa0Wewr5GgkXmN6DN8tUbv2GkdXIP9/J6DTDdABTsBXwU7mV0DuxDDVbCTrFWwE5ZVsJN/VbAL2DWwk1JVsJNSVbCTUjWwT/j2a7A3eyBhwuLrK7SWjUkIe4kEiaxLhJkyLxHGy7xEmDTzEnHZwbxEXKKwLtFMLDIvEbnIvERcJtGXqPI8z8w1FfsaCRqZ14gGg32N6DDY14gWg32N6DHY14gmg3mNFroM9jWizWBfI/oMFjSSx9uXp7zTiD6DfY0EjcxrRJ/Bvkb0GexrRJ/Bvkb0GYx57xca0Wcwn48KfQb7GtFnsK8RfQb7GtFnsK+RoJF5jegz2NeIPoN9jegz2NeIPoN9jegzmNdopc9gXyP6DPY1os9gXyP6DPY1EjQyrxEZ1r5GZFj7GpFh7WtEhrWuUQl4709qlErcOKY1fDj+nSQOuRVJgWQjklzVakUS396KJO66FUk8cCuSONVGJCPXRFqR5MpFK5JknFYkyTitSAokG5Ek47QiScb5LMl5eZAsoXb86es5SyQQqWAnPalgJ2ppYE/kMhXshDgV7CQ+FezEQxXsAnYN7ARPFeykVBXspFQV7KRUFeykVA3smZSqgp2UqoKdlKqCnZSqgl3AroGdlHoN9hS3taRvd97/gJ2UqoKdlKqCnZSqgp2UehF2mTfs825LFXz7NdjlcYOSlN1vu+DbVbAL2C/BPj8e+pxz3GHHt6tgx7erYMe3q2DHt6tgx7drYJ+4uqSCnatLKthJqSrYSakq2AXsGthJqSrYSakXYZ+2YVnzE8M7dlKqCnZSqgp2UqoG9pmUqoKdlKqCnZSqgp2UqoJdwK6Bnbh0Dfa8btjfuT2wv1rKdnAKYTeIeCZb2deIIGZfI1KbeY0WIp59jciD9jUiPNrXiKRpXyNBI/MacaXVvkbkI32NSrrjLkl+VKjg6gz8FZ2/kqrg6uxrhKuzr5GgkXmNcHX2NeLqkX2NuHpkXyPSkX2NuHpkQKPziU4rV4/sa0Sfwb5G9Bnsa0Sfwb5GgkbmNaLPYF8j+gz2NaLPYF8j+gzXaCSpbBrJ7pnkldaBAvY10A1QwU7AV8FOZlfBTgxXwS5g18BOWFbBTv69CPvZfOc1EGlVsJNSVbCTUjWwR1KqCnZSqgp2UqoKdlKqCnYBuwZ24tI12E9nCb19Ndg1sBOXVLATlzSwJ+KSCnbikgp24pIKduKSCnYBuwZ2LuqpYCelqmAnpapgJ6WqYCelamDPpFQV7KRUFeykVBXspFQV7AL2X8f+TpLg2YokWbIVSeJhI5KCB75me2o18nUV7LK+QmvZmISwl0iQyLpEuBjzEmGPzEuE7zIvES188xLR7rcu0UQsMi8Ruci8RFxy0JfofGLyOnF9wr5GgkbmNaLBYF8jOgz2NaLFYF8jegz2NaLJYF6jmS6DfY1oM9jXiD6DBY1km2odpt0NeTN9BvsaCRqZ14g+g32N6DPY14g+g32N6DMY894vNKLPYD4fLfQZ7GtEn8G+RvQZ7GtEn8G+RoJG5jWiz2BfI/oM9jWiz2BfI/oM9jWiz2Beo0Kfwb5G9Bnsa0Sfwb5G9BnsayRoZF4jMqx9jciw9jUiw9rXiAxrXqNVbGs039+pNpWca589x+0NbLOED0e/12q8x9+0VuM+o2mtxs8zP1Nriuv9VJDSUltJCttZKaVUqueZKNtJLMQiH45/IxlDMN7S6gml8c5TTyiNN4h6Qmm8j9MTSgFlK5QDOTNtlAMZP22UxvtAPaE03q7pCSVppxXKSNpphpK081mU6+MZsBRy7fjT9768fRrRSIc7OUqHu8BdhTsJTYc7cU6HO9lPhztBUYc7qVKFeyKC6nAnr+pwJ6/qcCev6nAXuKtwJ6/qcCev6nAnr+pwJ6/qcCevqnDP5FUd7uRVHe7kVR3u5FUd7gJ3Fe7kVR3u5FUd7uRVHe7kVR3u5FUV7kJe1eFOXtXhTl7V4S5wV+FObtLhTm7S4U5u0uFObtLhTm5S4T6Rm3S4k5t0uAvcP8c9PT0KnKb5w/E3lFiUT6LM4YEyx187/oYel6KGHqOihX7Gq6ihx66ooafTq4aem5PU0AvotdDTaldDT7ddDT1pVg09afYa9MujhbPMadcLm4myKtwXcqwOd0LsNdzLtL3WpCwfXj3y4uB1e6lJCmHei0Tc7UAkgnEHIgki2ReJsN2BSMTyDkQiwHcgElG/A5HoC9gXqdBE6EAkcpK+SCXdcZcke4nwdgb+jk5fXvsmEt6uA5Hwdh2IhLezL9KKt+tAJK4mdSASV5M6EImU1IFIgkj6IsWNd4yy7kXialIHItFx6EAkOg4diETHoQOR6DiYF+ntvyKSfZHoOHQgEh2HDkSi4/DVIt24C9wv4X5+H0IM9AV0uBP1dbiT3nW4E8h1uJOxVbhHYrMOd5KwDnfCrQ538qoOd4G7Cnfyqg53/Lt+8/L0eYUYsfr6Eq1lYxLCXqOETbKvEZbKvkaCRuY1wqrZ14jLEPY14pKFfY2IR/Y1Ih+Z1yhz2URfo8oDP2/MEMm+SHQaOhCJVkMHIgki2ReJZkMHItFt6EAk2g0diES/oQORaDjYF0noOFgQSR6vcp7yXiQ6Dh2IRMehA5HoOHQgkiCSfZHoOHQgEh0HYxb8lUh0HDrISXQcOhCJjoN9kSY6Dh2IRMehA5HoOHQgEh2HDkQSRLIvEh2HDkSi49CBSHQcOhCJjkMHItFxsC/STMehA5HoOHQgEh2HDkQSRLIvEmG2A5EIsx2IRJi1L9KCBf+kSKnEDWRaw4fjbygxys1QYmeboeQyVzOUAspWKHHZzVDihZuhxLE2Q8lFkmYouZTRCmUh7TRDSdpphpK00wwlaacZSgHlJ1HOywNlCbXjK2/6LEQjHe7kKB3uhC4d7iQ0He7EORXuK9lPhztBUYc7qVKHOxFUh7vAXYU7eVWHO3lVhzt5VYc7eVWHO3lVg3sK5FUd7uRVHe7kVR3u5NVruKe43dWfvt2b/yN3gbsKd/KqDnfyqg538upF3GXeuM/7fTXi36/hLo87l6Tsf98j/l2HO/79Gu7z4+nQOcc9d/y7DneBuwp3/LsOd/y7Dnf8uw53rjfpcOd6kwr3RF7V4U5e1eFOXtXhTl7V4S5wv4b7tE3Ymp8YbtzJqzrcyas63MmrOtzJqzrcyasq3DN5VYc7eVWHO3lVh7vA/RLued24v3N7cH9x8LodnEKY9yIRsjoQiUTWgUjEtw5EIut1IBLB0L5IQorsQCQiZwcikU87EImLrx2IRE7SF6mkO+6SZC8R3s7A39H5u63ShLfrQCS8XQci4e06EAlv14FIgkj2ReJqUgcikZI6EImrSQZEqkyAmria1IFIdBzsizTTcehAJDoOHYhEx6EDkeg4dCCSIJJ9keg4dCASHYdrRJJUNpFk/+TyTBNBhzt9AR3uRH0V7gvpXYc7gVyHOxlbhzuxWYe7wF1jMvRCuNXhTl7V4U5e1eFOXtXhTl5V4V7Iqzrcyas63MmrOtwF7hqThwq5SYc7uUmHO7lJhzu5SYc7uUmF+0pu0uFObtLhTm7S4c51Ph3uAncV7uRVHe7kVR3u5FUd7uRVHe7kVQ3uOZBXdbiTV3W4k1cbcL+hJII2QymgbIWSoNgMJV74mj2q2azYHLDN+hKtZWMSwl6jiOWwrxFexr5GgkbmNcJ92deIlr59jWj/29eIeGRfI/KReY0SlyD0NaoMW86J6xUdiESnoQORaDV0IJIgkn2RaDZ0IBLdhg5Eot3QgUj0GzoQiYaDfZEyHQcLIsk2ETtM+zv1Mh2HDkSi49CBSHQcOhBJEMm+SHQcOhCJjoMxC/5KJDoOHeQkOg4diETHwb5IQsehA5HoOHQgEh2HDkSi49CBSIJI9kWi49CBSHQcOhCJjkMHItFx6EAkOg72RZroOHQgEh2HDkSi49CBSIJI9kUizHYgEmG2A5EIs/ZFmgey4HGe7tjjvMQPR9+KHajlH0vZhF1lrR29xu1XbC1r9TcyykYyxCIfjr+hFFC2QjmQ49BGOZAv0EY50O6tjXKghrE2yoHausool5GcnzLKgVqk2igHamRqoyTtNEMpoGyFkrTzWZTr4xGiFHLt+MpLRRaikQ53cpQOd0KXDncSmgr3QpzT4U720+FOUNThTqrU4S5wV+FOXtXhTl7V4U5e1eFOXtXhTl5V4b6SV3W4k1d1uJNXdbiTV3W4C9xVuJNXdbiTV3W4k1d1uJNXdbiTVzW4SyCv6nAnr+pwJ6/qcCev6nAXuKtwJ6/qcCev6nAnN+lwJzepcI/kJh3u5CYd7uQmHe7kJh3uAncV7uQmHe74909yT0+PAqdp/nD8O8qERfkkyhweKHMsv3T8DT0uRQ09RkUNvYBeCz12RQ09nV419NycpIYen66Gnla7FvpMt10NPWlWDT1p9hr0y6OFs8xp1wvLRFkd7gJ3Fe6E2Gu4l2n79LJ8eEnFq6Vsr79IIcx7kYi7HYhEMO5AJCJ0ByIRtu2LJMTyDkQiwHcgElG/A5HoC3QgkiCSfZHISfoilXTHXZLsJBrpJfb9/h2dv+ZURnqJ/bgi4e06EAlv14FIgkj2ReJqUgcicTWpA5FISR2IxNUkAyLFjXeMTwvfROJqkn2RZjoOHYhEx6EDkeg4dCASHYcORBJEsi8SHYcORKLj0IFIdBy+WqQbd5oI13Cv3Icw0xdQ4b4Q9XW4k951uBPIdbiTsXW4C9xVuJOEdbgTbnW4k1d1uJNXdbiTV1W4l5Hy6jo/as2hcnQK5Q4ypVQfahOfpuPGIh+Ov6EcKYIqoxwpVSqjHCkoKqMUULZCOVKcU0Y5UkJTRjlS6FJGOVKOUkY5UjTSRbmSdpqhJO00Q0na+SzKpm8GWolGOtwF7ircCV063EloOtyJczrcyX463AmKGtynQKrU4U4E1eFOXtXhTl7V4S5wV+FOXtXhTl7V4U5e1eFOXtXhTl5V4R7Jqzrcyas63MmrOtzJqzrcBe4q3MmrOtzJqzrcyas63MmrOtzJqyrcE3lVhzt5VYc7eVWHO3lVhzu5SYc7uUmHO7lJhzu5SYc7uUmFeyY36XAnN+lwJzfpcMe/f5J7enoUOE3zh+NvKLEon0T5k2PQTo+/ocelaKEXjIoaeryKGnrsihp6Or1q6AX0Wujx6WroabWroafbroaeNKuGnjR7Dfrl0cJZ5rTrhU1EWR3u5Fgd7oTYa7j/1MtPz1/yME3E3Q5EEkSyLxIRugORCNsdiEQs70AkAnwHIhH17Ys00xfoQCSaCB2IJIikLlJJd9wlyV4ivJ2Bv6OQ8uOzX/wd4e06EAlvZ1+kBW/XgUh4uw5E4mpSByJxNakDkQSR7IvE1SQDIsWNd4yy7kXialIHItFx6EAkOg4diETHwb5IhY5DByLRcehAJDoOHYhEx6EDkQSRvlikG3eaCNdwr9yHUOgL6HAn6utwJ73rcCeQq3Bfydg63InNOtxJwjrcCbc63AXuKtzJqzrcyas63PHv+s3L0+cV3rRAInWJ1rIxCeGFRtgk+xoJGpnXCPtlXyOsmn2NuAxhXyMuWdjXiHhkXqNIPrKvEZdN9DWqPPAzR66xdCASnYYORBJEsi8SvYYORKLZ0IFIdBs6EIl2Qwci0W+wL1Ki4dCBSHQcLIgkj1c5T3kvEh2HDkSi49CBSIJI9kWi49CBSHQcOhCJjoMxC/5KJDoOHeQkOg72Rcp0HDoQiY5DByLRcehAJDoOHYgkiGRfJDoOHYhEx6EDkeg4dCASHYcORKLjYF8koePQgUh0HDoQiY5DByLRcehAJMJsByIRZjsQiTDbgUiEWfsiTVjwT4qUStxApjV8OP6GEqPcDCV2thlKAWUrlPj3Zihx2c1Q4oWbocSxNkPJRZJWKGcuZTRDSdpphpK00wwlaacZSgFlK5Sknc+inJcHyhJqx5+/6XOeiUY63MlROtwJXTrcSWgq3BfinA53sp8Od4KiDndSpQ53gbsKd/KqDnfyqg538qoOd/KqDnfyqgr3Ql7V4U5e1eFOXtXhTl7V4S5wv4R7ittd/enbvfk/ciev6nAnr+pwJ6/qcCevXsRd5o37vN9XV/z7NdzlceeSlP3v+4p/1+GOf7+G+/x4OnTOcc9d4K7CHf+uwx3/rsMd/67DHf+uw53rTRrcl8D1Jh3u5FUd7uRVHe7kVR3uAncV7uTVi7hP24St+Ynhxp28qsOdvKrDnbyqw528qsI9kld1uJNXdbiTV3W4k1d1uJObruGe1437O7cH91cLXx8LD/NeJEJWByKRyDoQifjWgUhkPfsiJYJhByKRIjsQicjZgUjk0w5EEkSyLxI5SV+kku64S5KdRBlvZ+Dv6PzdVkvG23UgEt6uA5Hwdh2IJIhkXySuJnUgEleTOhCJlNSBSFxNMiDS+QSoJXM1yb5IQsehA5HoOHQgEh2HDkSi49CBSIJI9kWi49CBSHQcOhCJjsM1Ikkqm0iyf3JZaCLocKcvoMJ9IurrcCe963AnkOtwJ2PrcBe4q3AnCV/E/XQy9DIRbnW4k1d1uJNXdbiTV1W4z+RVHe7kVR3u5FUd7uRVHe7kpmu4VyYPzeQmHe7kJh3u5CYd7uQmFe4LuUmHO7lJhzu5SYc7uUmHu8BdhTt5VYc7eVWHO3lVhzt5VYc7eVWFeyGv6nAnr+pwJ6/qcCevNuB+QymgbIWSVNkMJUGxGUq88DV7VLtZsSu2WV+itWxMQnihEZbDvkaCRuY1wiTZ1wj3ZV8jWvr2NaL9b18j4pF1jUogH9nXiEsQ+hpVhi2XwPWKDkSi09CBSIJI9kWi19CBSDQbOhCJbkMHItFu6EAk+g32RYo0HDoQiY6DBZFkm4gdprwXiY5DByLRcehAJEEk+yLRcehAJDoOHYhEx8GYBX8lEh2HDnISHQf7IiU6Dh2IRMehA5HoOHQgEh2HDkQSRLIvEh2HDkSi49CBSHQcOhCJjkMHItFxsC9SpuPQgUh0HDoQiY5DByLRcehAJMJsByIRZjsQiTDbgUiEWfsiyUgWvJSt1lXWqqRxo76WtSpSDvIAGauilmn79LLM5yKdzk8rMpIB71WiynwAGcnajarRSM5uVI1GMnajajSSrxtVo5GuUQyq0TTSJYpRNSIe2deIfGRfo5GuT/SqUa0XNAki2ReJTkMHItFq6EAkeg0diESzoQOR6DbYF2mm3dCBSPQbOhCJhkMHItFxsCDS+RiUWRDJvkh0HDoQiY5DByLRcehAJDoOHYhEx8GYBX8h0kLHwX5OWug4dCASHYcORKLj0IFIgkj2RaLj0IFIdBw6EImOQwci0XHoQCQ6DvZFKnQcOhCJjkMHItFx6EAkOg4diCSIZF8kOg4diESY7UAkwmwHIhFm7Yu0EmY7EAkL/kmRUokbyLSGD8ffUAooW6HEzjZDyWWuZijx781Q4rKbocQLN0K5BhxrM5RcJGmGkksZzVCSdpqhFFC2QknaaYaStNMMJWnnsyh/7vUHcUMY49Navnfk1kA00uFOjlLhHgldOtxJaDrciXM63Ml+OtwF7ircSZU63ImgOtzJqzrcyas63MmrKtwTeVWHO3lVhzt5VYc7eVWHu8BdhTt5VYc7efUa7ilud/Wnb/fm/8idvKrDnbyqw528qsI9k1cv4i7zxn3e76sZ/34Nd3ncuSTlxe+7wF2FO/79Gu7z4+nQOcc9d/y7Dnf8uw53/LsOd/y7CnfBv+tw53qTDneuN+lwJ6/qcBe4q3Anr+pwJ6/qcCevXsR92tYyPzHcuJNXdbiTV1W4T+RVHe7kVR3u5FUd7uRVHe4CdxXu5FUd7uSma7jndVvLO7cH91dL2Q5OIcx7kQhZHYhEIrMv0kx860Aksl4HIhEMOxCJFNmBSIJI9kUin3YgEhdfOxCJnKQvUkl33CXJTqIFb2fg7+j83VbrgrfrQCRBJPsi4e06EAlv14FIXE3qQCSuJnUgEinJvkiFq0kGRKpMgCpcTepAJDoOHYhEx6EDkQSR7ItEx6EDkeg4dCASHYcORKLj0IFIdByuEUlS2USS/ZPLK00EHe70BXS4E/V1uJPedbgL3FW4k7F1uBObdbiThC/ifj4ZeiXc6nAnrypwTyGQV3W4k1d1uJNXdbiTV3W4C9xVuJNXdbiTm67hfjp56I07uUmHO7lJhXskN+lwJzfpcCc36XAnN+lwF7ircCc36XDnOp8Od/KqDnfyqg538qoK90Re1eFOXtXhTl7V4U5e1eEucFfhTl5twP2GkgjaDCWpshlKgmIrlBkvfM0e1WpW7JtE2GZ9idayMQnhhUZYDvsa4WXsa4RJsq8R7su+RrT0zWsktP/ta0Q8sq8R+ci+RlyC0NfofNjym0iCSPZFotPQgUi0GjoQiV5DByLRbOhAJLoN9kWaaDd0IBL9hg5EouHQgUh0HCyIJNtE7DdF9iIJItkXiY5DByLRcehAJDoOHYhEx6EDkeg4GLPgL0Sa6TjYz0kzHYcORKLj0IFIdBw6EEkQyb5IdBw6EImOQwci0XHoQCQ6Dh2IRMfBvkgLHYcORKLj0IFIdBw6EImOQwciCSLZF4mOQwciEWY7EIkw24FIhFn7IhXCbAciffmetDwWH2JFpLclP1ZfynZ0kVcLKfd1LPKkpywvjpXp/qsyxfjh2BuVApUXVFao7KmsASovqESovKCSoPKCSnZJZdpMwjSVyrExTnJfRJwfn5zC9318FRj+MsOvbqJI3N47Oy2pyjDKtv4Qi3ywibcC5t4LWHovoPRewNp3ATGE3guIvReQei8g916A9F5A5ztxDJ3vxDFY34nXx/NVKeQPBbw4/vyNKzFY37bbVmt9j29abbRuCNpWa909tK3WutVoW611X9K2WnFVrXXH07Za6/aobbWuvFR05aWiKy+VXHmp5MpLJVdeKrnyUl/+Jlfdal15qeTKSyVXXiq58lLJlZfKrrxUduWlsisvlV15qSyuqnXlpbIrL5VdeansyktlV15KXLkLceUuxJW7+PJ32OlW68pdiCt3Ia7chbhyF5Px/TY93d6WpvlDtbcCjJ9mc3gUkGOpyXV6/K1g42fa9gUbP9m2L9j4+bZ9wcZPue0LNp7pmhc8G2+Rty/Y+L7avmDjUbZ9wcbTbPuCxVvBYzmt5WGllzntksA8ls2qVTuWx6pVO5bBKtM2ZacsHybhvDh43WbspBDmPZqxrFhLNMtYpq0pmrHsXVM0YxnBpmjGsoxN0QhojtCMZUObohnLszZFM5bBbYmm+PU1Jd2LLEn2YBzvT+fTNWNxvD/V0Djen2poHO9PNTSO96caGsfdmhoax92aCprVcbemhsZxtyZuVcb4NO58Q+O4W1ND49gN19AIaI7QOHbDNTSO3XANjWM3XEPj2A3X0Dh2w+dokvXhwc3Q3Kody+Ce92+T9bHEjasdy4bWqhVX1Y5lFmvVjuX/atWOZelq1Y7l0mrVjmW8KtVan7vcuFpXXsr63OW21VqfgaJ15T9ZH5dyIZi1bO8aDeEFGb8Zu0JG/F5wqpHxe72pRsbv5aYaGb9Xm2pkBDIHZPzamRoZ/MwRGe67un32Ph1Yn/yiiYb7ro7QTNx3dYjG8X1XNTSO77uqoeEphEM0ApojNDyFcIiGpxAO0Xh2w/IYJDjlPRrPbriCxrMbPkcz2KCvpmg8u+EKGs9uuIIGN3yIRkBz4GsGG13WFA1u+BANveFDNPSGD9HQGz5C43mCWg0NveFDNPSGD9Hghg/RCGiO0OCGD9Hghg/R4IYP0eCGD9Hgho/QFCzfIRos3yEaLN8hGgHNERrjm/fbyXBbflrDBzS3AoxvsfUCjG+E1QKsD1SrF2D93X7VAozvivUCjO9d9QKM7zD1AoxH/3oBxgN6vYDed2LrA6jqBXS+E2frw5zqBVjfieflUUD5WMCL489nb2Xr85kaV2t9j29brbiq1rp7aFutdavRtlrrvqRttdZNTNtqrTueptVan8/UuFpXXsr6fKbG1bryUlFcVevKS0VXXiq68lLRlZeKrrxUGstLpbhdgU057asdy0vVqh3LS9WqHctL1aqVsaqVeat2fnGWGmu/lUf/XMoLbcfab2vVjrXfzo97gOYcd9XmsfbbWrVj7be1asfab2vVjrXf1qoda7+tVTtW76JW7Vi9i1q1Y3mpWrVjealata68lPWB7I2rHcxLTdv97PPTyrdqB/NSlWoH81KVasVVtYN5qUq1g3mpSrWDealKtYN5qUq1g3mp82qtj67+yWrz9l6s+L7aR7UvDj5/iVa2PrpaE81YvqUpGgHNEZqxHFFTNGPZp6ZoxvJaTdGMZcyaohnLxbVEY310tSYav77m9L2p2fow2St/Z84ncGTrw2Q10Tjen2poHO9PFTTWh8lqonHcramhcdytqaFx3K2poRG/aCpPCFgfJquJxrEbrqFx7IZraBy74Roax264gqY4dsM1NI7dcA2NYzdcQzOWG5ZUNjSyv3vQ+ujcxtWO5Vlr1Y5lQ2vVDvYsYKXawZ4FrFQ7lv+rVGt+4HLbasdyaZWnWs2Pcm5b7WBeqlKtuKp2MC9VqXYwL1Wp1tVcBfODrdtWO5iXOq1WBps4fX63vgw2cbpWraen4ySIq2o9PR0ng02crlXr6ek4GWzidK1aT0/HyWATp2vVuvJSg02crlXryksNNnG6Vq0rLzXYxOlata681GATp2vVduyl3gvoeYj0rYCOHc+tgI5NzK0Av3cZnz5xJ8nvPcZrmbaPDi/I+L1ZtEJmsCHDLcn4vVW0RsbvnaI1Mn4fm6qREcgckPFrZ2pk8DNHZBgg8P7Z+8czZbApzk3RMEDgCM1g86GbomGAwCEaBggcomGAwCEaAc0RGscDBGpoGKd1iMazG5btydUw7a8XDTaHuykaz274HM3k2Q1X0Hh2wxU0nt1wBQ1u+BCNgObA13gefl5Dgxs+RENv+BANveFDNPSGj9B4Hn5eQ0Nv+BANveFDNLjhQzQCmiM0uOFDNLjhQzS44UM0uOFDNLjhIzS8T+AYDZbvEA2W7xCNgOYIzVdv3jlut13mKVTQTMt29LRMU+2zw/qYMZxC5ei3y5PfD84hV9YhYVuHhKk8BFpeHLzM92OX8hh0nF7Wl+9rmJ60eTv0pk1BG0Vtpq28edprs6KNVW2+fDg/2nxem4g2ZrVJaGNWm4w2ZrURtDGhzSJ7bSa0MavNjDaa2mzZs7zQhr6ApjaynGlDX8CuNvQFzGqz0hdQ1GbeeuJzXPba0Bewqw19Abva0Bewq42gjaI2IW/alL029AXsakNfwK429AXsakNfwK429AWsajMF+gI2tEnLXhv6Ana1oS+gqk26o8svtKEvoNmHXuVMG0Ebs9rQF7CrDX0Bzf1mu7b2RnGvDX0Bu9rQF7CrDX0Bs9pE+gJ2taEvYFcb+WVtZNmM4CRzjUgo96NTSk9Vvn58MuRwP/ztn2P1+DJtT2eW5cMTlPuDT98eNjV4JWivYM7ftjE1eMXkqGRWyLwm0+A9l6OSiZA5IJMgc0AmQ+aAjEDmgAx+5ojM7JZMZeLIlBbQHKHx64KraPza4Bqa7NcHV9H4NcJVNH6dcBWNXytcRSOgOULj1wxX0Xh2w6evrZmyZzdcQePZDVfQeHbD52jEsxuuoPHshitocMOHaHDDR76mwWuGh0WDGz5EQ2/4EA294UM09IYP0dAbPkIz0Rs+RENv+BANbvgQDW74EI2A5ggNbvgQDW74EA1u+BANbvgIzYzlO0SD5TtEg+U7RIPlO0RjfPNOZXsPW0hr+HD8rQDjW2y9AOMbYb0A482bagGL8f22XoDxXbFegPG9q16A8R2mXoD0XoDxgF4voPedeOl9J15634mX3nfiYn0n/rnX/MbwmAog6857F+vbdttqre/xbau1bgjaViuuqrVuNdpWa92XtK3WuolpW611x9O2Wuv2qGm1qysvtbryUqsrL7W68lIN3jnUU7WuvNTqykutrrzU6spLrWN5qRS3K7Dp23XUj9XOYSwvVat2LC9Vq3YsL1WrdiwvlWTeqp3XfbVj7bfy6J9LeaHtWPttrdqx9tv5cQ/QnOO+2rH220q1caz9tlbtWPttrdqx9ttatWPtt7VqxVW1Y/UuatWO5aVq1Y7lpWrVuvJS1geyt63W+pD1n6122u5nn5e8r3YwL1WpdjAvVal2MC9VqVZcVTuYl6pUO5iXqlQ7mJeqVDuYlzqv1vro6p+sNq9bte+rfVT74uB1OziFMO/RjGVFmqIZy7c0RTOWyWmKRkBzhGYs+9QUzVheqymasYxZUzRjubimaMZqn7VEY30I8YVoTt+bOlsfJnvl78z5BI7Z+jBZTTSO96caGsf7Uw2N4/2pgsb6MFlNNI67NTU0jrs1NTSOuzXnTwjM1ofJaqJx7IZraBy74Roax264hsaxG66hceyGK2isz9nVROPYDdfQjOWGJZUNjezvHrQ+OrdxteKq2rFsaK3awZ4FrFQ72LOAlWrH8n+1aseydJVqzU9nbvpUq/lRzm2rHcxLVaodzEtVqhVX1Q7mpSrVupqrYH6wddtqB/NS59UONnG6crf+YBOna9W6ejpusInTtWrFVbWuno4bbOJ0rVpXT8cNNnG6Vu1gkwbOqx1s4nStWldearCJ07VqXXmpwSZO16p15aUGmzhdq9aVl+p54vStgI7t0bcClp7nQt8K6NjE3AoYa+9q9sTdEvzeY7yWafvo8IKM35tFa2T83itaITPYQOKWZPzeKVoj4/exqRoZv09N1cgIZA7I4GeOyDBA4P2z949nLoNNcW6KhgECh2gYIHCEZrBh0k3RMEDgEA0DBA7ROB4gUEMjoDlCwzitQzSe3bBsT66GKe/ReHbDFTSe3XAFjWc3fI7G8/DzGhrPbriCBjd8iAY3fORrPA8/r6HBDR+ioTd8iIbe8CEaesOHaOgNH6EResOHaOgNH6LBDR+iwQ0fohHQHKHBDR+iwQ0fosENH6LBDR+h4X0Cx2iwfIdosHyHaLB8h2h+ffPO630W0CwyVdDENW61rmWtoslBHsuPVZRl2j69LPM5mvMnfRrMhe8VTOXO2AYDvkclEyFzQCZB5oBMhswBGYHMAZkJMgdk/NqZGhn8zBGZ4pZMLR00mIk+KprFrwuuovFrg6to/PrgKhq/RriKRkBzhMavFa6i8euFq2j8muEqGs9u+PwW88WzGz5HUzy74Qoaz264gsazG66g8eyGK2iEzfsIDW74yNcU3PAhGtzwIRp6w4do6A0foVnpDR+ioTd8iIbe8CEaesOHaAQ0R2hww4docMOHaHDDh2hww4docMMHaErADR+iwfIdosHyHaIR0ByhwfIdojG+eafHK8VDWj8+BHUrwPgWWy0gGt8I6wUYb97UCzC+39YLML4r1gswvnfVCzC+w9QLMB796wUYD+j1AnrfiWPvO3HqfSdOve/EyfpO/HOP5Mdt4THKuvPeyfq23bZa63t822qtG4K21Vp3D22rtW412lZr3Ze0rda6iWlabbbueNpWa90eta3WlZfKrrxUgwH1PVXryktlV14qu/JS2ZWXyq68lLjyUjKWl0pxuwKbvl1H/bHasbxUrdqxvFStWnFV7VheKsm8VTu/OEuNtd/Ko38u5YW2Y+23lWqnsfbb+XEP0Jzjvtqx9ttatWPtt7Vqx9pva9WOtd/Wqh1rv61VO1bvolbtWL2LWrVjealatWN5qUq11oe3N67WlZeyPmT9Z6udtvvZ5yXvqx3MS1WqFVfVDualKtUO5qUq1Q7mpSrVDualKtUO5qXOq7U+ArxxtWO5i596ida6HZxC2D9aZ310tSYaAc0RmrFMTlM0YzmipmjGsk9N0YzltZqiGcuYtURjfXS1Jpqx2mdN0YhbNKfvTS3Wh8nqvWu3WB8mq4nG8f5UQWN9mKwmGsf7Uw2N425NDY3jbk0NjYDmCI3jbk3lCQHrw2Q10Th2wzU0jt1wDY1jN3yOZrU+TFYTjWM3XEPj2A3X0Dh2wzU0MtZTNqlsaCTuqx3L4NaqHcuz1qody4bWqh3sWcBKtYM9C3herfkZym2rHcvS1aody6WdP9W6mh/l3LZacVXtYF6qUu1gXqpS7WBeqlKtp7kKq/nB1k2rNT8Fu221np6OWwebOF2rVlxV6+npuHWwidO1aj09HbcONnG6Vq2np+PWwSZO16odbNJApVpXXmqwidO1asVVta681GATp2vVuvJSg02crlXrykv1PHH6VkDH9uhWQMeO51ZAxybmVoDfu4xPn7hbxe89xmuZto8OezKDDQ5uScbvvaI1Mn5vFa2R8XunaI2MQOaAjN+npmpk/NqZGhn8zBEZBgi8f/b+8cx1sCnOLdEMNvK5KRoGCByiYYDAIRoGCByiEdAcoXE8QKCGxvEAgRoaxmkdovHshmV7cjVM++tFg83hbolmsKHdTdF4dsMVNJ7dcAWNZzdcQSNs3kdocMNHvsbz8PMaGtzwIRp6w4do6A0fofE8/LyGht7wIRp6w4do6A0fohHQHKHBDR+iwQ0fosENH6LBDR+iwQ0foeFVC8dosHyHaLB8h2gENEdosHyHaBps3tukwTlPpYImiXw/OIfnT84vjpUQ77doSnj65LS8OHiZ78cuz8Rffe6U72uYnoi8HXojsjokMt0PnebpByI5tJgDPxiRCJEfiCSI/EAkQ+QHIgKRH4hMrokssicyQ+QHIotHIptDKy+IePSsspwR8ehZT4lEj571nIhDzzrHLbXHZU/EoWetEHHoWStEBCI/EHHoWeeQNyJlT8ShZ60QcehZK0QcetYKEYee9ZxIcuhZK0Q8etYHkbTffZNHz3pOxKNnDWlb8Asi4jD7rnJGxGOf9ZyIxz7rORGPnnXrGM1z2BPx6FnPiXj0rKdEskfPek7Eo2c9J+LRs54T+XU/EqdHk27NFSLT8rgy8PTu9Ri/L2e2tZzF1nKKreWsX7ucOaxb+pL9chqMy2+6nGhrOcnWcrKt5Yit5UxfvZz7J89hfrGc2dZyFlvLKbaWs5pazhRsLSfaWk6ytZxsazliazm2zsqTrbPyZOusPNk6K0+2zsqzrbPybOusPNs6K8+2zsqznbPyP97+9f/88b9+/+O//PlPf3v7kW//9b//8q9///2vf/n+r3//v/95+y9vB/8/","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"00000000000000000000000000000000000000000000000000000000aad5fd6b"},{"kind":"string","value":"PublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"signing_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":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"SchnorrAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"SchnorrAccount::verify_private_authwit_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"field"}},{"name":"signing_pub_key_y","type":{"kind":"field"}}],"kind":"struct","path":"SchnorrAccount::constructor_parameters"}}],"kind":"struct","path":"SchnorrAccount::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":"SchnorrAccount::entrypoint_parameters"}}],"kind":"struct","path":"SchnorrAccount::entrypoint_abi"}]}},"file_map":{"106":{"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::{\n execution::{get_chain_id, get_version, get_contract_address, get_block_number},\n storage::{raw_storage_read, storage_read}\n};\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"},"112":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, public_call_stack_item::PublicCallStackItem,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\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"},"120":{"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"},"121":{"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, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{\n hash::sha256_to_field, address::AztecAddress, point::Point, abis::note_hash::NoteHash,\n constants::MAX_NOTE_HASHES_PER_CALL\n};\n\nunconstrained fn compute_unconstrained<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], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n )\n}\n\nfn compute<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], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\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 (encrypted_log, log_hash)\n}\n\nfn emit_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field)\n) 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 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 let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (encrypted_log, log_hash) = inner_compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\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 emit_with_keys(context, e.note, ovpk, ivpk, iv, compute);\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 let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained);\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 emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute);\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 emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained);\n }\n}\n"},"122":{"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::{\n address::AztecAddress, traits::Empty, constants::GENERATOR_INDEX__NOTE_NULLIFIER,\n scalar::Scalar, point::Point, hash::poseidon2_hash_with_separator\n };\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n use crate::context::PrivateContext;\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"},"123":{"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"},"124":{"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, point::Point};\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 { self.header}\n\n fn set_header(&mut self, header: NoteHeader) {self.header = header; }\n\n fn compute_nullifier(_self: Self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> 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] { [self.address.to_field(), self.owner.to_field(), self.randomness]}\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote { address: AztecAddress::from_field(fields[0]), owner: AztecAddress::from_field(fields[1]), randomness: fields[2], header: NoteHeader::empty() }\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 { EventSelector::from_signature(\"TestEvent(Field,Field,Field)\") }\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, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30\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"},"128":{"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, MAX_NOTES_PER_PAGE, 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\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"},"130":{"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"},"131":{"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"},"132":{"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"},"140":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n traits::Hash,\n hash::{\n pedersen_hash, compute_siloed_nullifier, sha256_to_field, pedersen_commitment,\n poseidon2_hash_with_separator\n}\n};\n// Note: pedersen_commitment is used only as a re-export here\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"141":{"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"},"142":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr","source":"use dep::protocol_types::{\n abis::nullifier_leaf_preimage::{NullifierLeafPreimage, NULLIFIER_LEAF_PREIMAGE_LENGTH},\n constants::NULLIFIER_TREE_HEIGHT, utils::arr_copy_slice\n};\n\n// INDEX_LENGTH + NULLIFIER_LEAF_PREIMAGE_LENGTH + NULLIFIER_TREE_HEIGHT\nglobal NULLIFIER_MEMBERSHIP_WITNESS: Field = 24;\n\nstruct NullifierMembershipWitness {\n index: Field,\n leaf_preimage: NullifierLeafPreimage,\n path: [Field; NULLIFIER_TREE_HEIGHT],\n}\n\nimpl NullifierMembershipWitness {\n pub fn deserialize(fields: [Field; NULLIFIER_MEMBERSHIP_WITNESS]) -> Self {\n let leaf_preimage_fields = arr_copy_slice(fields, [0; NULLIFIER_LEAF_PREIMAGE_LENGTH], 1);\n Self {\n index: fields[0],\n leaf_preimage: NullifierLeafPreimage::deserialize(leaf_preimage_fields),\n path: arr_copy_slice(\n fields,\n [0; NULLIFIER_TREE_HEIGHT],\n 1 + NULLIFIER_LEAF_PREIMAGE_LENGTH\n )\n }\n }\n}\n\n#[oracle(getLowNullifierMembershipWitness)]\nunconstrained fn get_low_nullifier_membership_witness_oracle(\n _block_number: u32,\n _nullifier: Field\n) -> [Field; NULLIFIER_MEMBERSHIP_WITNESS] {}\n\n// Nullifier here refers to the nullifier we are looking to get non-inclusion proof for (by proving that a lower\n// nullifier's next_value is bigger than the nullifier)\nunconstrained pub fn get_low_nullifier_membership_witness(block_number: u32, nullifier: Field) -> NullifierMembershipWitness {\n let fields = get_low_nullifier_membership_witness_oracle(block_number, nullifier);\n NullifierMembershipWitness::deserialize(fields)\n}\n\n#[oracle(getNullifierMembershipWitness)]\nunconstrained fn get_nullifier_membership_witness_oracle(\n _block_number: u32,\n _nullifier: Field\n) -> [Field; NULLIFIER_MEMBERSHIP_WITNESS] {}\n\n// Nullifier here refers to the nullifier we are looking to get non-inclusion proof for (by proving that a lower\n// nullifier's next_value is bigger than the nullifier)\nunconstrained pub fn get_nullifier_membership_witness(block_number: u32, nullifier: Field) -> NullifierMembershipWitness {\n let fields = get_nullifier_membership_witness_oracle(block_number, nullifier);\n NullifierMembershipWitness::deserialize(fields)\n}\n"},"143":{"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"},"145":{"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"},"146":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{\n constants::PUBLIC_DATA_TREE_HEIGHT, public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage,\n utils::arr_copy_slice\n};\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(block_number: u32, public_data_tree_index: Field) -> 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"},"147":{"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"},"150":{"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"},"151":{"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"},"153":{"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"},"154":{"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"},"156":{"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"},"157":{"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, utils::arr_copy_slice,\n constants::CONTRACT_INSTANCE_LENGTH, 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"},"158":{"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"},"160":{"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"},"163":{"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"},"165":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse crate::oracle::storage::storage_read;\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"},"181":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{\n address::AztecAddress, constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator\n};\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"},"185":{"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"},"2":{"path":"std/array.nr","source":"use crate::cmp::Ord;\nuse crate::convert::From;\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 pub fn sort(self) -> Self where T: Ord {\n self.sort_via(|a: T, b: T| a <= b)\n }\n\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n let sorted_index = unsafe {\n // Safety: These indices are asserted to be the sorted element indices via `find_index`\n let sorted_index: [u32; N] = self.get_sorting_index(ordering);\n\n for i in 0..N {\n let pos = find_index(sorted_index, i);\n assert(sorted_index[pos] == i);\n }\n\n sorted_index\n };\n\n // Sort the array using the indexes\n let mut result = self;\n for i in 0..N {\n result[i] = self[sorted_index[i]];\n }\n // Ensure the array is sorted\n for i in 0..N - 1 {\n assert(ordering(result[i], result[i + 1]));\n }\n\n result\n }\n\n /// Returns the index of the elements in the array that would sort it, using the provided custom sorting function.\n unconstrained fn get_sorting_index<Env>(self, ordering: fn[Env](T, T) -> bool) -> [u32; N] {\n let mut result = [0; N];\n let mut a = self;\n for i in 0..N {\n result[i] = i;\n }\n for i in 1..N {\n for j in 0..i {\n if ordering(a[i], a[j]) {\n let old_a_j = a[j];\n a[j] = a[i];\n a[i] = old_a_j;\n let old_j = result[j];\n result[j] = result[i];\n result[i] = old_j;\n }\n }\n }\n result\n }\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<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\n// helper function used to look up the position of a value in an array of Field\n// Note that function returns 0 if the value is not found\nunconstrained fn find_index<let N: u32>(a: [u32; N], find: u32) -> u32 {\n let mut result = 0;\n for i in 0..a.len() {\n if a[i] == find {\n result = i;\n }\n }\n result\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"},"202":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{constants::KEY_VALIDATION_REQUEST_LENGTH, traits::{Empty, Serialize, Deserialize}, point::Point};\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))\n & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest {\n pk_m: Point::empty(),\n sk_app: 0,\n }\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 {\n pk_m: Point { x:fields[0], y: fields[1], is_infinite: fields[2] as bool},\n sk_app: fields[3],\n }\n }\n}\n\n"},"217":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr","source":"global NULLIFIER_LEAF_PREIMAGE_LENGTH: u32 = 3;\n\nuse crate::{\n abis::{read_request::ScopedReadRequest, side_effect::Readable}, hash::compute_siloed_nullifier,\n merkle_tree::leaf_preimage::{LeafPreimage, IndexedTreeLeafPreimage}, traits::{Empty, Hash}\n};\n\nstruct NullifierLeafPreimage {\n nullifier : Field,\n next_nullifier :Field,\n next_index : u32,\n}\n\nimpl Empty for NullifierLeafPreimage {\n fn empty() -> Self {\n Self {\n nullifier : 0,\n next_nullifier : 0,\n next_index : 0,\n }\n }\n}\n\nimpl Hash for NullifierLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash(self.serialize())\n }\n }\n}\n\nimpl LeafPreimage for NullifierLeafPreimage {\n fn get_key(self) -> Field {\n self.nullifier\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl IndexedTreeLeafPreimage for NullifierLeafPreimage {\n fn get_key(self) -> Field {\n self.nullifier\n }\n\n fn get_next_key(self) -> Field {\n self.next_nullifier\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl Readable for NullifierLeafPreimage {\n fn assert_match_read_request(self, read_request: ScopedReadRequest) {\n let siloed_value = compute_siloed_nullifier(read_request.contract_address, read_request.value());\n assert_eq(self.nullifier, siloed_value, \"Value of the nullifier leaf does not match read request\");\n }\n}\n\nimpl NullifierLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.nullifier == 0) & (self.next_nullifier == 0) & (self.next_index == 0)\n }\n\n pub fn serialize(self) -> [Field; NULLIFIER_LEAF_PREIMAGE_LENGTH] {\n [self.nullifier, self.next_nullifier, self.next_index as Field]\n }\n\n pub fn deserialize(fields: [Field; NULLIFIER_LEAF_PREIMAGE_LENGTH]) -> Self {\n Self { nullifier: fields[0], next_nullifier: fields[1], next_index: fields[2] as u32 }\n }\n}\n\nimpl Eq for NullifierLeafPreimage {\n fn eq(self, other: Self) -> bool {\n (self.nullifier == other.nullifier) &\n (self.next_nullifier == other.next_nullifier) &\n (self.next_index == other.next_index)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = NullifierLeafPreimage::empty();\n let serialized = item.serialize();\n let deserialized = NullifierLeafPreimage::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n"},"22":{"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 {\n x: self.x,\n y: -self.y,\n is_infinite: self.is_infinite\n }\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) | ((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"},"23":{"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"},"24":{"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"},"253":{"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"},"259":{"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 { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\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 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\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 { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\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"},"260":{"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"},"263":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/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 {\n slot: 0,\n value: 0,\n next_slot: 0,\n next_index: 0,\n }\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"},"265":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc, point::Point\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [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 pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"27":{"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{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self);\n }\n}\n\nimpl Hash for 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"},"271":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{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 {\n x: 0,\n y: 0,\n is_infinite: false\n }\n }\n}\n"},"272":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{\n aztec_address::AztecAddress, eth_address::EthAddress, partial_address::PartialAddress,\n public_keys_hash::PublicKeysHash\n},\n contract_class_id::ContractClassId,\n constants::{GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA, 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"},"284":{"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"},"288":{"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"},"309":{"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"},"311":{"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"},"32":{"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 {\n _state: &[],\n }\n }\n}\n"},"323":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash_with_separator,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"325":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{\n eth_address::EthAddress, salted_initialization_hash::SaltedInitializationHash,\n aztec_address::AztecAddress\n},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, FromField, 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"},"326":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{eth_address::EthAddress, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, 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"},"412":{"path":"/usr/src/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr","source":"mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\ncontract SchnorrAccount {\n use dep::std;\n\n use dep::aztec::prelude::{AztecAddress, PrivateContext, PrivateImmutable};\n use dep::aztec::encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys;\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness, auth::{compute_authwit_nullifier, compute_authwit_message_hash}\n };\n use dep::aztec::{hash::compute_siloed_nullifier, keys::getters::get_current_public_keys};\n use dep::aztec::oracle::get_nullifier_membership_witness::get_low_nullifier_membership_witness;\n\n use crate::public_key_note::PublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n signing_public_key: PrivateImmutable<PublicKeyNote>,\n }\n\n // Constructs the contract\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) {\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 = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.signing_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 file\n #[aztec(private)]\n #[aztec(noinitcheck)]\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 // docs:start:is_valid_impl\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.signing_public_key.get_note();\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 signature of the payload bytes\n std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n outer_hash.to_be_bytes::<32>()\n )\n // docs:end:is_valid_impl\n }\n\n /**\n * @notice Helper function to check validity of private authwitnesses\n * @param consumer The address of the consumer of the message\n * @param message_hash The message hash of the message to check the validity\n * @return True if the message_hash can be consumed, false otherwise\n */\n unconstrained fn lookup_validity(consumer: AztecAddress, inner_hash: Field) -> pub bool {\n let public_key = storage.signing_public_key.view_note();\n\n let message_hash = compute_authwit_message_hash(consumer, context.chain_id(), context.version(), inner_hash);\n\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n let valid_in_private = std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n message_hash.to_be_bytes::<32>()\n );\n\n // Compute the nullifier and check if it is spent\n // This will BLINDLY TRUST the oracle, but the oracle is us, and\n // it is not as part of execution of the contract, so we are good.\n let nullifier = compute_authwit_nullifier(context.this_address(), inner_hash);\n let siloed_nullifier = compute_siloed_nullifier(consumer, nullifier);\n let lower_wit = get_low_nullifier_membership_witness(context.block_number(), siloed_nullifier);\n let is_spent = lower_wit.leaf_preimage.nullifier == siloed_nullifier;\n\n !is_spent & valid_in_private\n }\n}\n"},"413":{"path":"/usr/src/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr","source":"use dep::aztec::prelude::{AztecAddress, NoteHeader, NoteInterface, PrivateContext};\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 PUBLIC_KEY_NOTE_LEN: Field = 3;\n// PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal PUBLIC_KEY_NOTE_BYTES_LEN: Field = 3 * 32 + 64;\n\n// Stores a public key composed of two fields\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 PublicKeyNote {\n x: Field,\n y: Field,\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<PUBLIC_KEY_NOTE_LEN, PUBLIC_KEY_NOTE_BYTES_LEN> for PublicKeyNote {\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 PublicKeyNote {\n pub fn new(x: Field, y: Field, npk_m_hash: Field) -> Self {\n PublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"5":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Get an element from the vector at the given index.\n /// Panics if the given index points beyond the end of the vector (`self.len()`).\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Get an element from the vector at the given index.\n /// Responds with undefined data for `index` where `self.len < index < self.max_len()`.\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Write an element to the vector at the given index.\n /// Panics if the given index points beyond the end of the vector (`self.len()`).\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Write an element to the vector at the given index.\n /// Does not check whether the passed `index` is a valid index within the vector.\n ///\n /// Silently writes past the end of the vector for `index` where `self.len < index < self.max_len()`\n /// Panics if the given index points beyond the maximum length of the vector (`self.max_len()`).\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn len(self) -> u32 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n \n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"55":{"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 {\n if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n"},"69":{"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"},"70":{"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 `keccak256(\"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 = 0xabf64ad4; // 4 first bytes of keccak256(\"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(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(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"},"71":{"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"},"72":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_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"},"74":{"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(\n self.serialize(),\n GENERATOR_INDEX__FEE_PAYLOAD\n )\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"},"80":{"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"},"81":{"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"},"82":{"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};\nuse crate::keys::constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX};\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"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, abis::validation_requests::KeyValidationRequest, address::AztecAddress,\n constants::CANONICAL_KEY_REGISTRY_ADDRESS, point::Point, storage::map::derive_storage_slot_in_map,\n traits::is_empty\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, INCOMING_INDEX, OUTGOING_INDEX, TAGGING_INDEX}\n},\n state_vars::{\n shared_mutable::shared_mutable_private_getter::SharedMutablePrivateGetter,\n public_mutable::PublicMutable, map::Map\n}\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\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// 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"},"98":{"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::{context::PrivateContext, 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"}}}
|
|
1
|
+
{"transpiled":true,"noir_version":"0.33.0+8ac81b15cd2a3b57493bfbfe444086deac8f3dc8","name":"SchnorrAccount","functions":[{"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":"7dzfbtw2Fsfxd/F1Lsjzj2RfZVEUaZsWBoKkaNIFFkXffceONWNHk06ijo6/tbQXu/VW40NROj9TNj/68+bnNz/+8esPt+9+ef/h5rv//Hnz9v1Prz/evn93+OrPm6r3/9+H316/u/vyw8fXv3+8+a68unnz7ufD//716uaX27dvbr6zKn+9mh0nw/zhUBnRjkdXq2eOtsN/Ho42l0tH1yKuD4cf/jnieLzcVZofr+N4+P1oH47WcwOvtUznWKuNxwd//+qm2j4p80nxfVLmkxL7pMwnpe2TMp+Uvk/KfFLGPimzSZGyT8p8Uip4UsZx4EWLXZqU7m06vLf4R5MiiZPiNg3bQhR8p+g+KfNJsX1S5pPi+6TMJyX2SZlPSgNPyrP99PlHK1odMR2qY5wGUqvef/Ox4jfXb1hh3R1+du0hVqZVgpjapXugj5hGVNqpRDt7cHGX6XuX9mgJ0mCNobJPzZemRvep+dLUGH5qnitU1fep+dLUxD41X5qa9s+nRqsef2bWR2lwfmpaPc5Ms3Zx1ut0ptL90ZKmnx9IOw5ESj0dLeP+XPuGznW8pHPVMX1vNR1PzvXMDR8yneRh1P3zmbGy3Zlpp5lpPmYzU1/SzFgb00C8XpyZcgrgKqd0r1rPfu/pR4G1xxOiZ471Nh0bVi89kh3KHUfR/fRToN1fHtkvzzNfnjE9jR8G0T+/PLpfHvLlsf3ykC+P75fneS+P1ONDukh8fnlivzzky/OinuJe3uV5UQ+e/8bLozodXNXs88vzop6VV7w8Xqaf4FHKhcujhytxnJB+Oke5/7WTv6iHcMqUS/jxV0LzKd+f7tOnfH9iT5/y/Sk8fcptn/LsKd+fltOnfH8CTp/y/ak2fcr3J9X0Kd+fPrOnPPanz6+b8qh2/B1LvzDltdTj71iKPZny+cFmOk2IHcb/+fXZH1XZ12d/rmVfn/0hmH19bLvXR47DrmLy5PrczcyGH2wvzMyGnz8vzMyGHxOlHzf06aM/O55PuzrK8Y+Uoz3aXnZ+k/HzbUqODT+FvtAruuGH3Jd5RduLeoZ2Of66wKNcuKJDSn84eoicrlE9u248/PA6fvPDP7s9Of5uJl/U0+6zzmT6c2k/7iuRHk+/9d140p/DDpExfesx6mw8BhuPw8YTsPE02Hg6bDyDNZ5eYOOpsPEIbDywfO6wfO6wfO6wfO6wfO6wfO6wfB6wfB6wfB6wfB6wfB6wfB6wfB6wfB6wfB6wfB6wfD78wok2IFhCH37hRxsQLKMPf5ulDQiW0rXAYroWWE7XAgvqWmhJXWlJXWlJXWlJXWlJXWlJXWlJXWlJXWlJXWlJXWlJLbSkFlpSCy2phZbUQktqoSW10JJaaEkttKQWWlIrLamVltRKS2qlJbXSklppSa20pFZaUistqZWW1EZLaqMltdGS2mhJbbSkNlpSGy2pjZbURktqoyW105LaaUnttKR2WlI7LamdltROS2qnJbXTktppSR20pA5aUgctqYOW1EFL6qAlddCSOmhJHbSkDlpSN1pSN1pSN1pS0yRipVHESrOIlYYRK00jVhpHrDSPWGkgsdJEYqWRxEoziZWGEitNJVYaS6w0l1hpMLHSZGKl0cRKs4mVhhMrTSdWGk+sNJ9YaUCx0oRipRHFSjOKQjOKQjOKQjOKQjOKUmBJLTSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjqDSjqDSjqDSjqDSjqAWW1EozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikYzikYzikYzikYziofCtAHBktpoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFpRtFpRtFpRtFpRtELLKmdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSDZhSDZhSDZhSDZhSjwJI6aEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYx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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":3,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/+2dC2xd2XWeD8lL8ZKiSA0lSqTEEY8oUhKpx/CSVzMa5KUgaYJ0nMRpkCJAghiaEeUMMiNNx5pM3DzqGChat0n6MIxMncJOggEat3ZjtEkRJ20R59EkjdG4NVqjTgM4dRDEcJzaRpsCec+hzs/7cXHd89jnborK5AISz91377XXWnvt9dqPM5Tc/xx+7d9Q/jya/z2U7P2ozo3873qzT2eAsNZj4jn0kOA5/JDgOfKQ4NkaIJ4ZbiPJ7s+g8R2NwNdB43joIcBxbMDjLhxb+XP7tX/jr/2bSO7r3j0/krDhXHCy37MBzhg4hjr9gD5tmJN9LuD5eP73m+58x527L99J79y9t5Xee+sLW+nXfCXbfA+evyj/+4337r54881b6Vueu3svff6lt9xLn37ty1b25/bdF7fSZ+4+/8JL95698+b7UL/92VvZ8wt3n71zj6A/NxQN9GeGe8/z+d8vf/HFm29Nn71za+u70rsv3Uvv3k6fvvvSnVtvYcP/F9rwT0IbHoFaWMj/3rx3b+v5F+6l9+6mN2/dSl9+9t63p3e/c+vF28/dfZltT48EdvoloQ2/pgG2P9yg7ftCEf63oQ1/NrThrzcg81tagZ1uhTZ8LrTh97bCyfyHoZ1+ILThhxpgOzYa3nZ+NBDhc6EN10IbflEDMr/4UGCnXxXa8GtDG37boXAynwvt9IdCG767Aba/16DtH4Ui3BoLbHg4tOHCWDiZV0M7vR7a8MtCG76xAZnfFtrp20Ib/kADbD/RoO3vhyL8h6EN/zS04VQ7nMyfaQd2+guhDX8ttOEnGpD5e6GdTowHNjwxHo7trQZtvzMU4beFNvx7oQ1faUDme0M7/VcNOv3J0E7/Q4NOfyO00/8Z2vCToQ0/34DMPw/t9OxEYMMrE+HYfneDtj8YivAPhzZ8T2jDn2xA5odDO/310Ib/LbThpxqQ+fnQTo8dDmy4eDgc2+cbtP07oQi/I7ThPw5t+GMNyPyJ0E5/qkGnPxPa6X9q0OlHQzv9H6EN/3dNbHeSzn+SN8zcOOVHley+kX9fb/bp2IT5wGBf797OYE/Ewft6BvtwHNjrWfD+FTljhL/6ysbhq/Pf9Hco/zeZ9Fap1H4y6S0yfCXKlC36ayhT0uCrUKbwSH21k94ix4DH67oWQQYO+zU5mwQPhf8knvVbRu8Z1BuNQ+vTbfB7wLR2o43R+v0VMY3RaA5bfR0C3zjvBrgC3xkyMjKEvlTewvOjqAunYbvOCPDNPlNJT94nCtqNmnbTqDOGdm3TTt+lSzM4x/Lnmdf+PdXu1RX8ScC4kf9dD/zcvHnr2u1bj2+vLR4BDhq3SfRL2Rzg+K2TpkHLRgZ7aoD80qcFfj0Bvq2AjiMY5yGHp4RxMf/7SLL300a9QeuFyWS3PKkPfrDQsoNHRF21rZePGF5No2wK/R4xeOr78AFql9EwgWf9lX0RHzP5eRU29Sj6HSB/NyZzPPkpGnPhkeE0EwenzUn0UwWnGeD0SByctuVwxvBgGmWUixmDp74PR2g3nfTGT3gR1+lA+OTjuGk3btpF5Ps657/6yObGG9B3pLmxSZ7JlzlieJ31fyxO/x2O0a8d7uHxDXnZFPDROGf8mjVlQyhLchz1fRiwtGloFu2sv23H3vNj7HhNoR39zuk+7Y6hHX0otZ82ON3Iv683+2xk8E70wWkaOIk/J4BTJJu8rXeOJ7s/VW3yiYg4HamBE/l0MiJOJ2rgdBI4zUXE6WQNnOaA03xEnOZq4DQPnE5FxGm+Bk6ngNPpiDidqoGT8Mj0hObrOMo4L1UmeaW+lryMoGzO9JeViV+jKBO+jzh4jaIufY4FwB5C/UMoV53vdeAnoCvKWHTux4RnYsBe39iG/WgU2PdlaMHwqUiGRGPmW2QyMYpGgpMS0KMGkL7TMUsjEreYVCcuzf9Oo90U8DwbEc+0Bp5ngWfq4LkUEc+zNfBccnBKBojPNPARfAYWdMbfCVziTNTOdmLxHPqkc8yE7PKgedG5n+BR36/CEX8lL8vkQxOUsq3nFPil9fHrlKGYJLuDudTgkn1W8CxcGRAy0Bk1bcjrH83/9jMCURLi65uPZ7DPR4F9P+GwYmgpmnvnQW+kJMi2PjhvxmEaZQzMzhs89X3YadcObDeL9hfj0LwxaXBSH4nBU5+LwOlCHJw6EendzAx9No4rhh7NITseQ8nuUz4tfGcdm7ARHAbkGk/W5cLNLOoK7kwfuMccuP10iweXyQjiP4O+VOcXAevnHBgWN9IsPs82pCmTU9mDFZSdNfCzMvlkTOz+igNnyoEz5cCZdOBEXBjdZEIpQR/8cE4y0RNTN6of6iUmonb66nY2NjY73Seefvz6+vVr67eeub6xdf3mtWs3n7y2cat76/bG+sa1x29vrV97cvPWk90nXyvudp65ub5+e/3m07c716YTP3lVJSm64uFz8/ozT2xsPb5+a/21/25fu3V9vXut++St7vXbm+vd7q31xzvd9aefvL5164nOEzeffPra5sbN249vrj/Tuba5/sSTHeKzUgMftuNCbCS9uTFpcFIficFTnwvAKZKd35Yb9cPgXGUL6LdMz7LdInBfjYP75qTBSX304+cqcIpkvzox6c1gr8WBvZHZ3cyNnzW8kkyoX/F7BHiIl+K3vtP+WpsiOLRFkhnqyNk+7WiLVJ82bKFPOy9pvQB8LziwhvLfRBdlbhh1L5o27WT3/Bm07JPv6iMxdCeGxph+YSZDtN+y2bLTdnwt3yhTVXw6K1N2k8AU+uaCaExfvY4+oq8eyS/YqCsn5NO5ODjtWjiugtM54DQbEadzNXCadXBKksHq+pi6o05ejbpjMSL/1Q/zjQuG355up/627aYatqNPI7yI64VA+PSP2O5G/ne93mfTFkT0Fbp1cxJroDXmZlX1cx78VhnlYM3gqe/DB6DdAsouGnpI48VA+PTxpYOPoUw6kLH5uaHe795csL5hXZwWUebRrN9J86KBv+jAV9k4YMmvZa7+ylAP7nmUt1Cfmy0irct0mWv53YkeHp0cP/rIF0BTy5QNJbvnXwvfubmFm3/VrixmnkL9i8AhRC4zWOIvddWqabfqtFN9+iiX0Ib9c+FWdb4s56mXs6+aO7Cx7iDmAvVjGR84X1rAQTAu1qRHZauAZXOGmTw+hfmyiHLK71H0pTr/BjL9dZBptaFMz5gyz9+3m/W8GJLxIeXVynDonIltZ4mT+kgMnvrQzkbKQXRi0pvJTGaLZgw9LfOX+rdsjlBGhe+iU8fyy5tr0jXcjG/nlXBkDKp24zVwon6hLRSMCwU4FM1t9luFZk+/qG/OnTq5QebhIslp7biXOLUi4rRaAyfqmFg5m7o6hjnpmLFgnTwKY6mYaz519vZwfSRm7n7c4QHt5ID66lKHMFdVR/dMNWxHfUSfq6m/w30AlwBj0La8ztrPJeAUyd5uy4/6YVyoMo7XJYPnJYefD6odY2a7bkEaVwPhr6FMY8SYWbqKMfO7ETN7Mns5f6bMqkw4XXZwUhlzHB7N+p0019nbsgZY4gNjgFcRA6yhnLycRl+q83/He3X/hRPX0kcfMWVDye4rhVv47vnoXE+oEteqPuOfENlhfEp9UiUeVn3a+8tow/4Z16rOTw8grvXkVX1yLOrMIdrlKvGw+D0CHGx8WlfPU6a9uPbDgXHtz0Omf6lEpgcVdzIPQ3ldM2VV5U58Zgx52eB4I/++3uzTnTQ4qY/E4KnPZeAUyT53YtKruLZl6LHx7Vn0Xza3KPvC1zuIZvnlzVHmXVTX6lnhyrjW2wtQhlM//RKi66dRxn6r0GzzjowXOXfK9jaQHuYfx/Ln380FO9MNvzPU60v6RD5P9vu72r0y0XMc9fTMA9R6PoEyPZ9EmZ7nUKbneZTpmQd9TgFHts8+Q6BV9kn1aZ9U5/MF9ile7H3/UMtYFNj1D0bpWYda5tBIcFICstff6zs31o1EJO50Up04ntJSOx4WibXxikqkCp4XgeeIg2esBGpoYoqKZin/y6QEHZnR4R7cJZTTaTmDvlTnR+DItId7PFFdjqeeyXMq6NS0SVDG/r32VDQp8NyRrRy3fkok0lzYrHtwirflxDxRO2J41c8w1jGoxwPb8VRnJIW7UXeujwGnWCd2I9K7cygiNfToUIQdDxph8eKUU2fO1BEc75YC1p1D/15yL+0D95gDl3XTErh0Jol/ir5UpzPcg7UKfViFZsHjnD1egSbVV91MTpcNjlnZkoFPPc4k0rXhvXCmHDhTDpxJB0472T2vB60b6zhBwiO2blQ/wm3a9K1+7fjq+7DTbiWwHQ8ZxNSNdW7HoG6MuTlL/RwHX1TGA7Jlvi7bnQbukRbtNicNTuqjHz+5aBfn4Od9WxOL3oj+084hg1OGV5IJ9Ttmvg+Bl2qn715CRHUEh7pdMkNZP96nnWevqD/bfdrxkIHVNcPJ3rkwlP8bBl2UuWHUHTVteMgrhuyT7+ojMXQnhsaYwbYOGcgeygbK7tnxtXyjTJXpGk82BIcytWz6skmR7N+8aWdt8dAAecT5MmToGHNo+S8jPR5twVdYAoxB26g6h8uXwLNImw426E9VwYkL7nEueKh/oQgvfYh5C9CZGjjRRkfy8zbr5qh4q1TMG5zmDA94cxEPNNiYRN+HnXZTDdtlZSsGL+K6EgifN1BF8iO7k0m9m7q4CSdS3LNrE84c+DKoTS/71Y6bKLz4VPWWAuHT75dO4yYK6RTGv/90uPe7J7PyNyiz1iej3yVYKmNM6NGs30lzWV6Ft44xDyA+ME/7z5GX4K1k5CU3UajOUdjr9yJPq995AUPIvJ4CDdTZZbQzB8IcdYjs0Hcu8tWPO+1Un3a5jTbsn4tUqvOBgvxyVRnw5FV9hl5SQFtVJe8QW6bl91KmP1Qg06rPTRSq87+Qr/v3kGm1oUxbOWdfFi7lwsYInDOUVyvDoXPm9WYLY9KrTRQ2vrM3QZ5F/2VzJKtT5XCA5Zc316RruInCzivhythR7U7VwIn6ZRn9CsZKAQ5Fc5v9VqG5KI+95NCTFNCjMuqXNH8WjzLd8NHc9nHuEm9uVqDOOY3+VeeT0DkTDtwYOiG2jYyYD+oyr2H5S/uqOr9fYkdt/kV84VqH6BpzaKZNGDNlVfI7HAvmwWPl05iXKeKf6vxhCf9sTlR8If/sWmGS7JbbcYf+SPahW0T/cYf+Py2gf3sNOGcacx2j7R4cT99t587bcejLePjpwz38xNND7V7fsdZYPHlQ/+LxNOowVpXOGQNvQ/Qd8wGik7rV89OEG98YwA1kZTp8KofdT0ZsW/qoEXNSGw9jToo30dcZa+qwSLpjgzGcjZGpO1RnoUAuCEvtrF9J29BGmfWxQvMQ9DNob8riGPp+pxriwFwIYyKV0T8ZM2VV7atdd6gbu7Yb4sD1Ym6m9daeRwGHsJkjUJ1ugXwR/mIf+MT1qAP/jcjxXIdvetzA5XhxTaKFfgftw3CfHuWqhb+q86Ul+lk2nDrP2nA7ByLa8M0qNjzWuj55K/rpl2Uf7rWj7bJ6Q3JSZFdVx7Orf71g3KiD6DM03R/DNzcsGtyy395e4EdU1ZOjDo5lewvoN52uSZunx2x8WZUelTFGtnscMjy/1eGT5qqnc1Tn3dA5b3LiYdq8kLGm/fQONgzC3ojPnDeRdGH3dbY3aCcHd9zQM2a+n0X/VfbtWH/X26tq+WXhHMB4cI8tkWzSlsTKxQpeAt6rf+kKHmhmPLgC3gj3puvDXP/z4k2rAwZhO47ht7eX6LMY62T95Dn2GjzxGkQOUzh6/oZo9OzVksFrEHmF0w4OaqfYrcjnGTdwOD6vlPiqti3XcKvmo8cK+n8P7O+vluSjQ+ZLHfs76sAv0+W0v/otpj3yYhFrixiL/MuSnID1vW3sOpXs3UdImqlPRkyZB9+7vMDuhY0dy13MYRXxT3V+qoR/Fw191hfjQXPWpdyOOvTHXM/oR3/bof/nKsayBzUfLZ7uVyxr5cHu7+aZRs8/4OUPTfctcN3hVwviSLv327MhRTr8IyUyYtsyXuOa5zJ+/yjwXUaf2T9vXzF5lP27kX9fb/bZHtN5A3vJ4EucvnS0R8N/H/HxG3TOXXgk6IMf+sSMzf9qX3F/nA76vuJIb4atva94v98MyzUclfFytnmDp74PO+2mGrbLypYNXsR1ORA+9xVHelNydzKp97bd/X5T8jz4wks91O9Jg+dJh58Pqp23r1j0kMalQPjMW1TdVzzc6v3uyaz25lNmy94WP40yb18xaW7qy3C/lfjA/O9kqwfX5n9PAp76Up23tXp1p/Nnxp/L6DdkXjP+pM6usq9Y9RmjhsgO13XrrHfzEh3a5RNow/65Zqg6j+Y8bbKv2JNX9cmxqDOHaKuq5GJiy3SaP1OmVwtkWvW9NY03QKYvQ6bVhjJt5dyLD5rsK7YyHDpnXm+2MCa9dl+xtbnemkbZHMnqVNlXbPnlzbUq+4ptDNhkX7FkP0W/grFcgEPVfcVVaPb0i/rm3FlOduOwXEAP9YtyctxXPJvnRKrmcdP8u5cDeCN0zt927GgMnRDbRmbsOQEYg87DyXey/KV9VZ1vLbGj1lcTX1LQJ7pmHZppE0J8QY4FXxQWiX+bzP0X8U91bpfwz64j2Ht2pkAX61JuTzr0R7IP3SL65xz6ny+g/2HI44qnzONGso8dTx7Uf5r/5TosY1XpHL78uamfKDqpWz0/Lc2fi/K4quPp8O8rkRHblj5qxJzUxsOYk6Leq5P7SYF7rH3anu2xuQXK/A/UtD3Wr/RsA+35IGzPaQO/ShxDX+lUQxyYC2FMpLJBrGPbfSV1Y9fZhjhQ5/Fsl8qYI5gBHMJmjkB1Xi2QL2//r4VPXI868H8evulPwDedM3A5XvvxgpWhZO/+fvXPy89V519XtOEHdV/xjgzAhkd6CXCHvBX96l885lkA2i6rryUntKs7/oipwxhadX62YNyog7jH1frlVee6ymZQtmhwy2TtCwV+RFU9OePgWPbCummUna5Jm6fHmu4rZows/jMH95GCHJync1RnAuvAv+HEw7R5IWNd55xtqL2x8U5EXdidNDipj8TgqQ/P/sbSIftxtt+eHbT7jM+i/7K5RX9f+Hr7ii2/LJyHYV+xFw/GysVm8Oy5dPXPfcWqw3hQc5o6q+n6sHeO1bMdnO9NbQf3FX+hRJ/FWCfrJ8+x1+D77SsOzWEKR9IYuq84BAfSWLSvWLFbUS7hpIHD8Wnn9q+fr2rbcg23aj666CzXFOzv9dG9cDmWse+5mHHgV3mxr3SGfotpj7xYxN6zwVjkVMH4er63jV2nDF2WZuqTtinz4Htnje1Z5tixnL0nxOPfzv0EJfyz576sL+ad+0qS3XI749A/G4f+bhH9sw79l0r0w0HPR4u39D8i7dnuePKg/r27xT3/YAa8beofUE9It3o2pOl53C8ukRHblvFakux+D4zd09XC74+0e/W+fLRH4+tof+zGX7b9sTHz/nXWIriXM1J8Uvs9FJzHkdZsdt27wr2BKnuQdwF7vnRTncg1p7+6C/jhvgt40dBDGhcD4dNOS6dxz650Cvfs3hnt/e7JrL2zpopf7OW8+9Gs30lznfiy7C7g74LvYGM77y5g1fnGsV7d70ZsN8jzvzbXUjW+t2tKzFWRj1XWNO1+kqGk2j4muw7JfG8r2bt+oXLVeUdJbFJFBjx5tWuhVfjAdVXaqip7fWPI9EnASvNnyvS7CmRa9blesLNfEDL9CmRabSjTIftJvP2RnDOUVyvDoXMmZrxZ1xZyT1asfUMx6dV6wSlDz5yh9Sz6L5sjWR0bT5xx6lh+eXONuVfV7beO6r2baL4GTtQvKfptmg9lv1Vo9vSL+ubcWTI4LBXQw72nkeS0dqy3D/vdN5gTroITdcxSHJw6dXXMEnCKeY61Tu6AcXrMM6N14nTGSmlEPtl5fVDOjNr3EQ/CL0nzv7FtLnFSH4nBUx/a3Jj5GOsf0mfkeNXxNfe7HeNPex6HNJ4MhO/lYBh/Sqcw/vwU4k9PZr19eXX2EKYo82jWHCXNdfYXebEHffXPwldPUU5eMv5UnZuHenU/B19dvKEv7Z0HquKrnzY0ePl171ye3TOe4XDClA2hTLBOOLBC9jJPob4X57VM/4w/VefPSuLPKvu7PHlVnxyLMj5Mo4zxdBXdbM+aMnd8siY91k/uF39OHOrB5VmvfvGn6lyBTB/Jnxl/Ljo0LNaggfPDOzNKebWxdlW5886Mxjq/VdcWngBOMc+MxqLXnhk9YXjtxZ9VzoxWiT/rnJ+se2bU5qmqxp+S/RT9huh6nvNhv1Vo9mym+ubcqfMuGsayy/kz11GP4czoGdOGesDqnDPoX3U60DnfcmgvXOqEUw5dIXY0to2Mvcei35k/2lfV+ZKcp1XPPIovKegTXccdmmkTQnxB727GiPzbpP9YxD/V+eoS/llf1DtzK7pYl3J7wqE/UpzeLaJ/3qH/6wro5x6dXe8TeHDnTbpVzptEso8dTx68OMfGJtTjXC8L0Xe0JaKTupW2TTDS/Jl7dLgWWabD31QiI7YtfdSIeYEN9p2gj8TQrw/3acTM3Vkd641Z3bHeh3vhNjzbY/MulPnna9qeNH/2zofS9ngxdqjtSQ185gEsXmWx5aByIbQZ9E9CciG01XXznZ5OapqPYS7U2xPNfbKEzRyB6vzdAvki/Lk+8InrUQf+j8E3fQd8U7vGyfHimkSkvaCF+4x5f6/q/KMB2PA0/20fbPhmlX22Md8nV2efLW1XatpJTmhXeS+f5y8y1vyRgnGjDuK+3qZrCNxzY+8/yWTtY/AjUgM3deB6erLpPqoU7UL1mGBQj6VJOT0q83LUzMF9wOGT5qqnc1TnM9A5HyzJwYWMNe2nd4fSIOyNjXci6sLupMFJfSQGzwS46G8sHRKTXuXg5g09M4bWs+i/bG5VzcFZflk4tCUp6lpbYmE/6PsHYu1/Hkr63z/AM6M756lQ5r0XumlukWujmtOe7aiTcy+zHTwz+rESfRa6Tubd+feg87eDzmGmyV4aUzz3s1f27tZB5BVStEtNO8VuRT6PvUeL4/PpEl/VtuUaLvk05/Rv7a/X//+B/Z0f2wt3EGtUVe3vuAP/YXg3uj1zyFjkj0tyAtb3trHrVFL8bnTqE+9dpFXepTdv4MeO5XLxLeTfTp0cqbrvRif/vHejU24f9LvRbbxF+icL6D+A/seBfTc673dQHc8/4LvqrD2jbk2S/nZWZXw3unSrZ0OEW5ENKdLhj5bIiG3LeI05R/oQvDeJtvYU+ledc9jH/7Vje+HG2Gcf+9xJbB1A2SB/qQNU57ESHWhtZNE9ruMOzdxHMG7Kqtpge6dPRP65d8il+XfyT3WeLOGfjVnElxT0kS59KLezDv2x7jIvov+kQ/+Nijak6A4969ftpw0RT2lDIq2XuzGszcMxhvXeSzIO3oboO+/MMHWrF7+k+TNtiMbMrml6OvwbSmTEtuW5r9hnJE4ZfIryXQfhnHed9414eeeI8u2uaUpevf00byrRnf3209DOePfg2HNLzFUtFcCvsp+manyvfuYb4sA1Te658mK0tinz9I13rw/9ErWrshfey6uF4ECdx/VqlXGfMN8tSthc01Sdlwvki/DP9IFPXI868N/Jc9PwTWcNXO9O33YS7b2Zm4In3ChXo4a+7PP9FW04dd5Bfyf6WBzeFr4TnWuaqkPbZfWGl9+zdtWeN6Fd/cGCcaMOEn6DODPO967aXHEmW79c4EdU1ZNjDo5luaZ+68iheqxp7pr3U4r/XNN8r8MnzVVP56jOb0Hn/LgTD9PmhYx1v7vlbezbxN7Y/RURdWF30uCkPhKDpz6jwCmWDolJr9Y0Zx16SOtZ9F82t6iXhO+8U8fyy8I5gPFgpTXNmPFgvxwz1zRVJ/Y9tTyjxzvSBD8k/1VmO7im+csl+izG3TP95Dn2vVb99v2H5jBPOTTavcCevbJ32Q8ir3DKwUHtFLsV+TzjBg7H5zdLfFXblvciVc1Htwv6/23Y38PtvXAHkS+uan9D1+SkM7gmFcseebEI84vCU3U+W5ITsL63jV25JtdyaKY+aZkyD76+e/FyC33HjOXy194X8k91/n8J/0YMfdYXm0p6dLEu5XbMoT/mekY/+o879P/ZQ56PFk/3K5a18sAxzT7TqOP5By3wtul+Wa6lHwa/rQ0RbkU2pEiHT+c/9pMR25bxGs9xpvhd5ziz31fy8mX8PovxTIH3oGOd5WT3pyjWSZMeTktxcOpkoq2c9Zu37j219da/efO5Z2/dvPfs3Tt/Y+tvvbT1lntD6HrZoMnf+pEyjLIjeJ5yfudnKCm/SspbUheOR9GP+lXddrL7evVBL1sQb/WRGDz1WQZOaUScQkUv0rXQnbpH1vbhWuhO3avCzjg4JQPDZ/NaxKWsTV5tUYVWbsOOeb2R+vFeM+mFBcIz9jVWSwavQVzBx2OYr6fXvfP6O28rFserytWnD6odr7FaNvSQxuVA+Ewppfkzr7GSruI1Vk+1e797MutdV1TnWiAue3s0a46S5jpb53glh/jA1Pw3tffCVehxEvBsX7/V7tX9ZqQG9DtDz5DX7GWwJA9cEl0w7Racdvv1Wim187bde+EBr1u1brzKVed2gdtehQ+UV++qwFAdu4B2VZaIxG/OGcFYrkmPypiiVPhBmX6xQKZV37vG6n2Q6Zcg02pDmbZyXmVe8jiAd9yD8mplOHTORPR5ugfR54lJr5ab7DGM04bWs+i/bI4w5hK+qVOnTnqb11jZ65uEK6+xUv3FGjhRv6ygX8HlvHjE4PCIA0tlKdpVodnTL+qbc6cs9u23BHIez9lne7se0huRUgld6rYEfSSGDn24/SFSLL7r+uAVh2+Pot86/D4X2O5CYDuO6YShJyvLM5S7UlqvIuWlZZcJtFEa7TDKlErkNlabcsxg0AakoGkB/dN28Sod1fkAbNfHHX8shm2J7WtFjJm6jB0sf+mnqc6HSvwxG4eILyugzx7V67f0a48TVIlzvOswI/Jvk3FOEf9U5xdL+GdjJvGF/BNdrEu5nXfoj+RndIvoP+XQ/59L0vBVrlKxPvF+LtWIp/t1/N3Kg/qn3bFX69If4HHYpvEGl8w/7sQWgiHcjjn9HErKdfhvlsiIbctYJ/sT6VV6G4x3EvSRGPr1YeyxEAenXa/S4xX9Vu9WsW1sdwS4x7pejvbQ5lq8JbxPl+hOa1vtcUvvVSm057Q9IfkB72h61TyV+lloiIOX16bNpX8yZ8qYmxH8utuO1K4oRplviIO37cg7vkn92TKwmWvauTIwd1D7HR2wx2osfOJ61IH/aA4/k/XR8R5c78pYe61VxC2J2z6MPcJjtyO1UOdwAZ9ow6nzDtIVNjsyAJsR80pTe9zHbgvkcZ+i18lLToq2QNjrLDmWJwvGjTqIuXLrl1ed6/Y6Tq418Hrrrx/vwQ3Vk03XHs7UpM3TY03XJ7ztpszlrjp80lz1dI7qvBk65zJ0jrc+ETLWtJ/UxXoehL2xW3kj6sJGr8SLpUNi0hvySryyuUV/X/guOHUsvyycAxgP7rElO/oXtiRWTj+DZ7cSq38eHbCvLu135CpkPZIxgrdm69kOzvemtoNHB76+RJ/FWG/tJ8/91hmb8njBwWsQOcwzDo1VrnxbNniF4kAazzg4qJ1it6Jcgr2ijeOzVeKr2rbcC1A1Hz1X0P93wP6+y5FXjmXIfKljf0848B+G13PYo0qMRV4uGF/P97axa9nrOahPBnWdQOxYzr6ewuOf6nx/Cf/6vZ7Du7r7oL6ew8ZbpP/vV4xlD2o+eucVcPA/Ih3LcF/Pof65p8x7PYd0zgnwtql/QD3xroI40l6l6tmQIh3+z0pkxLZlvMbXYzEfvApcBjdGG+sZvDXgkcFWPmwVtKnOj5bM/zV853gIJo8Oqe4wnltoz7oXUb5a0o7PS6YN/YiW088IaFk1MO3V6lw/P5T0553qvL+Ad23QEmOML+WwNMbCj/xTnQ+WjPGlZDdfThmaKcOqO4zfl9CedTnGZe3svgW24XGkpRr92P0v06ireh79GnPqi35ycQntVOc/lugL23Y7Hzzco8ses8r6t9f7ae8G66rOL8Hn/IPxvXBXgcuIKRtK9h4P03f6NOprBGUjDvxLDnzL70sOfMmxfsvm02XAGLTPcCWHZfl7GXiqzkdL5tMVQ5/4ch70ia4rDs2S0Un8frEAvr6TfyMGfkT+bfucV3NYRfxTnU+U8O+qoU98If9EF+tSbi859MfRx/flpx/9aw79v13R5+Q6lvU57ZWZ++lziqf0OS/F4W3Hkwf1Lx5Po84IyqRzrpC3+XMdfUf7Q539B/A57f5S4UYbsnPtZFKuw79QIiO2bYbPh/NEdcTzddt7INYMPkPmO/01nq87HwenXefrhBv3AdMHrPMa13PAPdIV09t7IKQjpTskY3zVlupos2U/3XnZ0GftKP2AyyjT2ND2XDZlHnx992w37c1aH7zId/VzviEO0yhbA14qo39yxZRVta8amytoV+UVTOrnckMcplHGqzFVxj3BVwGHsLkHQnXmCuSL8Ft94BPXow78bg4/k/WFiR7ccQOX46WybB4+hn4H7cOsJz3cKFePAQ/VWSrgE204dZ614XYO7Oe6lWfDr8bhbYe8Ff3qXzyeRh3aLqs3vKuExGN7lRB9L9W5WjBu1EH0GQSPOqjO69auoszmSjJZuz3RgxuqJ686OFq/6aoD66rBp4keEwzqsSr0qIznA8R/7oG4AT5Zm+npHNX5Puicr4DO8eKtkLGm/aQu1vMg7I1oYTwTSRd2Jw1O6iMxeOrzGHCKpUNi0qs9EOOGHmvrzqL/srlFvSR8zzt1LL8sHNoSzlFrSyzs/bQlks39eiWLxkf0q3/ugVCdRZRpTlNn6XfO9zoxAl/Z5sWbVgcMwnZwD8TtEn0WQh/1GW1xmTyTx2sNcSCPzzt4rTrwV2vAJ788f0M0evZq1eAVigNpXHNwUDvFbkU+zyUDh+PzPSW+qm27fc4vV/ieH+6tMVl/jrx7O+zv+yf2wuVY2vElrZYubyzLZOWqA79Ml9OW67eY9siLRcRfLxb5oZKcgPW9xRfmnkXXukMz9cm6KfPg67unT/Rb7Fiuk8Mq4p/qvFLCv46hz8b+U6CLdSm3Vx36I9nIbhH94w79760YyzKf8wBj2T35aPF0v2JZKw/qXzyeRh3mqKVz1sHbpjET1x3e78RHgiHcjjn9HErKdfgHS2TEtmW8xpzjDPqvs6b572BDPunApY5qmbIhlAmuvns6njmolgN/zYFfNmYZLLtGH3HdpOvFyOIv16xV5xdq5pXFF9pbm/clzcpHMl64UADfyyu3DPyI/NssWhMm/1TnIyX8szG+9SG9GF919Vlz6I+zj6h4TXzVof9jFW3IQV3T9GLYSOvFHU8e1D/thc0/9IthQ/Rdv1zkJ2FDBr2m+TslMuKtaT6FNc1Ya3DsO0EfiaFfH+ERcZ21w9wBZcLaqLr5hEeBeyT53uAenyr7075QojvtfiGrh2i7vXVO2p5LpqzqfiSr+6vEpdPoZ7EhDtMo8/YRHYR120sNcShbt+X9SNSNhH0I5aozkev5fmuaajvTBz5xPerAP5/Dz2R96nAP7lkDlzzmK8q5hjxoH4bxAceP9KnO8QI+VbXhDzIPLfmjDY+0583dl2TzaFxfo+2yekNyQrvKO1hZ5zzaqU5aMG7UQZyfgkcddLYPXpyfKuO67YzBbfsu1MM9uKF60tvLUGdfBPPVoXrM7oupSo/d/0edyDXNDfDJ2kxP56jOC9A516Bz1C9t3popqxqv2tx0vzWGUHsjWhjPRMrbdCcNTuojMXjqwzxvJP3ciUmv1jRtnsjm8rmmWTa3qJeE76JTx/LLwqm6P8bCftC2JGY8aHWv+ueapupwzdHT7fqd871OjED75cWbIfkv5iyZJ5Xt4JrmN5fos0WHvirrfeIfZZjy38/mqZ/zDXHget9ZB6+DsG57tiEO3rqtZzMVu9HnUd+HEj9HxvG5U+Kr2raZXF3JFT5tD31+u6YpmWe+T3Xuwf6+5/BeuBzLEB+ibE1zEGdENE7cUxTLHmXwtPZm+cv9o6rztoLxJSy1s+dNuFf1MYdm6pPHTJkHX9+9ubYP+58K96eSf6rzD0r4Z9dsvT3hoot1KbdXHPoj5cO6RfQvOvT/k4qxLPM5B2lNUzyl/xHLD/XkQf17+3OZj5TOeQy8HZR/QN3q5ciEW9GaZpEO//ESGbFtGa9l80P5qPhnXO6f+b0APDLYNu5uoc77Sub/BXzP2umsO3NVK/mz6g7jeQXtWZd+7PmSdnw+Z9rQj1hx+kmTHi3WlooGnusW/ENJf96pzk8X8K6d7M5Dxh7j84Y/HOMPBY4x/QnxiGOs33mPAutyjMva8dnKE+91OlOjH3t3DmMj2nBLv401hgDDysUFtFOdXynRF7ZtNobvTHp0zQBftTluyoaSanfKKCe0X3fK2Du+j+TfeaeM6vzXErm0dw7lJm4H5hTo4p1Dkd5ltk3fXB/6TgJP1fl4Rd+CsYX1LTR+DyK34d0ZE/N19/aOR/UvHvM+X95dc9S0U33OX/H4kKnDnKnqfKokT645yDtq+F409XnM4KXv9GVUNgtYFrdM1t4AOJKRzyC2/CzGTeMl+cp+/2Pn9wS4JgbXnWeMfTuO3G3bs3Hg2kJf7H8C/Q8lg5W9cQNbfY1jPur5j+BrTrR38008F/6ZjhrLn4m/bXfItJtGnTG0a5t2+i6Zyvj3OciFxj1bOv8LW5+zUZ+cAQA=","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)"],"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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r+/5vL4X8foe4vW9uNf3sl7fK3t9f83re12v7429vrfw+t7W63sHr+9dvL738Pre1+v7IK/vw72+j/b6PsHr+zSv7596fZ/n9f1Lr+/LvL6v9Pq+zuv7Rq/vW72+7/T6vt/r+xGv76e8vp/3+n7V6/ttr+8PvL77ee1JJfT6ntzre1qv7xm9vmfz+p7L63sBr++BXt/DvL6X9Ppe3ut7Va/vNb2+1/f63tTreyuv71Fe3zt6fe/m9b2X1/f+Xt8He32PvvApu99fH+99upj7eN77fN77gN77hN77iN77jN77kN77lN77mN77nN77oN77pN77qN77rN77sN77tN77uN77vN77wN77xN77yN77zN770N771N772N773N774N775N776N777NH78F8F+P3TJ57n37KefwOf7WO+AvZD9qn66sKn0n5YLYj+fB1APGH74OjjLgVOICvupV4gBh2XemXhduBFA8sCcOcV2/w86/mV8cwPOodlgOf4TQAWN2iM23P8TQB+br4NwBa56Atv7ONm9/vrknH7t4R+//pxcsFmnmcpkfMsKXKe2xNwufusHLOPYy9moOufP/BYZUlz7YeNOTAmhuBgQgpBgGfi3eL3j/N0ix/2PN3iF3eKX3yvYy73NDwrbFPI6PjKxDJpiE4AdaylwK7H27kuD/jH0lT0Bw3e5cCO+jty9xf4bB8T3f0lEMHSsx5rpcPnw8bLSkInuYrUSa4K+OelYmQuWF316gCOoKDrMRL33zsc9/acfE+Y6zUk3K8h4p5VA9Y6fBXNnv+1hLjXkTCwjogBFh865Y+bGOjso0svnvU8fwDWaeBcm875ORz6gcghezGDUUd/FKijPxLiXk+qo+v/Awae9ZyjFyLQl0ixFjieNd4NDsemvSDG4ORPApz8iRD3RhInNxLr8nKSv90kgIFNhLg3kzCwmazNjN7+ZwEM/EyI+xcSBn4hYsDWAgYGtghgYAsh7q0kDGyNZc0d3ff8Gsf6nl/JvFpKwNdvJHz99l/gK/DZPgaJr9+A67LbSDndRsSXfTEDw79td3jdjkeKe0ccXU/YScL+TiL27fnfQMjFLodjoCQJ+7sdHvcKUq+6J46uV+wlcX4vkfOsvn0fKRf7yNrP6Nn2C2g/I+7f4+h6xQES9g8Qsf8NSfsPCmg/A/uH4ug6zWES9g973dXjq9swK/hh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","debug_symbols":"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aEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxakZxakZxakZxakZxXlhST80oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oTs0oLs0oLs0oLs0oLs0orgtL6qUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxaUZxa0Zxa0Zxa0Zxa0ZxX1hSb01o7g1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mlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlGcmlGcmlGcmlGcmlGcF5bUUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKUzOKSzOKSzOKSzOKSzOK68KSemlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWlGcWtGcWtGcWtGcWtGcV9YUm/NKG7NKG7NKG7NKG7NKG7N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FFMziqkZxdSMYl5YUqdmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaURyaURyaURyaURyaURwXltRDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pDM4pTM4pTM4pTM4pTM4rzwpJ6akZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxakZxaUZxaUZxaUZxaUZx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YteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYteMYmhGMTSjGJpRDM0oxoUldWhGMTSjGJpRDM0ohmYUQzOKoRnF0IxiaEYxNKMYmlEMzSiGZhRDM4qhGcXQjGJoRjE0oxiaUQzNKIZmFEMziqEZxdCMYmhGMTSjGJpRDM0ohmYUQzOKoRnF0IxiaEYxNKMYmlEMzSiGZhRDM4qhGcXQjGJoRjE0oxiaUQzNKIZmFEMziqEZxdCMYmhGMTSjGJpRDM0ohmYUQzOKoRnF0IxiaEYxNKMYmlEMzSiGZhRDM4qhGcXQjGJoRjE0oxiaUQzNKIZmFEMziqEZxdCMYmhGMTSjGJpRDM0ohmYUQzOKoRnF0IxiaEYxNKMYmlEMzSiGZhRDM4qhGcXQjGJoRjE0oxiaUQzNKIZmFEMziqEZxdSMYmpGMTWjmJpRzAtL6tSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMzikMzikMzikMzikMziuPCknpoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFqRnFqRnFqRnFqRnFeWFJPzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzShOzSguzSguzSguzSguzSiuC0vqpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFpRnFrRnFrRnFrRnFrRnFfWFJvTWjuDWjuDWjuDWjuDWjuDWjuDWjuDWjuDWjuDWjuDWjuDWj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4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tCM4tSM4tSM4tSM4tSM4rywpJ6aUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUZyaUVyaUVyaUVyaUVyaUVwXltRLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pLM4pbM4pbM4pbM4pbM4r7wpJ6a0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zxa0Zx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ZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnF1IxiakYxNaOYmlFMzSimZhRTM4qpGcXUjGJqRjE1o5iaUUzNKKZmFFMziqkZxdSMYmpGMTWjmJpRTM0opmYUUzOKqRnFoRnFoRnFoRnFoRnFcWFJPTSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODWjODWjODWjODWjOK+3Tup+xX566WvHjwW9dPH9l/z56hnX8+WtvXT9PH3+fvk8cZ6vHr83Oyo1Oys1uyo1uys1ewo1++aW9V2bbZWa7ZWajUrNptzsPfT1830AzPlKsz2uPp5ePa6Rf7j+t4bpKeqvaJiepP6Khulp6q9omJ6o/oqG6anqL2j4Mfa85VNV64c3gpc/eK+YzxeP8f3i3982HmPPH1lQ1wqKNy9oPV+8r/ZzQakVNLSCpvZ3aGkFba2ggxUUWlKHltShJXWEVlBqBWlJHVMraGkFba2gt07q3s7Txb3n9WNBL7zyWNfTDH7/ebafZ/C8PnoD7aM30D96A9o7zWPs/CMLGlpB0/47t3c8vfT9/csLtw5yffQG9kdv4BHvfHM8361a12t3q1brTy+9cr3y0n23p5fue3y/t3XfFXvh6hjP96pizB++fOjnhavPfbfs96tP7+Pf/+UbYQ9ZQ/B1lr+dZfs6y4edZf86y4edZXyd5cPOMr/O8mFnOT74IDI++iw7PvosOz76LDvwuzivNjDxuzivN9CwG3uzawVp37w+ZpvKIwvS7udP7X7+1O7nT+1+/jxYQevSCtKSemlJvbSkXlpSLy2pl5bUS0vqpSX10pJ6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jOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLQjOLUjOLUjOLUjOLUjOK8sKSemlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlGcmlFcmlFcmlFcmlFcmlFcF5bUSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKSzOKWzOKWzOKWzOKWzOK+8KSemtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcWtGcb+5UexX7KeXvnb8WNBLF8/ruZBrxvV8eWsvXT9Pn79fPk+c56vH7822Ss32Ss1GpWazUrOjUrPQO/oLF49zni6eLZ8vjv70ZgK9//8z5UPTwj9T/pH/pbRvCxq+N5vzlX8pPa4+nl49rpF/uP5vDSc9u/wVDdPzy1/RMD3D/BUN03NMO3t8f7e73/peaCA/1dv1/Y789Ha9R/zHt+v8XLPJK83OSs2uSs3uSs3SU9I/3uxez58nrp8+T4zPdXfnlWY/192dV5r9XHd3Xmn2c93deaXZrNTsJ5ugft3sJ5ugft3sJ5ugft3sJ5ugft1spQlqVpqgZqUJalaaoGalCerNt4a8a7OVJqhZaYKalSaoWWmCmpUmqFVpglqVJqhVaYJalSaoN9/m867NVpqgVqUJalWaoFalCWpVmqB2pQlqV5qgdqUJaleaoN58y9a7NltpgtqVJqhdaYLalSaoXWmCOpUmqFNpgjqVJqhTaYJ68+1379pspQnqVJqgTqUJ6lSaoE6hCepchSaocxWaoM5VaII6V6EJ6lxZqdlCE9S5Ck1Q5yo0QZ2r0AR1rkoTVKs0QbVKE1SrNEG1ShPUm2+LfddmK01QrdIE1SpNUK3SBNUqTVC90gTVK01QvdIE1StNUG++xfldm600QfVKE1SvNEH1ShNUrzRBfbJt3680W2mC+mTbvl9pttIE9cm2fb/SbKUJKipNUFFpgopKE5S9d/zBzdo7xx/dbKUJyt41/uhmK01Qn20n+a+brTRBfbad5L9uttIE9dl2kv+62UoTVKWd5KfSTvJTaSf5qbST/FTaSX4q7SQ/lXaSn0o7yU+lneSn0k7yU2kn+am0k/xU2kl+Ku0kP5V2kp9KO8lPpZ3kp9JO8lNpJ/mptJP8VNpJfirtJD+VdpKfSjvJT6Wd5KfSTvJTaSf5qbST/FTaSX4q7SQ/lXaSn0o7yU+lneSn0k7yU2kn+am0k/xU2kl+Ku0kP5V2kp9KO8lPpZ3kp9JO8lNpJ/mptJP8VNpJfirtJD+VdpKfSjvJT6Wd5KfQTvJ2XYWWkn/rts4M9a3bOkPUt27rTFHfus1S3daZo751W2eQ+tZtnUnqW7d1Rqlv3ZaapQqtJ//WbalZqtCC8m/dlpqlCq0o/9ZtqVmq0JLyb92WmqUKrSn/1m2pWarQovJv3ZaapQqtKv/WbalZqtCy8m/dlpqlCq0r/9ZtqVmq0MLyb92WmqUKrSz/1m2pWarQ0vJv3ZaapQqtLf/WbalZqtDi8m/dlpqlCq0u/9ZtqVmq0PLyb92WmqUKrS//1m2pWarQAvNv3ZaapQqtMP/WbalZqtAS82/dlpqlCq0x/9ZtqVmq0CLzb92WmqUKrTL/1m2pWarQMvNv3ZaapQqtM//WbalZqtBC82/dlpqlCq00/9ZtqVmq0FLzb92WmqUKrTX/1m2pWarQYvNv3ZaapQqtNv/WbalZqtBy82/dlpqlCq03/9ZtqVmq0ILzb92WmqUKrTj/1m2pWarQkvNv3ZaapQqtOf/WbalZqtCi82/dlpqlCq06/9ZtqVmq0LLzb92WmqUKrTv/1m2pWarQwvNv3ZaapQqtPP/WbalZqtDS82/dlpqlCq09/9ZtpVmqldp73krtPW+l9p63UnvP25Wluq00S7VSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m9563U3vNWau95K7X3vJXae95K7T1vpfaet1J7z1upveet1N7zVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m9563U3vNWau95K7X3vJXae95K7T1vpfaet1J7z1upveet1N7zVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m9563U3vNWau95K7X3vJXae95K7T1vpfaet1J7z1upveet1N7zVmrveSu197yV2nveSu09b6X2nrdSe89bqb3nrdTe81Zq73krtfe8ldp73krtPW+l9p63UnvPW6m95+2T7T0/fT53Gy90+7lmqVe6ffu957GeXzrb/HW399fLO55eerYr/9Dt7x20D99BpzuYLfv3DuZ5qYP48B3kh+9gfPgOJt3Buj9nP730un6o5M/eVeM5efeIn5N3lep2l+r2FOq2X/YM8ehu7XnjH+72l7N/v+zZ5NHd2nPMo7vNUt3a89Gju/1ks9Qr3X6yWeqVbj/ZLPVKt59slvp1t+2TzVKvdFtqlmqlZqlWapZ6+33f79ptqVmqlZqlWqlZqpWapVqpWaqXmqV6qVmql5qleqlZ6u33fb9rt6VmqV5qluqlZqleapbqpWapKDVLRalZKkrNUlFqlnr7fd/v2m2pWSpKzVJRapaKUrNUlJqlstQslaVmqSw1S2WpWert932/a7elZqksNUtlqVkqS81SWWqWGqVmqVFqlhqlZqlRapZ6+33f79ptqVlqlJqlRqlZapSapUapWWqWmqVmqVlqlpqlZqlZ6u33fb9rt6VmqVlqlpqlZqlZapaapWapVWqWWqVmqVVqllqlZqm33/f9rt2WmqVWqVlqlZqlVqlZapWapXapWWqXmqV2qVlql5ql3n7f97t2W2qW2qVmqV1qltqlZqldapbC930/uttSsxS+R/zR3ZaapfD95I/uttQs9dn2nr/SbalZ6rPtPX+l20qzVHy2veevdFtplopSe8+j1N7zuLJUt5VmqSi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zxK7T2PUnvPo9Te8yi19zw+2d7z0+dzt/Fzt59s7/lr3b75LHXFfnrpa8cr3Z7Vz9NLn5XzlW57XH08vXpcI/9w/e8d93IdR7mOs1zHo1zHs1zHq1zHu1zHp1rHb78b/d07LjdzvfmO9HbG9b2H9WPHv1cUXEXJVTS4ih7ynt/y+QPUD5+IXq5oxXy+eIzvFz99fnrMXu2HVrS5io5W0WN2SD+0osZV1LmKgqsouYoGV9HU3kXm22f2er54X+2FM9pcRUeraF1cRY2riJuzFzdnr7fO7N7O08W95/XjT+2FVx7revo0df95thc+Ta3x4TuYH76D9eE72B++g6Nly5vvAH29osZVxL1Hbe496s13Ur5e0SPec+b44avr1+5ZrtafXnrleuWl+37+Vrzv8f0O5935C1ff9yOfsuW+pfQ9iVo/L1x97numv199eh///q/fDn3IWsqvw/z9MNfXYT7uMPfXYT7uMM/XYT7sMB+yEvTrMH8/zPZ1mI87zP51mI87zPg6zMcdZn4d5uMOk/s2/HDfrBz8rtje8fTSs10v/pTxu2J/Rwfng3eQ1/XhO2gfvoP+4TuID99BfvgO8G+q/o4O8G+q/o4OFjYl5JtvyHy9Iu2bpGzaN0nZtG+SsmnfJGXTvknKN998+HpFb/8bar/+rZlsk6tI+w21bNpvqGXTfkMtu/Ybatm131DL3rmKgqsouYq0e1/ZtXtf2bnM7lxmdy6zg8vs4DI7uDk7uDk7uMwObs4Obs4OLrODy+zg7o0kd28kuXsjyWV2cpn95ltiXq+Iy+zkMju5zE4us5Obswc3Zw9uzh7cvZHB3Rt5zJaMh1bE3RsZ3L2RwWX24DJ7cJk9ucyeXGZPLrMnl9mTy+zJzdmTm7Mn93sjk/u9kcndG1ncvZHF3RvhtmQktyUjH7Ml46EVcZm9uMxe3Jy9uDl7cXP25ubszc3Zm5uzNzdnP2ZrxEMr4u6NbO7eyOYye3OZvbnMPlxmHy6zDzdnH27OPlxmH27OPtycfbjMPlxmH+3eyLi0eyPj0u6NjEvL7HFpmT2u5CrSMntcWmaPS8vscWmZPS5tzh5Nm7NH0+bs0bR7I6Np90bGYxzkQyvS7o2Mpt0bGZyDHJyDHJyDHJyDHJyDHJyDHJyDHJyDHJ2bszs3Z3ft90ZG135vZHTu3khw90aCuzfCOcjBOcjxGAf50Iq4zOYc5OAc5OAc5Ahuzk5uzk5uzk5uzk5uzn6Mg3xoRdy9keTujXAOcnAOcnAOcnAOcnAOcnBPCx/c08IH5yDH4Obswc3ZnIMcnIMcg7s3Mrl7I5O7NzK5zJ5cZj/GQT60Ii6zOQc5uKeFD+5p4YN7WvjgnhY+uKeFj8XdG1ncvZE3f1r46xVx90YWd2+Ec5CDc5CDc5CDc5CDc5CDc5CDc5CDc5Bjc3P25ubs/da/N9JjPb90tvnju8hLr3y1H56D+EMlLz9RcJ4+f798nh/O5rnbXarbU6nbc5XqtpXqtpfqNkp1m6W6HaW6naW65X4H93C/g8v55Mn55Mn55Mn55Mn55HklV5F2z3Je2j3LyT2ndXLPaZ3cc1on95zWyT2ndXLPaZ3cc1on95zWyfnkyfnk2bjMblxmNy6zO5fZncvszmV25zK7c5nNPad1cs9pnZxPnpxPnpxPnpxPnpxPnpxPnpxPnpxPnsFldnCZHVxmB5fZ3HNaJ/ec1sk9p3Vyz2md3HNaJ/ec1sn55Mn55JlcZieX2cll9uAye3CZzfnkyfnkObjM5p7TOrnntM7BZfbgMpvzyZPzyZPzyZPzyZPzyZPzyXNymT25zOae0zq557RO7jmtk3tO6+Se0zq557RO7jmtk3tO6+R88uR88lxcZi8usxeX2ZvL7M1l9uYye3OZvbnM5p7TOrnntM7NZfbmMntzmX24zD5cZnPPaZ3cc1rn4TL7cJl9uMzmHOTkHOTkHOTiHOTiHOTiHOTiHOS6tMxenINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnINcnIPcnIPcnIPcnIPcnIPcl5bZm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQm3OQh3OQh3OQh3OQh3OQ59Iy+3AO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8nAO8mgOsl2ag7wrwjL7rgjL7LsiLLPvirDMvivCMvuuCMvsuyIss++KsMy+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yTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIyTnIxTnIxTnIxTnIxTnIdWmZvTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTgHuTkHuTkHuTkHuTkHuS8tszfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIDfnIA/nIA/nIA/nIA/nIM+lZfbh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5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yAX5yA35yA35yA35yA35yD3pWX25hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk5hzk4Rzk4Rzk4Rzk4RzkubTMPpyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJyDPJqDjEtzkHdFWGbfFWGZfVeEZfZdEZbZd0VY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1u3nuuPzWrefbJb6dbfzk81Sr3T7yWapV7r9ZLPUK91+slnqlW6zVLelZqlZapaapWapWWqWmqVmqVVqllqlZqlVapZapWapN98y877dlpqlVqlZapWapVapWWqVmqV2qVlql5qldqlZapeapd58+9P7dltqltqlZqldapbapWapXWqWOqVmqVNqljqlZqlTapZ6861s79ttqVnqlJqlTqlZ6pSapU6lWWpelWapeVWapeZVaZaaV6VZal5ZqttKs9S8Ks1S86o0S82r0iw1r1KzVCs1S7VSs1QrNUu1UrPUm28xfd9uS81SrdQs1UrNUq3ULNVKzVK91CzVS81SvdQs1UvNUm++Xfh9uy01S/VSs1QvNUv1UrNULzVLRalZKkrNUlFqlopSs9Sbb/1+325LzVKfbKP4a92WmqU+2Ubx17otNUt9so3ir3VbapbKUrNUlpql7N3mD++21Cxl7zR/eLelZil7l/nDuy01S322veevdFtqlvpse89f6bbULFVq7/kstfd8ltp7PkvtPZ+l9p7PUnvPZ6m957PU3vNZau/5LLX3fJbaez5L7T2fpfaez1J7z2epveez1N7zWWrv+Sy193yW2ns+S+09n6X2ns9Se89nqb3ns9Te81lq7/kstfd8ltp7PkvtPZ+l9p7PUnvPZ6m957PU3vNZau/5LLX3fJbaez5L7T2fpfaez1J7z2epveez1N7zWWrv+Sy193yW2ns+S+09n6X2ns9Se89Xqb3nq9Te81Vq7/kqtfd8XVmq20qz1Cq193yV2nu+Su09X6X2nq9Se89Xqb3nq9Te81Vq7/kqtfd8ldp7vkrtPV+l9p6vUnvPV6m956vU3vNVau/5KrX3fJXae75K7T1fpfaer1J7z1epveer1N7zVWrv+Sq193yV2nu+Su09X6X2nq9Se89Xqb3nq9Te81Vq7/kqtfd8ldp7vkrtPV+l9p6vUnvPV6m956vU3vNVau/5KrX3fJXae75K7T1fpfaer1J7z1epveer1N7zVWrv+Sq193yV2nu+Su09X6X2nq9Se89Xqb3nq9Te81Vq7/kqtfd8ldp7vkrtPV+l9p6vUnvPV6m956vU3vNVau/5KrX3fJXae75K7T1fpfaer1J7z1epveer1N7zVWrv+Sq193yV2nu+Su09X6X2nq9Se89Xqb3nq9Te81Vq7/kqtfd8ldp7vkrtPV+l9p6vUnvPV6m956vU3vNVau/5KrX3fJXae75K7T1fpfaer1J7z1epvee71N7zXWrv+S6193yX2nu+ryzVbaVZapfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/kutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/kutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/kutfd8l9p7vkvtPd+l9p7vUnvPd6m957vU3vNdau/5LrX3fJfae75L7T3fpfae71J7z3epvee71N7zXWrv+S6193yX2nu+S+0936X2nu9Se893qb3nu9Te811q7/l++73nsZ5fOtv8dbdt3MPe00vPduUfuv29g/zwHQy6g9myf+9gnpc6mB++g/XhO9gfvoNDd7Cu9vzS6/qhkj9L3phPybtH/MfkPW+/7/tdu22luu2lurVniEd3m5+r21/Oh+eyZ5NHd2vPMY/u1p55Ht2tPR89uttPNkv9utv2yWapV7r9ZLPUK91+slnqlW4/2Sz1SrdZqttSs1QrNUu1UrNUKzVLtVKzVC81S/VSs1QvNUv1UrPU2+/7ftduS81SvdQs1UvNUr3ULNVLzVJRapaKUrNUlJqlotQs9fb7vt+121KzVJSapaLULBWlZqkoNUtlqVkqS81SWWqWylKz1Nvv+37XbkvNUllqlspSs1SWmqWy1Cw1Ss1So9QsNUrNUqPULPX2+77ftdtSs9T/v72725EkR9PEfEtOfj8kr0aYXQhCA4MZYXckQAd777LqrsisUkZ3dkZ7WD0pr5NCJsrM+dHS+AaDbg+tXmouVS81l6qXmkvVS82l+qXmUv1Sc6l+qblUv9Rc6v79vv/Q3r7UXKpfai7VLzWX6peaS/VLzaXWS82l1kvNpdZLzaXWS82l7t/v+w/t7UvNpdZLzaXWS82l1kvNpdZLzaX2S82l9kvNpfZLzaX2S82l7t/v+w/t7UvNpfZL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g7wq4jJbc5BXRVxmaw7yqojLbM1BXhVxma05yKsiLrM1B3lVxGW25iCvirjM1hzkVRGX2ZqDvCriMltzkFdFXGZrDvKqiMtszUFeFXGZrTnIqyIuszUHeVXEZbbmIK+KuMzWHORVEZfZmoO8KuIyW3OQV0VcZmsO8qqIy2zNQV4VcZmtOcirIi6zNQd5VcRltuYgr4q4zNYc5FURl9mag7wq4jJbc5BXRVpmD85BDs5BDs5BDs5BjoeW2YNzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkINzkJNzkJNzkJNzkJNzkPOhZfbkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHOTkHGRwDjI4BxmcgwzOQcZDy+zgHGRwDjI4BxmcgwzOQQbnIINzkME5yOAcZHAOMjgHGZyDDM5BBucgg3OQwTnI4BxkcA4yOAcZnIMMzkEG5yCDc5DBOcjgHGRwDjI4BxmcgwzOQQbnIINzkME5yOAcZHAOMjgHGZyDDM5BBucgg3OQ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ZbbmIK+KuMzWHORVEZfZmoO8KuIyW3OQV0VcZmsO8qqIy2zNQV4VcZmtOcirIi2zB+cgB+cgB+cgB+cgx0PL7ME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yME5yMk5yMk5yMk5yMk5yPnQMntyDnJyDnJyDnJyDnJyDnI+xUHuk18bqe9U9JjnS0mPeOSXw2evdz+8vnZ39Zej490PH48vnz3y/PbgX7s7Xqu787W6+4wfZWeft6Mfo/9xd2uP+vXg2vF1LI4R7xw94zHfDr/+XPm743/tQv78Xaifvwv983dh/fxd2D9/F85P34WnqNs/uAt3/xp4/VK1v/R3x2+nXe9dnDXP15+w2c/o8XyhHl9/+2//4y///u9/+T/+t3//z//+b//1l//8j//5y9mPX/7z/k+jlettUrP24/H18+Z5p/3fHT1+f/Qv17s/v4n1+U3sz2/ifHoT76fVc5sYn9/E/Pwm4vObyM9v4vNH9/z80T0/f3TPzx/d8/NHd3z+6I7PH93x+aM7Pn90x+eP7vj80R2fP7rj80d3fP7ojs8f3fn5ozs/f3Tn54/u/PzRnZ8/uvMJozui3n7tiBVff+0Ytd79JWV9+TUi+/dH/1JQawUtraCtFXSwguqhFTS0gqZWUGgFpVaQltSlJXVpSV1aUpeW1K0ldWtJ3VpSt5bUrSV1a0ndWlK3ltStJXVrSb20pF5aUi8tqZeW1EtL6qUl9dKSemlJvbSkXlpSby2pt5bUW0vqrSX11pJ6a0m9taTeWlJvLam3ltRHS+qjJfXRkvpoSX20pD5aUh8tqY+W1EdL6qMl9d95vegfWpGW1X/n9aJ/aEVaWv+d14s+r6K/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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":"lookup_validity","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"consumer","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"kind":"boolean"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["lookup_validity"]},{"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":"field"},"visibility":"private"},{"name":"signing_pub_key_y","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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604l0npqXU8i7TStO41IO13rTifSztC6M4i0XlrXi0g7U+vOJNLO0rqziLTeWtebSDtb684m0s7RunOItHO17lwirY/W9SHS+mpdXyKtSOuKiLRirSsm0sJaFybSIloXIdKiWhcl0mJaFyPS+mldPyKtv9b1J9IGaN0AIu08rTuPSDtf684n0gZq3UAibZDWDSLSBmvdYCJtiNYNIdKGat1QIm2Y1g0j0oZr3XAibYTWjSDSRmrdSCJtlNaNItJGa91oIm2M1o0h0i7QuguItLFaN5ZIG6d144i08Vo3nki7UOsuJNIu0rqLiLQJWjeBSJuodROJtElaN4lIu1jrLibSLtG6S4i0yVo3mUi7VOsuJdIu07rLiLQpWjeFSJuqdVOJtMu17nIi7Qqtu4JIu1LrriTSpmndNCLtKq27iki7WuuuJtKu0bpriLRrte5aIu06rbuOSJuuddOJtBlaN4NIu17rrifSbtC6G4i0mVo3k0i7UetuJNJmad0sIm221s0m0uZo3Rwiba7WzSXSbtK6m4i0eVo3j0i7WetuJtJu0bpbiLT5WjefSLtV624l0m7TutuItNu17nYibYHWLSDS7tC6O4i0O7XuTiJtodYtJNLu0rq7iLS7te5uIu0erbuHSLtX6+4l0u7TuvuItPu17n4i7QGte4BIe1DrHiTSFmndIiLtIa17iEh7WOseJtIe0bpHiLTFWreYSFuidUuItEe17lEibanWLSXSHtO6x4i0x7XucSLtCa17gkhbpnXLiLTlWrecSHtS654k0p7SuqeItKe17mki7Rmte4ZIW6F1K4i0Z7XuWSJtpdatJNKe07rniLRVWreKSHte654n0l7QuheItBe17kUi7SWte4lIW611q4m0NVq3hkhbq3VribR1WreOSFuvdeuJtA1at4FIe1nrXibSNmrdRiLtFa17hUh7VeteJdJe07rXiLTXte51Iu0NrXuDSNukdZuItDe17k0i7S2te4tIe1vr3ibS3tG6d4i0d7XuXSLtPa17j0h7X+veJ9I2a91mIu0DrfuASPtQ6z4k0j7Suo+ItC1at4VI26p1W4m0j7XuYyLtE637hEjbpnXbiLRPte5TIu0zrfuMSPtc6z4n0r7Qui+ItC+17ksi7Sut+4pI+1rrvibSvtG6b4i0b7XuWyLtO637jkj7Xuu+J9J+0LofiLQfte5HIu0nrfuJSPtZ634m0n7Rul+ItF+17lci7Tet+41I+13rfifS/tC6P4i0P7XuTyLtL637i0jbrnXbibQdWreDSPtb6/4m0v75OlOlvdMqODoiLV3r0om0DK3LINIytS6TSMvSuiwiLVvrsom0HK3LIdJytS6XSKuodRWJtEpaV4lIq6x1lYm0KlpXhUirqnVVibRqWleNSKuuddWJtBpaV4NI20/r9iPSampdTSKtltbVItL217r9ibTaWlebSDtA6w4g0upoXR0ira7W1SXSDtS6A4m0elpXj0irr3X1ibQGWteASDtI6w4i0hpqXUMi7WCtO5hIy9O6PCKtkdY1ItIaa11jIu0QrTuESDtU6w4l0g7TusOItMO17nAirYnWNSHSmmpdUyLtCK07gkg7UuuOJNKaaV0zIq251jUn0o7SuqOItBZa14JIO1rrjibSLK2ziDSldYpI82mdj0jza52fSAtoXYBIy9e6fCKtQOsKiLSg1gWJtJDWhYi0Qq0rJNKO0bpjiLRjte5YIu04rTuOSDte644n0lpqXUsirZXWtSLSWmtdayKtjda1IdJO0LoTiLS2WteWSGunde1Q2r6eyJKbZuhbsPrbu6aex4mfoIIfDoEf9uDonG9GO+Vhf5+yevoueeeDIrTeuexv2zpPVYoOGjCy/eDw8LFD9VNVugzplxZ3ZRCyY+/OK313ejZxj/O/FTSwPj3ufud/bcoVka37x6W31u8td9fO7+bWNpO3hZ8A4fCnnvKUxviZuOzxAzucz8pM2/NZ9s5rBX4uCmW58zPxZ9gXfnJbBYJTJZTG/eCYymby3sPnDv/K+/BDvO1YTkf/S6VTuirE59QkdP8Dn63zxR6JCwA=","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"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"00000000000000000000000000000000000000000000000000000000aad5fd6b"},{"kind":"string","value":"PublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"signing_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":"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":"SchnorrAccount::entrypoint_parameters"}}],"kind":"struct","path":"SchnorrAccount::entrypoint_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"SchnorrAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"SchnorrAccount::verify_private_authwit_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"field"}},{"name":"signing_pub_key_y","type":{"kind":"field"}}],"kind":"struct","path":"SchnorrAccount::constructor_parameters"}}],"kind":"struct","path":"SchnorrAccount::constructor_abi"}]}},"file_map":{"107":{"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::{\n execution::{get_chain_id, get_version, get_contract_address, get_block_number},\n storage::{raw_storage_read, storage_read}\n};\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"},"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, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, public_call_stack_item::PublicCallStackItem,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\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"},"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 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"},"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_current_public_keys, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{\n hash::sha256_to_field, address::AztecAddress, point::Point, abis::note_hash::NoteHash,\n constants::MAX_NOTE_HASHES_PER_CALL\n};\n\nunconstrained fn compute_unconstrained<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], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n )\n}\n\nfn compute<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], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\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 (encrypted_log, log_hash)\n}\n\nfn emit_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field)\n) 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 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 let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (encrypted_log, log_hash) = inner_compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\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 emit_with_keys(context, e.note, ovpk, ivpk, iv, compute);\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 let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained);\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 emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute);\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 emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained);\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\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::{\n address::AztecAddress, traits::Empty, constants::GENERATOR_INDEX__NOTE_NULLIFIER,\n scalar::Scalar, point::Point, hash::poseidon2_hash_with_separator\n };\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n use crate::context::PrivateContext;\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"},"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\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"},"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, point::Point};\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 { self.header}\n\n fn set_header(&mut self, header: NoteHeader) {self.header = header; }\n\n fn compute_nullifier(_self: Self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> 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] { [self.address.to_field(), self.owner.to_field(), self.randomness]}\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote { address: AztecAddress::from_field(fields[0]), owner: AztecAddress::from_field(fields[1]), randomness: fields[2], header: NoteHeader::empty() }\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 { EventSelector::from_signature(\"TestEvent(Field,Field,Field)\") }\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, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30\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, MAX_NOTES_PER_PAGE, 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\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"},"131":{"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"},"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,\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"},"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 */\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"},"141":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"142":{"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"},"143":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr","source":"use dep::protocol_types::{\n abis::nullifier_leaf_preimage::{NullifierLeafPreimage, NULLIFIER_LEAF_PREIMAGE_LENGTH},\n constants::NULLIFIER_TREE_HEIGHT, utils::arr_copy_slice\n};\n\n// INDEX_LENGTH + NULLIFIER_LEAF_PREIMAGE_LENGTH + NULLIFIER_TREE_HEIGHT\nglobal NULLIFIER_MEMBERSHIP_WITNESS: Field = 24;\n\nstruct NullifierMembershipWitness {\n index: Field,\n leaf_preimage: NullifierLeafPreimage,\n path: [Field; NULLIFIER_TREE_HEIGHT],\n}\n\nimpl NullifierMembershipWitness {\n pub fn deserialize(fields: [Field; NULLIFIER_MEMBERSHIP_WITNESS]) -> Self {\n let leaf_preimage_fields = arr_copy_slice(fields, [0; NULLIFIER_LEAF_PREIMAGE_LENGTH], 1);\n Self {\n index: fields[0],\n leaf_preimage: NullifierLeafPreimage::deserialize(leaf_preimage_fields),\n path: arr_copy_slice(\n fields,\n [0; NULLIFIER_TREE_HEIGHT],\n 1 + NULLIFIER_LEAF_PREIMAGE_LENGTH\n )\n }\n }\n}\n\n#[oracle(getLowNullifierMembershipWitness)]\nunconstrained fn get_low_nullifier_membership_witness_oracle(\n _block_number: u32,\n _nullifier: Field\n) -> [Field; NULLIFIER_MEMBERSHIP_WITNESS] {}\n\n// Nullifier here refers to the nullifier we are looking to get non-inclusion proof for (by proving that a lower\n// nullifier's next_value is bigger than the nullifier)\nunconstrained pub fn get_low_nullifier_membership_witness(block_number: u32, nullifier: Field) -> NullifierMembershipWitness {\n let fields = get_low_nullifier_membership_witness_oracle(block_number, nullifier);\n NullifierMembershipWitness::deserialize(fields)\n}\n\n#[oracle(getNullifierMembershipWitness)]\nunconstrained fn get_nullifier_membership_witness_oracle(\n _block_number: u32,\n _nullifier: Field\n) -> [Field; NULLIFIER_MEMBERSHIP_WITNESS] {}\n\n// Nullifier here refers to the nullifier we are looking to get non-inclusion proof for (by proving that a lower\n// nullifier's next_value is bigger than the nullifier)\nunconstrained pub fn get_nullifier_membership_witness(block_number: u32, nullifier: Field) -> NullifierMembershipWitness {\n let fields = get_nullifier_membership_witness_oracle(block_number, nullifier);\n NullifierMembershipWitness::deserialize(fields)\n}\n"},"144":{"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"},"146":{"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"},"147":{"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"},"148":{"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"},"151":{"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"},"152":{"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"},"154":{"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"},"155":{"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"},"157":{"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"},"158":{"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, utils::arr_copy_slice,\n constants::CONTRACT_INSTANCE_LENGTH, 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"},"159":{"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"},"161":{"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"},"164":{"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"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse crate::oracle::storage::storage_read;\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"},"182":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{\n address::AztecAddress, constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator\n};\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"},"186":{"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"},"2":{"path":"std/array.nr","source":"use crate::cmp::Ord;\nuse crate::convert::From;\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 pub fn sort(self) -> Self where T: Ord {\n self.sort_via(|a: T, b: T| a <= b)\n }\n\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n let sorted_index = unsafe {\n // Safety: These indices are asserted to be the sorted element indices via `find_index`\n let sorted_index: [u32; N] = self.get_sorting_index(ordering);\n\n for i in 0..N {\n let pos = find_index(sorted_index, i);\n assert(sorted_index[pos] == i);\n }\n\n sorted_index\n };\n\n // Sort the array using the indexes\n let mut result = self;\n for i in 0..N {\n result[i] = self[sorted_index[i]];\n }\n // Ensure the array is sorted\n for i in 0..N - 1 {\n assert(ordering(result[i], result[i + 1]));\n }\n\n result\n }\n\n /// Returns the index of the elements in the array that would sort it, using the provided custom sorting function.\n unconstrained fn get_sorting_index<Env>(self, ordering: fn[Env](T, T) -> bool) -> [u32; N] {\n let mut result = [0; N];\n let mut a = self;\n for i in 0..N {\n result[i] = i;\n }\n for i in 1..N {\n for j in 0..i {\n if ordering(a[i], a[j]) {\n let old_a_j = a[j];\n a[j] = a[i];\n a[i] = old_a_j;\n let old_j = result[j];\n result[j] = result[i];\n result[i] = old_j;\n }\n }\n }\n result\n }\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<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\n// helper function used to look up the position of a value in an array of Field\n// Note that function returns 0 if the value is not found\nunconstrained fn find_index<let N: u32>(a: [u32; N], find: u32) -> u32 {\n let mut result = 0;\n for i in 0..a.len() {\n if a[i] == find {\n result = i;\n }\n }\n result\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"},"203":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{constants::KEY_VALIDATION_REQUEST_LENGTH, traits::{Empty, Serialize, Deserialize}, point::Point};\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))\n & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest {\n pk_m: Point::empty(),\n sk_app: 0,\n }\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 {\n pk_m: Point { x:fields[0], y: fields[1], is_infinite: fields[2] as bool},\n sk_app: fields[3],\n }\n }\n}\n\n"},"218":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr","source":"global NULLIFIER_LEAF_PREIMAGE_LENGTH: u32 = 3;\n\nuse crate::{\n abis::{read_request::ScopedReadRequest, side_effect::Readable}, hash::compute_siloed_nullifier,\n merkle_tree::leaf_preimage::{LeafPreimage, IndexedTreeLeafPreimage}, traits::{Empty, Hash}\n};\n\nstruct NullifierLeafPreimage {\n nullifier : Field,\n next_nullifier :Field,\n next_index : u32,\n}\n\nimpl Empty for NullifierLeafPreimage {\n fn empty() -> Self {\n Self {\n nullifier : 0,\n next_nullifier : 0,\n next_index : 0,\n }\n }\n}\n\nimpl Hash for NullifierLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash(self.serialize())\n }\n }\n}\n\nimpl LeafPreimage for NullifierLeafPreimage {\n fn get_key(self) -> Field {\n self.nullifier\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl IndexedTreeLeafPreimage for NullifierLeafPreimage {\n fn get_key(self) -> Field {\n self.nullifier\n }\n\n fn get_next_key(self) -> Field {\n self.next_nullifier\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl Readable<ScopedReadRequest> for NullifierLeafPreimage {\n fn assert_match_read_request(self, read_request: ScopedReadRequest) {\n let siloed_value = compute_siloed_nullifier(read_request.contract_address, read_request.value());\n assert_eq(self.nullifier, siloed_value, \"Value of the nullifier leaf does not match read request\");\n }\n}\n\nimpl NullifierLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.nullifier == 0) & (self.next_nullifier == 0) & (self.next_index == 0)\n }\n\n pub fn serialize(self) -> [Field; NULLIFIER_LEAF_PREIMAGE_LENGTH] {\n [self.nullifier, self.next_nullifier, self.next_index as Field]\n }\n\n pub fn deserialize(fields: [Field; NULLIFIER_LEAF_PREIMAGE_LENGTH]) -> Self {\n Self { nullifier: fields[0], next_nullifier: fields[1], next_index: fields[2] as u32 }\n }\n}\n\nimpl Eq for NullifierLeafPreimage {\n fn eq(self, other: Self) -> bool {\n (self.nullifier == other.nullifier) &\n (self.next_nullifier == other.next_nullifier) &\n (self.next_index == other.next_index)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = NullifierLeafPreimage::empty();\n let serialized = item.serialize();\n let deserialized = NullifierLeafPreimage::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n"},"22":{"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 {\n x: self.x,\n y: -self.y,\n is_infinite: self.is_infinite\n }\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) | ((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"},"23":{"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"},"24":{"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"},"249":{"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 {\n slot: 0,\n value: 0,\n next_slot: 0,\n next_index: 0,\n }\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"},"256":{"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"},"262":{"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 { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\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 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\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 { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\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"},"263":{"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"},"267":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"27":{"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{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self);\n }\n}\n\nimpl Hash for 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"},"273":{"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::{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 {\n x: 0,\n y: 0,\n is_infinite: false\n }\n }\n}\n"},"274":{"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"},"286":{"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"},"290":{"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"},"308":{"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"},"310":{"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"},"32":{"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 {\n _state: &[],\n }\n }\n}\n"},"323":{"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 {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"325":{"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"},"326":{"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"},"412":{"path":"/usr/src/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr","source":"mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\ncontract SchnorrAccount {\n use dep::std;\n\n use dep::aztec::prelude::{AztecAddress, PrivateContext, PrivateImmutable};\n use dep::aztec::encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys;\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness, auth::{compute_authwit_nullifier, compute_authwit_message_hash}\n };\n use dep::aztec::{hash::compute_siloed_nullifier, keys::getters::get_current_public_keys};\n use dep::aztec::oracle::get_nullifier_membership_witness::get_low_nullifier_membership_witness;\n\n use crate::public_key_note::PublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n signing_public_key: PrivateImmutable<PublicKeyNote>,\n }\n\n // Constructs the contract\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) {\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 = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.signing_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 file\n #[aztec(private)]\n #[aztec(noinitcheck)]\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 // docs:start:is_valid_impl\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.signing_public_key.get_note();\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 signature of the payload bytes\n std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n outer_hash.to_be_bytes::<32>()\n )\n // docs:end:is_valid_impl\n }\n\n /**\n * @notice Helper function to check validity of private authwitnesses\n * @param consumer The address of the consumer of the message\n * @param message_hash The message hash of the message to check the validity\n * @return True if the message_hash can be consumed, false otherwise\n */\n unconstrained fn lookup_validity(consumer: AztecAddress, inner_hash: Field) -> pub bool {\n let public_key = storage.signing_public_key.view_note();\n\n let message_hash = compute_authwit_message_hash(consumer, context.chain_id(), context.version(), inner_hash);\n\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n let valid_in_private = std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n message_hash.to_be_bytes::<32>()\n );\n\n // Compute the nullifier and check if it is spent\n // This will BLINDLY TRUST the oracle, but the oracle is us, and\n // it is not as part of execution of the contract, so we are good.\n let nullifier = compute_authwit_nullifier(context.this_address(), inner_hash);\n let siloed_nullifier = compute_siloed_nullifier(consumer, nullifier);\n let lower_wit = get_low_nullifier_membership_witness(context.block_number(), siloed_nullifier);\n let is_spent = lower_wit.leaf_preimage.nullifier == siloed_nullifier;\n\n !is_spent & valid_in_private\n }\n}\n"},"413":{"path":"/usr/src/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr","source":"use dep::aztec::prelude::{AztecAddress, NoteHeader, NoteInterface, PrivateContext};\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 PUBLIC_KEY_NOTE_LEN: Field = 3;\n// PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal PUBLIC_KEY_NOTE_BYTES_LEN: Field = 3 * 32 + 64;\n\n// Stores a public key composed of two fields\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 PublicKeyNote {\n x: Field,\n y: Field,\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<PUBLIC_KEY_NOTE_LEN, PUBLIC_KEY_NOTE_BYTES_LEN> for PublicKeyNote {\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 PublicKeyNote {\n pub fn new(x: Field, y: Field, npk_m_hash: Field) -> Self {\n PublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"5":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiller can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n \n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"55":{"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 {\n if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n"},"70":{"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"},"71":{"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 `keccak256(\"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 = 0xabf64ad4; // 4 first bytes of keccak256(\"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"},"72":{"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"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_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"},"75":{"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(\n self.serialize(),\n GENERATOR_INDEX__FEE_PAYLOAD\n )\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"},"81":{"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"},"82":{"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"},"83":{"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};\nuse crate::keys::constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX};\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"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, abis::validation_requests::KeyValidationRequest, address::AztecAddress,\n constants::CANONICAL_KEY_REGISTRY_ADDRESS, point::Point, storage::map::derive_storage_slot_in_map,\n traits::is_empty\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, INCOMING_INDEX, OUTGOING_INDEX, TAGGING_INDEX}\n},\n state_vars::{\n shared_mutable::shared_mutable_private_getter::SharedMutablePrivateGetter,\n public_mutable::PublicMutable, map::Map\n}\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\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// 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"},"99":{"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::{context::PrivateContext, 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"}}}
|