@aztec/protocol-contracts 0.57.0 → 0.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/AuthRegistry.d.json.ts +5 -3
- package/artifacts/AuthRegistry.json +1 -1
- package/artifacts/ContractClassRegisterer.d.json.ts +5 -3
- package/artifacts/ContractClassRegisterer.json +1 -1
- package/artifacts/ContractInstanceDeployer.d.json.ts +5 -3
- package/artifacts/ContractInstanceDeployer.json +1 -1
- package/artifacts/FeeJuice.d.json.ts +5 -3
- package/artifacts/FeeJuice.json +1 -1
- package/artifacts/MultiCallEntrypoint.d.json.ts +5 -3
- package/artifacts/MultiCallEntrypoint.json +1 -1
- package/artifacts/Router.d.json.ts +5 -3
- package/artifacts/Router.json +1 -1
- package/artifacts/keys/AuthRegistry/set_authorized_private.vk.data.json +134 -0
- package/artifacts/keys/ContractClassRegisterer/broadcast_private_function.vk.data.json +134 -0
- package/artifacts/keys/ContractClassRegisterer/broadcast_unconstrained_function.vk.data.json +134 -0
- package/artifacts/keys/ContractClassRegisterer/register.vk.data.json +134 -0
- package/artifacts/keys/ContractInstanceDeployer/deploy.vk.data.json +134 -0
- package/artifacts/keys/FeeJuice/claim.vk.data.json +134 -0
- package/artifacts/keys/FeeJuice/initialize.vk.data.json +134 -0
- package/artifacts/keys/MultiCallEntrypoint/entrypoint.vk.data.json +134 -0
- package/artifacts/keys/Router/check_block_number.vk.data.json +134 -0
- package/artifacts/keys/Router/check_timestamp.vk.data.json +134 -0
- package/dest/auth-registry/index.d.ts +0 -3
- package/dest/auth-registry/index.d.ts.map +1 -1
- package/dest/auth-registry/index.js +2 -12
- package/dest/build_protocol_contract_tree.d.ts +6 -0
- package/dest/build_protocol_contract_tree.d.ts.map +1 -0
- package/dest/build_protocol_contract_tree.js +12 -0
- package/dest/class-registerer/index.d.ts +0 -2
- package/dest/class-registerer/index.d.ts.map +1 -1
- package/dest/class-registerer/index.js +2 -9
- package/dest/fee-juice/index.d.ts +0 -4
- package/dest/fee-juice/index.d.ts.map +1 -1
- package/dest/fee-juice/index.js +2 -10
- package/dest/index.d.ts +3 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +4 -2
- package/dest/instance-deployer/index.d.ts +0 -2
- package/dest/instance-deployer/index.d.ts.map +1 -1
- package/dest/instance-deployer/index.js +2 -9
- package/dest/multi-call-entrypoint/index.d.ts +0 -2
- package/dest/multi-call-entrypoint/index.d.ts.map +1 -1
- package/dest/multi-call-entrypoint/index.js +2 -6
- package/dest/protocol_contract.d.ts +4 -4
- package/dest/protocol_contract.d.ts.map +1 -1
- package/dest/protocol_contract.js +12 -9
- package/dest/protocol_contract_data.d.ts +17 -0
- package/dest/protocol_contract_data.d.ts.map +1 -0
- package/dest/protocol_contract_data.js +51 -0
- package/dest/protocol_contract_tree.d.ts +3 -0
- package/dest/protocol_contract_tree.d.ts.map +1 -0
- package/dest/protocol_contract_tree.js +21 -0
- package/dest/router/index.d.ts +0 -3
- package/dest/router/index.d.ts.map +1 -1
- package/dest/router/index.js +2 -12
- package/dest/scripts/generate_data.d.ts +2 -0
- package/dest/scripts/generate_data.d.ts.map +1 -0
- package/dest/scripts/generate_data.js +172 -0
- package/package.json +6 -6
- package/src/auth-registry/index.ts +1 -17
- package/src/build_protocol_contract_tree.ts +23 -0
- package/src/class-registerer/index.ts +1 -12
- package/src/fee-juice/index.ts +1 -14
- package/src/index.ts +3 -1
- package/src/instance-deployer/index.ts +1 -12
- package/src/multi-call-entrypoint/index.ts +1 -8
- package/src/protocol_contract.ts +20 -13
- package/src/protocol_contract_data.ts +63 -0
- package/src/protocol_contract_tree.ts +27 -0
- package/src/router/index.ts +1 -17
- package/src/scripts/generate_data.ts +208 -0
- package/dest/auth-registry/artifact.d.ts +0 -2
- package/dest/auth-registry/artifact.d.ts.map +0 -1
- package/dest/auth-registry/artifact.js +0 -4
- package/dest/class-registerer/artifact.d.ts +0 -2
- package/dest/class-registerer/artifact.d.ts.map +0 -1
- package/dest/class-registerer/artifact.js +0 -4
- package/dest/fee-juice/artifact.d.ts +0 -2
- package/dest/fee-juice/artifact.d.ts.map +0 -1
- package/dest/fee-juice/artifact.js +0 -4
- package/dest/instance-deployer/artifact.d.ts +0 -2
- package/dest/instance-deployer/artifact.d.ts.map +0 -1
- package/dest/instance-deployer/artifact.js +0 -4
- package/dest/multi-call-entrypoint/artifact.d.ts +0 -2
- package/dest/multi-call-entrypoint/artifact.d.ts.map +0 -1
- package/dest/multi-call-entrypoint/artifact.js +0 -4
- package/dest/router/artifact.d.ts +0 -2
- package/dest/router/artifact.d.ts.map +0 -1
- package/dest/router/artifact.js +0 -4
- package/src/auth-registry/artifact.ts +0 -6
- package/src/class-registerer/artifact.ts +0 -8
- package/src/fee-juice/artifact.ts +0 -6
- package/src/instance-deployer/artifact.ts +0 -8
- package/src/multi-call-entrypoint/artifact.ts +0 -6
- package/src/router/artifact.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"transpiled":true,"noir_version":"0.35.0+b848cc128d2dc2b461581f21a35509a1af9065a7-x8664","name":"ContractInstanceDeployer","functions":[{"name":"deploy","is_unconstrained":false,"custom_attributes":["private"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"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":"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":"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":"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":"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":"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":"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"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":"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":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"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":"salt","type":{"kind":"field"},"visibility":"private"},{"name":"contract_class_id","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::contract_class_id::ContractClassId"},"visibility":"private"},{"name":"initialization_hash","type":{"kind":"field"},"visibility":"private"},{"name":"public_keys_hash","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::public_keys_hash::PublicKeysHash"},"visibility":"private"},{"name":"universal_deploy","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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"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":"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":"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":"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":"aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"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":"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":"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":"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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"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":"aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"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":"aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"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":"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":"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":"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":"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":"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":"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":"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":"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":"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"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":"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":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["debug_log_oracle_wrapper","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","emit_unencrypted_log_private_oracle_wrapper","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{"3715688037512703171":{"error_kind":"fmtstring","item_types":[],"length":16}},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/9VYTXPaMBCVg41lUwe3gEnSQ3ttT3IwNNyY6ef/8KTX/IT89bBGOzw2xBkUaSZoxiNb0r59eitpbUdqV/T2iux9Yuuhel54zMbW5m2l9ohlQvKMzoTnxZnwHJwJz9gjz+gIT6pje0/7jvZcqnb78VknGlOgB9Cv+oCk10dbZxYInW08KZcJv96w75o2s9wD8F4Sbh4G21BAfuq99gp8UTD/2j6uI3sVtl+BfaH2Af8FbbxQfkMbn+R/oC1Vh76Ijw4Tr7uA8TIFaKjABxbcJLzecxUszl22GAn/ufDfxdQKrqEttg8jaEvEmqHHL9CvYU7c/13MDbkMBBfCTUJoYWM/DIFtTIMaxkc0TI5oODyi4WR7/RM4xDvVQXh3mUADxxh8Mc8LGKOBRwLP39S+PYOTPgZdGHdMc+d1pF+2i4VdCWOGYJcKuxR4d2O311d7P7J64hng701ltZZntj/sH4tM7feiZ973hP0hCHbTYReA7XP9EvZlGE1WhD0Og93l9jII9m2nyUfA9vjFUFMcP6nDQv4mQeJb1335k33mwClE/pwI/+wL8+dUcCqhDffVVGBNBRZpOYPxHtfcf+Q0O4ET2pWOdiNHu1N4knYVjPd49jbIqXKcy9jRLne0OyVWpN0cxntcdwfazR3n4qrdpaNd5mjnus5d5zcHvngG+/xLhJxii82+OM8kMObB1nQuXqnDQjyvgafHXHHblyuugRPfM7dccErewGmxWJt2tV6umrq9b9tFBNjMiZ/xf8eNGCNzDOn2OYxuBr9dbkAnfv9G7fibgLngt0sG9r459unIPkvBlXm8pj9pfQX3PJcC7DZe5rH7R4DvE+xrFkQ3s+zbE+wzV6He33bvTzPhfyL0J00qwamENoxlJbAqgfUe7PAfGc+V8sIT7yz2rOIYAAA=","debug_symbols":"tdnNaoNAFEDhd5m1C43O/cmrlBI00SCIBjWFIr57J20ogazPRubq9ey+1Wzh0jb366kfu2kJx48tDNO5XvtpTNO2Z6GZ+2Hor6fX1yF/PKrD7/5yq8fHuKz1vIZjWWWhHS/p4Onvrh/adDTbs7dNPTw3Vf83o++fWahKrFxh5YiVBSsrVjas7FQ55li5wMqYwYgZjJjBiBmMmMGIGYyYwYgZFMygYAYFMyiYQcEMCmZQMIOCGRTMoGAGFTOomEHFDCpmUDGDihlUzKBiBhUzqJhBwwwaZtAwg4YZNMygYQYNM2iYQcMMGmbQMYOOGXTMoGMGHTPomEHHDDpm0DGDjhks8pxLF1z6wKVLLl1x6cilhUsrlzYuzWksII17mr7qua+boX3eO3T38fxyDbF+3/6+pOUf","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{},"structs":{"events":[{"fields":[{"name":"DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE","type":{"kind":"field"}},{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"version","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"salt","type":{"kind":"field"}},{"name":"contract_class_id","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::contract_class_id::ContractClassId"}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"public_keys_hash","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::public_keys_hash::PublicKeysHash"}},{"name":"deployer","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}}],"kind":"struct","path":"ContractInstanceDeployer::ContractInstanceDeployed"}],"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"salt","type":{"kind":"field"}},{"name":"contract_class_id","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::contract_class_id::ContractClassId"}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"public_keys_hash","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::public_keys_hash::PublicKeysHash"}},{"name":"universal_deploy","type":{"kind":"boolean"}}],"kind":"struct","path":"ContractInstanceDeployer::deploy_parameters"}}],"kind":"struct","path":"ContractInstanceDeployer::deploy_abi"}]}},"file_map":{"146":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<let N: u32>(contract_address: AztecAddress, log: [u8; N]) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (N as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..N {\n hash_bytes[36 + i] = log[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub struct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n/// Informs the simulator that an encrypted note log has been emitted, helping it keep track of side-effects and easing\n/// debugging.\npub fn emit_encrypted_note_log<let M: u32>(note_hash_counter: u32, encrypted_note: [u8; M], counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n emit_encrypted_note_log_oracle_wrapper(note_hash_counter, encrypted_note, counter)\n }\n}\n\n/// Informs the simulator that an encrypted event log has been emitted, helping it keep track of side-effects and easing\n/// debugging.\npub fn emit_encrypted_event_log<let M: u32>(contract_address: AztecAddress, randomness: Field, encrypted_event: [u8; M], counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n emit_encrypted_event_log_oracle_wrapper(contract_address, randomness, encrypted_event, counter)\n }\n}\n\n/// Informs the simulator that an unencrypted log has been emitted, helping it keep track of side-effects and easing\n/// debugging.\npub fn emit_unencrypted_log_private<T>(contract_address: AztecAddress, message: T, counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n emit_unencrypted_log_private_oracle_wrapper(contract_address, message, counter)\n }\n}\n\nunconstrained fn emit_encrypted_note_log_oracle_wrapper<let M: u32>(note_hash_counter: u32, encrypted_note: [u8; M], counter: u32) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\nunconstrained fn emit_encrypted_event_log_oracle_wrapper<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\nunconstrained fn emit_unencrypted_log_private_oracle_wrapper<T>(contract_address: AztecAddress, message: T, counter: u32) {\n let _ = emit_unencrypted_log_private_oracle(contract_address, message, counter);\n}\n\n/// Temporary substitute for `emit_unencrypted_log_private` that is used for handling contract class registration. This\n/// variant returns the log hash, which would be too large to compute inside a circuit.\nunconstrained pub fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {\n emit_contract_class_unencrypted_log_private_oracle(contract_address, message, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(\n _note_hash_counter: u32,\n _encrypted_note: [u8; M],\n _counter: u32\n) {}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _encrypted_event: [u8; M],\n _counter: u32\n) {}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_private_oracle<T>(\n _contract_address: AztecAddress,\n _message: T,\n _counter: u32\n) -> Field {}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private_oracle<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n"},"171":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/to_bytes.nr","source":"pub fn arr_to_be_bytes_arr<let L: u32>(fields: [Field; L]) -> [u8; L * 32] {\n let mut bytes = [0 as u8; L * 32];\n for i in 0..L {\n // Note that bytes.append() results in bound error\n let to_add: [u8; 32] = fields[i].to_be_bytes();\n for j in 0..32 {\n bytes[i * 32 + j] = to_add[j];\n }\n }\n bytes\n}\n\n// each character of a string is converted into a byte\n// then an ACVM field via the oracle => we recreate here\npub fn str_to_be_bytes_arr<let L: u32>(string: str<L>) -> [u8; L * 32] {\n let chars_bytes: [u8; L] = string.as_bytes();\n let mut bytes = [0 as u8; L * 32];\n for i in 0..L {\n let to_add: [u8; 32] = (chars_bytes[i] as Field).to_be_bytes();\n for j in 0..32 {\n bytes[i * 32 + j] = to_add[j];\n }\n }\n bytes\n}\n"},"26":{"path":"std/field/mod.nr","source":"pub mod bn254;\nuse bn254::lt as bn254_lt;\nuse crate::runtime::is_unconstrained;\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;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self', \n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self', \n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N-1-i] as Field) * v;\n v = v * 256;\n }\n result\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 assert_eq(Field::from_be_bytes::<8>(bits), field);\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 assert_eq(Field::from_le_bytes::<8>(bits), field);\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 assert_eq(Field::from_be_bytes::<8>(bits), field);\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 assert_eq(Field::from_le_bytes::<8>(bits), field);\n }\n // docs:end:to_le_radix_example\n}\n"},"262":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"264":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\npub struct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"267":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"308":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"314":{"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/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\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]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n debug_log_oracle_wrapper(msg, args)\n };\n}\n\nunconstrained pub fn debug_log_oracle_wrapper<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\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#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"35":{"path":"std/hash/sha256.nr","source":"use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{\n digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> [u8; 32] {\n sha256_var(msg, N as u64)\n}\n\n// Convert 64-byte array to array of 16 u32s\nfn msg_u8_to_u32(msg: [u8; 64]) -> [u32; 16] {\n let mut msg32: [u32; 16] = [0; 16];\n\n for i in 0..16 {\n let mut msg_field: Field = 0;\n for j in 0..4 {\n msg_field = msg_field * 256 + msg[64 - 4*(i + 1) + j] as Field;\n }\n msg32[15 - i] = msg_field as u32;\n }\n\n msg32\n}\n\nunconstrained fn build_msg_block_iter<let N: u32>(msg: [u8; N], message_size: u32, msg_start: u32) -> ([u8; 64], u32) {\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n for k in 0..block_input {\n msg_block[k] = msg[msg_start + k];\n }\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: [u8; 64],\n msg_start: u32\n) -> u32 {\n let mut msg_byte_ptr: u32 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n\n for k in msg_start..msg_end {\n if k < message_size {\n assert_eq(msg_block[msg_byte_ptr], msg[k]);\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\nglobal BLOCK_SIZE = 64;\nglobal ZERO = 0;\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> [u8; 32] {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut h: [u32; 8] = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]; // Intermediate hash, starting with the canonical initial value\n let mut msg_byte_ptr = 0; // Pointer into msg_block\n\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n msg_block[msg_byte_ptr] = 1 << 7;\n let last_block = msg_block;\n msg_byte_ptr = msg_byte_ptr + 1;\n\n unsafe {\n let (new_msg_block, new_msg_byte_ptr) = pad_msg_block(msg_block, msg_byte_ptr);\n msg_block = new_msg_block;\n if crate::runtime::is_unconstrained() {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..BLOCK_SIZE {\n assert_eq(msg_block[i], last_block[i]);\n }\n\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n // Not enough bits (64) to store length. Fill up with zeros.\n for _i in 57..BLOCK_SIZE {\n if msg_byte_ptr <= 63 & msg_byte_ptr >= 57 {\n assert_eq(msg_block[msg_byte_ptr], zero);\n msg_byte_ptr += 1;\n }\n }\n }\n\n if msg_byte_ptr >= 57 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..56 {\n let predicate = (i < msg_byte_ptr) as u8;\n let expected_byte = predicate * last_block[i];\n assert_eq(msg_block[i], expected_byte);\n }\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let len = 8 * message_size;\n let mut reconstructed_len: Field = 0;\n for i in 56..64 {\n reconstructed_len = 256 * reconstructed_len + msg_block[i] as Field;\n }\n assert_eq(reconstructed_len, len as Field);\n }\n\n hash_final_block(msg_block, h)\n}\n\nunconstrained fn pad_msg_block(\n mut msg_block: [u8; 64],\n mut msg_byte_ptr: u32\n) -> ([u8; BLOCK_SIZE], u32) {\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n if msg_byte_ptr >= 57 {\n // Not enough bits (64) to store length. Fill up with zeros.\n for i in msg_byte_ptr..BLOCK_SIZE {\n msg_block[i] = 0;\n }\n (msg_block, BLOCK_SIZE)\n } else {\n (msg_block, msg_byte_ptr)\n }\n}\n\nunconstrained fn attach_len_to_msg_block(mut msg_block: [u8; BLOCK_SIZE], msg_byte_ptr: u32, message_size: u32) -> [u8; BLOCK_SIZE] {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 (i.e. until msg_byte_ptr = 56).\n\n for i in msg_byte_ptr..56 {\n msg_block[i] = 0;\n }\n\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..8 {\n msg_block[56 + i] = len_bytes[i];\n }\n msg_block\n}\n\nfn hash_final_block(msg_block: [u8; BLOCK_SIZE], mut state: [u32; 8]) -> [u8; 32] {\n let mut out_h: [u8; 32] = [0; 32]; // Digest as sequence of bytes\n\n // Hash final padded block\n state = sha256_compression(msg_u8_to_u32(msg_block), state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[7 - j] as Field).to_le_bytes();\n for k in 0..4 {\n out_h[31 - 4*j - k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\nmod tests {\n use super::sha256_var;\n\n #[test]\n fn smoke_test() {\n let input = [0xbd];\n let result = [\n 0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116\n ];\n let result = [\n 91, 122, 146, 93, 52, 109, 133, 148, 171, 61, 156, 70, 189, 238, 153, 7, 222, 184, 94, 24, 65, 114, 192, 244, 207, 199, 87, 232, 192, 224, 171, 207\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_multiple_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115, 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49, 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46, 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115, 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97, 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45, 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55, 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32, 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32, 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64, 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103, 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115, 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101, 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56, 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48, 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75, 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101, 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99\n ];\n let result = [\n 116, 90, 151, 31, 78, 22, 138, 180, 211, 189, 69, 76, 227, 200, 155, 29, 59, 123, 154, 60, 47, 153, 203, 129, 157, 251, 48, 2, 79, 11, 65, 47\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_under_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59\n ];\n let result = [\n 143, 140, 76, 173, 222, 123, 102, 68, 70, 149, 207, 43, 39, 61, 34, 79, 216, 252, 213, 165, 74, 16, 110, 74, 29, 64, 138, 167, 30, 1, 9, 119\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_not_block_multiple() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115, 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49, 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46, 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115, 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97, 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45, 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55, 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32, 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32, 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64, 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103, 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115, 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101, 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56, 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48, 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75, 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101, 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99, 116, 58, 77, 101, 115, 115, 97, 103, 101, 45, 73, 100, 58, 68, 97, 116, 101, 58, 116, 111, 59, 32, 98, 61\n ];\n let result = [\n 112, 144, 73, 182, 208, 98, 9, 238, 54, 229, 61, 145, 222, 17, 72, 62, 148, 222, 186, 55, 192, 82, 220, 35, 66, 47, 193, 200, 22, 38, 26, 186\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_with_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17, 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12, 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48, 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6, 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2, 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89, 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2, 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75, 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1, 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189, 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4, 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45, 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4, 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188, 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212, 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53\n ];\n let message_size = 297;\n assert_eq(sha256_var(input, message_size), result);\n }\n\n #[test]\n fn msg_big_no_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17, 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12, 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48, 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6, 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2, 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89, 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2, 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75, 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1, 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189, 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4, 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45, 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4, 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188, 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212, 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn same_msg_len_variable_padding() {\n let input = [\n 29, 81, 165, 84, 243, 114, 101, 37, 242, 146, 127, 99, 69, 145, 39, 72, 213, 39, 253, 179, 218, 37, 217, 201, 172, 93, 198, 50, 249, 70, 15, 30, 162, 112, 187, 40, 140, 9, 236, 53, 32, 44, 38, 163, 113, 254, 192, 197, 44, 89, 71, 130, 169, 242, 17, 211, 214, 72, 19, 178, 186, 168, 147, 127, 99, 101, 252, 227, 8, 147, 150, 85, 97, 158, 17, 107, 218, 244, 82, 113, 247, 91, 208, 214, 60, 244, 87, 137, 173, 201, 130, 18, 66, 56, 198, 149, 207, 189, 175, 120, 123, 224, 177, 167, 251, 159, 143, 110, 68, 183, 189, 70, 126, 32, 35, 164, 44, 30, 44, 12, 65, 18, 62, 239, 242, 2, 248, 104, 2, 178, 64, 28, 126, 36, 137, 24, 14, 116, 91, 98, 90, 159, 218, 102, 45, 11, 110, 223, 245, 184, 52, 99, 59, 245, 136, 175, 3, 72, 164, 146, 145, 116, 22, 66, 24, 49, 193, 121, 3, 60, 37, 41, 97, 3, 190, 66, 195, 225, 63, 46, 3, 118, 4, 208, 15, 1, 40, 254, 235, 151, 123, 70, 180, 170, 44, 172, 90, 4, 254, 53, 239, 116, 246, 67, 56, 129, 61, 22, 169, 213, 65, 27, 216, 116, 162, 239, 214, 207, 126, 177, 20, 100, 25, 48, 143, 84, 215, 70, 197, 53, 65, 70, 86, 172, 61, 62, 9, 212, 167, 169, 133, 41, 126, 213, 196, 33, 192, 238, 0, 63, 246, 215, 58, 128, 110, 101, 92, 3, 170, 214, 130, 149, 52, 81, 125, 118, 233, 3, 118, 193, 104, 207, 120, 115, 77, 253, 191, 122, 0, 107, 164, 207, 113, 81, 169, 36, 201, 228, 74, 134, 131, 218, 178, 35, 30, 216, 101, 2, 103, 174, 87, 95, 50, 50, 215, 157, 5, 210, 188, 54, 211, 78, 45, 199, 96, 121, 241, 241, 176, 226, 194, 134, 130, 89, 217, 210, 186, 32, 140, 39, 91, 103, 212, 26, 87, 32, 72, 144, 228, 230, 117, 99, 188, 50, 15, 69, 79, 179, 50, 12, 106, 86, 218, 101, 73, 142, 243, 29, 250, 122, 228, 233, 29, 255, 22, 121, 114, 125, 103, 41, 250, 241, 179, 126, 158, 198, 116, 209, 65, 94, 98, 228, 175, 169, 96, 3, 9, 233, 133, 214, 55, 161, 164, 103, 80, 85, 24, 186, 64, 167, 92, 131, 53, 101, 202, 47, 25, 104, 118, 155, 14, 12, 12, 25, 116, 45, 221, 249, 28, 246, 212, 200, 157, 167, 169, 56, 197, 181, 4, 245, 146, 1, 140, 234, 191, 212, 228, 125, 87, 81, 86, 119, 30, 63, 129, 143, 32, 96\n ];\n\n // Prepare inputs of different lengths\n let mut input_511 = [0; 511];\n let mut input_512 = [0; 512]; // Next block\n let mut input_575 = [0; 575];\n let mut input_576 = [0; 576]; // Next block\n for i in 0..input.len() {\n input_511[i] = input[i];\n input_512[i] = input[i];\n input_575[i] = input[i];\n input_576[i] = input[i];\n }\n\n // Compute hashes of all inputs (with same message length)\n let fixed_length_hash = super::sha256(input);\n let var_full_length_hash = sha256_var(input, input.len() as u64);\n let var_length_hash_511 = sha256_var(input_511, input.len() as u64);\n let var_length_hash_512 = sha256_var(input_512, input.len() as u64);\n let var_length_hash_575 = sha256_var(input_575, input.len() as u64);\n let var_length_hash_576 = sha256_var(input_576, input.len() as u64);\n\n // All of the above should have produced the same hash\n assert_eq(var_full_length_hash, fixed_length_hash);\n assert_eq(var_length_hash_511, fixed_length_hash);\n assert_eq(var_length_hash_512, fixed_length_hash);\n assert_eq(var_length_hash_575, fixed_length_hash);\n assert_eq(var_length_hash_576, fixed_length_hash);\n }\n}\n"},"388":{"path":"/usr/src/noir-projects/noir-contracts/contracts/contract_instance_deployer_contract/src/main.nr","source":"use dep::aztec::macros::aztec;\n\n#[aztec]\ncontract ContractInstanceDeployer {\n use dep::aztec::protocol_types::{\n address::{AztecAddress, PublicKeysHash, PartialAddress}, contract_class_id::ContractClassId,\n constants::DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE, abis::log_hash::LogHash,\n traits::Serialize\n };\n use dep::aztec::{\n hash::compute_unencrypted_log_hash, oracle::logs::emit_unencrypted_log_private,\n macros::{events::event, functions::private}, utils::to_bytes::arr_to_be_bytes_arr\n };\n use std::meta::derive;\n\n #[event]\n #[derive(Serialize)]\n struct ContractInstanceDeployed {\n DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE: Field,\n address: AztecAddress,\n version: u8,\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys_hash: PublicKeysHash,\n deployer: AztecAddress,\n }\n\n #[private]\n fn deploy(\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys_hash: PublicKeysHash,\n universal_deploy: bool\n ) {\n // TODO(@spalladino): assert nullifier_exists silo(contract_class_id, ContractClassRegisterer)\n\n let deployer = if universal_deploy {\n AztecAddress::zero()\n } else {\n context.msg_sender()\n };\n\n let partial_address = PartialAddress::compute(contract_class_id, salt, initialization_hash, deployer);\n\n let address = AztecAddress::compute(public_keys_hash, partial_address);\n\n // Emit the address as a nullifier to be able to prove that this instance has been (not) deployed\n context.push_nullifier(address.to_field());\n\n // Broadcast the event\n let event = ContractInstanceDeployed {\n DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,\n contract_class_id,\n address,\n public_keys_hash,\n initialization_hash,\n salt,\n deployer,\n version: 1\n };\n\n let payload = event.serialize();\n dep::aztec::oracle::debug_log::debug_log_format(\"ContractInstanceDeployed: {}\", payload);\n\n let contract_address = context.this_address();\n let counter = context.next_counter();\n\n // @todo This is very inefficient, we are doing a lot of back and forth conversions.\n let serialized_log = arr_to_be_bytes_arr(payload);\n let log_hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n // 40 = addr (32) + raw log len (4) + processed log len (4)\n let len = 40 + serialized_log.len().to_field();\n let side_effect = LogHash { value: log_hash, counter, length: len };\n\n // We manually push the unencrypted log to the context and inform the execution environment about this because\n // PrivateContext does not expose an `emit_unencrypted_log` method - this mechanism is considered error-prone\n // and only some canonical contracts use it.\n context.unencrypted_logs_hashes.push(side_effect);\n emit_unencrypted_log_private(contract_address, payload, counter);\n }\n}\n"},"59":{"path":"std/panic.nr","source":"pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL, PUBLIC_DISPATCH_SELECTOR\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime {\n FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR)\n };\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let function_selector = comptime {\n FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR)\n };\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.public_teardown_call_request = PublicCallRequest {\n contract_address,\n call_context,\n args_hash,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"}}}
|
|
1
|
+
{"transpiled":true,"noir_version":"0.35.0+df29d315d6b71131ffe0180c97130395edb2e4ba-x8664","name":"ContractInstanceDeployer","functions":[{"name":"deploy","is_unconstrained":false,"custom_attributes":["private"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"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":"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":"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":"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":"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":"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":"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"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":"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":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"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":"salt","type":{"kind":"field"},"visibility":"private"},{"name":"contract_class_id","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::contract_class_id::ContractClassId"},"visibility":"private"},{"name":"initialization_hash","type":{"kind":"field"},"visibility":"private"},{"name":"public_keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::NpkM"}},{"name":"ivpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::IvpkM"}},{"name":"ovpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::OvpkM"}},{"name":"tpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::TpkM"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::PublicKeys"},"visibility":"private"},{"name":"universal_deploy","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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"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":"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":"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":"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":"aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"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":"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":"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":"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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"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":"aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"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":"aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"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":"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":"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":"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":"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":"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":"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":"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":"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":"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"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":"aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"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":"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":"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":"aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"databus"}},"bytecode":"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","debug_symbols":"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","brillig_names":["debug_log_oracle_wrapper","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","emit_unencrypted_log_private_oracle_wrapper","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{"14336010898202591232":{"error_kind":"fmtstring","item_types":[],"length":16}},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/9VYzXLaMBAWYDB2AiEmKemNXtuLnRCgN8/0J733CRp+Lj2knckDuDNtn7uoaO2PZctQWB3YGY9krfztt7uS11bNrKW9umqu33Rty2wLzcldmx4nmSJW6pNn7UR41k+EZ+NEeAaKPGsCT9sGrm/3nd1zoVnvxy0lPmwT3QC92QFUY0at/IR+17Wfn7/Mvg6fn56G88XiWzn9t2sj19YBTjGPWWS2Y6OFP01Hs8hsijL/u8hhhn7w7wm/7Qc/Jd7vigoffSG7Ddc+FFUsH+AZKx3XxyVHuKSrg+490zVA94HpcMl/ZDrcJsSJ4tYCXxTX1dR3Xsi3EHyr/aM1poodjlGsY+N1jWaU84jx4fyJT4fmFBWfFtMFoIuYrgk6ir9thzCP5z6EeW9gnK/Jhtlew6SnnGOsfaypwAP+SkZS3HlOgmLTNuow7gHEc+j6/dX1yc0JIGZWwsKLT2V9bTv8JvAmm8i9zubzfpONvTYV77/+wFyy04Axsnnh7lugo2d3YQUCVk+Y32JYoYCFY+S33ROvXP/MrPP3g/DN9ntC7xt4/FZ6Z+rhT8paHPnhvyD82Av+qMQ/A3zNvUL4537iMyb8jh/88luo6wX/tozPBeAbvfhnVJdoP6MNsn3pJfdZts83A9qPGVdf3wyXjA+PD9Ynq0sErj1Bx/doIthJBDuUhz57Plfxe7yUuPYP5CphdRWxIkWsQ32kfFyx53N3nx4lk5HE9UrR744iVlsR69B1Qvm4Zs/n7j49SsZiPq4V/dbMx7kiVqiIpblvNeNFeZRqnZXctemRwrni/xTapDrfZPO/u5ZqzgtTCa/XAxhXrNe3+9brAeOKfIh3LOiOOeOcjZd3j/PlaP44WUwh3gPGlY/hGaK9boT5Uu2nWL80XmKdSv/FNxBXKwHoBkzXBB1xxP/iiGFq898n/mi/J+jwn+N/cpmYzbWWMJ/x/CdX8bc6G2sDNt+XkZdYp/f77kuyHzOuynx2nr1hfPh3dCxw7Qk6XpdiwU4s2DlFLH5+jTG0+4PiFBSVXiuXk2l1lkXvITzLQglAj/N/ufvEyGJ9+ANQAijv/B0AAA==","debug_symbols":"tdnBaoNAEIDhd9lzDq66OzN5lVKCJhoWRIOaQhHfvZs2lEDO/0V2dPxv32k3d+na+/WUxn5a3PFjc8N0btY0jXna9oNr5zQM6Xp6fe2Kx6Ouf/eXWzM+xmVt5tUdq/rguvGSD5b/7tPQ5aPm89umlM9Nkf/NYPvnwdUBK0esLFhZsbJR5VBgZY+VS6xcYWXMYMAMBsxgwAwGzGDADEbMYMQMRsxgxAxGzGDEDEbMYMQMRsxgxAwKZlAwg4IZFMygYAYFMyiYQcEMCmZQMIOKGVTMoGIGFTOomEHFDCpmUDGDihlUzKBhBg0zaJhBwwwaZtAwg4YZNMygYQYNM+iLgkt7Ll1y6YpL11w6cOnIpYVLK5fmNHpOo+c0ekjjnqevZk5NO3TPm4f+Pp5fLiLW79vfl7z8Aw==","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{},"structs":{"events":[{"fields":[{"name":"DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE","type":{"kind":"field"}},{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"version","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"salt","type":{"kind":"field"}},{"name":"contract_class_id","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::contract_class_id::ContractClassId"}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"public_keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::NpkM"}},{"name":"ivpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::IvpkM"}},{"name":"ovpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::OvpkM"}},{"name":"tpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::TpkM"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::PublicKeys"}},{"name":"deployer","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::address::aztec_address::AztecAddress"}}],"kind":"struct","path":"ContractInstanceDeployer::ContractInstanceDeployed"}],"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"salt","type":{"kind":"field"}},{"name":"contract_class_id","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"aztec::protocol_types::contract_class_id::ContractClassId"}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"public_keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::NpkM"}},{"name":"ivpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::IvpkM"}},{"name":"ovpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::OvpkM"}},{"name":"tpk_m","type":{"fields":[{"name":"inner","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"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::TpkM"}}],"kind":"struct","path":"aztec::protocol_types::public_keys::PublicKeys"}},{"name":"universal_deploy","type":{"kind":"boolean"}}],"kind":"struct","path":"ContractInstanceDeployer::deploy_parameters"}}],"kind":"struct","path":"ContractInstanceDeployer::deploy_abi"}]}},"file_map":{"103":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL, PUBLIC_DISPATCH_SELECTOR\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime {\n FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR)\n };\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let function_selector = comptime {\n FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR)\n };\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.public_teardown_call_request = PublicCallRequest {\n contract_address,\n call_context,\n args_hash,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"121":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/to_bytes.nr","source":"pub fn arr_to_be_bytes_arr<let L: u32>(fields: [Field; L]) -> [u8; L * 32] {\n let mut bytes = [0 as u8; L * 32];\n for i in 0..L {\n // Note that bytes.append() results in bound error\n let to_add: [u8; 32] = fields[i].to_be_bytes();\n for j in 0..32 {\n bytes[i * 32 + j] = to_add[j];\n }\n }\n bytes\n}\n\n// each character of a string is converted into a byte\n// then an ACVM field via the oracle => we recreate here\npub fn str_to_be_bytes_arr<let L: u32>(string: str<L>) -> [u8; L * 32] {\n let chars_bytes: [u8; L] = string.as_bytes();\n let mut bytes = [0 as u8; L * 32];\n for i in 0..L {\n let to_add: [u8; 32] = (chars_bytes[i] as Field).to_be_bytes();\n for j in 0..32 {\n bytes[i * 32 + j] = to_add[j];\n }\n }\n bytes\n}\n"},"156":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n/// Informs the simulator that an encrypted note log has been emitted, helping it keep track of side-effects and easing\n/// debugging.\npub fn emit_encrypted_note_log<let M: u32>(note_hash_counter: u32, encrypted_note: [u8; M], counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n emit_encrypted_note_log_oracle_wrapper(note_hash_counter, encrypted_note, counter)\n }\n}\n\n/// Informs the simulator that an encrypted event log has been emitted, helping it keep track of side-effects and easing\n/// debugging.\npub fn emit_encrypted_event_log<let M: u32>(contract_address: AztecAddress, randomness: Field, encrypted_event: [u8; M], counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n emit_encrypted_event_log_oracle_wrapper(contract_address, randomness, encrypted_event, counter)\n }\n}\n\n/// Informs the simulator that an unencrypted log has been emitted, helping it keep track of side-effects and easing\n/// debugging.\npub fn emit_unencrypted_log_private<T>(contract_address: AztecAddress, message: T, counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n emit_unencrypted_log_private_oracle_wrapper(contract_address, message, counter)\n }\n}\n\nunconstrained fn emit_encrypted_note_log_oracle_wrapper<let M: u32>(note_hash_counter: u32, encrypted_note: [u8; M], counter: u32) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\nunconstrained fn emit_encrypted_event_log_oracle_wrapper<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\nunconstrained fn emit_unencrypted_log_private_oracle_wrapper<T>(contract_address: AztecAddress, message: T, counter: u32) {\n let _ = emit_unencrypted_log_private_oracle(contract_address, message, counter);\n}\n\n/// Temporary substitute for `emit_unencrypted_log_private` that is used for handling contract class registration. This\n/// variant returns the log hash, which would be too large to compute inside a circuit.\npub unconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {\n emit_contract_class_unencrypted_log_private_oracle(contract_address, message, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(\n _note_hash_counter: u32,\n _encrypted_note: [u8; M],\n _counter: u32\n) {}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _encrypted_event: [u8; M],\n _counter: u32\n) {}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_private_oracle<T>(\n _contract_address: AztecAddress,\n _message: T,\n _counter: u32\n) -> Field {}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private_oracle<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n"},"184":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<let N: u32>(contract_address: AztecAddress, log: [u8; N]) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (N as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..N {\n hash_bytes[36 + i] = log[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub struct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"193":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\nuse crate::meta::{derive_deserialize, derive_serialize};\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic\n// if a value can actually be zero. In a future refactor, we can\n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\npub trait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\npub trait Hash {\n fn hash(self) -> Field;\n}\n\npub trait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\npub trait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\n#[derive_via(derive_serialize)]\npub trait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let bytes = self.as_bytes();\n let mut fields = [0; N];\n for i in 0..bytes.len() {\n fields[i] = bytes[i] as Field;\n }\n fields\n }\n}\n\n// docs:start:deserialize\n#[derive_via(derive_deserialize)]\npub trait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl <let N: u32> Deserialize<N> for str<N> {\n fn deserialize(fields: [Field; N]) -> Self {\n str<N>::from(fields.map(|value| value as u8))\n }\n}\n"},"216":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, public_keys_hash::PublicKeysHash,\n salted_initialization_hash::SaltedInitializationHash\n},\n constants::{AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\npub struct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n functino_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys_hash: PublicKeysHash\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n functino_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(contract_class_id, salted_initialization_hash);\n\n AztecAddress::compute(public_keys_hash, partial_address)\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"},"218":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"221":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub 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 pub 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 pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub 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 pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset+31 - i] as Field) * v;\n hi = hi + (bytes[offset+15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// This is a hack because returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n let x_coordinates_match = point1.x == point2.x;\n let y_coordinates_match = point1.y == point2.y;\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint { x: point1.x + (x_coordinates_match as Field), y: point1.y, is_infinite: x_coordinates_match };\n // point1_1 is guaranteed to have a different abscissa than point2\n let mut result = embedded_curve_add_unsafe(point1_1, point2);\n result.is_infinite = x_coordinates_match;\n\n // dbl if x_match, y_match\n let double = embedded_curve_add_unsafe(point1, point1);\n result = if double_predicate { double } else { result };\n\n // infinity if x_match, !y_match\n if point1.is_infinite {\n result= point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n let mut result_is_infinity = infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n\n EmbeddedCurvePoint { x, y, is_infinite: false }\n}\n"},"253":{"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/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\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]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n debug_log_oracle_wrapper(msg, args)\n };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\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#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"},"254":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr","source":"use crate::{\n address::public_keys_hash::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::POINT_LENGTH,\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\npub global PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for TpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"26":{"path":"std/field/mod.nr","source":"pub mod bn254;\nuse bn254::lt as bn254_lt;\nuse crate::runtime::is_unconstrained;\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<let BIT_SIZE: u32>(self) {\n // docs:end:assert_max_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;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self', \n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self', \n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\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 // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N-1-i] as Field) * v;\n v = v * 256;\n }\n result\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 assert_eq(Field::from_be_bytes::<8>(bits), field);\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 assert_eq(Field::from_le_bytes::<8>(bits), field);\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 assert_eq(Field::from_be_bytes::<8>(bits), field);\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 assert_eq(Field::from_le_bytes::<8>(bits), field);\n }\n // docs:end:to_le_radix_example\n}\n"},"338":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk<let N: u32>(_vk: VerificationKey<N>) -> 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 // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\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 // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\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 verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"35":{"path":"std/hash/sha256.nr","source":"use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{\n digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> [u8; 32] {\n sha256_var(msg, N as u64)\n}\n\n// Convert 64-byte array to array of 16 u32s\nfn msg_u8_to_u32(msg: [u8; 64]) -> [u32; 16] {\n let mut msg32: [u32; 16] = [0; 16];\n\n for i in 0..16 {\n let mut msg_field: Field = 0;\n for j in 0..4 {\n msg_field = msg_field * 256 + msg[64 - 4*(i + 1) + j] as Field;\n }\n msg32[15 - i] = msg_field as u32;\n }\n\n msg32\n}\n\nunconstrained fn build_msg_block_iter<let N: u32>(msg: [u8; N], message_size: u32, msg_start: u32) -> ([u8; 64], u32) {\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n for k in 0..block_input {\n msg_block[k] = msg[msg_start + k];\n }\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: [u8; 64],\n msg_start: u32\n) -> u32 {\n let mut msg_byte_ptr: u32 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n\n for k in msg_start..msg_end {\n if k < message_size {\n assert_eq(msg_block[msg_byte_ptr], msg[k]);\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\nglobal BLOCK_SIZE = 64;\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> [u8; 32] {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut h: [u32; 8] = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]; // Intermediate hash, starting with the canonical initial value\n let mut msg_byte_ptr = 0; // Pointer into msg_block\n\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n msg_block[msg_byte_ptr] = 1 << 7;\n let last_block = msg_block;\n msg_byte_ptr = msg_byte_ptr + 1;\n\n unsafe {\n let (new_msg_block, new_msg_byte_ptr) = pad_msg_block(msg_block, msg_byte_ptr);\n msg_block = new_msg_block;\n if crate::runtime::is_unconstrained() {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..BLOCK_SIZE {\n assert_eq(msg_block[i], last_block[i]);\n }\n\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n // Not enough bits (64) to store length. Fill up with zeros.\n for _i in 57..BLOCK_SIZE {\n if msg_byte_ptr <= 63 & msg_byte_ptr >= 57 {\n assert_eq(msg_block[msg_byte_ptr], zero);\n msg_byte_ptr += 1;\n }\n }\n }\n\n if msg_byte_ptr >= 57 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..56 {\n let predicate = (i < msg_byte_ptr) as u8;\n let expected_byte = predicate * last_block[i];\n assert_eq(msg_block[i], expected_byte);\n }\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let len = 8 * message_size;\n let mut reconstructed_len: Field = 0;\n for i in 56..64 {\n reconstructed_len = 256 * reconstructed_len + msg_block[i] as Field;\n }\n assert_eq(reconstructed_len, len as Field);\n }\n\n hash_final_block(msg_block, h)\n}\n\nunconstrained fn pad_msg_block(\n mut msg_block: [u8; 64],\n mut msg_byte_ptr: u32\n) -> ([u8; BLOCK_SIZE], u32) {\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n if msg_byte_ptr >= 57 {\n // Not enough bits (64) to store length. Fill up with zeros.\n for i in msg_byte_ptr..BLOCK_SIZE {\n msg_block[i] = 0;\n }\n (msg_block, BLOCK_SIZE)\n } else {\n (msg_block, msg_byte_ptr)\n }\n}\n\nunconstrained fn attach_len_to_msg_block(mut msg_block: [u8; BLOCK_SIZE], msg_byte_ptr: u32, message_size: u32) -> [u8; BLOCK_SIZE] {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 (i.e. until msg_byte_ptr = 56).\n\n for i in msg_byte_ptr..56 {\n msg_block[i] = 0;\n }\n\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..8 {\n msg_block[56 + i] = len_bytes[i];\n }\n msg_block\n}\n\nfn hash_final_block(msg_block: [u8; BLOCK_SIZE], mut state: [u32; 8]) -> [u8; 32] {\n let mut out_h: [u8; 32] = [0; 32]; // Digest as sequence of bytes\n\n // Hash final padded block\n state = sha256_compression(msg_u8_to_u32(msg_block), state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[7 - j] as Field).to_le_bytes();\n for k in 0..4 {\n out_h[31 - 4*j - k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\nmod tests {\n use super::sha256_var;\n\n #[test]\n fn smoke_test() {\n let input = [0xbd];\n let result = [\n 0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116\n ];\n let result = [\n 91, 122, 146, 93, 52, 109, 133, 148, 171, 61, 156, 70, 189, 238, 153, 7, 222, 184, 94, 24, 65, 114, 192, 244, 207, 199, 87, 232, 192, 224, 171, 207\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_multiple_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115, 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49, 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46, 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115, 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97, 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45, 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55, 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32, 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32, 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64, 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103, 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115, 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101, 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56, 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48, 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75, 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101, 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99\n ];\n let result = [\n 116, 90, 151, 31, 78, 22, 138, 180, 211, 189, 69, 76, 227, 200, 155, 29, 59, 123, 154, 60, 47, 153, 203, 129, 157, 251, 48, 2, 79, 11, 65, 47\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_under_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59\n ];\n let result = [\n 143, 140, 76, 173, 222, 123, 102, 68, 70, 149, 207, 43, 39, 61, 34, 79, 216, 252, 213, 165, 74, 16, 110, 74, 29, 64, 138, 167, 30, 1, 9, 119\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_not_block_multiple() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117, 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115, 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49, 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46, 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115, 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97, 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45, 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55, 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32, 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32, 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64, 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103, 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115, 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101, 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56, 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48, 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75, 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101, 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99, 116, 58, 77, 101, 115, 115, 97, 103, 101, 45, 73, 100, 58, 68, 97, 116, 101, 58, 116, 111, 59, 32, 98, 61\n ];\n let result = [\n 112, 144, 73, 182, 208, 98, 9, 238, 54, 229, 61, 145, 222, 17, 72, 62, 148, 222, 186, 55, 192, 82, 220, 35, 66, 47, 193, 200, 22, 38, 26, 186\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_with_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17, 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12, 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48, 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6, 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2, 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89, 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2, 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75, 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1, 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189, 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4, 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45, 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4, 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188, 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212, 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53\n ];\n let message_size = 297;\n assert_eq(sha256_var(input, message_size), result);\n }\n\n #[test]\n fn msg_big_no_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17, 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12, 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48, 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6, 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2, 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89, 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2, 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75, 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1, 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189, 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4, 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45, 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4, 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188, 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212, 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn same_msg_len_variable_padding() {\n let input = [\n 29, 81, 165, 84, 243, 114, 101, 37, 242, 146, 127, 99, 69, 145, 39, 72, 213, 39, 253, 179, 218, 37, 217, 201, 172, 93, 198, 50, 249, 70, 15, 30, 162, 112, 187, 40, 140, 9, 236, 53, 32, 44, 38, 163, 113, 254, 192, 197, 44, 89, 71, 130, 169, 242, 17, 211, 214, 72, 19, 178, 186, 168, 147, 127, 99, 101, 252, 227, 8, 147, 150, 85, 97, 158, 17, 107, 218, 244, 82, 113, 247, 91, 208, 214, 60, 244, 87, 137, 173, 201, 130, 18, 66, 56, 198, 149, 207, 189, 175, 120, 123, 224, 177, 167, 251, 159, 143, 110, 68, 183, 189, 70, 126, 32, 35, 164, 44, 30, 44, 12, 65, 18, 62, 239, 242, 2, 248, 104, 2, 178, 64, 28, 126, 36, 137, 24, 14, 116, 91, 98, 90, 159, 218, 102, 45, 11, 110, 223, 245, 184, 52, 99, 59, 245, 136, 175, 3, 72, 164, 146, 145, 116, 22, 66, 24, 49, 193, 121, 3, 60, 37, 41, 97, 3, 190, 66, 195, 225, 63, 46, 3, 118, 4, 208, 15, 1, 40, 254, 235, 151, 123, 70, 180, 170, 44, 172, 90, 4, 254, 53, 239, 116, 246, 67, 56, 129, 61, 22, 169, 213, 65, 27, 216, 116, 162, 239, 214, 207, 126, 177, 20, 100, 25, 48, 143, 84, 215, 70, 197, 53, 65, 70, 86, 172, 61, 62, 9, 212, 167, 169, 133, 41, 126, 213, 196, 33, 192, 238, 0, 63, 246, 215, 58, 128, 110, 101, 92, 3, 170, 214, 130, 149, 52, 81, 125, 118, 233, 3, 118, 193, 104, 207, 120, 115, 77, 253, 191, 122, 0, 107, 164, 207, 113, 81, 169, 36, 201, 228, 74, 134, 131, 218, 178, 35, 30, 216, 101, 2, 103, 174, 87, 95, 50, 50, 215, 157, 5, 210, 188, 54, 211, 78, 45, 199, 96, 121, 241, 241, 176, 226, 194, 134, 130, 89, 217, 210, 186, 32, 140, 39, 91, 103, 212, 26, 87, 32, 72, 144, 228, 230, 117, 99, 188, 50, 15, 69, 79, 179, 50, 12, 106, 86, 218, 101, 73, 142, 243, 29, 250, 122, 228, 233, 29, 255, 22, 121, 114, 125, 103, 41, 250, 241, 179, 126, 158, 198, 116, 209, 65, 94, 98, 228, 175, 169, 96, 3, 9, 233, 133, 214, 55, 161, 164, 103, 80, 85, 24, 186, 64, 167, 92, 131, 53, 101, 202, 47, 25, 104, 118, 155, 14, 12, 12, 25, 116, 45, 221, 249, 28, 246, 212, 200, 157, 167, 169, 56, 197, 181, 4, 245, 146, 1, 140, 234, 191, 212, 228, 125, 87, 81, 86, 119, 30, 63, 129, 143, 32, 96\n ];\n\n // Prepare inputs of different lengths\n let mut input_511 = [0; 511];\n let mut input_512 = [0; 512]; // Next block\n let mut input_575 = [0; 575];\n let mut input_576 = [0; 576]; // Next block\n for i in 0..input.len() {\n input_511[i] = input[i];\n input_512[i] = input[i];\n input_575[i] = input[i];\n input_576[i] = input[i];\n }\n\n // Compute hashes of all inputs (with same message length)\n let fixed_length_hash = super::sha256(input);\n let var_full_length_hash = sha256_var(input, input.len() as u64);\n let var_length_hash_511 = sha256_var(input_511, input.len() as u64);\n let var_length_hash_512 = sha256_var(input_512, input.len() as u64);\n let var_length_hash_575 = sha256_var(input_575, input.len() as u64);\n let var_length_hash_576 = sha256_var(input_576, input.len() as u64);\n\n // All of the above should have produced the same hash\n assert_eq(var_full_length_hash, fixed_length_hash);\n assert_eq(var_length_hash_511, fixed_length_hash);\n assert_eq(var_length_hash_512, fixed_length_hash);\n assert_eq(var_length_hash_575, fixed_length_hash);\n assert_eq(var_length_hash_576, fixed_length_hash);\n }\n}\n"},"389":{"path":"/usr/src/noir-projects/noir-contracts/contracts/contract_instance_deployer_contract/src/main.nr","source":"use dep::aztec::macros::aztec;\n\n#[aztec]\ncontract ContractInstanceDeployer {\n use dep::aztec::protocol_types::{\n address::{AztecAddress, PublicKeysHash, PartialAddress}, public_keys::PublicKeys,\n contract_class_id::ContractClassId, constants::DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,\n abis::log_hash::LogHash, traits::Serialize\n };\n use dep::aztec::{\n hash::compute_unencrypted_log_hash, oracle::logs::emit_unencrypted_log_private,\n macros::{events::event, functions::private}, utils::to_bytes::arr_to_be_bytes_arr\n };\n use std::meta::derive;\n\n #[event]\n struct ContractInstanceDeployed {\n DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE: Field,\n address: AztecAddress,\n version: u8,\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys: PublicKeys,\n deployer: AztecAddress,\n }\n\n // We need to impl this separately because ts deserializes a point as two fields only.\n // We had issues that:\n // Notice how the 'is_infinite' field is deserialized as the next point.\n // {\n // masterNullifierPublicKey: Point {\n // x: Fr<0x0000000000000000000000000000000000000000000000000000000000000012>,\n // y: Fr<0x0000000000000000000000000000000000000000000000000000000000000034>,\n // isInfinite: false,\n // kind: 'point'\n // },\n // masterIncomingViewingPublicKey: Point {\n // x: Fr<0x0000000000000000000000000000000000000000000000000000000000000000>,\n // y: Fr<0x0000000000000000000000000000000000000000000000000000000000000056>,\n // isInfinite: false,\n // kind: 'point'\n // },\n // masterOutgoingViewingPublicKey: Point {\n // x: Fr<0x0000000000000000000000000000000000000000000000000000000000000078>,\n // y: Fr<0x0000000000000000000000000000000000000000000000000000000000000000>,\n // isInfinite: false,\n // kind: 'point'\n // },\n // masterTaggingPublicKey: Point {\n // x: Fr<0x0000000000000000000000000000000000000000000000000000000000000910>,\n // y: Fr<0x0000000000000000000000000000000000000000000000000000000000001112>,\n // isInfinite: false,\n // kind: 'point'\n // }\n impl Serialize<15> for ContractInstanceDeployed {\n fn serialize(self) -> [Field; 15] {\n [\n self.DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,\n self.address.to_field(),\n self.version.to_field(),\n self.salt,\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys.npk_m.serialize()[0],\n self.public_keys.npk_m.serialize()[1],\n self.public_keys.ivpk_m.serialize()[0],\n self.public_keys.ivpk_m.serialize()[1],\n self.public_keys.ovpk_m.serialize()[0],\n self.public_keys.ovpk_m.serialize()[1],\n self.public_keys.tpk_m.serialize()[0],\n self.public_keys.tpk_m.serialize()[1],\n self.deployer.to_field()\n ]\n }\n }\n\n #[private]\n fn deploy(\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys: PublicKeys,\n universal_deploy: bool\n ) {\n // TODO(@spalladino): assert nullifier_exists silo(contract_class_id, ContractClassRegisterer)\n\n let deployer = if universal_deploy {\n AztecAddress::zero()\n } else {\n context.msg_sender()\n };\n\n let partial_address = PartialAddress::compute(contract_class_id, salt, initialization_hash, deployer);\n\n let address = AztecAddress::compute(public_keys.hash(), partial_address);\n\n // Emit the address as a nullifier to be able to prove that this instance has been (not) deployed\n context.push_nullifier(address.to_field());\n\n // Broadcast the event\n let event = ContractInstanceDeployed {\n DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,\n contract_class_id,\n address,\n public_keys,\n initialization_hash,\n salt,\n deployer,\n version: 1\n };\n\n let payload = event.serialize();\n dep::aztec::oracle::debug_log::debug_log_format(\"ContractInstanceDeployed: {}\", payload);\n\n let contract_address = context.this_address();\n let counter = context.next_counter();\n\n // @todo This is very inefficient, we are doing a lot of back and forth conversions.\n let serialized_log = arr_to_be_bytes_arr(payload);\n let log_hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n // 40 = addr (32) + raw log len (4) + processed log len (4)\n let len = 40 + serialized_log.len().to_field();\n let side_effect = LogHash { value: log_hash, counter, length: len };\n\n // We manually push the unencrypted log to the context and inform the execution environment about this because\n // PrivateContext does not expose an `emit_unencrypted_log` method - this mechanism is considered error-prone\n // and only some canonical contracts use it.\n context.unencrypted_logs_hashes.push(side_effect);\n emit_unencrypted_log_private(contract_address, payload, counter);\n }\n}\n"},"59":{"path":"std/panic.nr","source":"pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"}}}
|