@aztec/protocol-contracts 0.56.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 +9 -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.34.0+02fea6abe8637b9fb8f9535d1709b367d5e1da5c","name":"ContractInstanceDeployer","functions":[{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{"3715688037512703171":{"error_kind":"fmtstring","item_types":[],"length":16}},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"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":"tdnLaoNAFIDhd5m1C29zLnmVUoImGgTRoKZQxHevtqEEsv43MkeP/+5bzRquTf24nbuhHedw+lhDP16qpRuHfVq3JNRT1/fd7fz6OqTHo8x/9+d7NRzjvFTTEk5FmYRmuO4H3/9uu745jumWvG1q/txU/d+Mvn0moSywcomVI1YWrKxY2bCyU+WYYuUMK2MGI2YwYgYjZjBiBiNmMGIGI2ZQMIOCGRTMoGAGBTMomEHBDApmUDCDghlUzKBiBhUzqJhBxQwqZlAxg4oZVMygYgYNM2iYQcMMGmbQMIOGGTTMoGEGDTNomEHHDDpm0DGDjhl0zKBjBh0z6JhBxww6ZjBLUy6dcemcSxdcuuTSkUsLl1YubVya05hBGrd9+qqmrqr75nnv0D6Gy8s1xPJ9//uyL/8A","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"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_format","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","emit_unencrypted_log_private_internal","directive_integer_quotient","directive_invert"]}],"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":{"113":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.public_teardown_call_request = PublicCallRequest {\n contract_address,\n call_context,\n args_hash,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"141":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub struct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"156":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs_traits.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n// TODO(#8548): We have arithmetics over generics now so this file can be nuked.\n// TODO: this is awful but since we can't have a fn that maps [Field; N] -> [u8; 416 + N * 32]\n// (where N is the note pre-image size and 416 + N * 32 is the encryption output size)\n// The fns for LensForEncryptedLog are never used, it's just to tell the compiler what the lens are\n\n// The to_bytes fn for ToBytesForUnencryptedLog is used to allow us to hash some generic T\n\n// I could have omitted N from the trait, but wanted to keep it strictly for field arrs\n// TODO(1139): Once we enc inside the circuit, we will no longer need the oracle to return\n// anything, so we can remove this trait\npub trait LensForEncryptedLog<let N: u32, let M: u32> {\n // N = note preimage input in fields\n // M = encryption output len in bytes (= 417 + N * 32)\n fn output_fields(self: [Field; N]) -> [Field; N];\n fn output_bytes(self: [Field; N]) -> [u8; M];\n}\n\nimpl LensForEncryptedLog<1, 449> for [Field; 1] {\n fn output_fields(self) -> [Field; 1] {\n [self[0]; 1]\n }\n fn output_bytes(self) -> [u8; 449] {\n [self[0] as u8; 449]\n }\n}\nimpl LensForEncryptedLog<2, 481> for [Field; 2] {\n fn output_fields(self) -> [Field; 2] {\n [self[0]; 2]\n }\n fn output_bytes(self) -> [u8; 481] {\n [self[0] as u8; 481]\n }\n}\nimpl LensForEncryptedLog<3, 513> for [Field; 3] {\n fn output_fields(self) -> [Field; 3] {\n [self[0]; 3]\n }\n fn output_bytes(self) -> [u8; 513] {\n [self[0] as u8; 513]\n }\n}\nimpl LensForEncryptedLog<4, 545> for [Field; 4] {\n fn output_fields(self) -> [Field; 4] {\n [self[0]; 4]\n }\n fn output_bytes(self) -> [u8; 545] {\n [self[0] as u8; 545]\n }\n}\nimpl LensForEncryptedLog<5, 577> for [Field; 5] {\n fn output_fields(self) -> [Field; 5] {\n [self[0]; 5]\n }\n fn output_bytes(self) -> [u8; 577] {\n [self[0] as u8; 577]\n }\n}\nimpl LensForEncryptedLog<6, 609> for [Field; 6] {\n fn output_fields(self) -> [Field; 6] {\n [self[0]; 6]\n }\n fn output_bytes(self) -> [u8; 609] {\n [self[0] as u8; 609]\n }\n}\nimpl LensForEncryptedLog<7, 641> for [Field; 7] {\n fn output_fields(self) -> [Field; 7] {\n [self[0]; 7]\n }\n fn output_bytes(self) -> [u8; 641] {\n [self[0] as u8; 641]\n }\n}\nimpl LensForEncryptedLog<8, 673> for [Field; 8] {\n fn output_fields(self) -> [Field; 8] {\n [self[0]; 8]\n }\n fn output_bytes(self) -> [u8; 673] {\n [self[0] as u8; 673]\n }\n}\nimpl LensForEncryptedLog<9, 705> for [Field; 9] {\n fn output_fields(self) -> [Field; 9] {\n [self[0]; 9]\n }\n fn output_bytes(self) -> [u8; 705] {\n [self[0] as u8; 705]\n }\n}\nimpl LensForEncryptedLog<10, 737> for [Field; 10] {\n fn output_fields(self) -> [Field; 10] {\n [self[0]; 10]\n }\n fn output_bytes(self) -> [u8; 737] {\n [self[0] as u8; 737]\n }\n}\nimpl LensForEncryptedLog<11, 769> for [Field; 11] {\n fn output_fields(self) -> [Field; 11] {\n [self[0]; 11]\n }\n fn output_bytes(self) -> [u8; 769] {\n [self[0] as u8; 769]\n }\n}\nimpl LensForEncryptedLog<12, 801> for [Field; 12] {\n fn output_fields(self) -> [Field; 12] {\n [self[0]; 12]\n }\n fn output_bytes(self) -> [u8; 801] {\n [self[0] as u8; 801]\n }\n}\n\npub trait LensForEncryptedEvent<let N: u32, let M: u32> {\n // N = event preimage input in bytes\n // M = encryption output len in bytes (= 416 + M)\n fn output(self: [u8; N]) -> [u8; M];\n}\n\nimpl LensForEncryptedEvent<96, 448> for [u8; 96] {\n fn output(self) -> [u8; 448] {\n [self[0] as u8; 448]\n }\n}\nimpl LensForEncryptedEvent<128, 480> for [u8; 128] {\n fn output(self) -> [u8; 480] {\n [self[0] as u8; 480]\n }\n}\nimpl LensForEncryptedEvent<160, 512> for [u8; 160] {\n fn output(self) -> [u8; 512] {\n [self[0] as u8; 512]\n }\n}\nimpl LensForEncryptedEvent<192, 544> for [u8; 192] {\n fn output(self) -> [u8; 544] {\n [self[0] as u8; 544]\n }\n}\nimpl LensForEncryptedEvent<224, 576> for [u8; 224] {\n fn output(self) -> [u8; 576] {\n [self[0] as u8; 576]\n }\n}\nimpl LensForEncryptedEvent<256, 608> for [u8; 256] {\n fn output(self) -> [u8; 608] {\n [self[0] as u8; 608]\n }\n}\n\n// This trait defines the length of the inputs in bytes to\n// the unencrypted log hash fn, where the log can be any type T\n// as long as the ACVM can convert to fields.\npub trait ToBytesForUnencryptedLog<let N: u32, let M: u32> {\n // N = preimage input in bytes (32 * num fields or chars)\n // M = full log input in bytes ( = N + 40 = N + 32 for addr, + 4 for selector, + 4 for len)\n fn to_be_bytes_arr(self) -> [u8; N];\n fn output_bytes(self) -> [u8; M];\n}\n\nimpl ToBytesForUnencryptedLog<32, 68> for Field {\n fn to_be_bytes_arr(self) -> [u8; 32] {\n self.to_be_bytes()\n }\n fn output_bytes(self) -> [u8; 68] {\n [self as u8; 68]\n }\n}\n\nimpl ToBytesForUnencryptedLog<32, 68> for AztecAddress {\n fn to_be_bytes_arr(self) -> [u8; 32] {\n self.to_field().to_be_bytes()\n }\n fn output_bytes(self) -> [u8; 68] {\n [self.to_field() as u8; 68]\n }\n}\n\nfn arr_to_be_bytes_arr<let N: u32, let L: u32>(fields: [Field; L]) -> [u8; N] {\n let mut bytes: [u8] = &[];\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 = bytes.push_back(to_add[j]);\n }\n }\n bytes.as_array()\n}\n\n// each character of a string is converted into a byte\n// then an ACVM field via the oracle => we recreate here\nfn str_to_be_bytes_arr<let N: u32, let L: u32>(string: str<L>) -> [u8; N] {\n let chars_bytes = string.as_bytes();\n let mut bytes: [u8] = &[];\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 = bytes.push_back(to_add[j]);\n }\n }\n bytes.as_array()\n}\n\nimpl ToBytesForUnencryptedLog<32, 68> for [Field; 1] {\n fn to_be_bytes_arr(self) -> [u8; 32] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 68] {\n [self[0] as u8; 68]\n }\n}\n\nimpl ToBytesForUnencryptedLog<64, 100> for [Field; 2] {\n fn to_be_bytes_arr(self) -> [u8; 64] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 100] {\n [self[0] as u8; 100]\n }\n}\n\nimpl ToBytesForUnencryptedLog<96, 132> for [Field; 3] {\n fn to_be_bytes_arr(self) -> [u8; 96] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 132] {\n [self[0] as u8; 132]\n }\n}\n\nimpl ToBytesForUnencryptedLog<128, 164> for [Field; 4] {\n fn to_be_bytes_arr(self) -> [u8; 128] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 164] {\n [self[0] as u8; 164]\n }\n}\n\nimpl ToBytesForUnencryptedLog<160, 196> for [Field; 5] {\n fn to_be_bytes_arr(self) -> [u8; 160] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 196] {\n [self[0] as u8; 196]\n }\n}\n\nimpl ToBytesForUnencryptedLog<192, 228> for [Field; 6] {\n fn to_be_bytes_arr(self) -> [u8; 192] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 228] {\n [self[0] as u8; 228]\n }\n}\n\nimpl ToBytesForUnencryptedLog<224, 260> for [Field; 7] {\n fn to_be_bytes_arr(self) -> [u8; 224] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 260] {\n [self[0] as u8; 260]\n }\n}\n\nimpl ToBytesForUnencryptedLog<256, 292> for [Field; 8] {\n fn to_be_bytes_arr(self) -> [u8; 256] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 292] {\n [self[0] as u8; 292]\n }\n}\n\nimpl ToBytesForUnencryptedLog<288, 324> for [Field; 9] {\n fn to_be_bytes_arr(self) -> [u8; 288] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 324] {\n [self[0] as u8; 324]\n }\n}\n\nimpl ToBytesForUnencryptedLog<320, 356> for [Field; 10] {\n fn to_be_bytes_arr(self) -> [u8; 320] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 356] {\n [self[0] as u8; 356]\n }\n}\n\nimpl ToBytesForUnencryptedLog<352, 388> for [Field; 11] {\n fn to_be_bytes_arr(self) -> [u8; 352] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 388] {\n [self[0] as u8; 388]\n }\n}\n\nimpl ToBytesForUnencryptedLog<384, 420> for [Field; 12] {\n fn to_be_bytes_arr(self) -> [u8; 384] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 420] {\n [self[0] as u8; 420]\n }\n}\n\nimpl ToBytesForUnencryptedLog<416, 452> for [Field; 13] {\n fn to_be_bytes_arr(self) -> [u8; 416] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 452] {\n [self[0] as u8; 452]\n }\n}\n\nimpl ToBytesForUnencryptedLog<448, 484> for [Field; 14] {\n fn to_be_bytes_arr(self) -> [u8; 448] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 484] {\n [self[0] as u8; 484]\n }\n}\n\nimpl ToBytesForUnencryptedLog<480, 516> for [Field; 15] {\n fn to_be_bytes_arr(self) -> [u8; 480] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 516] {\n [self[0] as u8; 516]\n }\n}\n\nimpl ToBytesForUnencryptedLog<512, 548> for [Field; 16] {\n fn to_be_bytes_arr(self) -> [u8; 512] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 548] {\n [self[0] as u8; 548]\n }\n}\n\nimpl ToBytesForUnencryptedLog<544, 580> for [Field; 17] {\n fn to_be_bytes_arr(self) -> [u8; 544] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 580] {\n [self[0] as u8; 580]\n }\n}\n\nimpl ToBytesForUnencryptedLog<576, 612> for [Field; 18] {\n fn to_be_bytes_arr(self) -> [u8; 576] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 612] {\n [self[0] as u8; 612]\n }\n}\n\nimpl ToBytesForUnencryptedLog<608, 644> for [Field; 19] {\n fn to_be_bytes_arr(self) -> [u8; 608] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 644] {\n [self[0] as u8; 644]\n }\n}\n\nimpl ToBytesForUnencryptedLog<640, 676> for [Field; 20] {\n fn to_be_bytes_arr(self) -> [u8; 640] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 676] {\n [self[0] as u8; 676]\n }\n}\n\nimpl ToBytesForUnencryptedLog<672, 708> for [Field; 21] {\n fn to_be_bytes_arr(self) -> [u8; 672] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 708] {\n [self[0] as u8; 708]\n }\n}\n\nimpl ToBytesForUnencryptedLog<704, 740> for [Field; 22] {\n fn to_be_bytes_arr(self) -> [u8; 704] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 740] {\n [self[0] as u8; 740]\n }\n}\n\nimpl ToBytesForUnencryptedLog<736, 772> for [Field; 23] {\n fn to_be_bytes_arr(self) -> [u8; 736] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 772] {\n [self[0] as u8; 772]\n }\n}\n\nimpl ToBytesForUnencryptedLog<768, 804> for [Field; 24] {\n fn to_be_bytes_arr(self) -> [u8; 768] {\n arr_to_be_bytes_arr(self)\n }\n fn output_bytes(self) -> [u8; 804] {\n [self[0] as u8; 804]\n }\n}\n\nimpl<let N: u32, let M: u32, let L: u32> ToBytesForUnencryptedLog<N, M> for str<L> where [Field; L]: ToBytesForUnencryptedLog<N,M> {\n fn to_be_bytes_arr(self) -> [u8; N] {\n str_to_be_bytes_arr(self)\n }\n fn output_bytes(_self: Self) -> [u8; M] {\n [0; M]\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"274":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"278":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"337":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\npub struct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"339":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"340":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"35":{"path":"std/hash/sha256.nr","source":"use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{\n crate::sha256::digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> [u8; 32] {\n sha256_var(msg, N as u64)\n}\n\n// Convert 64-byte array to array of 16 u32s\nfn msg_u8_to_u32(msg: [u8; 64]) -> [u32; 16] {\n let mut msg32: [u32; 16] = [0; 16];\n\n for i in 0..16 {\n let mut msg_field: Field = 0;\n for j in 0..4 {\n msg_field = msg_field * 256 + msg[64 - 4*(i + 1) + j] as Field;\n }\n msg32[15 - i] = msg_field as u32;\n }\n\n msg32\n}\n\nunconstrained fn build_msg_block_iter<let N: u32>(msg: [u8; N], message_size: u64, msg_start: u32) -> ([u8; 64], u64) {\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut msg_byte_ptr: u64 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n for k in msg_start..msg_end {\n if k as u64 < message_size {\n msg_block[msg_byte_ptr] = msg[k];\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n (msg_block, msg_byte_ptr)\n}\n\n// Verify the block we are compressing was appropriately constructed\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u64,\n msg_block: [u8; 64],\n msg_start: u32\n) -> u64 {\n let mut msg_byte_ptr: u64 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n let mut extra_bytes = 0;\n if msg_end > N {\n msg_end = N;\n extra_bytes = msg_end - N;\n }\n\n for k in msg_start..msg_end {\n if k as u64 < message_size {\n assert_eq(msg_block[msg_byte_ptr], msg[k]);\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\nglobal BLOCK_SIZE = 64;\nglobal ZERO = 0;\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> [u8; 32] {\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut h: [u32; 8] = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]; // Intermediate hash, starting with the canonical initial value\n let mut msg_byte_ptr = 0; // Pointer into msg_block\n\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n if msg_start as u64 < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if msg_byte_ptr == 64 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n\n if msg_start as u64 < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if msg_byte_ptr == BLOCK_SIZE as u64 {\n msg_byte_ptr = 0;\n }\n\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n msg_block[msg_byte_ptr] = 1 << 7;\n let last_block = msg_block;\n msg_byte_ptr = msg_byte_ptr + 1;\n\n unsafe {\n let (new_msg_block, new_msg_byte_ptr) = pad_msg_block(msg_block, msg_byte_ptr);\n msg_block = new_msg_block;\n if crate::runtime::is_unconstrained() {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..64 {\n assert_eq(msg_block[i], last_block[i]);\n }\n\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n // Not enough bits (64) to store length. Fill up with zeros.\n for _i in 57..64 {\n if msg_byte_ptr <= 63 & msg_byte_ptr >= 57 {\n assert_eq(msg_block[msg_byte_ptr], zero);\n msg_byte_ptr += 1;\n }\n }\n }\n\n if msg_byte_ptr >= 57 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..56 {\n let predicate = (i < msg_byte_ptr) as u8;\n let expected_byte = predicate * last_block[i];\n assert_eq(msg_block[i], expected_byte);\n }\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let len = 8 * message_size;\n let mut reconstructed_len: Field = 0;\n for i in 56..64 {\n reconstructed_len = 256 * reconstructed_len + msg_block[i] as Field;\n }\n assert_eq(reconstructed_len, len as Field);\n }\n\n hash_final_block(msg_block, h)\n}\n\nunconstrained fn pad_msg_block(mut msg_block: [u8; 64], mut msg_byte_ptr: u64) -> ([u8; 64], u64) {\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n if msg_byte_ptr >= 57 {\n // Not enough bits (64) to store length. Fill up with zeros.\n if msg_byte_ptr < 64 {\n for _ in 57..64 {\n if msg_byte_ptr <= 63 {\n msg_block[msg_byte_ptr] = 0;\n msg_byte_ptr += 1;\n }\n }\n }\n }\n (msg_block, msg_byte_ptr)\n}\n\nunconstrained fn attach_len_to_msg_block(mut msg_block: [u8; 64], mut msg_byte_ptr: u64, message_size: u64) -> [u8; 64] {\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for _i in 0..64 {\n // In any case, fill blocks up with zeros until the last 64 (i.e. until msg_byte_ptr = 56).\n if msg_byte_ptr < 56 {\n msg_block[msg_byte_ptr] = 0;\n msg_byte_ptr = msg_byte_ptr + 1;\n } else if msg_byte_ptr < 64 {\n for j in 0..8 {\n msg_block[msg_byte_ptr + j] = len_bytes[j];\n }\n msg_byte_ptr += 8;\n }\n }\n msg_block\n}\n\nfn hash_final_block(msg_block: [u8; 64], mut state: [u32; 8]) -> [u8; 32] {\n let mut out_h: [u8; 32] = [0; 32]; // Digest as sequence of bytes\n\n // Hash final padded block\n state = sha256_compression(msg_u8_to_u32(msg_block), state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[7 - j] as Field).to_le_bytes();\n for k in 0..4 {\n out_h[31 - 4*j - k] = h_bytes[k];\n }\n }\n\n out_h\n}\n"},"390":{"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_internal,\n macros::{events::event, functions::private}\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 log_slice = payload.to_be_bytes_arr();\n let log_hash = compute_unencrypted_log_hash(contract_address, payload);\n // 40 = addr (32) + raw log len (4) + processed log len (4)\n let len = 40 + log_slice.len().to_field();\n let side_effect = LogHash { value: log_hash, counter, length: len };\n context.unencrypted_logs_hashes.push(side_effect);\n\n let _void = emit_unencrypted_log_private_internal(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"}}}
|
|
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"}}}
|