@aztec/protocol-contracts 0.41.0 → 0.43.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.
Files changed (35) hide show
  1. package/dest/artifacts/AuthRegistry.json +1 -0
  2. package/dest/artifacts/ContractClassRegisterer.json +1 -1
  3. package/dest/artifacts/ContractInstanceDeployer.json +1 -1
  4. package/dest/artifacts/GasToken.json +1 -1
  5. package/dest/artifacts/KeyRegistry.json +1 -1
  6. package/dest/artifacts/MultiCallEntrypoint.json +1 -1
  7. package/dest/auth-registry/artifact.d.ts +2 -0
  8. package/dest/auth-registry/artifact.d.ts.map +1 -0
  9. package/dest/auth-registry/artifact.js +4 -0
  10. package/dest/auth-registry/index.d.ts +7 -0
  11. package/dest/auth-registry/index.d.ts.map +1 -0
  12. package/dest/auth-registry/index.js +16 -0
  13. package/dest/class-registerer/index.d.ts +2 -3
  14. package/dest/class-registerer/index.d.ts.map +1 -1
  15. package/dest/class-registerer/index.js +7 -9
  16. package/dest/gas-token/index.d.ts +5 -3
  17. package/dest/gas-token/index.d.ts.map +1 -1
  18. package/dest/gas-token/index.js +10 -6
  19. package/dest/instance-deployer/index.js +2 -2
  20. package/dest/protocol_contract.d.ts +2 -2
  21. package/dest/protocol_contract.d.ts.map +1 -1
  22. package/dest/protocol_contract.js +1 -1
  23. package/package.json +4 -4
  24. package/src/artifacts/AuthRegistry.json +1 -0
  25. package/src/artifacts/ContractClassRegisterer.json +1 -1
  26. package/src/artifacts/ContractInstanceDeployer.json +1 -1
  27. package/src/artifacts/GasToken.json +1 -1
  28. package/src/artifacts/KeyRegistry.json +1 -1
  29. package/src/artifacts/MultiCallEntrypoint.json +1 -1
  30. package/src/auth-registry/artifact.ts +6 -0
  31. package/src/auth-registry/index.ts +22 -0
  32. package/src/class-registerer/index.ts +9 -11
  33. package/src/gas-token/index.ts +12 -6
  34. package/src/instance-deployer/index.ts +1 -1
  35. package/src/protocol_contract.ts +2 -1
@@ -1 +1 @@
1
- {"transpiled":true,"noir_version":"0.29.0+78f13d9e0070502a980003c7ded3738fd353dd5a","name":"KeyRegistry","functions":[{"name":"compute_note_hash_and_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"param_witnesses":{"contract_address":[{"end":1,"start":0}],"nonce":[{"end":2,"start":1}],"note_type_id":[{"end":4,"start":3}],"serialized_note":[],"storage_slot":[{"end":3,"start":2}]},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"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"},"return_witnesses":[4,5,6,7]},"bytecode":"H4sIAAAAAAAA/+2b227iMBCGE8ohNMshIYTzobQ3exdYCvSOl9l9671fad9htZ3UUwZrWjnqxIolLKFMjOP/m9+HppXre2+l9frxVdzQrrRgm7O6Zl8rW8G+sjI5fUc4a45w3gly+gwnXOsqhivM5aZ3Pc/fy1lwklBRCgUDc0fqPoK7eghKUwWBBnyWgD5lpybpnEJDCRU4BQhJIj6pw2drpA53kLvg0kVTPod9QMwT6/d1QMNL2u/cIYnxO9Cekrp6STk25HMsy7t8VaI/DdVvi9yjV20VC+6wW6rtq0+baHpqjDCekLbYDv2okTGG0vEu49/+5Lm69lyXtGky+Z892fxbGk9LY24oJigR8Gp7QEljk0G/9/L9Xo15XRuTe5JTR9zv3Qn2hNC7LvpPmTOJO4TnmzhPti0nz7ex6xJ2mX6f9+BVT/Mq1LzqkjaUoVeCfz7Rxb7xvsdoy3lxOIF238CLPsPTt+xFn9EW9OIFtCMDLyKGJ7LsRcRoy3lx/AHasYEXMcMTW/YiZrTlvNjl7xYDAy8GDM/AshcDRltwjeTzIjHwImF4EsteJIy2oBe/QHto4MWQ4Rla9mLIaAt68RO0UwMvUoYntexFymgL7p35+8XIwIsRwzOy7MWI0Rb0YgfaYwMvxgzP2LIXY0ZbcI3k2hMDLyYMz8SyF/R31CLMAweZUweZ4wowB1oso33I98+pgRdThmdq2QvUK8qcVIA50GIZ7cMzaM8MvJgxPDPLXqBeUebIQebYQeahg8yJg8ypg8xVmM+BFstoH/M9dG7gxZzhmVv2AvWKMkcOMk8dZI4rwBxosYz2Mf/b3MLAiwXDs7DsBeoVZR45yNyvAHOgxTLaxwNoLw28WDI8S8teoF5R5rGDzKmDzFMHmWMHmYcOMicOMt/WoB3mqALM9EzT31J5di+hxoOeeRqjpzGGJKbnYFbijFlGx2dFtNbyWltuvuD9ulTt3Qn63cjnlL/LP6q+8AzfhsnpScXS57keSb8+0cH6Oon/kLbYDv3AdYvsMO8eVPz0yXNL7bkuafPA5H/2ZPPfaDwbjRnG5DfhWItz7E4m87rvXdbyd8JTwj64p2dysZjsOyXtMduS8szoGb5/nuyaXmteBZpXXdKG7tHrEvwzmV835hvzR8z0fSIgdfj9itTVtFzo/zJgezgz/B/4fzqFFjUAAA==","debug_symbols":"ndpBattQGIXRvWgciu8v6ekpWymlOIlTDMYOsVMoJnuv3dIF9Mz0JN3ZNzq86/Cye/r48X1/fD2dh8ev1+Fwet5e9qfj7XQdNl+q/Xl7ftse7y/Ol+37ZXgcKw/D7vhyf2qfD8Pr/rC7PW/a57eH+2iRUZfRCqNxI6PIqGQ0ymiS0SwjKWKUIkYpYpQiJilikiImKWKSIiYpYpIiJilikiImKWKSImYpYpYiZililiJmKWKWImYpYpYiZililiKaFNGkiCZFNCmiSRFNimhSRJMimhTRpIhFilikiEWKWKSIRYpYpIhFilikiEWKWKSILkV0KaJLEV2K6FJElyK6FNGliC5FdClilSJWKWKVIlYpYpUiVililSJWKWKVIlYpIpsNrUKrotVIq4lWM60arRZadVpRG6E2Qm2E2gi1EWoj1EaojVAboTZCbRS1UdRGURtFbRS1UdQGcWbIM0OgGRLNEGmGTDOEmiHVDLFmyDVDsBmSzRBthmwzhJsh3QzxZsg3Q8AZEs4QcYaMM4ScIeUMMWfIOUPQGZLOEHWGrDOEnSHtDHFnyDtD4BkSzxB5hswzhJ4h9QyxZ8g9Q/AZks8QfYbsM4SfIf0M8WfIP0MAGhLQEIGGDDSEoCEFDTFoyEFDEBqS0BCFhiw0hKEhDQ1xaMhDQyAaEtEQiYZMNISiIRUNsWjIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFy6552j1Pu+hJLlrkokUuWuSiRS5a/+2it9PP7ft++3TY3W/23j9+HJ//XfS9HS+/3v5+uf37Gw=="},{"name":"rotate_npk_m","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"address":[{"end":42,"start":41}],"inputs":[{"end":41,"start":0}],"new_npk_m":[{"end":44,"start":42}],"nonce":[{"end":45,"start":44}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"new_npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":32,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":32,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398]},"bytecode":"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","debug_symbols":"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vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5f1nt9We/1Zb3Xl/VeX9Z7fVnv9WW915f1Xl/We31Z7/VlvdeX9V5flnt9epV7ffdLpP4Srb/E6i/x+kui/pJVf8muv+TUX1J/96X+7kv93Zf6uy/1d1/q777U332pv/tSf/el/u5L/d3X+ruv9Xdf6+++1t99rb/7Wn/3tf7ua/3d1/q7r/V33+rvvtXffau/+1Z/963+7lv93bf6u2/1d9/q777V332vv/tef/e9/u57/d33+rvv9Xff6+++1999r7/7Xn/3o/7uR/3dj/q7H/V3P+rvftTf/ai/+1F/96P+7kf93V/1d3/V3/1Vf/dX/d1f9Xd/1d/9VX/3V/3dX/V3f9Xf/V1/93f93d/1d3/X3/1df/d3/d3f9Xd/19/9XX/3d/3dP/V3/9Tf/VN/90/93T/1d//U3/1Tf/dP/d0/9Xf/1N/9rL/7WX/3s/7uZ/3dz/q7n/V3P+vvftbf/ay/+/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/Ue31S7/VJvdcn9V6f1Ht9Uu/1Sb3XJ/Ven9R7fVLv9Um91yf1Xp/We31a7/Vpvden9V7f/W+46y+J+ktW/SW7/pJTf0n93a/3+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uvTeq9P670+rff6tN7r03qvT+u9Pq33+rTe69N6r0/rvT6t9/q03uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7rs3qvz+q9Pqv3+qze67N6r8/qvT6r9/qs3uuzeq/P6r0+q/f6rN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze6/N6r8/rvT6v9/q83uvzeq/P670+r/f6vN7r83qvz+u9Pq/3+rze64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3uuLeq8v6r2+qPf6ot7ri3qvL+q9vqj3+qLe64t6ry/qvb6o9/qi3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vlXv9a16r2/Ve32r3utb9V7fqvf6Vr3Xt+q9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273uvb9V7frvf6dr3Xt+u9vl3v9e16r2/Xe3273us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vlPv9Z16r+/Ue32n3us79V7fqff6Tr3Xd+q9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/rvb6s9/qy3uvLeq8v672+rPf6st7ry3qvL+u9vqz3+rLe68t6ry/LvT67yr2++yVSf4nWX2L1l3j9JVF/yaq/ZNdfcuovqb/7Un/3pf7uS/3dl/q7L/V3X+rvvtTffam/+1J/9//c6xM/669XScj5hxf+p3/303Htv344XJ8/q+6Ph/y5O/ivHvJ4oXz2hX98V2VZPF64PP74wvjsC9dnX7g/+8Lz2RfmJ1/45z7fR14on32hfvaF9tkXfvaTY5/95NhnPzn2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yS8jGF+TX0Ywvia/jAC+Jk9XvT4QAXxNni56fSAC+Jo8XfN6HcF0y+sDEcDX5PmO18sI4GvyfMfrZQTwNXm+4/UyAviaPN/xehkBfE2e73i9jAC+Js93vF5GAF+T5zteLyOAr8nzHa+XEcDX5PmO18sI4GvyfMfrZQTwNXm+4/UyAviaPN/xehkBfE2e73i9jAC+Js93vF5GAF+T5zteLyOAr8nzHa+XEcDX5PmO18sI4GvyfMfrZQTwNXm+4/UyAvSaHPMdr5cRoNfkmO94vYwAvSbHhV6TY77j9TIC9Joc8x2vlxGg1+SY73i9imC+4/UyAviaPN/xehkBfE2e73i9jAC+Js93vF5GAF+T5zteLyOAr8nzHa+XEcDX5PmO18sI4GvyfMfrZQTwNXm+4/UyAviaPN/xehkBfE2e73i9jAC+Js93vF5GAF+T5zteLyOAr8nzHa+XEcDX5PmO18sI4GvyfMfrZQTwNXm+4/UyAviaDO94BbzjFfCOV8A7XgHveAW84xXwjlfAO14B73gFvOMV8I5XwDteAe94BbzjFfCOV8A7XgHveAW84xXwjlfAO14B73gFvOMV8I5XwDteAe94BbzjFfCOV8A7XgHveAW84xXwjlfAO14B73gFvOMV8I5XwDteAe94BbzjFfCOV8A7XgHveAW84xXwjlfAO14B73gFvOMV8I5XwDteAe94BbzjFfCOV8A7XgHveAW84xXwjlfAO14L3vFa8I7Xgne8FrzjtS70mrzgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vBa847XgHa8F73gteMdrwTteC97xWvCO14J3vDa847XhHa8N73hteMdrX+g1ecM7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94bXjHa8M7Xhve8drwjteGd7w2vOO14R2vDe94HXjH68A7Xgfe8Trwjte50GvygXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vE68I7XgXe8DrzjdeAdrwPveB14x+vAO14H3vFKeMcr4R2vhHe8Et7xygu9Jie845XwjlfCO14J73glvOOV8I5XwjteCe94JbzjlfCOV8I7XgnveCW845XwjlfCO14J73glvOOV8I5XwjteCe94JbzjlfCOV8I7XgnveCW845XwjlfCO14J73glvOOV8I5XwjteCe94JbzjlfCOV8I7XgnveCW845XwjlfCO14J73glvOOV8I5XwjteCe94JbzjlfCOV8I7XgnveCW845XwjlfCO14J73glvOOV8I5XwjteCe94JbzjlfCOV8I7XgnveCW845XwjlfCO14J73glvOOV8I5X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JpNcmExyYTLJhckkFyaTXJhMcmEyyYXJJBcmk1yYTHJhMsmFySQXJpNcmExyYTLJhckkFyaTXJhMcmEyyYXJJBcmk1yYTHJhMsmFySQXJpNcmExyYTLJhckkFyaTXJhMcmEyyYXJJBcmk1yYTHJhMsmFySRXJpNcmUxyZTLJlckk18uZgiW6QSmTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTGZ5MZkkhuTSW5MJrldzhQs0Q3KmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmdySR3JpPcmUxyZzLJ/XKmYIluUM5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwm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"},{"name":"register","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"address":[{"end":42,"start":41}],"inputs":[{"end":41,"start":0}],"keys":[{"end":51,"start":43}],"partial_address":[{"end":43,"start":42}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"partial_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::partial_address::PartialAddress"},"visibility":"private"},{"name":"keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ivpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ovpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"tpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}}],"kind":"struct","path":"aztec::keys::public_keys::PublicKeys"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":32,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":32,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404]},"bytecode":"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","debug_symbols":"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r2U0Wos0WststJZG+4s02l9OPGfzfC3RaC2N9t0Tz9nonPc6rdv2z1/sK/P3i2Mzub9Ytvy98hNP5bx65QN25dJh5b/XcmYFWH5by5yP1qKN1mKN1uKN1hKN1pKN1rL6rEW3RmsZjdYijdbSaN/VRvuuNtp3tdG+q432XW2072qjfdca7bvWaN+1RvuuNdp3rdG+a432XWu071qjfdca7bvWaN/1RvuuN9p3vdG+6432XW+073qjfdcb7bveaK/zRntdNNrrotFeF432uhNP2ajKdp/v5pcn0yeeyXn1yg125Sf+d37P/nuTM8+1PFtLNvrvcM481/J0LdJoLbPRWs7bu2aOWwWYKfPBWqzRWrzRWqLRWrLRWlaftZx5ruXpWkajtUijtcxGazlx3w23+1rGo7VYo7V4o7VEo7Vko7WsNmsZ25kHW54vZnRajHRazOy0mD6b776YPrvvvpg+2+++mD77776YPhvwvphOO/DotAOPTjvw6LQDj0478Oi0A49OO/DotAOPTjvw6LQDj047sHTagaXTDiyddmDptANLpx1YOu3A0mkHlk47sHTagc/8laac99Pv6f5gMWf+TNPzxYxOi5FOi5mdFqOdFnPmv73l7XTdXNMeLcY7LWY1WsyZP0v0fDGj02Kk02Jmp8Vop8WcuM/s/xD6+8W6Wf7zFz/9L472pTvu0gN36dlh6bfFnFgLlun9TykfLebMn0p6vpjRaTHSaTGz02K002Ks02K802Ki02Ky02I67cDeaQf2Tjuwd9qBvdMO7J12YO+0A3unHdg77cDeaQf2TjtwdNqBo9MOHJ124Oi0A0enHTg67cDRaQeOTjtwdNqBo9MOnJ124Oy0A2enHfjEM2c6tvtJz7GNR4vRTouxTovxTouJTovJTotZjRZz4tGzTyxmdFqMdFpMpx14ddqBV6cdeHXagVenHXh12oFXox14bI124LE12oHH1mgHHlujHXj/t+ROi2m0A4+t0Q48tkY78Nga7cBj67QDj0478Oi0A49OO/DotAOPTjvw6LQDj0478Oi0A49OO/DotANLpx1YOu3A0mkHlk47sHTagaXTDiyddmDptANLpx1YOu3As9MOPDvtwLPTDjw77cCz0w48O+3As9MOPDvtwLPTDjw77cDaaQfWTjuwdtqBtdMOrJ12YO20A2unHVg77cDaaQfWTjuwddqBrdMObJ12YOu0A1unHdg67cDWaQe2TjuwddqBrdMO7J12YO+0A3unHdg77cDeaQf2Tjuwd9qBvdMO7J12YO+0A0enHTg67cDRaQeOTjtwdNqBo9MOHJ124Oi0A0enHTg67cDZaQfOTjtwdtqBO52JG53OxI1OZ+JGpzNxo9OZuNHpTNzodCZudDoTNzqdiRudzsSNTmfiRqczcaPTmbjR6Uzc6HQmbnQ6Ezc6nYmTTmfipNOZOOl0Jk46nYmTrdEOLJ3OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6UycdDoTJ53OxEmnM3HS6Uzc7HQmbnY6Ezc7nYmbnc7Eza3RDjw7nYmbnc7EzU5n4manM3Gz05m42elM3Ox0Jm52OhM3O52Jm53OxM1OZ+JmpzNxs9OZuNnpTNzsdCZudjoTNzudiZudzsTNTmfiZqczcbPTmbjZ6Uzc7HQmbnY6Ezc7nYmbnc7EzU5n4manM3Gz05m42elM3Ox0Jm52OhM3O52Jm53OxM1OZ+JmpzNxs9OZuNnpTNzsdCZudjoTNzudiZudzsTNTmfiZqczcbPTmbjZ6UzcPPVMnOp9Me6PFiOdFjM7LebEHVjGvC1Ghj5ajHVaTHRaTHZazGq0mDOPoT1fzOi0mK89wLZuW4f4/PPq3O6fn9/8+et7P/+Lx2eef/745s8vFLXbW2b9LVp/i9Xf4vW3RP0tWX/LKr+lcijg9pZRf0v97mf97mf97mf97mf97mf97mf97mf97q/63V/1u7/qd3/V7/6q3/1Vv/urfvdX/e6v+t1f5buv21Z/y6i/RepvmfW3aP0tVn+L198S9bdk/S31uz/qd3/U7/6o3/1Rv/ujfvdH/e6P+t0f9bs/6nd/1O++1O++1O++1O++1O++1O++1O++1O++1O++1O++1O/+rN/9Wb/7s373Z/3uz/rdn/W7P+t3f9bv/qzf/Vm/+1q/+1q/+1q/+1q/+1q/+1q/+1q/+1q/+1q/+1q/+1a/+1a/+1a/+1a/+1a/+1a/+1a/+1a/+1a/+1a/+16/+16/+16/+16/+16/+16/+16/+16/+16/+16/+1G/+1G/+/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/Vlfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb9Vnfas+61v1Wd+qz/pWfda36rO+VZ/1rfqsb5VnfbKVZ337W0b9LVJ/y6y/RetvsfpbvP6WqL8l62+p3/1Rv/ujfvdH/e6P+t0f9bs/6nd/1O/+qN/9Ub/7o373pX73pX73pX73pX73pX73pX73pX73pX73pX73pX73Z/3uz/rdn/W7P+t3f9bv/qzf/Vm/+7N+92f97s/63df63df63df63df63df63df63df63df63df63df63bf63bf63bf63bf63bf63bf63bf63bf63bf63bf63ff63ff63ff63ff63ff63ff63ff63ff63ff63ff63Y/63Y/63Y/63Y/63Y/63Y/63Y/63Y/63Y/63Y/63c/63c/63c/63c/63c/63c/63c/63c/63c/63c/63V/1u7/qd3/V7/6q3/1Vv/urfvdX/e6v+t1f9btfn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZ36jP+kZ91jfqs75Rn/WN+qxv1Gd9oz7rG/VZn9RnfVKf9Ul91if1Wd/+L9z1t1j9LV5/S9TfkvW31O9+fdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZn9RnfVKf9Ul91if1WZ/UZ31Sn/VJfdYn9Vmf1Gd9Up/1SX3WJ/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/XN+qxv1md9sz7rm/VZ36zP+mZ91jfrs75Zn/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1aX3Wp/VZn9ZnfVqf9Wl91qf1WZ/WZ31an/Vpfdan9Vmf1md9Wp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Vl91mf1WZ/VZ31Wn/VZfdZn9Vmf1Wd9Vp/1WX3WZ/VZn9VnfVaf9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/V5fdbn9Vmf12d9Xp/1eX3W5/VZn9dnfV6f9Xl91uf1WZ/XZ31en/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1RX3WF/VZX9RnfVGf9UV91hf1WV/UZ31Rn/VFfdYX9Vlf1Gd9UZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9WV91pf1WV/WZ31Zn/VlfdaX9Vlf1md9WZ/1ZX3Wl/VZX9ZnfVmf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb9Vnfqs/6Vn3Wt+qzvlWf9a36rG/VZ32rPutb5Vnf3Mqzvv0to/4Wqb9l1t+i9bdY/S1ef0vU35L1t9Tv/qjf/VG/+6N+90f97o/63R/1uz/qd3/U7/6o3/1Rv/tSv/tSv/tSv/tSv/uPZ30ytvj9Lhkj/+GN//q3V5ut3y/e/8H4/lofD14aY/jv18bwdX+xbPng1VNvq5j5ZxHy8KVuenuth/zzF/s2f7/WN/3rS29JsSspf0+KX0n5e1LiSsrfk5JXUv6elHUl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TWTTaSKbThPZdJrIptNENp0U2XRSZNNJkU0nRTaddAOusIpsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyKbTopsOimy6aTIppMim06KbDopsumkyKaTIptOimw6KbLppMimkyGbToZsOhmy6WTIppNtwBXWkE0nQzadDNl0MmTTyZBNJ0M2nQzZdDJk08mQTSdDNp0M2XQyZNPJkE0nQzadDNl0MmTTyZBNJ0M2nQzZdDJk08mQTSdDNp0M2XQyZNPJkE0nQzadDNl0MmTTyZBNJ+tiOt2W06Rm3pbTpAreltOkrt2W06RS3ZbTpPb8Xk4Xv+i2nCb14bacJjv+bTlN9vDbcnrtyl1kn9tyeu3KXfSd23J67cpdhJzfy+li3tyW02tX/m6X5naZec5l9JzL2DmX8XMuE+dcJs+5zDrlMt/tfNwuM865zDm7gJ+zC/g5u4Cfswv4ObuAn7ML+Dm7gJ+zC9Qtgtsbx9E3ytE3zqNv1KNvtKNv9KNvjKNvzKNvXAffmEefnDz65OTRJyePPjl59MnJo09OHn1y8uiT88EZujnvY9gZ+mSjEfXbRiMa8/5q2bb7ZdYpl/ngXNrLLzPOuYycc5l5zmX0nMvYOZfxcy4T51zmnF1gnbIL+Ladc5lxzmXknMvMcy6j51zGzrnMC3aBXP77xUv9H5r0By29bHZr6cXmk1f7yts6YjP5SwB5DyDQA0j0ABZ4AGNDD2CgByDoAUz0ABQ9AEMPAL0SD/RKPNAr8UCvxIJeiQW9EssLKvHr/nHcZfZajvZajvVajvdaTvRaTvZazmq1nLn1Ws7otZxeu/LstSvPXrvy7LUrz1678uy1K89eu/LstStrk125uuwmu3d12U12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Ennhk8gLn0Re+CTywieRFz6JvPBJ5IVPIi98Ennhk8gLn0Re+CTywieRFz6JvPBJ5IVPIi98Ennhk8gLn0Re+CTywieRFz6JvPBJ5IVPIi98Ennhk8gLn0Re+CTywieRFz6JvPBJ5IVPIi98Ennhk8gLn0Re+CTywpXIC1ciL1yJvHAl8sJ1U6JYefomJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAtXIi9cibxwJfLClcgLVyIvXIm8cCXywpXIC1ciL1yJvHAl8sKVyAs3Ii/ciLxwI/LCjcgLt02JYuXpm4zICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Ii8cCPywo3ICzciL9yIvHAj8sKNyAs3Ii/ciLxwI/LCjcgLNyIv3Im8cCfywp3IC3ciL9w3JYqVp29yIi/cibxwJ/LCncgLdyIv3Im8cCfywp3IC3ciL9yJvHAn8sKdyAt3Ii/cibxwJ/LCncgLdyIv3Im8cCfywp3IC3ciL9yJvHAn8sKdyAt3Ii/cibxwJ/LCncgLdyIv3Im8cCfywp3IC3ciL9yJ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ZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSa5MJrkymeTKZJIrk0muTCa5MpnkymSSK5NJrkwmuTKZ5MpkkiuTSW5MJrkxmeTGZJIbk0lumzIFS9RBGZNJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5MZnkxmSSG5NJbkwmuTGZ5MZkkhuTSW5MJrkxmeTGZJIbk0luTCa5M5nkzmSSO5NJ7kwmuW/KFCxRB+VMJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5M5nkzmSSO5NJ7kwmuTOZ5M5kkjuTSe5MJrkzmeTOZJI7k0nuTCa5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KGPqoIypgzKmDuon9NmfC5apgzKmDsqYOihj6qCMqYNypg7KmTooZ+qgnKmD+gkX+OeCZeqgnKmDcqYOypk6KGfqoIKpgwqmDiqYOqhg6qB+Qmz+uWCZOqhg6qCCqYMKpg4qmDqoZOqgkqmDSqYOKpk6qJ+wtH8uWKYOKpk6qGTqoJKpg0qmDmoxdVCLqYNiMskHk0k+mEzywWSSDyaTfDCZ5IPJJB9MJrkwmeTCZJILk0kuTCa5bMoULFEHJUwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkwmSSC5NJLkwmuTCZ5MJkkguTSS5MJrkwmeTCZJILk0kuTCa5MJnkk8kkn0wm+WQyySeTST43ZQqWqIOaTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk3wymeSTySSfTCb5ZDLJJ5NJPplM8slkkk8mk1yZTHJlMsmVySRXJpNcN2UKlqiDUiaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyZTLJlckkVyaTXJlMcmUyyZXJJFcmk1yZTHJlMsmVySRXJpNcmUxyYzLJjckkNyaT3JhMctuUKViiDsqYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyY3JJDcmk9yYTHJjMsmNySQ3JpPcmExyYzLJjckkNyaT3JhMcmMyyZ3JJHcmk9yZTHJnMsl9U6ZgiTooZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZTHJnMsmdySR3JpPcmUxyZzLJnckkdyaT3JlMcmcyyZ3JJHcmk9yZ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ZJInkkmeSCZ5IpnkiWSSZ5JJnkkmeSaZ5JlkkufFScOCGlQmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkmeSSZ5JJnkmmeSZZJJnkkmeSSZ5JpnkmWSSZ5JJnkkmeSaZ5JlkkhvJJDeSSW4kk9xIJrktThoW1KCMZJIbySQ3kkluJJPcSCa5kUxyI5nkRjLJjWSSG8kkN5JJbiST3EgmuZFMciOZ5EYyyY1kkhvJJDeSSW4kk9xIJrmRTHIjmeRGMsmNZJIbySQ3kkluJJPcSCa5kUxyI5nkRjLJjWSSG8kkN5JJbiST3EgmuZFMciOZ5EYyyY1kkhvJJDeSSW4kk9xIJrmRTHIjmeRGMsmNZJIbySQ3kkluJJPcSCa5kUxyI5nkRjLJjWSSG8kkN5JJbiST3EgmuZFMciOZ5EYyyY1kkhvJJDeSSW4kk9xIJrmRTHIjmeRGMsmNZJIbySQ3kkluJJPcSCa5kUxyI5nkRjLJjWSSG8kkN5JJbiST3EgmuZFMciOZ5EYyyY1kkhvJJDeSSW4kk9xIJrmRTHInmeROMsmdZJI7yST3xUnDghqUk0xyJ5nkTjLJnWSSO8kkd5JJ7iST3EkmuZNMcieZ5E4yyZ1kkjvJJHeSSe4kk9xJJrmTTHInmeROMsmdZJI7ySR3kknuJJPcSSa5k0xyJ5nkTjLJnWSSO8kkd5JJ7iST3EkmuZNMcieZ5E4yyZ1kkjvJJHeSSe4kk9xJJrmTTHInmeROMsmdZJI7ySR3kknuJJPcSSa5k0xyJ5nkTjLJnWSSO8kkd5JJ7iST3EkmuZNMcieZ5E4yyZ1kkjvJJHeSSe4kk9xJJrmTTHInmeROMsmdZJI7ySR3kknuJJPcSSa5k0xyJ5nkTjLJnWSSO8kkd5JJ7iST3EkmuZNMcieZ5E4yyZ1kkjvJJHeSSe4kk9xJJrmTTHInmeROMsmdZJI7ySR3kkleSCZ5IZnkhWSSF5JJXhYnDQtqUIVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkkmeSWZ5JVkkleSSV4XJw0LalCVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSd5IJnkjmeSNZJI3kkneFicNC2pQjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSSZ5J5nknWSSd5JJ3hcnDQtqUJ1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJPkgm+SCZ5INkkg+SST4WJw0LalCDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+SST5IJvkgmeSDZJIPkkk+SCb5IJnkg2SSD5JJPkgm+SCZ5INkkg+QSV4XkEm+DstpUOuwnAa1DstpUOuwThqW06DWYTkNah2W06DWYTkNah2W1KBAJvk6LKlBgUzydVhSgwKZ5OuwpAYFMsnXYUkNCmSSr8OSGhTIJF+HJTUokEm+DktqUCCTfB2W1KBAJvk6LKlBgUzy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eSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSF5JJXkgmeSGZ5IVkkheSSV5IJnkhmeSFZJIXkkleSCZ5IZnkhWSSV5JJXkkmeSWZ5JVkktfFScOCGlQlmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkleSSV5JJnklmeSVZJJXkkleSSZ5JZnklWSSV5JJXkkmeSWZ5JVkkjeSSd5IJnkjmeSNZJK3xUnDghpUI5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJI3kkneSCZ5I5nkjWSSN5JJ3kgmeSOZ5I1kkjeSSd5IJnkjmeSNZJJ3kkneSSZ5J5nknWSS98VJw4IaVCeZ5J1kkneSSd5JJnknmeSdZJJ3kkneSSZ5J5nknWSSd5JJ3kkmeSeZ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k9jVT+LfIOfmDqB+Erv6SezqJ7Grn8SufhIX9ZO4qJ/ERf0kLuon8W9AZHMHUD+Ji/pJXNRP4qJ+Ehf1k7iqn8RV/SSu6idxVT+JfwP4mjuA+klc1U/iqn4SV/WTuKqfxE39JG7qJ3FTP4mb+kn8G4TX3AHUT2J1YyurG1tZ3djK6sZWVje2srqxldWNraxubGV1YyurG1tZ3djK6sZWVje2srqxldWNraxubGV1YyurG1tZ3djK6sZWVje2srqxldWNraxubJm6sWXqxpapG1umbmzZIn4Sm7qxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbpm5smbqxZerGlqkbW6ZubJm6sWXqxpapG1umbmyZurFl6saWqRtbrm5subqx5erGlqsbW76In8Submy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxparG1uubmy5urHl6saWqxtbrm5subqx5erGlqsbW65ubLm6seXqxlZRN7aKurFV1I2tom5slUX8JC7qxlZRN7aKurFV1I2tom5sFXVjq6gbW0Xd2CrqxlZR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"}],"outputs":{"globals":{"storage":[{"fields":[{"name":"npk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"1"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"npk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"2"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ivpk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"3"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ivpk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"4"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ovpk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"5"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ovpk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"6"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"tpk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"7"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"tpk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"8"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"partial_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::partial_address::PartialAddress"}},{"name":"keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ivpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ovpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"tpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}}],"kind":"struct","path":"aztec::keys::public_keys::PublicKeys"}}],"kind":"struct","path":"KeyRegistry::register_parameters"}}],"kind":"struct","path":"KeyRegistry::register_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"new_npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"KeyRegistry::rotate_npk_m_parameters"}}],"kind":"struct","path":"KeyRegistry::rotate_npk_m_abi"}]}},"file_map":{"104":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr","source":"#[oracle(packArgumentsArray)]\nfn pack_arguments_array_oracle<N>(_args: [Field; N]) -> Field {}\n\n#[oracle(packArguments)]\nfn pack_arguments_oracle(_args: [Field]) -> Field {}\n\n/// - Pack arguments (array version) will notify the simulator that these arguments will be used later at\n/// some point in the call. \n/// - When the external call is made later, the simulator will know what the values unpack to.\n/// - This oracle will not be required in public vm functions, as the vm will keep track of arguments \n/// itself.\nunconstrained pub fn pack_arguments_array<N>(args: [Field; N]) -> Field {\n pack_arguments_array_oracle(args)\n}\n\n/// - Pack arguments (slice version) will notify the simulator that these arguments will be used later at\n/// some point in the call. \n/// - When the external call is made later, the simulator will know what the values unpack to.\n/// - This oracle will not be required in public vm functions, as the vm will keep track of arguments \n/// itself.\nunconstrained pub fn pack_arguments(args: [Field]) -> Field {\n pack_arguments_oracle(args)\n}\n\n"},"105":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/public_call.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress};\n// TODO(6052): get new side effect counter from this call\n#[oracle(callPublicFunction)]\nfn call_public_function_oracle<RETURNS_COUNT>(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; RETURNS_COUNT] {}\n\nunconstrained pub fn call_public_function_internal<RETURNS_COUNT>(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> [Field; RETURNS_COUNT] {\n call_public_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n )\n}\n"},"111":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::traits::{Deserialize, Serialize};\n\n#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<N>(storage_slot: Field) -> [Field; N] {\n storage_read_oracle_wrapper(storage_slot)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{hash::pedersen_hash, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change.nr","source":"use dep::protocol_types::traits::{Serialize, Deserialize, FromField, ToField};\nuse dep::std::cmp::min;\n\n// This data structure is used by SharedMutable to store the minimum delay with which a ScheduledValueChange object can\n// schedule a change.\n// This delay is initally equal to INITIAL_DELAY, and can be safely mutated to any other value over time. This mutation \n// is performed via `schedule_change` in order to satisfy ScheduleValueChange constraints: if e.g. we allowed for the \n// delay to be decreased immediately then it'd be possible for the state variable to schedule a value change with a \n// reduced delay, invalidating prior private reads.\nstruct ScheduledDelayChange<INITIAL_DELAY> {\n // Both pre and post are stored in public storage, so by default they are zeroed. By wrapping them in an Option, \n // they default to Option::none(), which we detect and replace with INITIAL_DELAY. The end result is that a\n // ScheduledDelayChange that has not been initialized has a delay equal to INITIAL_DELAY, which is the desired\n // effect. Once initialized, the Option will never be none again.\n pre: Option<u32>,\n post: Option<u32>,\n // Block at which `post` value is used instead of `pre`\n block_of_change: u32,\n // The _dummy variable forces INITIAL_DELAY to be interpreted as a numeric value. This is a workaround to\n // https://github.com/noir-lang/noir/issues/4633. Remove once resolved.\n _dummy: [Field; INITIAL_DELAY],\n}\n\nimpl<INITIAL_DELAY> ScheduledDelayChange<INITIAL_DELAY> {\n pub fn new(pre: Option<u32>, post: Option<u32>, block_of_change: u32) -> Self {\n Self { pre, post, block_of_change, _dummy: [0; INITIAL_DELAY] }\n }\n\n /// Returns the current value of the delay stored in the data structure.\n /// This function only returns a meaningful value when called in public with the current block number - for\n /// historical private reads use `get_effective_minimum_delay_at` instead.\n pub fn get_current(self, current_block_number: u32) -> u32 {\n // The post value becomes the current one at the block of change, so any transaction that is included in the\n // block of change will use the post value.\n\n if current_block_number < self.block_of_change {\n self.pre.unwrap_or(INITIAL_DELAY)\n } else {\n self.post.unwrap_or(INITIAL_DELAY)\n }\n }\n\n /// Returns the scheduled change, i.e. the post-change delay and the block at which it will become the current\n /// delay. Note that this block may be in the past if the change has already taken place.\n /// Additionally, further changes might be later scheduled, potentially canceling the one returned by this function.\n pub fn get_scheduled(self) -> (u32, u32) {\n (self.post.unwrap_or(INITIAL_DELAY), self.block_of_change)\n }\n\n /// Mutates the delay change by scheduling a change at the current block number. This function is only meaningful\n /// when called in public with the current block number.\n /// The block at which the new delay will become effective is determined automatically:\n /// - when increasing the delay, the change is effective immediately\n /// - when reducing the delay, the change will take effect after a delay equal to the difference between old and\n /// new delay. For example, if reducing from 3 days to 1 day, the reduction will be scheduled to happen after 2\n /// days.\n pub fn schedule_change(&mut self, new: u32, current_block_number: u32) {\n let current = self.get_current(current_block_number);\n\n // When changing the delay value we must ensure that it is not possible to produce a value change with a delay\n // shorter than the current one.\n let blocks_until_change = if new > current {\n // Increasing the delay value can therefore be done immediately: this does not invalidate prior contraints\n // about how quickly a value might be changed (indeed it strengthens them).\n 0\n } else {\n // Decreasing the delay requires waiting for the difference between current and new delay in order to ensure\n // that overall the current delay is respected.\n //\n // current delay earliest value block of change\n // block block of change if delay remained unchanged\n // =======N=========================|================================X=================>\n // ^ ^ ^\n // |-------------------------|--------------------------------|\n // | blocks until change new delay |\n // ------------------------------------------------------------\n // current delay\n current - new\n };\n\n self.pre = Option::some(current);\n self.post = Option::some(new);\n self.block_of_change = current_block_number + blocks_until_change;\n }\n\n /// Returns the minimum delay before a value might mutate due to a scheduled change, from the perspective of some\n /// historical block number. It only returns a meaningful value when called in private with historical blocks. This \n /// function can be used alongside `ScheduledValueChange.get_block_horizon` to properly constrain the\n /// `max_block_number` transaction property when reading mutable shared state.\n /// This value typically equals the current delay at the block following the historical one (the earliest one in\n /// which a value change could be scheduled), but it also considers scenarios in which a delay reduction is \n /// scheduled to happen in the near future, resulting in a way to schedule a change with an overall delay lower than\n /// the current one.\n pub fn get_effective_minimum_delay_at(self, historical_block_number: u32) -> u32 {\n if self.block_of_change <= historical_block_number {\n // If no delay changes were scheduled, then the delay value at the historical block (post) is guaranteed to\n // hold due to how further delay changes would be scheduled by `schedule_change`.\n self.post.unwrap_or(INITIAL_DELAY)\n } else {\n // If a change is scheduled, then the effective delay might be lower than the current one (pre). At the\n // block of change the current delay will be the scheduled one, with an overall delay from the historical\n // block number equal to the number of blocks until the change plus the new delay. If this value is lower\n // than the current delay, then that is the effective minimum delay.\n //\n // historical\n // block delay actual earliest value\n // v block of change block of change\n // =========NS=====================|=============================X===========Y=====>\n // ^ ^ ^ ^\n // earliest block in | | |\n // which to schedule change | | |\n // | | | |\n // |----------------------|------------------------------ |\n // | blocks new delay |\n // | until change |\n // | |\n // |----------------------------------------------------------------|\n // current delay at the earliest block in \n // which to scheduled value change\n\n let blocks_until_change = self.block_of_change - (historical_block_number + 1);\n\n min(\n self.pre.unwrap_or(INITIAL_DELAY),\n blocks_until_change + self.post.unwrap_or(INITIAL_DELAY)\n )\n }\n }\n}\n\nimpl<INITIAL_DELAY> Serialize<1> for ScheduledDelayChange<INITIAL_DELAY> {\n fn serialize(self) -> [Field; 1] {\n // We pack all three u32 values into a single U128, which is made up of two u64 limbs.\n // Low limb: [ pre_inner: u32 | post_inner: u32 ]\n // High limb: [ empty | pre_is_some: u8 | post_is_some: u8 | block_of_change: u32 ]\n\n let lo = ((self.pre.unwrap_unchecked() as u64) * (1 << 32))\n + (self.post.unwrap_unchecked() as u64);\n\n let hi = (self.pre.is_some() as u64) * (1 << 33) \n + (self.post.is_some() as u64 * (1 << 32)) \n + self.block_of_change as u64;\n\n let packed = U128::from_u64s_le(lo, hi);\n\n [packed.to_integer()]\n }\n}\n\nimpl<INITIAL_DELAY> Deserialize<1> for ScheduledDelayChange<INITIAL_DELAY> {\n fn deserialize(input: [Field; 1]) -> Self {\n let packed = U128::from_integer(input[0]);\n\n // We use division and modulo to clear the bits that correspond to other values when unpacking.\n\n let pre_is_some = ((packed.hi as u64) / (1 << 33)) as bool;\n let pre_inner = ((packed.lo as u64) / (1 << 32)) as u32;\n\n let post_is_some = (((packed.hi as u64) / (1 << 32)) % (1 << 1)) as bool;\n let post_inner = ((packed.lo as u64) % (1 << 32)) as u32;\n\n let block_of_change = ((packed.hi as u64) % (1 << 32)) as u32;\n\n Self {\n pre: if pre_is_some { Option::some(pre_inner) } else { Option::none() },\n post: if post_is_some { Option::some(post_inner) } else { Option::none() },\n block_of_change,\n _dummy: [0; INITIAL_DELAY],\n }\n }\n}\n\nmod test {\n use crate::state_vars::shared_mutable::scheduled_delay_change::ScheduledDelayChange;\n\n global TEST_INITIAL_DELAY = 13;\n\n fn assert_equal_after_conversion(original: ScheduledDelayChange<TEST_INITIAL_DELAY>) {\n // We have to do explicit type annotations because Noir lacks turbofish support.\n // TODO: improve syntax once https://github.com/noir-lang/noir/issues/4710 is implemented.\n let converted: ScheduledDelayChange<TEST_INITIAL_DELAY> = ScheduledDelayChange::deserialize((original).serialize());\n\n assert_eq(original.pre, converted.pre);\n assert_eq(original.post, converted.post);\n assert_eq(original.block_of_change, converted.block_of_change);\n }\n\n #[test]\n fn test_serde() {\n let pre = 1;\n let post = 2;\n let block_of_change = 50;\n\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::some(pre), Option::some(post), block_of_change));\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::some(pre), Option::none(), block_of_change));\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::none(), Option::some(post), block_of_change));\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::none(), Option::none(), block_of_change));\n }\n\n #[test]\n fn test_serde_large_values() {\n let max_u32 = (1 << 32) - 1;\n\n let pre = max_u32 as u32;\n let post = (max_u32 - 1) as u32;\n let block_of_change = (max_u32 - 2) as u32;\n\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::some(pre), Option::some(post), block_of_change));\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::some(pre), Option::none(), block_of_change));\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::none(), Option::some(post), block_of_change));\n assert_equal_after_conversion(ScheduledDelayChange::new(Option::none(), Option::none(), block_of_change));\n }\n\n fn get_non_initial_delay_change(\n pre: u32,\n post: u32,\n block_of_change: u32\n ) -> ScheduledDelayChange<TEST_INITIAL_DELAY> {\n ScheduledDelayChange::new(Option::some(pre), Option::some(post), block_of_change)\n }\n\n fn get_initial_delay_change() -> ScheduledDelayChange<TEST_INITIAL_DELAY> {\n ScheduledDelayChange::deserialize([0])\n }\n\n #[test]\n fn test_get_current() {\n let pre = 1;\n let post = 2;\n let block_of_change = 50;\n\n let delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n\n assert_eq(delay_change.get_current(0), pre);\n assert_eq(delay_change.get_current(block_of_change - 1), pre);\n assert_eq(delay_change.get_current(block_of_change), post);\n assert_eq(delay_change.get_current(block_of_change + 1), post);\n }\n\n #[test]\n fn test_get_current_initial() {\n let delay_change = get_initial_delay_change();\n\n assert_eq(delay_change.get_current(0), TEST_INITIAL_DELAY);\n assert_eq(delay_change.get_current(1), TEST_INITIAL_DELAY);\n }\n\n #[test]\n fn test_get_scheduled() {\n let pre = 1;\n let post = 2;\n let block_of_change = 50;\n\n let delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n\n assert_eq(delay_change.get_scheduled(), (post, block_of_change));\n }\n\n #[test]\n fn test_get_scheduled_initial() {\n let delay_change = get_initial_delay_change();\n\n assert_eq(delay_change.get_scheduled(), (TEST_INITIAL_DELAY, 0));\n }\n\n #[test]\n fn test_schedule_change_to_shorter_delay_before_change() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let new = 10;\n let current_block_number = block_of_change - 50;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n delay_change.schedule_change(new, current_block_number);\n\n // Because we re-schedule before the last scheduled change takes effect, the old `post` value is lost. The\n // schedule time is determined by the difference between the current value (pre) and new delay.\n assert_eq(delay_change.pre.unwrap(), pre);\n assert_eq(delay_change.post.unwrap(), new);\n assert_eq(delay_change.block_of_change, current_block_number + pre - new);\n }\n\n #[test]\n fn test_schedule_change_to_shorter_delay_after_change() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let new = 10;\n let current_block_number = block_of_change + 50;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n delay_change.schedule_change(new, current_block_number);\n\n // The schedule time is determined by the different between the current value (ex post, now pre) and new delay.\n assert_eq(delay_change.pre.unwrap(), post);\n assert_eq(delay_change.post.unwrap(), new);\n assert_eq(delay_change.block_of_change, current_block_number + post - new);\n }\n\n #[test]\n fn test_schedule_change_to_shorter_delay_from_initial() {\n let new = TEST_INITIAL_DELAY - 1;\n let current_block_number = 50;\n\n let mut delay_change = get_initial_delay_change();\n delay_change.schedule_change(new, current_block_number);\n\n // Like in the after change scenario, the schedule time is determined by the difference between the current value\n // (initial) and new delay.\n assert_eq(delay_change.pre.unwrap(), TEST_INITIAL_DELAY);\n assert_eq(delay_change.post.unwrap(), new);\n assert_eq(delay_change.block_of_change, current_block_number + TEST_INITIAL_DELAY - new);\n }\n\n #[test]\n fn test_schedule_change_to_longer_delay_before_change() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let new = 40;\n let current_block_number = block_of_change - 50;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n delay_change.schedule_change(new, current_block_number);\n\n // Because we re-schedule before the last scheduled change takes effect, the old `post` value is lost. The\n // change is effective immediately because the new delay is longer than the current one.\n assert_eq(delay_change.pre.unwrap(), pre);\n assert_eq(delay_change.post.unwrap(), new);\n assert_eq(delay_change.block_of_change, current_block_number);\n assert_eq(delay_change.get_current(current_block_number), new);\n }\n\n #[test]\n fn test_schedule_change_to_longer_delay_after_change() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let new = 40;\n let current_block_number = block_of_change + 50;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n delay_change.schedule_change(new, current_block_number);\n\n // Change is effective immediately because the new delay is longer than the current one.\n assert_eq(delay_change.pre.unwrap(), post);\n assert_eq(delay_change.post.unwrap(), new);\n assert_eq(delay_change.block_of_change, current_block_number);\n assert_eq(delay_change.get_current(current_block_number), new);\n }\n\n #[test]\n fn test_schedule_change_to_longer_delay_from_initial() {\n let new = TEST_INITIAL_DELAY + 1;\n let current_block_number = 50;\n\n let mut delay_change = get_initial_delay_change();\n delay_change.schedule_change(new, current_block_number);\n\n // Like in the after change scenario, change is effective immediately because the new delay is longer than the \n // current one.\n assert_eq(delay_change.pre.unwrap(), TEST_INITIAL_DELAY);\n assert_eq(delay_change.post.unwrap(), new);\n assert_eq(delay_change.block_of_change, current_block_number);\n assert_eq(delay_change.get_current(current_block_number), new);\n }\n\n fn assert_effective_minimum_delay_invariants<INITIAL_DELAY>(\n delay_change: &mut ScheduledDelayChange<INITIAL_DELAY>,\n historical_block_number: u32,\n effective_minimum_delay: u32\n ) {\n // The effective minimum delays guarantees the earliest block in which a scheduled value change could be made\n // effective. No action, even if executed immediately after the historical block, should result in a scheduled\n // value change having a block of change lower than this.\n let expected_earliest_value_change_block = historical_block_number + 1 + effective_minimum_delay;\n\n if delay_change.block_of_change > historical_block_number {\n // If a delay change is already scheduled to happen in the future, we then must consider the scenario in\n // which a value change is scheduled to occur right as the delay changes and becomes the current one.\n let delay_change_block = delay_change.block_of_change;\n\n let value_change_block = delay_change_block + delay_change.get_current(delay_change_block);\n assert(expected_earliest_value_change_block <= value_change_block);\n }\n\n // Another possibility would be to schedule a value change immediately after the historical block.\n let change_schedule_block = historical_block_number + 1;\n let value_change_block = change_schedule_block + delay_change.get_current(change_schedule_block);\n assert(expected_earliest_value_change_block <= value_change_block);\n\n // Finally, a delay reduction could be scheduled immediately after the historical block. We reduce the delay to \n // zero, which means that at the delay block of change there'll be no delay and a value change could be \n // performed immediately then.\n delay_change.schedule_change(0, historical_block_number + 1);\n assert(expected_earliest_value_change_block <= delay_change.block_of_change);\n }\n\n #[test]\n fn test_get_effective_delay_at_before_change_in_far_future() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let historical_block_number = 200;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n\n // The scheduled delay change is far into the future (further than the current delay is), so it doesn't affect\n // the effective delay, which is simply the current one (pre).\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n assert_eq(effective_minimum_delay, pre);\n\n assert_effective_minimum_delay_invariants(\n &mut delay_change,\n historical_block_number,\n effective_minimum_delay\n );\n }\n\n #[test]\n fn test_get_effective_delay_at_before_change_to_long_delay() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let historical_block_number = 495;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n\n // The scheduled delay change will be effective soon (it's fewer blocks away than the current delay), but due to\n // it being larger than the current one it doesn't affect the effective delay, which is simply the current one\n // (pre).\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n assert_eq(effective_minimum_delay, pre);\n\n assert_effective_minimum_delay_invariants(\n &mut delay_change,\n historical_block_number,\n effective_minimum_delay\n );\n }\n\n #[test]\n fn test_get_effective_delay_at_before_near_change_to_short_delay() {\n let pre = 15;\n let post = 3;\n let block_of_change = 500;\n\n let historical_block_number = 495;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n\n // The scheduled delay change will be effective soon (it's fewer blocks away than the current delay), and it's\n // changing to a value smaller than the current one. This means that at the block of change the delay will be\n // reduced, and a delay change would be scheduled there with an overall delay lower than the current one.\n // The effective delay therefore is the new delay plus the number of blocks that need to elapse until it becomes\n // effective (i.e. until the block of change).\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n assert_eq(effective_minimum_delay, post + block_of_change - (historical_block_number + 1));\n\n assert_effective_minimum_delay_invariants(\n &mut delay_change,\n historical_block_number,\n effective_minimum_delay\n );\n }\n\n #[test]\n fn test_get_effective_delay_at_after_change() {\n let pre = 15;\n let post = 25;\n let block_of_change = 500;\n\n let historical_block_number = block_of_change + 50;\n\n let mut delay_change = get_non_initial_delay_change(pre, post, block_of_change);\n\n // No delay change is scheduled, so the effective delay is simply the current one (post).\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n assert_eq(effective_minimum_delay, post);\n\n assert_effective_minimum_delay_invariants(\n &mut delay_change,\n historical_block_number,\n effective_minimum_delay\n );\n }\n\n #[test]\n fn test_get_effective_delay_at_initial() {\n let mut delay_change = get_initial_delay_change();\n\n let historical_block_number = 200;\n\n // Like in the after change scenario, no delay change is scheduled, so the effective delay is simply the current \n // one (initial).\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n assert_eq(effective_minimum_delay, TEST_INITIAL_DELAY);\n\n assert_effective_minimum_delay_invariants(\n &mut delay_change,\n historical_block_number,\n effective_minimum_delay\n );\n }\n}\n"},"134":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change.nr","source":"use dep::protocol_types::traits::{Serialize, Deserialize, FromField, ToField};\nuse dep::std::cmp::min;\n\n// This data structure is used by SharedMutable to represent a value that changes from `pre` to `post` at some block\n// called the `block_of_change`. The value can only be made to change by scheduling a change event at some future block\n// of change after some minimum delay measured in blocks has elapsed. This means that at any given block number we know\n// both the current value and the smallest block number at which the value might change - this is called the\n// 'block horizon'.\nstruct ScheduledValueChange<T> {\n pre: T,\n post: T,\n // Block at which `post` value is used instead of `pre`\n block_of_change: u32,\n}\n\nimpl<T> ScheduledValueChange<T> {\n pub fn new(pre: T, post: T, block_of_change: u32) -> Self {\n Self { pre, post, block_of_change }\n }\n\n /// Returns the value stored in the data structure at a given block. This function can be called both in public\n /// (where `block_number` is simply the current block number, i.e. the number of the block in which the current\n /// transaction will be included) and in private (where `block_number` is the historical block number that is used\n /// to construct the proof).\n /// Reading in private is only safe if the transaction's `max_block_number` property is set to a value lower or\n /// equal to the block horizon (see `get_block_horizon()`).\n pub fn get_current_at(self, block_number: u32) -> T {\n // The post value becomes the current one at the block of change. This means different things in each realm:\n // - in public, any transaction that is included in the block of change will use the post value\n // - in private, any transaction that includes the block of change as part of the historical state will use the\n // post value (barring any follow-up changes)\n\n if block_number < self.block_of_change {\n self.pre\n } else {\n self.post\n }\n }\n\n /// Returns the scheduled change, i.e. the post-change value and the block at which it will become the current\n /// value. Note that this block may be in the past if the change has already taken place.\n /// Additionally, further changes might be later scheduled, potentially canceling the one returned by this function.\n pub fn get_scheduled(self) -> (T, u32) {\n (self.post, self.block_of_change)\n }\n\n /// Returns the largest block number at which the value returned by `get_current_at` is known to remain the current\n /// value. This value is only meaningful in private when constructing a proof at some `historical_block_number`,\n /// since due to its asynchronous nature private execution cannot know about any later scheduled changes.\n /// The caller of this function must know how quickly the value can change due to a scheduled change in the form of\n /// `minimum_delay`. If the delay itself is immutable, then this is just its duration. If the delay is mutable\n /// however, then this value is the 'effective minimum delay' (obtained by calling\n /// `ScheduledDelayChange.get_effective_minimum_delay_at`), which equals the minimum number of blocks that need to\n /// elapse from the next block until the value changes, regardless of further delay changes.\n /// The value returned by `get_current_at` in private when called with a historical block number is only safe to use\n /// if the transaction's `max_block_number` property is set to a value lower or equal to the block horizon computed\n /// using the same historical block number.\n pub fn get_block_horizon(self, historical_block_number: u32, minimum_delay: u32) -> u32 {\n // The block horizon is the very last block in which the current value is known. Any block past the horizon\n // (i.e. with a block number larger than the block horizon) may have a different current value. Reading the\n // current value in private typically requires constraining the maximum valid block number to be equal to the\n // block horizon.\n\n if historical_block_number >= self.block_of_change {\n // Once the block of change has been mined, the current value (post) will not change unless a new value\n // change is scheduled. This did not happen at the historical block number (or else it would not be\n // greater or equal to the block of change), and therefore could only happen after the historical block\n // number. The earliest would be the immediate next block, and so the smallest possible next block of change\n // equals `historical_block_number + 1 + minimum_delay`. Our block horizon is simply the previous block to\n // that one.\n //\n // block of historical\n // change block block horizon\n // =======|=============N===================H===========>\n // ^ ^\n // ---------------------\n // minimum delay\n\n historical_block_number + minimum_delay\n } else {\n // If the block of change has not yet been mined however, then there are two possible scenarios.\n // a) It could be so far into the future that the block horizon is actually determined by the minimum\n // delay, because a new change could be scheduled and take place _before_ the currently scheduled one.\n // This is similar to the scenario where the block of change is in the past: the time horizon is the\n // block prior to the earliest one in which a new block of change might land.\n //\n // historical\n // block block horizon block of change\n // =====N=================================H=================|=========>\n // ^ ^\n // | |\n // -----------------------------------\n // minimum delay\n //\n // b) It could be fewer than `minimum_delay` blocks away from the historical block number, in which case\n // the block of change would become the limiting factor for the time horizon, which would equal the\n // block right before the block of change (since by definition the value changes at the block of\n // change).\n //\n // historical block horizon\n // block block of change if not scheduled\n // =======N=============|===================H=================>\n // ^ ^ ^\n // | actual horizon |\n // -----------------------------------\n // minimum delay\n //\n // Note that the current implementation does not allow the caller to set the block of change to an arbitrary\n // value, and therefore scenario a) is not currently possible. However implementing #5501 would allow for\n // this to happen.\n\n // Because historical_block_number < self.block_of_change, then block_of_change > 0 and we can safely\n // subtract 1.\n min(\n self.block_of_change - 1,\n historical_block_number + minimum_delay\n )\n }\n }\n\n /// Mutates the value by scheduling a change at the current block number. This function is only meaningful when\n /// called in public with the current block number.\n pub fn schedule_change(\n &mut self,\n new_value: T,\n current_block_number: u32,\n minimum_delay: u32,\n block_of_change: u32\n ) {\n assert(block_of_change >= current_block_number + minimum_delay);\n\n self.pre = self.get_current_at(current_block_number);\n self.post = new_value;\n self.block_of_change = block_of_change;\n }\n}\n\nimpl<T> Serialize<3> for ScheduledValueChange<T> {\n fn serialize(self) -> [Field; 3] where T: ToField {\n [self.pre.to_field(), self.post.to_field(), self.block_of_change.to_field()]\n }\n}\n\nimpl<T> Deserialize<3> for ScheduledValueChange<T> {\n fn deserialize(input: [Field; 3]) -> Self where T: FromField {\n Self {\n pre: FromField::from_field(input[0]),\n post: FromField::from_field(input[1]),\n block_of_change: FromField::from_field(input[2]),\n }\n }\n}\n\nmod test {\n use crate::state_vars::shared_mutable::scheduled_value_change::ScheduledValueChange;\n\n global TEST_DELAY: u32 = 200;\n\n #[test]\n fn test_serde() {\n let pre = 1;\n let post = 2;\n let block_of_change = 50;\n\n let original = ScheduledValueChange::new(pre, post, block_of_change);\n let converted = ScheduledValueChange::deserialize((original).serialize());\n\n assert_eq(original.pre, converted.pre);\n assert_eq(original.post, converted.post);\n assert_eq(original.block_of_change, converted.block_of_change);\n }\n\n #[test]\n fn test_get_current_at() {\n let pre = 1;\n let post = 2;\n let block_of_change = 50;\n\n let value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(pre, post, block_of_change);\n\n assert_eq(value_change.get_current_at(0), pre);\n assert_eq(value_change.get_current_at(block_of_change - 1), pre);\n assert_eq(value_change.get_current_at(block_of_change), post);\n assert_eq(value_change.get_current_at(block_of_change + 1), post);\n }\n\n #[test]\n fn test_get_scheduled() {\n let pre = 1;\n let post = 2;\n let block_of_change = 50;\n\n let value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(pre, post, block_of_change);\n\n assert_eq(value_change.get_scheduled(), (post, block_of_change));\n }\n\n fn assert_block_horizon_invariants(\n value_change: &mut ScheduledValueChange<Field>,\n historical_block_number: u32,\n block_horizon: u32\n ) {\n // The current value should not change at the block horizon (but it might later).\n let current_at_historical = value_change.get_current_at(historical_block_number);\n assert_eq(current_at_historical, value_change.get_current_at(block_horizon));\n\n // The earliest a new change could be scheduled in would be the immediate next block to the historical one. This\n // should result in the new block of change landing *after* the block horizon, and the current value still not\n // changing at the previously determined block_horizon.\n\n let new = value_change.pre + value_change.post; // Make sure it's different to both pre and post\n value_change.schedule_change(\n new,\n historical_block_number + 1,\n TEST_DELAY,\n historical_block_number + 1 + TEST_DELAY\n );\n\n assert(value_change.block_of_change > block_horizon);\n assert_eq(current_at_historical, value_change.get_current_at(block_horizon));\n }\n\n #[test]\n fn test_get_block_horizon_change_in_past() {\n let historical_block_number = 100;\n let block_of_change = 50;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(1, 2, block_of_change);\n\n let block_horizon = value_change.get_block_horizon(historical_block_number, TEST_DELAY);\n assert_eq(block_horizon, historical_block_number + TEST_DELAY);\n\n assert_block_horizon_invariants(&mut value_change, historical_block_number, block_horizon);\n }\n\n #[test]\n fn test_get_block_horizon_change_in_immediate_past() {\n let historical_block_number = 100;\n let block_of_change = 100;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(1, 2, block_of_change);\n\n let block_horizon = value_change.get_block_horizon(historical_block_number, TEST_DELAY);\n assert_eq(block_horizon, historical_block_number + TEST_DELAY);\n\n assert_block_horizon_invariants(&mut value_change, historical_block_number, block_horizon);\n }\n\n #[test]\n fn test_get_block_horizon_change_in_near_future() {\n let historical_block_number = 100;\n let block_of_change = 120;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(1, 2, block_of_change);\n\n // Note that this is the only scenario in which the block of change informs the block horizon.\n // This may result in privacy leaks when interacting with applications that have a scheduled change\n // in the near future.\n let block_horizon = value_change.get_block_horizon(historical_block_number, TEST_DELAY);\n assert_eq(block_horizon, block_of_change - 1);\n\n assert_block_horizon_invariants(&mut value_change, historical_block_number, block_horizon);\n }\n\n #[test]\n fn test_get_block_horizon_change_in_far_future() {\n let historical_block_number = 100;\n let block_of_change = 500;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(1, 2, block_of_change);\n\n let block_horizon = value_change.get_block_horizon(historical_block_number, TEST_DELAY);\n assert_eq(block_horizon, historical_block_number + TEST_DELAY);\n\n assert_block_horizon_invariants(&mut value_change, historical_block_number, block_horizon);\n }\n\n #[test]\n fn test_get_block_horizon_n0_delay() {\n let historical_block_number = 100;\n let block_of_change = 50;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(1, 2, block_of_change);\n\n let block_horizon = value_change.get_block_horizon(historical_block_number, 0);\n // Since the block horizon equals the historical block number, it is not possible to read the current value in\n // private since the transaction `max_block_number` property would equal an already mined block.\n assert_eq(block_horizon, historical_block_number);\n }\n\n #[test]\n fn test_schedule_change_before_change() {\n let pre = 1;\n let post = 2;\n let block_of_change = 500;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(pre, post, block_of_change);\n\n let new = 42;\n let current_block_number = block_of_change - 50;\n value_change.schedule_change(\n new,\n current_block_number,\n TEST_DELAY,\n current_block_number + TEST_DELAY\n );\n\n // Because we re-schedule before the last scheduled change takes effect, the old `post` value is lost.\n assert_eq(value_change.pre, pre);\n assert_eq(value_change.post, new);\n assert_eq(value_change.block_of_change, current_block_number + TEST_DELAY);\n }\n\n #[test]\n fn test_schedule_change_after_change() {\n let pre = 1;\n let post = 2;\n let block_of_change = 500;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(pre, post, block_of_change);\n\n let new = 42;\n let current_block_number = block_of_change + 50;\n value_change.schedule_change(\n new,\n current_block_number,\n TEST_DELAY,\n current_block_number + TEST_DELAY\n );\n\n assert_eq(value_change.pre, post);\n assert_eq(value_change.post, new);\n assert_eq(value_change.block_of_change, current_block_number + TEST_DELAY);\n }\n\n #[test]\n fn test_schedule_change_no_delay() {\n let pre = 1;\n let post = 2;\n let block_of_change = 500;\n\n let mut value_change: ScheduledValueChange<Field> = ScheduledValueChange::new(pre, post, block_of_change);\n\n let new = 42;\n let current_block_number = block_of_change + 50;\n value_change.schedule_change(new, current_block_number, 0, current_block_number);\n\n assert_eq(value_change.pre, post);\n assert_eq(value_change.post, new);\n assert_eq(value_change.block_of_change, current_block_number);\n assert_eq(value_change.get_current_at(current_block_number), new);\n }\n}\n"},"135":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr","source":"use dep::protocol_types::{hash::pedersen_hash, traits::FromField};\n\nuse crate::context::{PrivateContext, PublicContext};\nuse crate::history::public_storage::public_storage_historical_read;\nuse crate::public_storage;\nuse crate::state_vars::{\n storage::Storage,\n shared_mutable::{scheduled_value_change::ScheduledValueChange, scheduled_delay_change::ScheduledDelayChange}\n};\n\nstruct SharedMutable<T, INITIAL_DELAY, Context> {\n context: Context,\n storage_slot: Field,\n}\n\n// This will make the Aztec macros require that T implements the Serialize<N> trait, and allocate N storage slots to\n// this state variable. This is incorrect, since what we actually store is:\n// - a ScheduledValueChange<T>, which requires 1 + 2 * M storage slots, where M is the serialization length of T\n// - a ScheduledDelayChange, which requires another storage slot\n//\n// TODO https://github.com/AztecProtocol/aztec-packages/issues/5736: change the storage allocation scheme so that we \n// can actually use it here\nimpl<T, INITIAL_DELAY, Context> Storage<T> for SharedMutable<T, INITIAL_DELAY, Context> {}\n\n// SharedMutable<T> stores a value of type T that is:\n// - publicly known (i.e. unencrypted)\n// - mutable in public\n// - readable in private with no contention (i.e. multiple parties can all read the same value without blocking one\n// another nor needing to coordinate)\n// This is famously a hard problem to solve. SharedMutable makes it work by introducing a delay to public mutation:\n// the value is not changed immediately but rather a value change is scheduled to happen in the future after some delay\n// measured in blocks. Reads in private are only valid as long as they are included in a block not too far into the \n// future, so that they can guarantee the value will not have possibly changed by then (because of the delay).\n// The delay for changing a value is initially equal to INITIAL_DELAY, but can be changed by calling \n// `schedule_delay_change`.\nimpl<T, INITIAL_DELAY, Context> SharedMutable<T, INITIAL_DELAY, Context> {\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n\n // Since we can't rely on the native storage allocation scheme, we hash the storage slot to get a unique location in\n // which we can safely store as much data as we need. \n // See https://github.com/AztecProtocol/aztec-packages/issues/5492 and \n // https://github.com/AztecProtocol/aztec-packages/issues/5736\n fn get_value_change_storage_slot(self) -> Field {\n pedersen_hash([self.storage_slot, 0], 0)\n }\n\n fn get_delay_change_storage_slot(self) -> Field {\n pedersen_hash([self.storage_slot, 1], 0)\n }\n}\n\nimpl<T, INITIAL_DELAY> SharedMutable<T, INITIAL_DELAY, &mut PublicContext> {\n pub fn schedule_value_change(self, new_value: T) {\n let mut value_change = self.read_value_change();\n let delay_change = self.read_delay_change();\n\n let block_number = self.context.block_number() as u32;\n let current_delay = delay_change.get_current(block_number);\n\n // TODO: make this configurable\n // https://github.com/AztecProtocol/aztec-packages/issues/5501\n let block_of_change = block_number + current_delay;\n value_change.schedule_change(new_value, block_number, current_delay, block_of_change);\n\n self.write_value_change(value_change);\n }\n\n pub fn schedule_delay_change(self, new_delay: u32) {\n let mut delay_change = self.read_delay_change();\n\n let block_number = self.context.block_number() as u32;\n\n delay_change.schedule_change(new_delay, block_number);\n\n self.write_delay_change(delay_change);\n }\n\n pub fn get_current_value_in_public(self) -> T {\n let block_number = self.context.block_number() as u32;\n self.read_value_change().get_current_at(block_number)\n }\n\n pub fn get_current_delay_in_public(self) -> u32 {\n let block_number = self.context.block_number() as u32;\n self.read_delay_change().get_current(block_number)\n }\n\n pub fn get_scheduled_value_in_public(self) -> (T, u32) {\n self.read_value_change().get_scheduled()\n }\n\n pub fn get_scheduled_delay_in_public(self) -> (u32, u32) {\n self.read_delay_change().get_scheduled()\n }\n\n fn read_value_change(self) -> ScheduledValueChange<T> {\n public_storage::read(self.get_value_change_storage_slot())\n }\n\n fn read_delay_change(self) -> ScheduledDelayChange<INITIAL_DELAY> {\n public_storage::read(self.get_delay_change_storage_slot())\n }\n\n fn write_value_change(self, value_change: ScheduledValueChange<T>) {\n public_storage::write(self.get_value_change_storage_slot(), value_change);\n }\n\n fn write_delay_change(self, delay_change: ScheduledDelayChange<INITIAL_DELAY>) {\n public_storage::write(self.get_delay_change_storage_slot(), delay_change);\n }\n}\n\nimpl<T, INITIAL_DELAY> SharedMutable<T, INITIAL_DELAY, &mut PrivateContext> {\n pub fn get_current_value_in_private(self) -> T where T: FromField {\n // When reading the current value in private we construct a historical state proof for the public value.\n // However, since this value might change, we must constrain the maximum transaction block number as this proof\n // will only be valid for however many blocks we can ensure the value will not change, which will depend on the\n // current delay and any scheduled delay changes.\n\n let (value_change, delay_change, historical_block_number) = self.historical_read_from_public_storage(*self.context);\n\n // We use the effective minimum delay as opposed to the current delay at the historical block as this one also\n // takes into consideration any scheduled delay changes. \n // For example, consider a scenario in which at block 200 the current delay was 50. We may naively think that\n // the earliest we could change the value would be at block 251 by scheduling immediately after the historical\n // block, i.e. at block 201. But if there was a delay change scheduled for block 210 to reduce the delay to 20 \n // blocks, then if a value change was scheduled at block 210 it would go into effect at block 230, which is \n // earlier than what we'd expect if we only considered the current delay.\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n let block_horizon = value_change.get_block_horizon(historical_block_number, effective_minimum_delay);\n\n // We prevent this transaction from being included in any block after the block horizon, ensuring that the \n // historical public value matches the current one, since it can only change after the horizon.\n self.context.set_tx_max_block_number(block_horizon);\n value_change.get_current_at(historical_block_number)\n }\n\n fn historical_read_from_public_storage(\n self,\n context: PrivateContext\n ) -> (ScheduledValueChange<T>, ScheduledDelayChange<INITIAL_DELAY>, u32) where T: FromField {\n // Ideally the following would be simply public_storage::read_historical, but we can't implement that yet.\n let value_change_slot = self.get_value_change_storage_slot();\n let mut raw_value_change_fields = [0; 3];\n for i in 0..3 {\n raw_value_change_fields[i] = public_storage_historical_read(\n context,\n value_change_slot + i as Field,\n context.this_address()\n );\n }\n\n // Ideally the following would be simply public_storage::read_historical, but we can't implement that yet.\n let delay_change_slot = self.get_delay_change_storage_slot();\n let raw_delay_change_fields = [public_storage_historical_read(context, delay_change_slot, context.this_address())];\n\n let value_change = ScheduledValueChange::deserialize(raw_value_change_fields);\n let delay_change = ScheduledDelayChange::deserialize(raw_delay_change_fields);\n\n let historical_block_number = context.historical_header.global_variables.block_number as u32;\n\n (value_change, delay_change, historical_block_number)\n }\n}\n\nmod test {\n use dep::std::{merkle::compute_merkle_root, test::OracleMock};\n\n use crate::{\n context::{PublicContext, PrivateContext},\n state_vars::shared_mutable::{\n shared_mutable::SharedMutable, scheduled_value_change::ScheduledValueChange,\n scheduled_delay_change::ScheduledDelayChange\n },\n oracle::get_public_data_witness::PublicDataWitness\n };\n\n use dep::protocol_types::{\n constants::{GENERATOR_INDEX__PUBLIC_LEAF_INDEX, PUBLIC_DATA_TREE_HEIGHT}, hash::pedersen_hash,\n address::AztecAddress, public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage\n };\n\n global pre_value = 13;\n global post_value = 42;\n\n global new_value = 57;\n\n global pre_delay = 20;\n global post_delay = 15;\n\n global TEST_INITIAL_DELAY = 3;\n\n fn setup() -> (SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>, Field) {\n let block_number = 40;\n let context = create_context(block_number);\n\n let storage_slot = 57;\n let state_var = SharedMutable::new(context, storage_slot);\n\n (state_var, block_number)\n }\n\n fn create_context(block_number: Field) -> &mut PublicContext {\n let mut public_context = PublicContext::empty();\n public_context.inputs.public_global_variables.block_number = block_number;\n &mut public_context\n }\n\n fn mock_value_change_read(\n state_var: SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>,\n pre: Field,\n post: Field,\n block_of_change: Field\n ) {\n let value_change_slot = state_var.get_value_change_storage_slot();\n let fields = ScheduledValueChange::new(pre, post, block_of_change as u32).serialize();\n\n let _ = OracleMock::mock(\"storageRead\").with_params((value_change_slot, 3)).returns(fields).times(1);\n }\n\n fn mock_delay_change_read(\n state_var: SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>,\n pre: Field,\n post: Field,\n block_of_change: Field\n ) {\n let delay_change_slot = state_var.get_delay_change_storage_slot();\n let delay_change: ScheduledDelayChange<TEST_INITIAL_DELAY> = ScheduledDelayChange::new(\n Option::some(pre as u32),\n Option::some(post as u32),\n block_of_change as u32\n );\n let fields = delay_change.serialize();\n\n let _ = OracleMock::mock(\"storageRead\").with_params((delay_change_slot, 1)).returns(fields).times(1);\n }\n\n fn mock_delay_change_read_uninitialized(state_var: SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>) {\n let delay_change_slot = state_var.get_delay_change_storage_slot();\n let _ = OracleMock::mock(\"storageRead\").with_params((delay_change_slot, 1)).returns([0]).times(1);\n }\n\n // Useful since change and delay values are always the global pre/post ones, so we typically only care about their\n // block of change.\n fn mock_value_and_delay_read(\n state_var: SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>,\n value_block_of_change: Field,\n delay_block_of_change: Field\n ) {\n mock_value_change_read(state_var, pre_value, post_value, value_block_of_change);\n mock_delay_change_read(state_var, pre_delay, post_delay, delay_block_of_change);\n }\n\n fn mock_value_change_write() -> OracleMock {\n OracleMock::mock(\"storageWrite\").returns([0; 3])\n }\n\n fn mock_delay_change_write() -> OracleMock {\n OracleMock::mock(\"storageWrite\").returns([0; 1])\n }\n\n fn assert_value_change_write(\n state_var: SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>,\n mock: OracleMock,\n pre: Field,\n post: Field,\n block_of_change: Field\n ) {\n let fields = ScheduledValueChange::new(pre, post, block_of_change as u32).serialize();\n assert_eq(mock.get_last_params(), (state_var.get_value_change_storage_slot(), fields));\n }\n\n fn assert_delay_change_write(\n state_var: SharedMutable<Field, TEST_INITIAL_DELAY, &mut PublicContext>,\n mock: OracleMock,\n pre: Field,\n post: Field,\n block_of_change: Field\n ) {\n let delay_change: ScheduledDelayChange<TEST_INITIAL_DELAY> = ScheduledDelayChange::new(\n Option::some(pre as u32),\n Option::some(post as u32),\n block_of_change as u32\n );\n\n let fields = delay_change.serialize();\n assert_eq(mock.get_last_params(), (state_var.get_delay_change_storage_slot(), fields));\n }\n\n #[test]\n fn test_get_current_value_in_public() {\n let (state_var, block_number) = setup();\n\n // Change in the future, current value is pre\n mock_value_change_read(state_var, pre_value, post_value, block_number + 1);\n assert_eq(state_var.get_current_value_in_public(), pre_value);\n\n // Change in the current block, current value is post\n mock_value_change_read(state_var, pre_value, post_value, block_number);\n assert_eq(state_var.get_current_value_in_public(), post_value);\n\n // Change in the past, current value is post\n mock_value_change_read(state_var, pre_value, post_value, block_number - 1);\n assert_eq(state_var.get_current_value_in_public(), post_value);\n }\n\n #[test]\n fn test_get_scheduled_value_in_public() {\n let (state_var, block_number) = setup();\n\n // Change in the future, scheduled is post (always is)\n mock_value_change_read(state_var, pre_value, post_value, block_number + 1);\n assert_eq(state_var.get_scheduled_value_in_public(), (post_value, (block_number + 1) as u32));\n\n // Change in the current block, scheduled is post (always is)\n mock_value_change_read(state_var, pre_value, post_value, block_number);\n assert_eq(state_var.get_scheduled_value_in_public(), (post_value, block_number as u32));\n\n // Change in the past, scheduled is post (always is)\n mock_value_change_read(state_var, pre_value, post_value, block_number - 1);\n assert_eq(state_var.get_scheduled_value_in_public(), (post_value, (block_number - 1) as u32));\n }\n\n #[test]\n fn test_get_current_delay_in_public() {\n let (state_var, block_number) = setup();\n\n // Uninitialized\n mock_delay_change_read_uninitialized(state_var);\n assert_eq(state_var.get_current_delay_in_public(), TEST_INITIAL_DELAY as u32);\n\n // Change in the future, current value is pre\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number + 1);\n assert_eq(state_var.get_current_delay_in_public(), pre_delay as u32);\n\n // Change in the current block, current value is post\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number);\n assert_eq(state_var.get_current_delay_in_public(), post_delay as u32);\n\n // Change in the past, current value is post\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number - 1);\n assert_eq(state_var.get_current_delay_in_public(), post_delay as u32);\n }\n\n #[test]\n fn test_get_scheduled_delay_in_public_before_change() {\n let (state_var, block_number) = setup();\n\n // Uninitialized\n mock_delay_change_read_uninitialized(state_var);\n assert_eq(state_var.get_scheduled_delay_in_public(), (TEST_INITIAL_DELAY as u32, 0));\n\n // Change in the future, scheduled is post (always is)\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number + 1);\n assert_eq(state_var.get_scheduled_delay_in_public(), (post_delay as u32, (block_number + 1) as u32));\n\n // Change in the current block, scheduled is post (always is)\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number);\n assert_eq(state_var.get_scheduled_delay_in_public(), (post_delay as u32, block_number as u32));\n\n // Change in the past, scheduled is post (always is)\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number - 1);\n assert_eq(state_var.get_scheduled_delay_in_public(), (post_delay as u32, (block_number - 1) as u32));\n }\n\n #[test]\n fn test_schedule_value_change_no_delay() {\n let (state_var, block_number) = setup();\n\n // Last value change was in the past\n mock_value_change_read(state_var, pre_value, post_value, 0);\n\n // Current delay is 0\n mock_delay_change_read(state_var, 0, 0, block_number);\n\n let write_mock = mock_value_change_write();\n\n state_var.schedule_value_change(new_value);\n\n // The new value has a block of change equal to the current block, i.e. it is the current value\n assert_value_change_write(state_var, write_mock, post_value, new_value, block_number);\n }\n\n #[test]\n fn test_schedule_value_change_before_change_no_scheduled_delay() {\n let (state_var, block_number) = setup();\n\n // Value change in the future, delay change in the past\n mock_value_and_delay_read(state_var, block_number + 1, block_number - 1);\n let write_mock = mock_value_change_write();\n\n state_var.schedule_value_change(new_value);\n\n // The new scheduled value change replaces the old one, post delay (current) is used\n assert_value_change_write(\n state_var,\n write_mock,\n pre_value,\n new_value,\n block_number + post_delay\n );\n }\n\n #[test]\n fn test_schedule_value_change_before_change_scheduled_delay() {\n let (state_var, block_number) = setup();\n\n // Value change in the future, delay change in the future\n mock_value_and_delay_read(state_var, block_number + 1, block_number + 1);\n\n let write_mock = mock_value_change_write();\n\n state_var.schedule_value_change(new_value);\n\n // The new scheduled value change replaces the old one, pre delay (current, not scheduled) is used\n assert_value_change_write(\n state_var,\n write_mock,\n pre_value,\n new_value,\n block_number + pre_delay\n );\n }\n\n #[test]\n fn test_schedule_value_change_after_change_no_scheduled_delay() {\n let (state_var, block_number) = setup();\n\n // Value change in the past, delay change in the past\n mock_value_and_delay_read(state_var, block_number - 1, block_number - 1);\n let write_mock = mock_value_change_write();\n\n state_var.schedule_value_change(new_value);\n\n // The previous post value becomes the pre value, post delay (current) is used\n assert_value_change_write(\n state_var,\n write_mock,\n post_value,\n new_value,\n block_number + post_delay\n );\n }\n\n #[test]\n fn test_schedule_value_change_after_change_scheduled_delay() {\n let (state_var, block_number) = setup();\n\n // Value change in the past, delay change in the future\n mock_value_and_delay_read(state_var, block_number - 1, block_number + 1);\n\n let write_mock = mock_value_change_write();\n\n state_var.schedule_value_change(new_value);\n\n // The previous post value becomes the pre value, pre delay (current, not scheduled) is used\n assert_value_change_write(\n state_var,\n write_mock,\n post_value,\n new_value,\n block_number + pre_delay\n );\n }\n\n #[test]\n fn test_schedule_delay_increase_before_change() {\n let (state_var, block_number) = setup();\n\n // Delay change in future, current delay is pre\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number + 1);\n let write_mock = mock_delay_change_write();\n\n let new_delay = pre_delay + 1;\n state_var.schedule_delay_change(new_delay as u32);\n\n // The previous scheduled change is lost, change is immediate (due to increase)\n assert_delay_change_write(state_var, write_mock, pre_delay, new_delay, block_number);\n }\n\n #[test]\n fn test_schedule_delay_reduction_before_change() {\n let (state_var, block_number) = setup();\n\n // Delay change in future, current delay is pre\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number + 1);\n let write_mock = mock_delay_change_write();\n\n let new_delay = pre_delay - 1;\n state_var.schedule_delay_change(new_delay as u32);\n\n // The previous scheduled change is lost, change delay equals difference (due to reduction)\n assert_delay_change_write(\n state_var,\n write_mock,\n pre_delay,\n new_delay,\n block_number + pre_delay - new_delay\n );\n }\n\n #[test]\n fn test_schedule_delay_increase_after_change() {\n let (state_var, block_number) = setup();\n\n // Delay change in the past, current delay is post\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number - 1);\n let write_mock = mock_delay_change_write();\n\n let new_delay = post_delay + 1;\n state_var.schedule_delay_change(new_delay as u32);\n\n // The current value becomes pre, change is immediate (due to increase)\n assert_delay_change_write(state_var, write_mock, post_delay, new_delay, block_number);\n }\n\n #[test]\n fn test_schedule_delay_reduction_after_change() {\n let (state_var, block_number) = setup();\n\n // Delay change in the past, current delay is post\n mock_delay_change_read(state_var, pre_delay, post_delay, block_number - 1);\n let write_mock = mock_delay_change_write();\n\n let new_delay = post_delay - 1;\n state_var.schedule_delay_change(new_delay as u32);\n\n // The current value becomes pre, change delay equals difference (due to reduction)\n assert_delay_change_write(\n state_var,\n write_mock,\n post_delay,\n new_delay,\n block_number + post_delay - new_delay\n );\n }\n\n #[test]\n fn test_get_current_value_in_private_before_change() {\n // Here we'd want to test that the private getter returns the correct value and sets max_block_number in the\n // context to the expected block horizon, in all the possible scenarios (long before change, before near change,\n // after change).\n // However, this requires mocking the getPublicDataTreeWitness oracle so that we can convince the circuit that\n // it got a valid historical proof. Because we can set the tree root to whatever we want in the context, this is\n // trivial for a single historical value (we add a leaf and compute the root with any random path), but is quite\n // hard if we're reading more than one value for the same root (as SharedMutable does): we essentially need to\n // create an actual indexed tree and compute the correct path for each of the inserted values.\n // TODO: implement an actual tree and use it here https://github.com/AztecProtocol/aztec-packages/issues/5494\n }\n}\n"},"161":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr","source":"use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize, FromField, ToField, Empty};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FromField for FunctionSelector {\n fn from_field(field: Field) -> Self {\n Self { inner: field as u32 }\n }\n}\n\nimpl ToField for FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n}\n\nimpl Empty for FunctionSelector {\n fn empty() -> Self {\n Self { inner: 0 as u32 }\n }\n}\n\nimpl FunctionSelector {\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n"},"199":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr","source":"use crate::traits::{Serialize, Deserialize};\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\nglobal U8_SERIALIZED_LEN: Field = 1;\nglobal U32_SERIALIZED_LEN: Field = 1;\nglobal U64_SERIALIZED_LEN: Field = 1;\nglobal U128_SERIALIZED_LEN: Field = 1;\nglobal FIELD_SERIALIZED_LEN: Field = 1;\n\nimpl Serialize<BOOL_SERIALIZED_LEN> for bool {\n fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<BOOL_SERIALIZED_LEN> for bool {\n fn deserialize(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Serialize<U8_SERIALIZED_LEN> for u8 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U8_SERIALIZED_LEN> for u8 {\n fn deserialize(fields: [Field; U8_SERIALIZED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Serialize<U32_SERIALIZED_LEN> for u32 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U32_SERIALIZED_LEN> for u32 {\n fn deserialize(fields: [Field; U32_SERIALIZED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Serialize<U64_SERIALIZED_LEN> for u64 {\n fn serialize(self) -> [Field; U64_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U64_SERIALIZED_LEN> for u64 {\n fn deserialize(fields: [Field; U64_SERIALIZED_LEN]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Serialize<U128_SERIALIZED_LEN> for U128 {\n fn serialize(self) -> [Field; 1] {\n [self.to_integer()]\n }\n\n}\n\nimpl Deserialize<U128_SERIALIZED_LEN> for U128 {\n fn deserialize(fields: [Field; U128_SERIALIZED_LEN]) -> Self {\n U128::from_integer(fields[0])\n }\n}\n\nimpl Serialize<FIELD_SERIALIZED_LEN> for Field {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self]\n }\n}\n\nimpl Deserialize<FIELD_SERIALIZED_LEN> for Field {\n fn deserialize(fields: [Field; FIELD_SERIALIZED_LEN]) -> Self {\n fields[0]\n }\n}\n"},"200":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use dep::std::cmp::Eq;\nuse crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<N> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<N> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n"},"208":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::address::{AztecAddress, EthAddress};\nuse crate::recursion::verification_key::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::ContractClassId;\nuse crate::abis::log_hash::{LogHash, NoteLogHash};\nuse crate::traits::is_empty;\nuse crate::utils::{uint256::U256, field::field_from_bytes_32_trunc};\nuse crate::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};\nuse crate::traits::Hash;\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\nuse crate::merkle_tree::root::root_from_sibling_path;\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn compute_note_hash_nonce(first_nullifier: Field, note_hash_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n note_hash_index 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 pedersen_hash(\n [\n nonce,\n note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn silo_note_hash(address: AztecAddress, unique_note_hash: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes = input[offset].to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly. \npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [NoteLogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<N>(inputs: [Field; N]) -> Field {\n dep::std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5, counter: 1234 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n"},"22":{"path":"std/field.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\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 pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\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 = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\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 num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 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\n"},"229":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<N>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes = field.to_be_bytes(31);\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2 = field.to_be_bytes(31);\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n"},"244":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash([pub_keys_hash.to_field(), partial_address.to_field(), GENERATOR_INDEX__CONTRACT_ADDRESS_V1])\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x1b6ead051e7b42665064ca6cf1ec77da0a36d86e00d1ff6e44077966c0c3a9fa;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"28":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\nglobal RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n\n pub fn hash<N>(input: [Field; N], message_size: u64) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) -> [Field; RATE] {\n // zero-pad the cache\n for i in 0..RATE {\n if i >= self.cache_size {\n self.cache[i] = 0;\n }\n }\n // add the cache into sponge state\n for i in 0..RATE {\n self.state[i] += self.cache[i];\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n // return `RATE` number of field elements from the sponge state.\n let mut result = [0; RATE];\n for i in 0..RATE {\n result[i] = self.state[i];\n }\n result\n }\n\n fn absorb(&mut self, input: Field) {\n if (!self.squeeze_mode) & (self.cache_size == RATE) {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n let _ = self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else if (!self.squeeze_mode) & (self.cache_size != RATE) {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n } else if self.squeeze_mode {\n // If we're in squeeze mode, switch to absorb mode and add the input into the cache.\n // N.B. I don't think this code path can be reached?!\n self.cache[0] = input;\n self.cache_size = 1;\n self.squeeze_mode = false;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n if self.squeeze_mode & (self.cache_size == 0) {\n // If we're in squeze mode and the cache is empty, there is nothing left to squeeze out of the sponge!\n // Switch to absorb mode.\n self.squeeze_mode = false;\n self.cache_size = 0;\n }\n if !self.squeeze_mode {\n // If we're in absorb mode, apply sponge permutation to compress the cache, populate cache with compressed\n // state and switch to squeeze mode. Note: this code block will execute if the previous `if` condition was\n // matched\n let new_output_elements = self.perform_duplex();\n self.squeeze_mode = true;\n for i in 0..RATE {\n self.cache[i] = new_output_elements[i];\n }\n self.cache_size = RATE;\n }\n // By this point, we should have a non-empty cache. Pop one item off the top of the cache and return it.\n let result = self.cache[0];\n for i in 1..RATE {\n if i < self.cache_size {\n self.cache[i - 1] = self.cache[i];\n }\n }\n self.cache_size -= 1;\n self.cache[self.cache_size] = 0;\n result\n }\n\n fn hash_internal<N>(input: [Field; N], in_len: u64, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field)*18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field){\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher {\n _state: &[],\n }\n }\n}\n"},"306":{"path":"/usr/src/noir-projects/noir-contracts/contracts/key_registry_contract/src/main.nr","source":"contract KeyRegistry {\n use dep::authwit::auth::assert_current_call_valid_authwit_public;\n\n use dep::aztec::{\n keys::PublicKeys, state_vars::{SharedMutable, Map},\n protocol_types::{grumpkin_point::GrumpkinPoint, address::{AztecAddress, PartialAddress}}\n };\n\n global KEY_ROTATION_DELAY = 5;\n\n #[aztec(storage)]\n struct Storage {\n // The following stores a hash of individual master public keys\n // If you change slots of vars below, you must update the slots in `SharedMutablePrivateGetter` in aztec-nr/keys.\n // We store x and y coordinates in individual shared mutables as shared mutable currently supports only 1 field\n npk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n npk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n\n ivpk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n ivpk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n \n ovpk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n ovpk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n \n tpk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n tpk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n }\n\n #[aztec(public)]\n fn rotate_npk_m(address: AztecAddress, new_npk_m: GrumpkinPoint, nonce: Field) {\n // TODO: (#6137)\n if (!address.eq(context.msg_sender())) {\n assert_current_call_valid_authwit_public(&mut context, address);\n } else {\n assert(nonce == 0, \"invalid nonce\");\n }\n\n let npk_m_x_registry = storage.npk_m_x_registry.at(address);\n let npk_m_y_registry = storage.npk_m_y_registry.at(address);\n npk_m_x_registry.schedule_value_change(new_npk_m.x);\n npk_m_y_registry.schedule_value_change(new_npk_m.y);\n }\n\n #[aztec(public)]\n fn register(address: AztecAddress, partial_address: PartialAddress, keys: PublicKeys) {\n let computed_address = AztecAddress::compute(keys.hash(), partial_address);\n\n assert(computed_address.eq(address), \"Computed address does not match supplied address\");\n\n let npk_m_x_registry = storage.npk_m_x_registry.at(address);\n let npk_m_y_registry = storage.npk_m_y_registry.at(address);\n let ivpk_m_x_registry = storage.ivpk_m_x_registry.at(address);\n let ivpk_m_y_registry = storage.ivpk_m_y_registry.at(address);\n // let ovpk_m_x_registry = storage.ovpk_m_x_registry.at(address);\n // let ovpk_m_y_registry = storage.ovpk_m_y_registry.at(address);\n // let tpk_m_x_registry = storage.tpk_m_x_registry.at(address);\n // let tpk_m_y_registry = storage.tpk_m_y_registry.at(address);\n\n npk_m_x_registry.schedule_value_change(keys.npk_m.x);\n npk_m_y_registry.schedule_value_change(keys.npk_m.y);\n ivpk_m_x_registry.schedule_value_change(keys.ivpk_m.x);\n ivpk_m_y_registry.schedule_value_change(keys.ivpk_m.y);\n // Commented out as we hit the max enqueued public calls limit when not done so\n // ovpk_m_x_registry.schedule_value_change(ovpk_m.x);\n // ovpk_m_y_registry.schedule_value_change(ovpk_m.y);\n // tpk_m_x_registry.schedule_value_change(tpk_m.x);\n // tpk_m_y_registry.schedule_value_change(tpk_m.y);\n }\n}\n"},"35":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\nstruct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::unsafe::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<N, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<U, Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else {\n if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n"},"4":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\nstruct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: u64,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: u64) -> T {\n assert(index < self.len);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: u64) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn len(self) -> u64 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u64 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_bounded_vec<Len>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n pub fn from_array<Len>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::unsafe::zeroed();\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}\n\nimpl<T, MaxLen> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n \n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, MaxLen, Len> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n // TODO: Allow imports from \"super\"\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n}\n"},"43":{"path":"std/uint128.nr","source":"use crate::ops::{Add, Sub, Mul, Div, Rem, Not, BitOr, BitAnd, BitXor, Shl, Shr};\nuse crate::cmp::{Eq, Ord, Ordering};\nuse crate::println;\n\nglobal pow64 : Field = 18446744073709551616; //2^64;\nglobal pow63 : Field = 9223372036854775808; // 2^63;\nstruct U128 {\n lo: Field,\n hi: Field,\n}\n\nimpl U128 {\n\n pub fn from_u64s_le(lo: u64, hi: u64) -> U128 {\n // in order to handle multiplication, we need to represent the product of two u64 without overflow\n assert(crate::field::modulus_num_bits() as u32 > 128);\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo, hi)\n }\n\n pub fn zero() -> U128 {\n U128 { lo: 0, hi: 0 }\n }\n\n pub fn one() -> U128 {\n U128 { lo: 1, hi: 0 }\n }\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 { lo, hi }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1;\n if N <= 18 {\n for i in 0..N - 2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N - 1 {\n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n unconstrained fn uconstrained_check_is_upper_ascii(ascii: u8) -> bool {\n ((ascii >= 65) & (ascii <= 90)) // Between 'A' and 'Z'\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else {\n let ascii = ascii + 32 * (U128::uconstrained_check_is_upper_ascii(ascii) as u8);\n assert(ascii >= 97); // enforce >= 'a'\n assert(ascii <= 102); // enforce <= 'f'\n ascii - 87\n } as Field\n }\n\n // TODO: Replace with a faster version. \n // A circuit that uses this function can be slow to compute\n // (we're doing up to 127 calls to compute the quotient)\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if b == U128::zero() {\n // Return 0,0 to avoid eternal loop\n (U128::zero(), U128::zero())\n } else if self < b {\n (U128::zero(), self)\n } else if self == b {\n (U128::one(), U128::zero())\n } else {\n let (q,r) = if b.hi as u64 >= pow63 as u64 {\n // The result of multiplication by 2 would overflow\n (U128::zero(), self)\n } else {\n self.unconstrained_div(b * U128::from_u64s_le(2, 0))\n };\n let q_mul_2 = q * U128::from_u64s_le(2, 0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::one(), r - b)\n }\n }\n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f - lo) / pow64;\n U128 { lo, hi }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo + self.hi * pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo * b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = self.lo * b.hi + self.hi * b.lo + carry;\n let hi = high as u64 as Field;\n U128 { lo, hi }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with underflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl Not for U128 { \n fn not(self) -> U128 {\n U128 {\n lo: (!(self.lo as u64)) as Field,\n hi: (!(self.hi as u64)) as Field\n }\n }\n}\n\nimpl BitOr for U128 { \n fn bitor(self, other: U128) -> U128 {\n U128 {\n lo: ((self.lo as u64) | (other.lo as u64)) as Field,\n hi: ((self.hi as u64) | (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitAnd for U128 {\n fn bitand(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) & (other.lo as u64)) as Field,\n hi: ((self.hi as u64) & (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitXor for U128 {\n fn bitxor(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) ^ (other.lo as u64)) as Field,\n hi: ((self.hi as u64) ^ (other.hi as u64)) as Field\n }\n }\n}\n\nimpl Shl for U128 { \n fn shl(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift left with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self.wrapping_mul(U128::from_integer(y))\n } \n}\n\nimpl Shr for U128 { \n fn shr(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift right with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self / U128::from_integer(y)\n } \n}\n\nmod tests {\n use crate::uint128::{U128, pow64, pow63};\n\n #[test]\n fn test_not() {\n let num = U128::from_u64s_le(0, 0);\n let not_num = num.not();\n\n let max_u64: Field = pow64 - 1;\n assert_eq(not_num.hi, max_u64);\n assert_eq(not_num.lo, max_u64);\n\n let not_not_num = not_num.not();\n assert_eq(num, not_not_num);\n }\n\n #[test]\n fn test_construction() {\n // Check little-endian u64 is inversed with big-endian u64 construction\n let a = U128::from_u64s_le(2, 1);\n let b = U128::from_u64s_be(1, 2);\n assert_eq(a, b);\n // Check byte construction is equivalent\n let c = U128::from_le_bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n let d = U128::from_u64s_le(0x0706050403020100, 0x0f0e0d0c0b0a0908);\n assert_eq(c, d);\n }\n\n #[test]\n fn test_byte_decomposition() {\n let a = U128::from_u64s_le(0x0706050403020100, 0x0f0e0d0c0b0a0908);\n // Get big-endian and little-endian byte decompostions\n let le_bytes_a= a.to_le_bytes();\n let be_bytes_a= a.to_be_bytes();\n\n // Check equivalence\n for i in 0..16 {\n assert_eq(le_bytes_a[i], be_bytes_a[15 - i]);\n }\n // Reconstruct U128 from byte decomposition\n let b= U128::from_le_bytes(le_bytes_a);\n // Check that it's the same element\n assert_eq(a, b);\n }\n\n #[test]\n fn test_hex_constuction() {\n let a = U128::from_u64s_le(0x1, 0x2);\n let b = U128::from_hex(\"0x20000000000000001\");\n assert_eq(a, b);\n\n let c= U128::from_hex(\"0xffffffffffffffffffffffffffffffff\");\n let d= U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff);\n assert_eq(c, d);\n\n let e= U128::from_hex(\"0x00000000000000000000000000000000\");\n let f= U128::from_u64s_le(0, 0);\n assert_eq(e, f);\n }\n\n // Ascii decode tests\n\n #[test]\n fn test_ascii_decode_correct_range() {\n // '0'..'9' range\n for i in 0..10 {\n let decoded= U128::decode_ascii(48 + i);\n assert_eq(decoded, i as Field);\n }\n // 'A'..'F' range\n for i in 0..6 {\n let decoded = U128::decode_ascii(65 + i);\n assert_eq(decoded, (i + 10) as Field);\n }\n // 'a'..'f' range\n for i in 0..6 {\n let decoded = U128::decode_ascii(97 + i);\n assert_eq(decoded, (i + 10) as Field);\n }\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_less_than_48_fails_0() {\n crate::println(U128::decode_ascii(0));\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_less_than_48_fails_1() {\n crate::println(U128::decode_ascii(47));\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_58_64_fails_0() {\n let _ = U128::decode_ascii(58);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_58_64_fails_1() {\n let _ = U128::decode_ascii(64);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_71_96_fails_0() {\n let _ = U128::decode_ascii(71);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_71_96_fails_1() {\n let _ = U128::decode_ascii(96);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_greater_than_102_fails() {\n let _ = U128::decode_ascii(103);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_regression() {\n // This code will actually fail because of ascii_decode,\n // but in the past it was possible to create a value > (1<<128)\n let a = U128::from_hex(\"0x~fffffffffffffffffffffffffffffff\");\n let b:Field= a.to_integer();\n let c= b.to_le_bytes(17);\n assert(c[16] != 0);\n }\n\n #[test]\n fn test_unconstrained_div() {\n // Test the potential overflow case\n let a= U128::from_u64s_le(0x0, 0xffffffffffffffff);\n let b= U128::from_u64s_le(0x0, 0xfffffffffffffffe);\n let c= U128::one();\n let d= U128::from_u64s_le(0x0, 0x1);\n let (q,r) = a.unconstrained_div(b);\n assert_eq(q, c);\n assert_eq(r, d);\n\n let a = U128::from_u64s_le(2, 0);\n let b = U128::one();\n // Check the case where a is a multiple of b\n let (c,d ) = a.unconstrained_div(b);\n assert_eq((c, d), (a, U128::zero()));\n\n // Check where b is a multiple of a\n let (c,d) = b.unconstrained_div(a);\n assert_eq((c, d), (U128::zero(), b));\n\n // Dividing by zero returns 0,0\n let a = U128::from_u64s_le(0x1, 0x0);\n let b = U128::zero();\n let (c,d)= a.unconstrained_div(b);\n assert_eq((c, d), (U128::zero(), U128::zero()));\n\n // Dividing 1<<127 by 1<<127 (special case)\n let a = U128::from_u64s_le(0x0, pow63 as u64);\n let b = U128::from_u64s_le(0x0, pow63 as u64);\n let (c,d )= a.unconstrained_div(b);\n assert_eq((c, d), (U128::one(), U128::zero()));\n }\n\n #[test]\n fn integer_conversions() {\n // Maximum\n let start:Field = 0xffffffffffffffffffffffffffffffff;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // Minimum\n let start:Field = 0x0;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // Low limb\n let start:Field = 0xffffffffffffffff;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // High limb\n let start:Field = 0xffffffffffffffff0000000000000000;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n }\n #[test]\n fn test_wrapping_mul() {\n // 1*0==0\n assert_eq(U128::zero(), U128::zero().wrapping_mul(U128::one()));\n\n // 0*1==0\n assert_eq(U128::zero(), U128::one().wrapping_mul(U128::zero()));\n\n // 1*1==1\n assert_eq(U128::one(), U128::one().wrapping_mul(U128::one()));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(U128::zero(), U128::zero().wrapping_mul(U128::from_u64s_le(0, 1)));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(U128::zero(), U128::from_u64s_le(0, 1).wrapping_mul(U128::zero()));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(U128::from_u64s_le(0, 1), U128::from_u64s_le(0, 1).wrapping_mul(U128::one()));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(U128::from_u64s_le(0, 1), U128::one().wrapping_mul(U128::from_u64s_le(0, 1)));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(U128::zero(), U128::from_u64s_le(0, 1).wrapping_mul(U128::from_u64s_le(0, 1)));\n // -1 * -1 == 1\n assert_eq(\n U128::one(), U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff).wrapping_mul(U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff))\n );\n }\n}\n"},"50":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER}, hash::pedersen_hash\n};\nuse dep::aztec::{\n prelude::Deserialize,\n context::{PrivateContext, PublicContext, gas::GasOpts, interface::{ContextInterface, PublicContextInterface}},\n hash::hash_args_array\n};\n\nglobal IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256(\"IS_VALID()\")\n\n// docs:start:assert_current_call_valid_authwit\n// Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let function_selector = FunctionSelector::from_signature(\"spend_private_authwit(Field)\");\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n let result: Field = context.call_private_function(on_behalf_of, function_selector, [inner_hash]).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n// docs:end:assert_current_call_valid_authwit\n\n// docs:start:assert_current_call_valid_authwit_public\n// Assert that `on_behalf_of` have authorized the current call in a public context\npub fn assert_current_call_valid_authwit_public<TPublicContext>(\n context: &mut TPublicContext,\n on_behalf_of: AztecAddress\n) where TPublicContext: ContextInterface + PublicContextInterface {\n let function_selector = FunctionSelector::from_signature(\"spend_public_authwit(Field)\");\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n let result: Field = PublicContextInterface::call_public_function(\n context,\n on_behalf_of,\n function_selector,\n [inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n// docs:start:compute_call_authwit_hash\n// Compute the message hash to be used by an authentication witness \npub fn compute_call_authwit_hash<N>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_outer_authwit_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_call_authwit_hash\n\npub fn compute_inner_authwit_hash<N>(args: [Field; N]) -> Field {\n pedersen_hash(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\npub fn compute_outer_authwit_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n pedersen_hash(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n"},"61":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH, hash::poseidon2_hash,\n grumpkin_point::GrumpkinPoint, traits::{Deserialize, Serialize}\n};\nuse crate::keys::constants::{NUM_KEY_TYPES, NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX};\n\nglobal PUBLIC_KEYS_LENGTH = 8;\n\nstruct PublicKeys {\n npk_m: GrumpkinPoint,\n ivpk_m: GrumpkinPoint,\n ovpk_m: GrumpkinPoint,\n tpk_m: GrumpkinPoint,\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n poseidon2_hash(\n [\n self.npk_m.x,\n self.npk_m.y,\n self.ivpk_m.x,\n self.ivpk_m.y,\n self.ovpk_m.x,\n self.ovpk_m.y,\n self.tpk_m.x,\n self.tpk_m.y,\n GENERATOR_INDEX__PUBLIC_KEYS_HASH\n ]\n )\n )\n }\n\n pub fn get_key_by_index(self, index: Field) -> GrumpkinPoint {\n assert(index as u8 < NUM_KEY_TYPES, \"Invalid key index\");\n if index == NULLIFIER_INDEX {\n self.npk_m\n } else if index == INCOMING_INDEX {\n self.ivpk_m\n } else if index == OUTGOING_INDEX {\n self.ovpk_m\n } else {\n self.tpk_m\n }\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.x,\n self.npk_m.y,\n self.ivpk_m.x,\n self.ivpk_m.y,\n self.ovpk_m.x,\n self.ovpk_m.y,\n self.tpk_m.x,\n self.tpk_m.y,\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: GrumpkinPoint { x: serialized[0], y: serialized[1] },\n ivpk_m: GrumpkinPoint { x: serialized[2], y: serialized[3] },\n ovpk_m: GrumpkinPoint { x: serialized[4], y: serialized[5] },\n tpk_m: GrumpkinPoint { x: serialized[6], y: serialized[7] },\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: GrumpkinPoint { x: 1, y: 2 },\n ivpk_m: GrumpkinPoint { x: 3, y: 4 },\n ovpk_m: GrumpkinPoint { x: 5, y: 6 },\n tpk_m: GrumpkinPoint { x: 7, y: 8 }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x1936abe4f6a920d16a9f6917f10a679507687e2cd935dd1f1cdcb1e908c027f3;\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: GrumpkinPoint { x: 1, y: 2 },\n ivpk_m: GrumpkinPoint { x: 3, y: 4 },\n ovpk_m: GrumpkinPoint { x: 5, y: 6 },\n tpk_m: GrumpkinPoint { x: 7, y: 8 }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.x, deserialized.npk_m.x);\n assert_eq(keys.npk_m.y, deserialized.npk_m.y);\n assert_eq(keys.ivpk_m.x, deserialized.ivpk_m.x);\n assert_eq(keys.ivpk_m.y, deserialized.ivpk_m.y);\n assert_eq(keys.ovpk_m.x, deserialized.ovpk_m.x);\n assert_eq(keys.ovpk_m.y, deserialized.ovpk_m.y);\n assert_eq(keys.tpk_m.x, deserialized.tpk_m.x);\n assert_eq(keys.tpk_m.y, deserialized.tpk_m.y);\n}\n"},"62":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/public_storage.nr","source":"use dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::oracle::storage::{storage_read, storage_write};\n\npub fn read<T, N>(storage_slot: Field) -> T where T: Deserialize<N> {\n T::deserialize(storage_read(storage_slot))\n}\n\npub fn write<T, N>(storage_slot: Field, value: T) where T: Serialize<N> {\n storage_write(storage_slot, value.serialize());\n}\n\n// Ideally we'd do the following, but we cannot because of https://github.com/noir-lang/noir/issues/4633\n// pub fn read_historical<T, N>(\n// storage_slot: Field,\n// context: PrivateContext\n// ) -> T where T: Deserialize<N> {\n// let mut fields = [0; N];\n// for i in 0..N {\n// fields[i] = public_storage_historical_read(\n// context,\n// storage_slot + i as Field,\n// context.this_address()\n// );\n// }\n// T::deserialize(fields)\n// }\n\nmod tests {\n use dep::std::test::OracleMock;\n use dep::protocol_types::traits::{Deserialize, Serialize};\n use crate::public_storage;\n\n struct TestStruct {\n a: Field,\n b: Field,\n }\n\n impl Deserialize<2> for TestStruct {\n fn deserialize(fields: [Field; 2]) -> TestStruct {\n TestStruct { a: fields[0], b: fields[1] }\n }\n }\n\n impl Serialize<2> for TestStruct {\n fn serialize(self) -> [Field; 2] {\n [self.a, self.b]\n }\n }\n\n #[test]\n fn test_read() {\n let slot = 7;\n let written = TestStruct { a: 13, b: 42 };\n\n OracleMock::mock(\"storageRead\").with_params((slot, 2)).returns(written.serialize());\n\n let read: TestStruct = public_storage::read(slot);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n\n #[test]\n fn test_write() {\n let slot = 7;\n let to_write = TestStruct { a: 13, b: 42 };\n\n let mock = OracleMock::mock(\"storageWrite\").returns([0; 2]); // The return value is unused\n\n public_storage::write(slot, to_write);\n assert_eq(mock.get_last_params(), (slot, to_write.serialize()));\n }\n}\n"},"80":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/public_context.nr","source":"use crate::{\n context::{\n inputs::PublicContextInputs, interface::ContextInterface, interface::PublicContextInterface,\n gas::GasOpts\n},\n messaging::process_l1_to_l2_message,\n oracle::{arguments, public_call::call_public_function_internal, returns, logs_traits::ToBytesForUnencryptedLog},\n hash::{hash_args, ArgsHasher, compute_unencrypted_log_hash}\n};\nuse dep::protocol_types::{\n abis::{\n function_selector::FunctionSelector, public_circuit_public_inputs::PublicCircuitPublicInputs,\n read_request::ReadRequest, note_hash::NoteHash, nullifier::Nullifier, log_hash::LogHash\n},\n hash::silo_nullifier, address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest}, header::Header,\n messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::{Deserialize, Empty}\n};\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_hash : Field,\n\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n nullifier_non_existent_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL>,\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n\n new_note_hashes: BoundedVec<NoteHash, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<Nullifier, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n new_l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n PublicContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n args_hash,\n return_hash: 0,\n nullifier_read_requests: BoundedVec::new(),\n nullifier_non_existent_read_requests: BoundedVec::new(),\n contract_storage_update_requests: BoundedVec::new(),\n contract_storage_reads: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n historical_header: inputs.historical_header,\n prover_address: AztecAddress::zero()\n }\n }\n\n pub fn call_public_function_no_args<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> FunctionReturns<RETURNS_COUNT> {\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<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> FunctionReturns<RETURNS_COUNT> {\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<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> FunctionReturns<RETURNS_COUNT> {\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<RETURNS_COUNT>(\n self: &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 ) -> FunctionReturns<RETURNS_COUNT> {\n let side_effect_counter = self.side_effect_counter;\n // TODO(6052): get next value from output of `call_public_function_internal`\n self.side_effect_counter += 1;\n\n let raw_returns = call_public_function_internal(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n FunctionReturns::new(raw_returns)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n returns::pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n // Keep private or ask the AVM team if you want to change it.\n 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 // Keep private or ask the AVM team if you want to change it.\n fn push_nullifier_non_existent_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_non_existent_read_requests.push(request);\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n nullifier_read_requests: self.nullifier_read_requests.storage,\n nullifier_non_existent_read_requests: self.nullifier_non_existent_read_requests.storage,\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n returns_hash: self.return_hash,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_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 unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.inputs.historical_header,\n global_variables: self.inputs.public_global_variables,\n prover_address: self.prover_address,\n revert_code: 0,\n start_gas_left: self.inputs.gas_left,\n end_gas_left: self.inputs.gas_left, // AVM should decrease this value\n transaction_fee: self.inputs.transaction_fee\n };\n pub_circuit_pub_inputs\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 ContextInterface for PublicContext {\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.public_global_variables.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.public_global_variables.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_new_note_hash(&mut self, note_hash: Field) {\n self.new_note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, _nullified_note_hash: Field) {\n self.new_nullifiers.push(Nullifier {\n value: nullifier,\n note_hash: 0, // cannot nullify pending notes in public context\n counter: self.next_counter()\n });\n }\n}\n\nimpl PublicContextInterface for PublicContext {\n fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n fn timestamp(self) -> u64 {\n self.inputs.public_global_variables.timestamp\n }\n\n fn coinbase(self) -> EthAddress {\n assert(false, \"'coinbase' not implemented!\");\n EthAddress::zero()\n }\n\n fn fee_recipient(self) -> AztecAddress {\n assert(false, \"'fee_recipient' not implemented!\");\n AztecAddress::zero()\n }\n\n fn fee_per_da_gas(self) -> Field {\n self.inputs.public_global_variables.gas_fees.fee_per_da_gas\n }\n\n fn fee_per_l2_gas(self) -> Field {\n self.inputs.public_global_variables.gas_fees.fee_per_l2_gas\n }\n\n fn transaction_fee(self) -> Field {\n self.inputs.transaction_fee\n }\n\n fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool {\n // Current public can only check for settled nullifiers, so we always silo.\n let siloed_nullifier = silo_nullifier(address, unsiloed_nullifier);\n nullifier_exists_oracle(siloed_nullifier) == 1\n }\n\n fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.new_l2_to_l1_msgs.push(message);\n }\n\n // We can consume message with a secret in public context because the message cannot be modified and therefore\n // there is no front-running risk (e.g. somebody could front run you to claim your tokens to your address).\n // Leaf index is not used in public context, but it is used in the AVMContext which will replace it.\n fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress, _leaf_index: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n this,\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_new_nullifier(nullifier, 0)\n }\n\n fn emit_unencrypted_log<T, N, M>(&mut self, log: T) where T: ToBytesForUnencryptedLog<N, M> {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let log_slice = log.to_be_bytes_arr();\n let log_hash = compute_unencrypted_log_hash(\n contract_address,\n event_selector,\n log\n );\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n let len = 44 + log_slice.len().to_field();\n let side_effect = LogHash { value: log_hash, counter: self.next_counter(), length: len };\n self.unencrypted_logs_hashes.push(side_effect);\n // Call oracle to broadcast log\n let _void = emit_unencrypted_log_oracle(contract_address, event_selector, log, side_effect.counter);\n }\n\n fn call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field],\n _gas: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n fn static_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field],\n _gas: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n fn delegate_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field]\n ) -> FunctionReturns<RETURNS_COUNT> {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n}\n\nimpl Empty for PublicContext {\n fn empty() -> Self {\n PublicContext {\n inputs: PublicContextInputs::empty(),\n side_effect_counter: 0 as u32,\n args_hash : 0,\n return_hash : 0,\n nullifier_read_requests: BoundedVec::new(),\n nullifier_non_existent_read_requests: BoundedVec::new(),\n contract_storage_update_requests: BoundedVec::new(),\n contract_storage_reads: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n historical_header: Header::empty(),\n prover_address: AztecAddress::zero(),\n }\n }\n}\n\n#[oracle(checkNullifierExists)]\nfn nullifier_exists_oracle(nullifier: Field) -> Field {}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(\n _contract_address: AztecAddress,\n _event_selector: Field,\n _message: T,\n _counter: u32\n) -> Field {}\n\nstruct FunctionReturns<N> {\n values: [Field; N]\n}\n\nimpl<N> FunctionReturns<N> {\n pub fn new(values: [Field; N]) -> FunctionReturns<N> {\n FunctionReturns { values }\n }\n\n pub fn assert_empty(returns: FunctionReturns<0>) {\n assert(returns.values.len() == 0);\n }\n\n pub fn raw(self) -> [Field; N] {\n self.values\n }\n\n pub fn deserialize_into<T>(self) -> T where T: Deserialize<N> {\n Deserialize::deserialize(self.raw())\n }\n}\n"},"99":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH\n},\n traits::Hash, hash::{pedersen_hash, silo_nullifier, sha256_to_field}\n};\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n pedersen_hash([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, N, M>(\n contract_address: AztecAddress,\n event_selector: Field,\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 event_bytes = event_selector.to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[32 + i] = event_bytes[i];\n }\n let len_bytes = (n as Field).to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[36 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[40 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n pedersen_hash(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub fn compute_siloed_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n silo_nullifier(address, nullifier)\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&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<N>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH);\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..800 {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x05a1023fef839ac88731f49ae983e172c1b600a3c8f3393ad0ac25d819ac0f0f);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00846d6969c8c2f61d39cd2762efcb0abb14f88d59c2675910251ef2bcffe9a7);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00880a801230ea08c98a802a11b4786cba474513875f0fc69a615e81c5f9f21c);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00a78b5347813624ecfd26e5b8bc6146f418b0cfcc8296b5112d09b8ebba9496);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x001f3390ea242afee7ce46dafdbdc4bd4f1cf20cd63850d12d60ff9956712c4f);\n}\n"}}}
1
+ {"transpiled":true,"noir_version":"0.30.0+a2f687687559d15fde52abce54838f6e144a0aa4","name":"KeyRegistry","functions":[{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/+2b227aQBCG18RJTJ24YGMMgQQIyUXvDA2nO16mfe3eV+orVM2YnTJsp2hRx1tWYqWIsb2e/5t/D1jICdSuRe9/gY6v9eeN+rNhn63+LP+tzQRzlXVyBp5wNjzhvPKEMxTkDBhO+Ax1DOsO1tytOlyPv9tWqChTlELBBLoi19URwIMboUU6oBfHUuDrcnNDklNwpcFDfQ0/ASfW1yhYrIus+pBzWGiDnEOdK3IOd0bUibQpwvUuoj2yXN73CQA1NHUu5I5JTK8NiXVhTTVey9f4VsuYlLtVjGNyrXPfkmP0Cj0U/OaYUe1A/zWJptJjhPGA9MV+6EeDjDG0e7Wf180j94XGfQnpc8PUPxau/9bgMecsjEFLx204xj2BsH0g9W1l2ErIG8vnndExCHVu5I9JTYm43/M15L9Th838VhqTOCE89+I85ayeOndj95Gwy+RdvIFXLcOrO8OrhPShDK0a/AuILubG4xajLefFcg3abQsv2gxP27EXbUZb0IsNaKcWXqQMT+rYi5TRlvNi9Rm0MwsvMoYnc+xFxmjLeTGvni06Fl50GJ6OYy86jLbgGqnmRW7hRc7w5I69yBltQS++gnbXwosuw9N17EWX0Rb04gtoFxZeFAxP4diLgtEW3Dur54uehRc9hqfn2Iseoy3oxRy0+xZe9BmevmMv+oy24BqptB8svHhgeB4ce4F6pzJ3PGQuPGTOzoA5MmIZ7WW1fw4svBgwPAPHXtDfck5hzs+AOTJiGe3lArSHFl4MGZ6hYy9Q71Tm1EPmzEPmrofMuYfMhYfM5zCfIyOW0V5Ve+ijhRePDM+jYy9Q71Tm1EPmgYfM2RkwR0Yso72qfpt7svDiieF5cuwF6p3K3POQuX0GzJERy2ivlqA9svBixPCMHHuBeqcy9z1kLjxkHnjInHnI3PWQOfeQ+bIG3TCnZ8AM773gOzA/auWZb2KDBz1TBqMyGGMSJ4QR+26V3PsqiVE7ak3E/diNjzlf8HhSq/Z8DXmn8jVVz/IvOhe+wzdlanrVcSDs5wvJGxAdPB+S+Dvpi/3QD1y3yA7vXD3r+PXIfSPjvoT0eWbqHwvXPzV4pgYzjMk3wlHH3LKZ1y21X8ufCE8N++AbfScXm82+Q/cYQZ5ZTXWW9B2+n0p2TU8Mr5qGVwnpQ/fo/7VvXpgvzH9jps8TTXKO8uC5hlEL/f+GCcnxC57ToyHuNQAA","debug_symbols":"ndpBattQGIXRvWgciu8vPT0pWymlOIlTDMYOsVMoJnuv3dIF9Mz0JN3ZNzq86/Cye/r48X1/fD2dh8ev1+Fwet5e9qfj7XQdNl9q+fP2/LY93l+cL9v3y/A49noYdseX+1P/fBhe94fd7Xlsn98e7qMVRuNGRpFRyWiU0SSjJqNZRl1GUsQoRUxSxCRFTFLEJEVMUsQkRUxSxCRFTFLEJEU0KaJJEU2KaFJEkyKaFNGkiCZFNCmiSRGzFDFLEbMUMUsRsxQxSxGzFDFLEbMUMUsRXYroUkSXIroU0aWILkV0KaJLEV2K6FLEIkUsUsQiRSxSxCJFLFLEIkUsUsQiRSxSxCpFrFLEKkWsUsQqRaxSxCpFrFLEKkWsUkQ2G1qFVkWrkVYTrRqtZlp1Wi20ojZCbYTaCLURaiPURqiNUBuhNkJthNooaqOojaI2itooaqOojaI2itog0AyJZog0Q6YZQs2QaoZYM+SaIdgMyWaINkO2GcLNkG6GeDPkmyHgDAlniDhDxhlCzpByhpgz5Jwh6AxJZ4g6Q9YZws6Qdoa4M+SdIfAMiWeIPEPmGULPkHqG2DPkniH4DMlniD5D9hnCz5B+hvgz5J8hAA0JaIhAQwYaQtCQgoYYNOSgIQgNSWiIQkMWGsLQkIaGODTkoSEQDYloiERDJhpC0ZCKhlg05KJFLlrkokUuWuSiRS5a5KJFLlrkokUuWuSiRS5a5KJFLlrkokUuWuSiRS5a5KJFLlrkokUuWuSiRS5a5KJFLlrkokUuWuSiZRc9yUWLXLTIRYtctMhFi1y0yEXrv130dvq5fd9vnw67+93e+8eP4/O/q7634+XX298vt39/Aw=="},{"name":"rotate_npk_m","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"new_npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"}],"return_type":null},"bytecode":"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","debug_symbols":"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4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzlsK4rylIM5bCuK8pSDOWwrivKUgzltK4rylJM5bSuK8pSTOW8rC66tJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lMR5S0mct5TEeUtJnLeUxHlLSZy3lK/lLYWvaFLqwShd8+XinnmAfBl5/eD+uLbK7udaWy/uXtrjapUVvVKjb9TojRq9U6MPavSdGH1/LcGIBL1Qo2d2q16Y3aoXZrfqhdmtemF2q16Y3aq/lmhEgv4Cr/2g7yZdCjF2IcZeibErMfZGjN2IsTsx9iDGnsTYiX21EvtqJfbVSuyrldhXK7GvVmJfrcS+Wol9tRL7aiX2VSX2VSX2VSX2VSX2VSX2VSX2VSX2VSX2VSX2VSX21Ubsq43YVxuxrzZiX23EvtqIfbUR+2oj9tVG7KuN2FeN2FeN2FeN2FeN2FeN2FeN2FeN2FeN2FeN2FeN2Fed2Fed2Fed2Fed2Fed2Fed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"},{"name":"register","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"partial_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::partial_address::PartialAddress"},"visibility":"private"},{"name":"keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ivpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ovpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"tpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}}],"kind":"struct","path":"aztec::keys::public_keys::PublicKeys"},"visibility":"private"}],"return_type":null},"bytecode":"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","debug_symbols":"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"}],"outputs":{"globals":{"storage":[{"fields":[{"name":"npk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"1"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"npk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"2"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ivpk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"3"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ivpk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"4"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ovpk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"5"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"ovpk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"6"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"tpk_m_x_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"7"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}},{"name":"tpk_m_y_registry","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"8"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY, Context>, Context>"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"new_npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"KeyRegistry::rotate_npk_m_parameters"}}],"kind":"struct","path":"KeyRegistry::rotate_npk_m_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"partial_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::partial_address::PartialAddress"}},{"name":"keys","type":{"fields":[{"name":"npk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ivpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"ovpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"tpk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}}],"kind":"struct","path":"aztec::keys::public_keys::PublicKeys"}}],"kind":"struct","path":"KeyRegistry::register_parameters"}}],"kind":"struct","path":"KeyRegistry::register_abi"}]}},"file_map":{"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::traits::{Deserialize, Serialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<N>(storage_slot: Field) -> [Field; N] {\n storage_read_oracle_wrapper(storage_slot)\n}\n\n#[oracle(storageWrite)]\nunconstrained fn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n"},"136":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{hash::pedersen_hash, storage::map::derive_storage_slot_in_map, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n"},"145":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change.nr","source":"use dep::protocol_types::traits::{Serialize, Deserialize, FromField, ToField};\nuse dep::std::cmp::min;\n\nmod test;\n\n// This data structure is used by SharedMutable to store the minimum delay with which a ScheduledValueChange object can\n// schedule a change.\n// This delay is initally equal to INITIAL_DELAY, and can be safely mutated to any other value over time. This mutation \n// is performed via `schedule_change` in order to satisfy ScheduleValueChange constraints: if e.g. we allowed for the \n// delay to be decreased immediately then it'd be possible for the state variable to schedule a value change with a \n// reduced delay, invalidating prior private reads.\nstruct ScheduledDelayChange<INITIAL_DELAY> {\n // Both pre and post are stored in public storage, so by default they are zeroed. By wrapping them in an Option, \n // they default to Option::none(), which we detect and replace with INITIAL_DELAY. The end result is that a\n // ScheduledDelayChange that has not been initialized has a delay equal to INITIAL_DELAY, which is the desired\n // effect. Once initialized, the Option will never be none again.\n pre: Option<u32>,\n post: Option<u32>,\n // Block at which `post` value is used instead of `pre`\n block_of_change: u32,\n // The _dummy variable forces INITIAL_DELAY to be interpreted as a numeric value. This is a workaround to\n // https://github.com/noir-lang/noir/issues/4633. Remove once resolved.\n _dummy: [Field; INITIAL_DELAY],\n}\n\nimpl<INITIAL_DELAY> ScheduledDelayChange<INITIAL_DELAY> {\n pub fn new(pre: Option<u32>, post: Option<u32>, block_of_change: u32) -> Self {\n Self { pre, post, block_of_change, _dummy: [0; INITIAL_DELAY] }\n }\n\n /// Returns the current value of the delay stored in the data structure.\n /// This function only returns a meaningful value when called in public with the current block number - for\n /// historical private reads use `get_effective_minimum_delay_at` instead.\n pub fn get_current(self, current_block_number: u32) -> u32 {\n // The post value becomes the current one at the block of change, so any transaction that is included in the\n // block of change will use the post value.\n\n if current_block_number < self.block_of_change {\n self.pre.unwrap_or(INITIAL_DELAY)\n } else {\n self.post.unwrap_or(INITIAL_DELAY)\n }\n }\n\n /// Returns the scheduled change, i.e. the post-change delay and the block at which it will become the current\n /// delay. Note that this block may be in the past if the change has already taken place.\n /// Additionally, further changes might be later scheduled, potentially canceling the one returned by this function.\n pub fn get_scheduled(self) -> (u32, u32) {\n (self.post.unwrap_or(INITIAL_DELAY), self.block_of_change)\n }\n\n /// Mutates the delay change by scheduling a change at the current block number. This function is only meaningful\n /// when called in public with the current block number.\n /// The block at which the new delay will become effective is determined automatically:\n /// - when increasing the delay, the change is effective immediately\n /// - when reducing the delay, the change will take effect after a delay equal to the difference between old and\n /// new delay. For example, if reducing from 3 days to 1 day, the reduction will be scheduled to happen after 2\n /// days.\n pub fn schedule_change(&mut self, new: u32, current_block_number: u32) {\n let current = self.get_current(current_block_number);\n\n // When changing the delay value we must ensure that it is not possible to produce a value change with a delay\n // shorter than the current one.\n let blocks_until_change = if new > current {\n // Increasing the delay value can therefore be done immediately: this does not invalidate prior contraints\n // about how quickly a value might be changed (indeed it strengthens them).\n 0\n } else {\n // Decreasing the delay requires waiting for the difference between current and new delay in order to ensure\n // that overall the current delay is respected.\n //\n // current delay earliest value block of change\n // block block of change if delay remained unchanged\n // =======N=========================|================================X=================>\n // ^ ^ ^\n // |-------------------------|--------------------------------|\n // | blocks until change new delay |\n // ------------------------------------------------------------\n // current delay\n current - new\n };\n\n self.pre = Option::some(current);\n self.post = Option::some(new);\n self.block_of_change = current_block_number + blocks_until_change;\n }\n\n /// Returns the minimum delay before a value might mutate due to a scheduled change, from the perspective of some\n /// historical block number. It only returns a meaningful value when called in private with historical blocks. This \n /// function can be used alongside `ScheduledValueChange.get_block_horizon` to properly constrain the\n /// `max_block_number` transaction property when reading mutable shared state.\n /// This value typically equals the current delay at the block following the historical one (the earliest one in\n /// which a value change could be scheduled), but it also considers scenarios in which a delay reduction is \n /// scheduled to happen in the near future, resulting in a way to schedule a change with an overall delay lower than\n /// the current one.\n pub fn get_effective_minimum_delay_at(self, historical_block_number: u32) -> u32 {\n if self.block_of_change <= historical_block_number {\n // If no delay changes were scheduled, then the delay value at the historical block (post) is guaranteed to\n // hold due to how further delay changes would be scheduled by `schedule_change`.\n self.post.unwrap_or(INITIAL_DELAY)\n } else {\n // If a change is scheduled, then the effective delay might be lower than the current one (pre). At the\n // block of change the current delay will be the scheduled one, with an overall delay from the historical\n // block number equal to the number of blocks until the change plus the new delay. If this value is lower\n // than the current delay, then that is the effective minimum delay.\n //\n // historical\n // block delay actual earliest value\n // v block of change block of change\n // =========NS=====================|=============================X===========Y=====>\n // ^ ^ ^ ^\n // earliest block in | | |\n // which to schedule change | | |\n // | | | |\n // |----------------------|------------------------------ |\n // | blocks new delay |\n // | until change |\n // | |\n // |----------------------------------------------------------------|\n // current delay at the earliest block in \n // which to scheduled value change\n\n let blocks_until_change = self.block_of_change - (historical_block_number + 1);\n\n min(\n self.pre.unwrap_or(INITIAL_DELAY),\n blocks_until_change + self.post.unwrap_or(INITIAL_DELAY)\n )\n }\n }\n}\n\nimpl<INITIAL_DELAY> Serialize<1> for ScheduledDelayChange<INITIAL_DELAY> {\n fn serialize(self) -> [Field; 1] {\n // We pack all three u32 values into a single U128, which is made up of two u64 limbs.\n // Low limb: [ pre_inner: u32 | post_inner: u32 ]\n // High limb: [ empty | pre_is_some: u8 | post_is_some: u8 | block_of_change: u32 ]\n\n let lo = ((self.pre.unwrap_unchecked() as u64) * (1 << 32))\n + (self.post.unwrap_unchecked() as u64);\n\n let hi = (self.pre.is_some() as u64) * (1 << 33) \n + (self.post.is_some() as u64 * (1 << 32)) \n + self.block_of_change as u64;\n\n let packed = U128::from_u64s_le(lo, hi);\n\n [packed.to_integer()]\n }\n}\n\nimpl<INITIAL_DELAY> Deserialize<1> for ScheduledDelayChange<INITIAL_DELAY> {\n fn deserialize(input: [Field; 1]) -> Self {\n let packed = U128::from_integer(input[0]);\n\n // We use division and modulo to clear the bits that correspond to other values when unpacking.\n\n let pre_is_some = ((packed.hi as u64) / (1 << 33)) as bool;\n let pre_inner = ((packed.lo as u64) / (1 << 32)) as u32;\n\n let post_is_some = (((packed.hi as u64) / (1 << 32)) % (1 << 1)) as bool;\n let post_inner = ((packed.lo as u64) % (1 << 32)) as u32;\n\n let block_of_change = ((packed.hi as u64) % (1 << 32)) as u32;\n\n Self {\n pre: if pre_is_some { Option::some(pre_inner) } else { Option::none() },\n post: if post_is_some { Option::some(post_inner) } else { Option::none() },\n block_of_change,\n _dummy: [0; INITIAL_DELAY],\n }\n }\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change.nr","source":"use dep::protocol_types::traits::{Serialize, Deserialize, FromField, ToField};\nuse dep::std::cmp::min;\n\nmod test;\n\n// This data structure is used by SharedMutable to represent a value that changes from `pre` to `post` at some block\n// called the `block_of_change`. The value can only be made to change by scheduling a change event at some future block\n// of change after some minimum delay measured in blocks has elapsed. This means that at any given block number we know\n// both the current value and the smallest block number at which the value might change - this is called the\n// 'block horizon'.\nstruct ScheduledValueChange<T> {\n pre: T,\n post: T,\n // Block at which `post` value is used instead of `pre`\n block_of_change: u32,\n}\n\nimpl<T> ScheduledValueChange<T> {\n pub fn new(pre: T, post: T, block_of_change: u32) -> Self {\n Self { pre, post, block_of_change }\n }\n\n /// Returns the value stored in the data structure at a given block. This function can be called both in public\n /// (where `block_number` is simply the current block number, i.e. the number of the block in which the current\n /// transaction will be included) and in private (where `block_number` is the historical block number that is used\n /// to construct the proof).\n /// Reading in private is only safe if the transaction's `max_block_number` property is set to a value lower or\n /// equal to the block horizon (see `get_block_horizon()`).\n pub fn get_current_at(self, block_number: u32) -> T {\n // The post value becomes the current one at the block of change. This means different things in each realm:\n // - in public, any transaction that is included in the block of change will use the post value\n // - in private, any transaction that includes the block of change as part of the historical state will use the\n // post value (barring any follow-up changes)\n\n if block_number < self.block_of_change {\n self.pre\n } else {\n self.post\n }\n }\n\n /// Returns the scheduled change, i.e. the post-change value and the block at which it will become the current\n /// value. Note that this block may be in the past if the change has already taken place.\n /// Additionally, further changes might be later scheduled, potentially canceling the one returned by this function.\n pub fn get_scheduled(self) -> (T, u32) {\n (self.post, self.block_of_change)\n }\n\n /// Returns the largest block number at which the value returned by `get_current_at` is known to remain the current\n /// value. This value is only meaningful in private when constructing a proof at some `historical_block_number`,\n /// since due to its asynchronous nature private execution cannot know about any later scheduled changes.\n /// The caller of this function must know how quickly the value can change due to a scheduled change in the form of\n /// `minimum_delay`. If the delay itself is immutable, then this is just its duration. If the delay is mutable\n /// however, then this value is the 'effective minimum delay' (obtained by calling\n /// `ScheduledDelayChange.get_effective_minimum_delay_at`), which equals the minimum number of blocks that need to\n /// elapse from the next block until the value changes, regardless of further delay changes.\n /// The value returned by `get_current_at` in private when called with a historical block number is only safe to use\n /// if the transaction's `max_block_number` property is set to a value lower or equal to the block horizon computed\n /// using the same historical block number.\n pub fn get_block_horizon(self, historical_block_number: u32, minimum_delay: u32) -> u32 {\n // The block horizon is the very last block in which the current value is known. Any block past the horizon\n // (i.e. with a block number larger than the block horizon) may have a different current value. Reading the\n // current value in private typically requires constraining the maximum valid block number to be equal to the\n // block horizon.\n\n if historical_block_number >= self.block_of_change {\n // Once the block of change has been mined, the current value (post) will not change unless a new value\n // change is scheduled. This did not happen at the historical block number (or else it would not be\n // greater or equal to the block of change), and therefore could only happen after the historical block\n // number. The earliest would be the immediate next block, and so the smallest possible next block of change\n // equals `historical_block_number + 1 + minimum_delay`. Our block horizon is simply the previous block to\n // that one.\n //\n // block of historical\n // change block block horizon\n // =======|=============N===================H===========>\n // ^ ^\n // ---------------------\n // minimum delay\n\n historical_block_number + minimum_delay\n } else {\n // If the block of change has not yet been mined however, then there are two possible scenarios.\n // a) It could be so far into the future that the block horizon is actually determined by the minimum\n // delay, because a new change could be scheduled and take place _before_ the currently scheduled one.\n // This is similar to the scenario where the block of change is in the past: the time horizon is the\n // block prior to the earliest one in which a new block of change might land.\n //\n // historical\n // block block horizon block of change\n // =====N=================================H=================|=========>\n // ^ ^\n // | |\n // -----------------------------------\n // minimum delay\n //\n // b) It could be fewer than `minimum_delay` blocks away from the historical block number, in which case\n // the block of change would become the limiting factor for the time horizon, which would equal the\n // block right before the block of change (since by definition the value changes at the block of\n // change).\n //\n // historical block horizon\n // block block of change if not scheduled\n // =======N=============|===================H=================>\n // ^ ^ ^\n // | actual horizon |\n // -----------------------------------\n // minimum delay\n //\n // Note that the current implementation does not allow the caller to set the block of change to an arbitrary\n // value, and therefore scenario a) is not currently possible. However implementing #5501 would allow for\n // this to happen.\n\n // Because historical_block_number < self.block_of_change, then block_of_change > 0 and we can safely\n // subtract 1.\n min(\n self.block_of_change - 1,\n historical_block_number + minimum_delay\n )\n }\n }\n\n /// Mutates the value by scheduling a change at the current block number. This function is only meaningful when\n /// called in public with the current block number.\n pub fn schedule_change(\n &mut self,\n new_value: T,\n current_block_number: u32,\n minimum_delay: u32,\n block_of_change: u32\n ) {\n assert(block_of_change >= current_block_number + minimum_delay);\n\n self.pre = self.get_current_at(current_block_number);\n self.post = new_value;\n self.block_of_change = block_of_change;\n }\n}\n\nimpl<T> Serialize<3> for ScheduledValueChange<T> {\n fn serialize(self) -> [Field; 3] where T: ToField {\n [self.pre.to_field(), self.post.to_field(), self.block_of_change.to_field()]\n }\n}\n\nimpl<T> Deserialize<3> for ScheduledValueChange<T> {\n fn deserialize(input: [Field; 3]) -> Self where T: FromField {\n Self {\n pre: FromField::from_field(input[0]),\n post: FromField::from_field(input[1]),\n block_of_change: FromField::from_field(input[2]),\n }\n }\n}\n"},"150":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr","source":"use dep::protocol_types::{hash::pedersen_hash, traits::FromField};\n\nuse crate::context::{PrivateContext, PublicContext};\nuse crate::public_storage;\nuse crate::state_vars::{\n storage::Storage,\n shared_mutable::{scheduled_value_change::ScheduledValueChange, scheduled_delay_change::ScheduledDelayChange}\n};\n\nmod test;\n\nstruct SharedMutable<T, INITIAL_DELAY, Context> {\n context: Context,\n storage_slot: Field,\n}\n\n// This will make the Aztec macros require that T implements the Serialize<N> trait, and allocate N storage slots to\n// this state variable. This is incorrect, since what we actually store is:\n// - a ScheduledValueChange<T>, which requires 1 + 2 * M storage slots, where M is the serialization length of T\n// - a ScheduledDelayChange, which requires another storage slot\n//\n// TODO https://github.com/AztecProtocol/aztec-packages/issues/5736: change the storage allocation scheme so that we \n// can actually use it here\nimpl<T, INITIAL_DELAY, Context> Storage<T> for SharedMutable<T, INITIAL_DELAY, Context> {}\n\n// SharedMutable<T> stores a value of type T that is:\n// - publicly known (i.e. unencrypted)\n// - mutable in public\n// - readable in private with no contention (i.e. multiple parties can all read the same value without blocking one\n// another nor needing to coordinate)\n// This is famously a hard problem to solve. SharedMutable makes it work by introducing a delay to public mutation:\n// the value is not changed immediately but rather a value change is scheduled to happen in the future after some delay\n// measured in blocks. Reads in private are only valid as long as they are included in a block not too far into the \n// future, so that they can guarantee the value will not have possibly changed by then (because of the delay).\n// The delay for changing a value is initially equal to INITIAL_DELAY, but can be changed by calling \n// `schedule_delay_change`.\nimpl<T, INITIAL_DELAY, Context> SharedMutable<T, INITIAL_DELAY, Context> {\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n\n // Since we can't rely on the native storage allocation scheme, we hash the storage slot to get a unique location in\n // which we can safely store as much data as we need. \n // See https://github.com/AztecProtocol/aztec-packages/issues/5492 and \n // https://github.com/AztecProtocol/aztec-packages/issues/5736\n fn get_value_change_storage_slot(self) -> Field {\n pedersen_hash([self.storage_slot, 0], 0)\n }\n\n fn get_delay_change_storage_slot(self) -> Field {\n pedersen_hash([self.storage_slot, 1], 0)\n }\n}\n\nimpl<T, INITIAL_DELAY> SharedMutable<T, INITIAL_DELAY, &mut PublicContext> {\n pub fn schedule_value_change(self, new_value: T) {\n let mut value_change = self.read_value_change();\n let delay_change = self.read_delay_change();\n\n let block_number = self.context.block_number() as u32;\n let current_delay = delay_change.get_current(block_number);\n\n // TODO: make this configurable\n // https://github.com/AztecProtocol/aztec-packages/issues/5501\n let block_of_change = block_number + current_delay;\n value_change.schedule_change(new_value, block_number, current_delay, block_of_change);\n\n self.write_value_change(value_change);\n }\n\n pub fn schedule_delay_change(self, new_delay: u32) {\n let mut delay_change = self.read_delay_change();\n\n let block_number = self.context.block_number() as u32;\n\n delay_change.schedule_change(new_delay, block_number);\n\n self.write_delay_change(delay_change);\n }\n\n pub fn get_current_value_in_public(self) -> T {\n let block_number = self.context.block_number() as u32;\n self.read_value_change().get_current_at(block_number)\n }\n\n pub fn get_current_delay_in_public(self) -> u32 {\n let block_number = self.context.block_number() as u32;\n self.read_delay_change().get_current(block_number)\n }\n\n pub fn get_scheduled_value_in_public(self) -> (T, u32) {\n self.read_value_change().get_scheduled()\n }\n\n pub fn get_scheduled_delay_in_public(self) -> (u32, u32) {\n self.read_delay_change().get_scheduled()\n }\n\n fn read_value_change(self) -> ScheduledValueChange<T> {\n public_storage::read(self.get_value_change_storage_slot())\n }\n\n fn read_delay_change(self) -> ScheduledDelayChange<INITIAL_DELAY> {\n public_storage::read(self.get_delay_change_storage_slot())\n }\n\n fn write_value_change(self, value_change: ScheduledValueChange<T>) {\n public_storage::write(self.get_value_change_storage_slot(), value_change);\n }\n\n fn write_delay_change(self, delay_change: ScheduledDelayChange<INITIAL_DELAY>) {\n public_storage::write(self.get_delay_change_storage_slot(), delay_change);\n }\n}\n\nimpl<T, INITIAL_DELAY> SharedMutable<T, INITIAL_DELAY, &mut PrivateContext> {\n pub fn get_current_value_in_private(self) -> T where T: FromField {\n // When reading the current value in private we construct a historical state proof for the public value.\n // However, since this value might change, we must constrain the maximum transaction block number as this proof\n // will only be valid for however many blocks we can ensure the value will not change, which will depend on the\n // current delay and any scheduled delay changes.\n\n let (value_change, delay_change, historical_block_number) = self.historical_read_from_public_storage(*self.context);\n\n // We use the effective minimum delay as opposed to the current delay at the historical block as this one also\n // takes into consideration any scheduled delay changes. \n // For example, consider a scenario in which at block 200 the current delay was 50. We may naively think that\n // the earliest we could change the value would be at block 251 by scheduling immediately after the historical\n // block, i.e. at block 201. But if there was a delay change scheduled for block 210 to reduce the delay to 20 \n // blocks, then if a value change was scheduled at block 210 it would go into effect at block 230, which is \n // earlier than what we'd expect if we only considered the current delay.\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number);\n let block_horizon = value_change.get_block_horizon(historical_block_number, effective_minimum_delay);\n\n // We prevent this transaction from being included in any block after the block horizon, ensuring that the \n // historical public value matches the current one, since it can only change after the horizon.\n self.context.set_tx_max_block_number(block_horizon);\n value_change.get_current_at(historical_block_number)\n }\n\n fn historical_read_from_public_storage(\n self,\n context: PrivateContext\n ) -> (ScheduledValueChange<T>, ScheduledDelayChange<INITIAL_DELAY>, u32) where T: FromField {\n let header = context.get_header();\n // Ideally the following would be simply public_storage::read_historical, but we can't implement that yet.\n let value_change_slot = self.get_value_change_storage_slot();\n let mut raw_value_change_fields = [0; 3];\n for i in 0..3 {\n raw_value_change_fields[i] = header.public_storage_historical_read(\n value_change_slot + i as Field,\n context.this_address()\n );\n }\n\n // Ideally the following would be simply public_storage::read_historical, but we can't implement that yet.\n let delay_change_slot = self.get_delay_change_storage_slot();\n let raw_delay_change_fields = [header.public_storage_historical_read(delay_change_slot, context.this_address())];\n\n let value_change = ScheduledValueChange::deserialize(raw_value_change_fields);\n let delay_change = ScheduledDelayChange::deserialize(raw_delay_change_fields);\n\n let historical_block_number = context.historical_header.global_variables.block_number as u32;\n\n (value_change, delay_change, historical_block_number)\n }\n}\n"},"180":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr","source":"use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize, FromField, ToField, Empty};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FromField for FunctionSelector {\n fn from_field(field: Field) -> Self {\n Self { inner: field as u32 }\n }\n}\n\nimpl ToField for FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n}\n\nimpl Empty for FunctionSelector {\n fn empty() -> Self {\n Self { inner: 0 as u32 }\n }\n}\n\nimpl FunctionSelector {\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n"},"215":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr","source":"use crate::{hash::pedersen_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n"},"22":{"path":"std/field.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\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 pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\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 = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\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 num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 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\n"},"222":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr","source":"use crate::traits::{Serialize, Deserialize};\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\nglobal U8_SERIALIZED_LEN: Field = 1;\nglobal U32_SERIALIZED_LEN: Field = 1;\nglobal U64_SERIALIZED_LEN: Field = 1;\nglobal U128_SERIALIZED_LEN: Field = 1;\nglobal FIELD_SERIALIZED_LEN: Field = 1;\n\nimpl Serialize<BOOL_SERIALIZED_LEN> for bool {\n fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<BOOL_SERIALIZED_LEN> for bool {\n fn deserialize(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Serialize<U8_SERIALIZED_LEN> for u8 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U8_SERIALIZED_LEN> for u8 {\n fn deserialize(fields: [Field; U8_SERIALIZED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Serialize<U32_SERIALIZED_LEN> for u32 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U32_SERIALIZED_LEN> for u32 {\n fn deserialize(fields: [Field; U32_SERIALIZED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Serialize<U64_SERIALIZED_LEN> for u64 {\n fn serialize(self) -> [Field; U64_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U64_SERIALIZED_LEN> for u64 {\n fn deserialize(fields: [Field; U64_SERIALIZED_LEN]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Serialize<U128_SERIALIZED_LEN> for U128 {\n fn serialize(self) -> [Field; 1] {\n [self.to_integer()]\n }\n\n}\n\nimpl Deserialize<U128_SERIALIZED_LEN> for U128 {\n fn deserialize(fields: [Field; U128_SERIALIZED_LEN]) -> Self {\n U128::from_integer(fields[0])\n }\n}\n\nimpl Serialize<FIELD_SERIALIZED_LEN> for Field {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self]\n }\n}\n\nimpl Deserialize<FIELD_SERIALIZED_LEN> for Field {\n fn deserialize(fields: [Field; FIELD_SERIALIZED_LEN]) -> Self {\n fields[0]\n }\n}\n"},"223":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use dep::std::cmp::Eq;\nuse crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<N> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<N> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<N> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize"},"231":{"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 contract_class_id::ContractClassId, merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{Hash, is_empty},\n utils::{uint256::U256, field::field_from_bytes_32_trunc}\n};\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn compute_note_hash_nonce(first_nullifier: Field, note_hash_index: u32) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n note_hash_index as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\nfn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn compute_siloed_note_hash(address: AztecAddress, unique_note_hash: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_note_hash(note_hash: ScopedNoteHash, first_nullifier: Field, index: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(first_nullifier, index);\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(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_encrypted_log_hash(address: AztecAddress, randomness: Field, log_hash: Field) -> Field {\n // TODO: Using 0 GENERATOR_INDEX here as interim before we move to posiedon\n // NB: A unique separator will be needed for masked_contract_address\n let mut masked_contract_address = pedersen_hash([address.to_field(), randomness], 0);\n if randomness == 0 {\n // In some cases, we actually want to reveal the contract address we are siloing with:\n // e.g. 'handshaking' contract w/ known address\n // An app providing randomness = 0 signals to not mask the address.\n masked_contract_address = address.to_field();\n }\n accumulate_sha256([masked_contract_address, log_hash])\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedEncryptedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_encrypted_log_hash(\n log_hash.contract_address,\n log_hash.log_hash.randomness,\n log_hash.log_hash.value\n )\n }\n}\n\npub fn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes = input[offset].to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly. \npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<N>(inputs: [Field; N]) -> Field {\n dep::std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n"},"259":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<N>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes = field.to_be_bytes(31);\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2 = field.to_be_bytes(31);\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n"},"273":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash([pub_keys_hash.to_field(), partial_address.to_field(), GENERATOR_INDEX__CONTRACT_ADDRESS_V1])\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x1b6ead051e7b42665064ca6cf1ec77da0a36d86e00d1ff6e44077966c0c3a9fa;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"28":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\nglobal RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n\n pub fn hash<N>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) -> [Field; RATE] {\n // zero-pad the cache\n for i in 0..RATE {\n if i >= self.cache_size {\n self.cache[i] = 0;\n }\n }\n // add the cache into sponge state\n for i in 0..RATE {\n self.state[i] += self.cache[i];\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n // return `RATE` number of field elements from the sponge state.\n let mut result = [0; RATE];\n for i in 0..RATE {\n result[i] = self.state[i];\n }\n result\n }\n\n fn absorb(&mut self, input: Field) {\n if (!self.squeeze_mode) & (self.cache_size == RATE) {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n let _ = self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else if (!self.squeeze_mode) & (self.cache_size != RATE) {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n } else if self.squeeze_mode {\n // If we're in squeeze mode, switch to absorb mode and add the input into the cache.\n // N.B. I don't think this code path can be reached?!\n self.cache[0] = input;\n self.cache_size = 1;\n self.squeeze_mode = false;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n if self.squeeze_mode & (self.cache_size == 0) {\n // If we're in squeze mode and the cache is empty, there is nothing left to squeeze out of the sponge!\n // Switch to absorb mode.\n self.squeeze_mode = false;\n self.cache_size = 0;\n }\n if !self.squeeze_mode {\n // If we're in absorb mode, apply sponge permutation to compress the cache, populate cache with compressed\n // state and switch to squeeze mode. Note: this code block will execute if the previous `if` condition was\n // matched\n let new_output_elements = self.perform_duplex();\n self.squeeze_mode = true;\n for i in 0..RATE {\n self.cache[i] = new_output_elements[i];\n }\n self.cache_size = RATE;\n }\n // By this point, we should have a non-empty cache. Pop one item off the top of the cache and return it.\n let result = self.cache[0];\n for i in 1..RATE {\n if i < self.cache_size {\n self.cache[i - 1] = self.cache[i];\n }\n }\n self.cache_size -= 1;\n self.cache[self.cache_size] = 0;\n result\n }\n\n fn hash_internal<N>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field)*18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field){\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher {\n _state: &[],\n }\n }\n}\n"},"335":{"path":"/usr/src/noir-projects/noir-contracts/contracts/key_registry_contract/src/main.nr","source":"contract KeyRegistry {\n use dep::authwit::auth::assert_current_call_valid_authwit_public;\n\n use dep::aztec::{\n keys::PublicKeys, state_vars::{SharedMutable, Map},\n protocol_types::{grumpkin_point::GrumpkinPoint, address::{AztecAddress, PartialAddress}}\n };\n\n global KEY_ROTATION_DELAY = 5;\n\n #[aztec(storage)]\n struct Storage {\n // The following stores a hash of individual master public keys\n // If you change slots of vars below, you must update the slots in `SharedMutablePrivateGetter` in aztec-nr/keys.\n // We store x and y coordinates in individual shared mutables as shared mutable currently supports only 1 field\n npk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n npk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n\n ivpk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n ivpk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n \n ovpk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n ovpk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n \n tpk_m_x_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n tpk_m_y_registry: Map<AztecAddress, SharedMutable<Field, KEY_ROTATION_DELAY>>,\n }\n\n #[aztec(public)]\n fn rotate_npk_m(address: AztecAddress, new_npk_m: GrumpkinPoint, nonce: Field) {\n // TODO: (#6137)\n if (!address.eq(context.msg_sender())) {\n assert_current_call_valid_authwit_public(&mut context, address);\n } else {\n assert(nonce == 0, \"invalid nonce\");\n }\n\n let npk_m_x_registry = storage.npk_m_x_registry.at(address);\n let npk_m_y_registry = storage.npk_m_y_registry.at(address);\n npk_m_x_registry.schedule_value_change(new_npk_m.x);\n npk_m_y_registry.schedule_value_change(new_npk_m.y);\n }\n\n #[aztec(public)]\n fn register(address: AztecAddress, partial_address: PartialAddress, keys: PublicKeys) {\n let computed_address = AztecAddress::compute(keys.hash(), partial_address);\n\n assert(computed_address.eq(address), \"Computed address does not match supplied address\");\n\n let npk_m_x_registry = storage.npk_m_x_registry.at(address);\n let npk_m_y_registry = storage.npk_m_y_registry.at(address);\n let ivpk_m_x_registry = storage.ivpk_m_x_registry.at(address);\n let ivpk_m_y_registry = storage.ivpk_m_y_registry.at(address);\n let ovpk_m_x_registry = storage.ovpk_m_x_registry.at(address);\n let ovpk_m_y_registry = storage.ovpk_m_y_registry.at(address);\n let tpk_m_x_registry = storage.tpk_m_x_registry.at(address);\n let tpk_m_y_registry = storage.tpk_m_y_registry.at(address);\n\n npk_m_x_registry.schedule_value_change(keys.npk_m.x);\n npk_m_y_registry.schedule_value_change(keys.npk_m.y);\n ivpk_m_x_registry.schedule_value_change(keys.ivpk_m.x);\n ivpk_m_y_registry.schedule_value_change(keys.ivpk_m.y);\n ovpk_m_x_registry.schedule_value_change(keys.ovpk_m.x);\n ovpk_m_y_registry.schedule_value_change(keys.ovpk_m.y);\n tpk_m_x_registry.schedule_value_change(keys.tpk_m.x);\n tpk_m_y_registry.schedule_value_change(keys.tpk_m.y);\n }\n}\n"},"44":{"path":"std/uint128.nr","source":"use crate::ops::{Add, Sub, Mul, Div, Rem, Not, BitOr, BitAnd, BitXor, Shl, Shr};\nuse crate::cmp::{Eq, Ord, Ordering};\nuse crate::println;\n\nglobal pow64 : Field = 18446744073709551616; //2^64;\nglobal pow63 : Field = 9223372036854775808; // 2^63;\nstruct U128 {\n lo: Field,\n hi: Field,\n}\n\nimpl U128 {\n\n pub fn from_u64s_le(lo: u64, hi: u64) -> U128 {\n // in order to handle multiplication, we need to represent the product of two u64 without overflow\n assert(crate::field::modulus_num_bits() as u32 > 128);\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo, hi)\n }\n\n pub fn zero() -> U128 {\n U128 { lo: 0, hi: 0 }\n }\n\n pub fn one() -> U128 {\n U128 { lo: 1, hi: 0 }\n }\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 { lo, hi }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1;\n if N <= 18 {\n for i in 0..N - 2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N - 1 {\n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n unconstrained fn uconstrained_check_is_upper_ascii(ascii: u8) -> bool {\n ((ascii >= 65) & (ascii <= 90)) // Between 'A' and 'Z'\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else {\n let ascii = ascii + 32 * (U128::uconstrained_check_is_upper_ascii(ascii) as u8);\n assert(ascii >= 97); // enforce >= 'a'\n assert(ascii <= 102); // enforce <= 'f'\n ascii - 87\n } as Field\n }\n\n // TODO: Replace with a faster version. \n // A circuit that uses this function can be slow to compute\n // (we're doing up to 127 calls to compute the quotient)\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if b == U128::zero() {\n // Return 0,0 to avoid eternal loop\n (U128::zero(), U128::zero())\n } else if self < b {\n (U128::zero(), self)\n } else if self == b {\n (U128::one(), U128::zero())\n } else {\n let (q,r) = if b.hi as u64 >= pow63 as u64 {\n // The result of multiplication by 2 would overflow\n (U128::zero(), self)\n } else {\n self.unconstrained_div(b * U128::from_u64s_le(2, 0))\n };\n let q_mul_2 = q * U128::from_u64s_le(2, 0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::one(), r - b)\n }\n }\n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f - lo) / pow64;\n U128 { lo, hi }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo + self.hi * pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo * b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = self.lo * b.hi + self.hi * b.lo + carry;\n let hi = high as u64 as Field;\n U128 { lo, hi }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with underflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl Not for U128 { \n fn not(self) -> U128 {\n U128 {\n lo: (!(self.lo as u64)) as Field,\n hi: (!(self.hi as u64)) as Field\n }\n }\n}\n\nimpl BitOr for U128 { \n fn bitor(self, other: U128) -> U128 {\n U128 {\n lo: ((self.lo as u64) | (other.lo as u64)) as Field,\n hi: ((self.hi as u64) | (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitAnd for U128 {\n fn bitand(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) & (other.lo as u64)) as Field,\n hi: ((self.hi as u64) & (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitXor for U128 {\n fn bitxor(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) ^ (other.lo as u64)) as Field,\n hi: ((self.hi as u64) ^ (other.hi as u64)) as Field\n }\n }\n}\n\nimpl Shl for U128 { \n fn shl(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift left with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self.wrapping_mul(U128::from_integer(y))\n } \n}\n\nimpl Shr for U128 { \n fn shr(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift right with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self / U128::from_integer(y)\n } \n}\n\nmod tests {\n use crate::uint128::{U128, pow64, pow63};\n\n #[test]\n fn test_not() {\n let num = U128::from_u64s_le(0, 0);\n let not_num = num.not();\n\n let max_u64: Field = pow64 - 1;\n assert_eq(not_num.hi, max_u64);\n assert_eq(not_num.lo, max_u64);\n\n let not_not_num = not_num.not();\n assert_eq(num, not_not_num);\n }\n #[test]\n fn test_construction() {\n // Check little-endian u64 is inversed with big-endian u64 construction\n let a = U128::from_u64s_le(2, 1);\n let b = U128::from_u64s_be(1, 2);\n assert_eq(a, b);\n // Check byte construction is equivalent\n let c = U128::from_le_bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n let d = U128::from_u64s_le(0x0706050403020100, 0x0f0e0d0c0b0a0908);\n assert_eq(c, d);\n }\n #[test]\n fn test_byte_decomposition() {\n let a = U128::from_u64s_le(0x0706050403020100, 0x0f0e0d0c0b0a0908);\n // Get big-endian and little-endian byte decompostions\n let le_bytes_a= a.to_le_bytes();\n let be_bytes_a= a.to_be_bytes();\n\n // Check equivalence\n for i in 0..16 {\n assert_eq(le_bytes_a[i], be_bytes_a[15 - i]);\n }\n // Reconstruct U128 from byte decomposition\n let b= U128::from_le_bytes(le_bytes_a);\n // Check that it's the same element\n assert_eq(a, b);\n }\n #[test]\n fn test_hex_constuction() {\n let a = U128::from_u64s_le(0x1, 0x2);\n let b = U128::from_hex(\"0x20000000000000001\");\n assert_eq(a, b);\n\n let c= U128::from_hex(\"0xffffffffffffffffffffffffffffffff\");\n let d= U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff);\n assert_eq(c, d);\n\n let e= U128::from_hex(\"0x00000000000000000000000000000000\");\n let f= U128::from_u64s_le(0, 0);\n assert_eq(e, f);\n }\n\n // Ascii decode tests\n\n #[test]\n fn test_ascii_decode_correct_range() {\n // '0'..'9' range\n for i in 0..10 {\n let decoded= U128::decode_ascii(48 + i);\n assert_eq(decoded, i as Field);\n }\n // 'A'..'F' range\n for i in 0..6 {\n let decoded = U128::decode_ascii(65 + i);\n assert_eq(decoded, (i + 10) as Field);\n }\n // 'a'..'f' range\n for i in 0..6 {\n let decoded = U128::decode_ascii(97 + i);\n assert_eq(decoded, (i + 10) as Field);\n }\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_less_than_48_fails_0() {\n crate::println(U128::decode_ascii(0));\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_less_than_48_fails_1() {\n crate::println(U128::decode_ascii(47));\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_58_64_fails_0() {\n let _ = U128::decode_ascii(58);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_58_64_fails_1() {\n let _ = U128::decode_ascii(64);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_71_96_fails_0() {\n let _ = U128::decode_ascii(71);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_71_96_fails_1() {\n let _ = U128::decode_ascii(96);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_greater_than_102_fails() {\n let _ = U128::decode_ascii(103);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_regression() {\n // This code will actually fail because of ascii_decode,\n // but in the past it was possible to create a value > (1<<128)\n let a = U128::from_hex(\"0x~fffffffffffffffffffffffffffffff\");\n let b:Field= a.to_integer();\n let c= b.to_le_bytes(17);\n assert(c[16] != 0);\n }\n\n #[test]\n fn test_unconstrained_div() {\n // Test the potential overflow case\n let a= U128::from_u64s_le(0x0, 0xffffffffffffffff);\n let b= U128::from_u64s_le(0x0, 0xfffffffffffffffe);\n let c= U128::one();\n let d= U128::from_u64s_le(0x0, 0x1);\n let (q,r) = a.unconstrained_div(b);\n assert_eq(q, c);\n assert_eq(r, d);\n\n let a = U128::from_u64s_le(2, 0);\n let b = U128::one();\n // Check the case where a is a multiple of b\n let (c,d ) = a.unconstrained_div(b);\n assert_eq((c, d), (a, U128::zero()));\n\n // Check where b is a multiple of a\n let (c,d) = b.unconstrained_div(a);\n assert_eq((c, d), (U128::zero(), b));\n\n // Dividing by zero returns 0,0\n let a = U128::from_u64s_le(0x1, 0x0);\n let b = U128::zero();\n let (c,d)= a.unconstrained_div(b);\n assert_eq((c, d), (U128::zero(), U128::zero()));\n\n // Dividing 1<<127 by 1<<127 (special case)\n let a = U128::from_u64s_le(0x0, pow63 as u64);\n let b = U128::from_u64s_le(0x0, pow63 as u64);\n let (c,d )= a.unconstrained_div(b);\n assert_eq((c, d), (U128::one(), U128::zero()));\n }\n\n #[test]\n fn integer_conversions() {\n // Maximum\n let start:Field = 0xffffffffffffffffffffffffffffffff;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // Minimum\n let start:Field = 0x0;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // Low limb\n let start:Field = 0xffffffffffffffff;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // High limb\n let start:Field = 0xffffffffffffffff0000000000000000;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n }\n #[test]\n fn test_wrapping_mul() {\n // 1*0==0\n assert_eq(U128::zero(), U128::zero().wrapping_mul(U128::one()));\n\n // 0*1==0\n assert_eq(U128::zero(), U128::one().wrapping_mul(U128::zero()));\n\n // 1*1==1\n assert_eq(U128::one(), U128::one().wrapping_mul(U128::one()));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(U128::zero(), U128::zero().wrapping_mul(U128::from_u64s_le(0, 1)));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(U128::zero(), U128::from_u64s_le(0, 1).wrapping_mul(U128::zero()));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(U128::from_u64s_le(0, 1), U128::from_u64s_le(0, 1).wrapping_mul(U128::one()));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(U128::from_u64s_le(0, 1), U128::one().wrapping_mul(U128::from_u64s_le(0, 1)));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(U128::zero(), U128::from_u64s_le(0, 1).wrapping_mul(U128::from_u64s_le(0, 1)));\n // -1 * -1 == 1\n assert_eq(\n U128::one(), U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff).wrapping_mul(U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff))\n );\n }\n}\n"},"51":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, CANONICAL_AUTH_REGISTRY_ADDRESS},\n hash::pedersen_hash\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\nglobal IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256(\"IS_VALID()\")\n\n// docs:start:assert_current_call_valid_authwit\n// Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let function_selector = FunctionSelector::from_signature(\"spend_private_authwit(Field)\");\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n let result: Field = context.call_private_function(on_behalf_of, function_selector, [inner_hash]).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n// docs:end:assert_current_call_valid_authwit\n\n// docs:start:assert_current_call_valid_authwit_public\n// Assert that `on_behalf_of` have authorized the current call in a public context\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n\n let result: Field = context.call_public_function(\n AztecAddress::from_field(CANONICAL_AUTH_REGISTRY_ADDRESS),\n FunctionSelector::from_signature(\"consume((Field),Field)\"),\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n// docs:start:compute_call_authwit_hash\n// Compute the message hash to be used by an authentication witness \npub fn compute_call_authwit_hash<N>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_outer_authwit_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_call_authwit_hash\n\npub fn compute_inner_authwit_hash<N>(args: [Field; N]) -> Field {\n pedersen_hash(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\npub fn compute_outer_authwit_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n pedersen_hash(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n * \n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n AztecAddress::from_field(CANONICAL_AUTH_REGISTRY_ADDRESS),\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\"),\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * @param reject True if all authwits should be rejected, false otherwise \n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n AztecAddress::from_field(CANONICAL_AUTH_REGISTRY_ADDRESS),\n FunctionSelector::from_signature(\"set_reject_all(bool)\"),\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"63":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH, hash::poseidon2_hash,\n grumpkin_point::GrumpkinPoint, traits::{Deserialize, Serialize}\n};\nuse crate::keys::constants::{NUM_KEY_TYPES, NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX};\n\nglobal PUBLIC_KEYS_LENGTH = 8;\n\nstruct PublicKeys {\n npk_m: GrumpkinPoint,\n ivpk_m: GrumpkinPoint,\n ovpk_m: GrumpkinPoint,\n tpk_m: GrumpkinPoint,\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n poseidon2_hash(\n [\n self.npk_m.x,\n self.npk_m.y,\n self.ivpk_m.x,\n self.ivpk_m.y,\n self.ovpk_m.x,\n self.ovpk_m.y,\n self.tpk_m.x,\n self.tpk_m.y,\n GENERATOR_INDEX__PUBLIC_KEYS_HASH\n ]\n )\n )\n }\n\n pub fn get_key_by_index(self, index: Field) -> GrumpkinPoint {\n assert(index as u8 < NUM_KEY_TYPES, \"Invalid key index\");\n if index == NULLIFIER_INDEX {\n self.npk_m\n } else if index == INCOMING_INDEX {\n self.ivpk_m\n } else if index == OUTGOING_INDEX {\n self.ovpk_m\n } else {\n self.tpk_m\n }\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.x,\n self.npk_m.y,\n self.ivpk_m.x,\n self.ivpk_m.y,\n self.ovpk_m.x,\n self.ovpk_m.y,\n self.tpk_m.x,\n self.tpk_m.y,\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: GrumpkinPoint { x: serialized[0], y: serialized[1] },\n ivpk_m: GrumpkinPoint { x: serialized[2], y: serialized[3] },\n ovpk_m: GrumpkinPoint { x: serialized[4], y: serialized[5] },\n tpk_m: GrumpkinPoint { x: serialized[6], y: serialized[7] },\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: GrumpkinPoint { x: 1, y: 2 },\n ivpk_m: GrumpkinPoint { x: 3, y: 4 },\n ovpk_m: GrumpkinPoint { x: 5, y: 6 },\n tpk_m: GrumpkinPoint { x: 7, y: 8 }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x1936abe4f6a920d16a9f6917f10a679507687e2cd935dd1f1cdcb1e908c027f3;\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: GrumpkinPoint { x: 1, y: 2 },\n ivpk_m: GrumpkinPoint { x: 3, y: 4 },\n ovpk_m: GrumpkinPoint { x: 5, y: 6 },\n tpk_m: GrumpkinPoint { x: 7, y: 8 }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.x, deserialized.npk_m.x);\n assert_eq(keys.npk_m.y, deserialized.npk_m.y);\n assert_eq(keys.ivpk_m.x, deserialized.ivpk_m.x);\n assert_eq(keys.ivpk_m.y, deserialized.ivpk_m.y);\n assert_eq(keys.ovpk_m.x, deserialized.ovpk_m.x);\n assert_eq(keys.ovpk_m.y, deserialized.ovpk_m.y);\n assert_eq(keys.tpk_m.x, deserialized.tpk_m.x);\n assert_eq(keys.tpk_m.y, deserialized.tpk_m.y);\n}\n"},"65":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/public_storage.nr","source":"use dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::oracle::storage::{storage_read, storage_write};\n\npub fn read<T, N>(storage_slot: Field) -> T where T: Deserialize<N> {\n T::deserialize(storage_read(storage_slot))\n}\n\npub fn write<T, N>(storage_slot: Field, value: T) where T: Serialize<N> {\n storage_write(storage_slot, value.serialize());\n}\n\n// Ideally we'd do the following, but we cannot because of https://github.com/noir-lang/noir/issues/4633\n// pub fn read_historical<T, N>(\n// storage_slot: Field,\n// context: PrivateContext\n// ) -> T where T: Deserialize<N> {\n// let mut fields = [0; N];\n// for i in 0..N {\n// fields[i] = public_storage_historical_read(\n// context,\n// storage_slot + i as Field,\n// context.this_address()\n// );\n// }\n// T::deserialize(fields)\n// }\n\nmod tests {\n use dep::std::test::OracleMock;\n use dep::protocol_types::traits::{Deserialize, Serialize};\n use crate::public_storage;\n\n struct TestStruct {\n a: Field,\n b: Field,\n }\n\n impl Deserialize<2> for TestStruct {\n fn deserialize(fields: [Field; 2]) -> TestStruct {\n TestStruct { a: fields[0], b: fields[1] }\n }\n }\n\n impl Serialize<2> for TestStruct {\n fn serialize(self) -> [Field; 2] {\n [self.a, self.b]\n }\n }\n\n #[test]\n fn test_read() {\n let slot = 7;\n let written = TestStruct { a: 13, b: 42 };\n\n OracleMock::mock(\"storageRead\").with_params((slot, 2)).returns(written.serialize());\n\n let read: TestStruct = public_storage::read(slot);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n\n #[test]\n fn test_write() {\n let slot = 7;\n let to_write = TestStruct { a: 13, b: 42 };\n\n let mock = OracleMock::mock(\"storageWrite\").returns([0; 2]); // The return value is unused\n\n public_storage::write(slot, to_write);\n assert_eq(mock.get_last_params(), (slot, to_write.serialize()));\n }\n}\n"},"88":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/public_context.nr","source":"use crate::hash::{compute_secret_hash, compute_message_hash, compute_message_nullifier};\nuse dep::protocol_types::address::{AztecAddress, EthAddress};\nuse dep::protocol_types::traits::{Serialize, Deserialize, Empty};\nuse dep::protocol_types::abis::function_selector::FunctionSelector;\nuse crate::context::inputs::public_context_inputs::PublicContextInputs;\nuse crate::context::gas::GasOpts;\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs) -> Self {\n PublicContext { inputs }\n }\n\n pub fn storage_address(self) -> AztecAddress {\n storage_address()\n }\n pub fn fee_per_l2_gas(self) -> Field {\n fee_per_l2_gas()\n }\n pub fn fee_per_da_gas(self) -> Field {\n fee_per_da_gas()\n }\n /**\n * Emit a log with the given event selector and message.\n *\n * @param event_selector The event selector for the log.\n * @param message The message to emit in the log.\n */\n pub fn emit_unencrypted_log_with_selector<T, N>(\n &mut self,\n event_selector: Field,\n log: T\n ) where T: Serialize<N> {\n emit_unencrypted_log(event_selector, Serialize::serialize(log).as_slice());\n }\n // For compatibility with the selector-less API. We'll probably rename the above one.\n pub fn emit_unencrypted_log<T, N>(&mut self, log: T) where T: Serialize<N> {\n self.emit_unencrypted_log_with_selector(/*event_selector=*/ 5, log);\n }\n pub fn note_hash_exists(self, note_hash: Field, leaf_index: Field) -> bool {\n note_hash_exists(note_hash, leaf_index) == 1\n }\n pub fn l1_to_l2_msg_exists(self, msg_hash: Field, msg_leaf_index: Field) -> bool {\n l1_to_l2_msg_exists(msg_hash, msg_leaf_index) == 1\n }\n\n fn block_number(self) -> Field {\n block_number()\n }\n\n fn timestamp(self) -> u64 {\n timestamp()\n }\n\n fn transaction_fee(self) -> Field {\n transaction_fee()\n }\n\n fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool {\n nullifier_exists(unsiloed_nullifier, address.to_field()) == 1\n }\n\n fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field\n ) {\n let secret_hash = compute_secret_hash(secret);\n let message_hash = compute_message_hash(\n sender,\n self.chain_id(),\n /*recipient=*/ self.this_address(),\n self.version(),\n content,\n secret_hash\n );\n let nullifier = compute_message_nullifier(message_hash, secret, leaf_index);\n\n assert(\n !self.nullifier_exists(nullifier, self.this_address()), \"L1-to-L2 message is already nullified\"\n );\n assert(\n self.l1_to_l2_msg_exists(message_hash, leaf_index), \"Tried to consume nonexistent L1-to-L2 message\"\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0);\n }\n\n fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n send_l2_to_l1_msg(recipient, content);\n }\n\n fn call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n temporary_function_selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let results = call(\n gas_for_call(gas_opts),\n contract_address,\n args,\n temporary_function_selector.to_field()\n );\n let data_to_return: [Field; RETURNS_COUNT] = results.0;\n let success: u8 = results.1;\n assert(success == 1, \"Nested call failed!\");\n\n FunctionReturns::new(data_to_return)\n }\n\n fn static_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n temporary_function_selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let (data_to_return, success): ([Field; RETURNS_COUNT], u8) = call_static(\n gas_for_call(gas_opts),\n contract_address,\n args,\n temporary_function_selector.to_field()\n );\n\n assert(success == 1, \"Nested static call failed!\");\n FunctionReturns::new(data_to_return)\n }\n\n fn delegate_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field]\n ) -> FunctionReturns<RETURNS_COUNT> {\n assert(false, \"'delegate_call_public_function' not implemented!\");\n FunctionReturns::new([0; RETURNS_COUNT])\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n emit_note_hash(note_hash);\n }\n fn push_new_nullifier(&mut self, nullifier: Field, _nullified_commitment: Field) {\n // Cannot nullify pending commitments in AVM, so `nullified_commitment` is not used\n emit_nullifier(nullifier);\n }\n fn msg_sender(self) -> AztecAddress {\n sender()\n }\n fn this_address(self) -> AztecAddress {\n address()\n }\n fn chain_id(self) -> Field {\n chain_id()\n }\n fn version(self) -> Field {\n version()\n }\n fn selector(self) -> FunctionSelector {\n FunctionSelector::from_field(self.inputs.selector)\n }\n fn get_args_hash(self) -> Field {\n self.inputs.args_hash\n }\n fn l2_gas_left(self) -> Field {\n l2_gas_left()\n }\n fn da_gas_left(self) -> Field {\n da_gas_left()\n }\n}\n\n// Helper functions\nfn gas_for_call(user_gas: GasOpts) -> [Field; 2] {\n // It's ok to use the max possible gas here, because the gas will be\n // capped by the gas left in the (STATIC)CALL instruction.\n let MAX_POSSIBLE_FIELD: Field = 0 - 1;\n [\n user_gas.l2_gas.unwrap_or(MAX_POSSIBLE_FIELD),\n user_gas.da_gas.unwrap_or(MAX_POSSIBLE_FIELD)\n ]\n}\n\n// Unconstrained opcode wrappers (do not use directly).\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/6420): reconsider.\nunconstrained fn address() -> AztecAddress {\n address_opcode()\n}\nunconstrained fn storage_address() -> AztecAddress {\n storage_address_opcode()\n}\nunconstrained fn sender() -> AztecAddress {\n sender_opcode()\n}\nunconstrained fn portal() -> EthAddress {\n portal_opcode()\n}\nunconstrained fn fee_per_l2_gas() -> Field {\n fee_per_l2_gas_opcode()\n}\nunconstrained fn fee_per_da_gas() -> Field {\n fee_per_da_gas_opcode()\n}\nunconstrained fn transaction_fee() -> Field {\n transaction_fee_opcode()\n}\nunconstrained fn chain_id() -> Field {\n chain_id_opcode()\n}\nunconstrained fn version() -> Field {\n version_opcode()\n}\nunconstrained fn block_number() -> Field {\n block_number_opcode()\n}\nunconstrained fn timestamp() -> u64 {\n timestamp_opcode()\n}\nunconstrained fn l2_gas_left() -> Field {\n l2_gas_left_opcode()\n}\nunconstrained fn da_gas_left() -> Field {\n da_gas_left_opcode()\n}\nunconstrained fn note_hash_exists(note_hash: Field, leaf_index: Field) -> u8 {\n note_hash_exists_opcode(note_hash, leaf_index)\n}\nunconstrained fn emit_note_hash(note_hash: Field) {\n emit_note_hash_opcode(note_hash)\n}\nunconstrained fn nullifier_exists(nullifier: Field, address: Field) -> u8 {\n nullifier_exists_opcode(nullifier, address)\n}\nunconstrained fn emit_nullifier(nullifier: Field) {\n emit_nullifier_opcode(nullifier)\n}\nunconstrained fn emit_unencrypted_log(event_selector: Field, message: [Field]) {\n emit_unencrypted_log_opcode(event_selector, message)\n}\nunconstrained fn l1_to_l2_msg_exists(msg_hash: Field, msg_leaf_index: Field) -> u8 {\n l1_to_l2_msg_exists_opcode(msg_hash, msg_leaf_index)\n}\nunconstrained fn send_l2_to_l1_msg(recipient: EthAddress, content: Field) {\n send_l2_to_l1_msg_opcode(recipient, content)\n}\nunconstrained fn call<RET_SIZE>(\n gas: [Field; 2],\n address: AztecAddress,\n args: [Field],\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {\n call_opcode(gas, address, args, function_selector)\n}\nunconstrained fn call_static<RET_SIZE>(\n gas: [Field; 2],\n address: AztecAddress,\n args: [Field],\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {\n call_static_opcode(gas, address, args, function_selector)\n}\n\nimpl Empty for PublicContext {\n fn empty() -> Self {\n PublicContext::new(PublicContextInputs::empty())\n }\n}\n\n// AVM oracles (opcodes) follow, do not use directly.\n#[oracle(avmOpcodeAddress)]\nunconstrained fn address_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeStorageAddress)]\nunconstrained fn storage_address_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeSender)]\nunconstrained fn sender_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodePortal)]\nunconstrained fn portal_opcode() -> EthAddress {}\n\n#[oracle(avmOpcodeFeePerL2Gas)]\nunconstrained fn fee_per_l2_gas_opcode() -> Field {}\n\n#[oracle(avmOpcodeFeePerDaGas)]\nunconstrained fn fee_per_da_gas_opcode() -> Field {}\n\n#[oracle(avmOpcodeTransactionFee)]\nunconstrained fn transaction_fee_opcode() -> Field {}\n\n#[oracle(avmOpcodeChainId)]\nunconstrained fn chain_id_opcode() -> Field {}\n\n#[oracle(avmOpcodeVersion)]\nunconstrained fn version_opcode() -> Field {}\n\n#[oracle(avmOpcodeBlockNumber)]\nunconstrained fn block_number_opcode() -> Field {}\n\n#[oracle(avmOpcodeTimestamp)]\nunconstrained fn timestamp_opcode() -> u64 {}\n\n#[oracle(avmOpcodeL2GasLeft)]\nunconstrained fn l2_gas_left_opcode() -> Field {}\n\n#[oracle(avmOpcodeDaGasLeft)]\nunconstrained fn da_gas_left_opcode() -> Field {}\n\n#[oracle(avmOpcodeNoteHashExists)]\nunconstrained fn note_hash_exists_opcode(note_hash: Field, leaf_index: Field) -> u8 {}\n\n#[oracle(avmOpcodeEmitNoteHash)]\nunconstrained fn emit_note_hash_opcode(note_hash: Field) {}\n\n#[oracle(avmOpcodeNullifierExists)]\nunconstrained fn nullifier_exists_opcode(nullifier: Field, address: Field) -> u8 {}\n\n#[oracle(avmOpcodeEmitNullifier)]\nunconstrained fn emit_nullifier_opcode(nullifier: Field) {}\n\n#[oracle(amvOpcodeEmitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_opcode(event_selector: Field, message: [Field]) {}\n\n#[oracle(avmOpcodeL1ToL2MsgExists)]\nunconstrained fn l1_to_l2_msg_exists_opcode(msg_hash: Field, msg_leaf_index: Field) -> u8 {}\n\n#[oracle(avmOpcodeSendL2ToL1Msg)]\nunconstrained fn send_l2_to_l1_msg_opcode(recipient: EthAddress, content: Field) {}\n\n#[oracle(avmOpcodeCall)]\nunconstrained fn call_opcode<RET_SIZE>(\n gas: [Field; 2], // gas allocation: [l2_gas, da_gas]\n address: AztecAddress,\n args: [Field],\n // TODO(5110): consider passing in calldata directly\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {}\n// ^ return data ^ success\n\n#[oracle(avmOpcodeStaticCall)]\nunconstrained fn call_static_opcode<RET_SIZE>(\n gas: [Field; 2], // gas allocation: [l2_gas, da_gas]\n address: AztecAddress,\n args: [Field],\n // TODO(5110): consider passing in calldata directly\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {}\n// ^ return data ^ success\n\nstruct FunctionReturns<N> {\n values: [Field; N]\n}\n\nimpl<N> FunctionReturns<N> {\n pub fn new(values: [Field; N]) -> FunctionReturns<N> {\n FunctionReturns { values }\n }\n\n pub fn assert_empty(returns: FunctionReturns<0>) {\n assert(returns.values.len() == 0);\n }\n\n pub fn raw(self) -> [Field; N] {\n self.values\n }\n\n pub fn deserialize_into<T>(self) -> T where T: Deserialize<N> {\n Deserialize::deserialize(self.raw())\n }\n}\n"}}}