@aztec/pxe 0.0.1-commit.03f7ef2 → 0.0.1-commit.08c5969dc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +17 -11
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +80 -34
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +64 -40
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +204 -84
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +6 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +17 -13
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +12 -10
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +67 -44
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -37
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +45 -46
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +96 -56
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +81 -48
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +142 -118
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +5 -5
- package/dest/contract_sync/contract_sync_service.d.ts +42 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +28 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -11
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +30 -19
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +31 -8
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +32 -9
- package/dest/entrypoints/pxe_creation_options.d.ts +5 -3
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +3 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +39 -16
- package/dest/error_enriching.d.ts +4 -4
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +6 -6
- package/dest/events/event_service.d.ts +8 -8
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +21 -24
- package/dest/events/private_event_filter_validator.d.ts +6 -6
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +75 -0
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
- package/dest/job_coordinator/job_coordinator.js +94 -0
- package/dest/logs/log_service.d.ts +17 -32
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +76 -197
- package/dest/notes/note_service.d.ts +10 -10
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +39 -44
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/hints/index.d.ts +2 -2
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +13 -7
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +6 -7
- package/dest/private_kernel/private_kernel_oracle.d.ts +24 -28
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +90 -2
- package/dest/pxe.d.ts +84 -66
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +186 -174
- package/dest/storage/address_store/address_store.d.ts +11 -0
- package/dest/storage/address_store/address_store.d.ts.map +1 -0
- package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +13 -12
- package/dest/storage/address_store/index.d.ts +2 -0
- package/dest/storage/address_store/index.d.ts.map +1 -0
- package/dest/storage/address_store/index.js +1 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +17 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
- package/dest/storage/{anchor_block_data_provider/anchor_block_data_provider.js → anchor_block_store/anchor_block_store.js} +9 -2
- package/dest/storage/anchor_block_store/index.d.ts +2 -0
- package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
- package/dest/storage/anchor_block_store/index.js +1 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_store.js +253 -0
- package/dest/storage/capsule_store/index.d.ts +2 -0
- package/dest/storage/capsule_store/index.d.ts.map +1 -0
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +3 -3
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
- package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +29 -20
- package/dest/storage/contract_store/index.d.ts +2 -0
- package/dest/storage/contract_store/index.d.ts.map +1 -0
- package/dest/storage/contract_store/index.js +1 -0
- package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
- package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
- package/dest/storage/index.d.ts +8 -8
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +7 -7
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/index.d.ts +3 -0
- package/dest/storage/note_store/index.d.ts.map +1 -0
- package/dest/storage/note_store/index.js +2 -0
- package/dest/storage/note_store/note_store.d.ts +82 -0
- package/dest/storage/note_store/note_store.d.ts.map +1 -0
- package/dest/storage/note_store/note_store.js +343 -0
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +91 -0
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
- package/dest/storage/private_event_store/private_event_store.js +273 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/index.d.ts +4 -0
- package/dest/storage/tagging_store/index.d.ts.map +1 -0
- package/dest/storage/tagging_store/index.js +3 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/recipient_tagging_store.js +111 -0
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/sender_address_book_store.js +36 -0
- package/dest/storage/{tagging_data_provider/sender_tagging_data_provider.d.ts → tagging_store/sender_tagging_store.d.ts} +19 -9
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/sender_tagging_store.js +348 -0
- package/dest/tagging/constants.d.ts +2 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +10 -3
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +46 -0
- package/dest/tagging/index.d.ts +15 -3
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +14 -2
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -3
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +8 -8
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
- package/dest/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.d.ts +4 -4
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.js +8 -23
- package/dest/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
- package/dest/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.js +5 -8
- package/dest/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.d.ts +7 -4
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.js +12 -7
- package/package.json +27 -18
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +99 -46
- package/src/config/index.ts +14 -0
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +356 -145
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +22 -12
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +79 -47
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -69
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +129 -135
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +215 -132
- package/src/contract_function_simulator/proxied_contract_data_source.ts +7 -7
- package/src/contract_sync/contract_sync_service.ts +145 -0
- package/src/contract_sync/helpers.ts +93 -0
- package/src/debug/pxe_debug_utils.ts +63 -19
- package/src/entrypoints/client/bundle/utils.ts +23 -16
- package/src/entrypoints/client/lazy/utils.ts +24 -17
- package/src/entrypoints/pxe_creation_options.ts +4 -2
- package/src/entrypoints/server/index.ts +2 -0
- package/src/entrypoints/server/utils.ts +33 -41
- package/src/error_enriching.ts +7 -15
- package/src/events/event_service.ts +22 -28
- package/src/events/private_event_filter_validator.ts +4 -6
- package/src/job_coordinator/job_coordinator.ts +150 -0
- package/src/logs/log_service.ts +121 -274
- package/src/notes/note_service.ts +42 -47
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +33 -22
- package/src/private_kernel/private_kernel_execution_prover.ts +9 -8
- package/src/private_kernel/private_kernel_oracle.ts +116 -36
- package/src/pxe.ts +309 -239
- package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +16 -16
- package/src/storage/address_store/index.ts +1 -0
- package/src/storage/{anchor_block_data_provider/anchor_block_data_provider.ts → anchor_block_store/anchor_block_store.ts} +9 -1
- package/src/storage/anchor_block_store/index.ts +1 -0
- package/src/storage/capsule_store/capsule_store.ts +315 -0
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +28 -17
- package/src/storage/contract_store/index.ts +1 -0
- package/src/storage/index.ts +7 -7
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/index.ts +2 -0
- package/src/storage/note_store/note_store.ts +414 -0
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +384 -0
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/index.ts +3 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +139 -0
- package/src/storage/tagging_store/sender_address_book_store.ts +48 -0
- package/src/storage/tagging_store/sender_tagging_store.ts +429 -0
- package/src/tagging/constants.ts +10 -3
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +17 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +23 -9
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.ts +12 -25
- package/src/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.ts +5 -13
- package/src/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.ts +19 -7
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
- package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
- package/dest/storage/address_data_provider/index.d.ts +0 -2
- package/dest/storage/address_data_provider/index.d.ts.map +0 -1
- package/dest/storage/address_data_provider/index.js +0 -1
- package/dest/storage/anchor_block_data_provider/anchor_block_data_provider.d.ts +0 -9
- package/dest/storage/anchor_block_data_provider/anchor_block_data_provider.d.ts.map +0 -1
- package/dest/storage/anchor_block_data_provider/index.d.ts +0 -2
- package/dest/storage/anchor_block_data_provider/index.d.ts.map +0 -1
- package/dest/storage/anchor_block_data_provider/index.js +0 -1
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -57
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
- package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -146
- package/dest/storage/capsule_data_provider/index.d.ts +0 -2
- package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
- package/dest/storage/capsule_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/index.d.ts +0 -2
- package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
- package/dest/storage/note_data_provider/index.d.ts +0 -3
- package/dest/storage/note_data_provider/index.d.ts.map +0 -1
- package/dest/storage/note_data_provider/index.js +0 -2
- package/dest/storage/note_data_provider/note_data_provider.d.ts +0 -84
- package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
- package/dest/storage/note_data_provider/note_data_provider.js +0 -322
- package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -51
- package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
- package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -115
- package/dest/storage/tagging_data_provider/index.d.ts +0 -3
- package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.js +0 -2
- package/dest/storage/tagging_data_provider/recipient_tagging_data_provider.d.ts +0 -31
- package/dest/storage/tagging_data_provider/recipient_tagging_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/recipient_tagging_data_provider.js +0 -65
- package/dest/storage/tagging_data_provider/sender_tagging_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/sender_tagging_data_provider.js +0 -196
- package/dest/tagging/recipient_sync/new_recipient_tagging_data_provider.d.ts +0 -21
- package/dest/tagging/recipient_sync/new_recipient_tagging_data_provider.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/new_recipient_tagging_data_provider.js +0 -42
- package/dest/tagging/sync/sync_sender_tagging_indexes.d.ts.map +0 -1
- package/dest/tagging/sync/utils/get_status_change_of_pending.d.ts.map +0 -1
- package/dest/tagging/sync/utils/load_and_store_new_tagging_indexes.d.ts.map +0 -1
- package/dest/tagging/utils.d.ts +0 -18
- package/dest/tagging/utils.d.ts.map +0 -1
- package/dest/tagging/utils.js +0 -25
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -133
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/storage/address_data_provider/index.ts +0 -1
- package/src/storage/anchor_block_data_provider/index.ts +0 -1
- package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -179
- package/src/storage/capsule_data_provider/index.ts +0 -1
- package/src/storage/contract_data_provider/index.ts +0 -1
- package/src/storage/note_data_provider/index.ts +0 -2
- package/src/storage/note_data_provider/note_data_provider.ts +0 -412
- package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -162
- package/src/storage/tagging_data_provider/index.ts +0 -2
- package/src/storage/tagging_data_provider/recipient_tagging_data_provider.ts +0 -86
- package/src/storage/tagging_data_provider/sender_tagging_data_provider.ts +0 -244
- package/src/tagging/recipient_sync/new_recipient_tagging_data_provider.ts +0 -53
- package/src/tagging/utils.ts +0 -32
- package/src/tree_membership/tree_membership_service.ts +0 -112
- /package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +0 -0
- /package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +0 -0
|
@@ -1,17 +1,21 @@
|
|
|
1
|
+
import type { ARCHIVE_HEIGHT, NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
|
|
1
2
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Aes128 } from '@aztec/foundation/crypto/aes128';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
5
|
-
import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
6
|
+
import { LogLevels, type Logger, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import type { MembershipWitness } from '@aztec/foundation/trees';
|
|
6
8
|
import type { KeyStore } from '@aztec/key-store';
|
|
7
9
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
8
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
9
12
|
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
10
13
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
11
14
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
12
15
|
import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
13
16
|
import { computeAddressSecret } from '@aztec/stdlib/keys';
|
|
14
17
|
import { deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
18
|
+
import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
15
19
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
16
20
|
import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
17
21
|
import type { BlockHeader, Capsule } from '@aztec/stdlib/tx';
|
|
@@ -20,16 +24,13 @@ import { EventService } from '../../events/event_service.js';
|
|
|
20
24
|
import { LogService } from '../../logs/log_service.js';
|
|
21
25
|
import { NoteService } from '../../notes/note_service.js';
|
|
22
26
|
import { ORACLE_VERSION } from '../../oracle_version.js';
|
|
23
|
-
import {
|
|
24
|
-
import type {
|
|
25
|
-
import type {
|
|
26
|
-
import type {
|
|
27
|
-
import type {
|
|
28
|
-
import type {
|
|
29
|
-
import type {
|
|
30
|
-
import type { RecipientTaggingDataProvider } from '../../storage/tagging_data_provider/recipient_tagging_data_provider.js';
|
|
31
|
-
import type { SenderTaggingDataProvider } from '../../storage/tagging_data_provider/sender_tagging_data_provider.js';
|
|
32
|
-
import { TreeMembershipService } from '../../tree_membership/tree_membership_service.js';
|
|
27
|
+
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
28
|
+
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
29
|
+
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
30
|
+
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
31
|
+
import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
|
|
32
|
+
import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
|
|
33
|
+
import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
|
|
33
34
|
import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
|
|
34
35
|
import { LogRetrievalRequest } from '../noir-structs/log_retrieval_request.js';
|
|
35
36
|
import { LogRetrievalResponse } from '../noir-structs/log_retrieval_response.js';
|
|
@@ -39,6 +40,27 @@ import { pickNotes } from '../pick_notes.js';
|
|
|
39
40
|
import type { IMiscOracle, IUtilityExecutionOracle, NoteData } from './interfaces.js';
|
|
40
41
|
import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
41
42
|
|
|
43
|
+
/** Args for UtilityExecutionOracle constructor. */
|
|
44
|
+
export type UtilityExecutionOracleArgs = {
|
|
45
|
+
contractAddress: AztecAddress;
|
|
46
|
+
/** List of transient auth witnesses to be used during this simulation */
|
|
47
|
+
authWitnesses: AuthWitness[];
|
|
48
|
+
capsules: Capsule[]; // TODO(#12425): Rename to transientCapsules
|
|
49
|
+
anchorBlockHeader: BlockHeader;
|
|
50
|
+
contractStore: ContractStore;
|
|
51
|
+
noteStore: NoteStore;
|
|
52
|
+
keyStore: KeyStore;
|
|
53
|
+
addressStore: AddressStore;
|
|
54
|
+
aztecNode: AztecNode;
|
|
55
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
56
|
+
senderAddressBookStore: SenderAddressBookStore;
|
|
57
|
+
capsuleStore: CapsuleStore;
|
|
58
|
+
privateEventStore: PrivateEventStore;
|
|
59
|
+
jobId: string;
|
|
60
|
+
log?: ReturnType<typeof createLogger>;
|
|
61
|
+
scopes?: AztecAddress[];
|
|
62
|
+
};
|
|
63
|
+
|
|
42
64
|
/**
|
|
43
65
|
* The oracle for an execution of utility contract functions.
|
|
44
66
|
*/
|
|
@@ -46,27 +68,43 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
46
68
|
isMisc = true as const;
|
|
47
69
|
isUtility = true as const;
|
|
48
70
|
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
private contractLogger: Logger | undefined;
|
|
72
|
+
|
|
73
|
+
protected readonly contractAddress: AztecAddress;
|
|
74
|
+
protected readonly authWitnesses: AuthWitness[];
|
|
75
|
+
protected readonly capsules: Capsule[];
|
|
76
|
+
protected readonly anchorBlockHeader: BlockHeader;
|
|
77
|
+
protected readonly contractStore: ContractStore;
|
|
78
|
+
protected readonly noteStore: NoteStore;
|
|
79
|
+
protected readonly keyStore: KeyStore;
|
|
80
|
+
protected readonly addressStore: AddressStore;
|
|
81
|
+
protected readonly aztecNode: AztecNode;
|
|
82
|
+
protected readonly recipientTaggingStore: RecipientTaggingStore;
|
|
83
|
+
protected readonly senderAddressBookStore: SenderAddressBookStore;
|
|
84
|
+
protected readonly capsuleStore: CapsuleStore;
|
|
85
|
+
protected readonly privateEventStore: PrivateEventStore;
|
|
86
|
+
protected readonly jobId: string;
|
|
87
|
+
protected log: ReturnType<typeof createLogger>;
|
|
88
|
+
protected readonly scopes?: AztecAddress[];
|
|
89
|
+
|
|
90
|
+
constructor(args: UtilityExecutionOracleArgs) {
|
|
91
|
+
this.contractAddress = args.contractAddress;
|
|
92
|
+
this.authWitnesses = args.authWitnesses;
|
|
93
|
+
this.capsules = args.capsules;
|
|
94
|
+
this.anchorBlockHeader = args.anchorBlockHeader;
|
|
95
|
+
this.contractStore = args.contractStore;
|
|
96
|
+
this.noteStore = args.noteStore;
|
|
97
|
+
this.keyStore = args.keyStore;
|
|
98
|
+
this.addressStore = args.addressStore;
|
|
99
|
+
this.aztecNode = args.aztecNode;
|
|
100
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
101
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
102
|
+
this.capsuleStore = args.capsuleStore;
|
|
103
|
+
this.privateEventStore = args.privateEventStore;
|
|
104
|
+
this.jobId = args.jobId;
|
|
105
|
+
this.log = args.log ?? createLogger('simulator:client_view_context');
|
|
106
|
+
this.scopes = args.scopes;
|
|
107
|
+
}
|
|
70
108
|
|
|
71
109
|
public utilityAssertCompatibleOracleVersion(version: number): void {
|
|
72
110
|
if (version !== ORACLE_VERSION) {
|
|
@@ -79,13 +117,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
79
117
|
}
|
|
80
118
|
|
|
81
119
|
public utilityGetUtilityContext(): UtilityContext {
|
|
82
|
-
return UtilityContext.
|
|
83
|
-
blockNumber: this.anchorBlockHeader.globalVariables.blockNumber,
|
|
84
|
-
timestamp: this.anchorBlockHeader.globalVariables.timestamp,
|
|
85
|
-
contractAddress: this.contractAddress,
|
|
86
|
-
version: this.anchorBlockHeader.globalVariables.version,
|
|
87
|
-
chainId: this.anchorBlockHeader.globalVariables.chainId,
|
|
88
|
-
});
|
|
120
|
+
return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
|
|
89
121
|
}
|
|
90
122
|
|
|
91
123
|
/**
|
|
@@ -93,65 +125,93 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
93
125
|
* @param pkMHash - The master public key hash.
|
|
94
126
|
* @returns A Promise that resolves to nullifier keys.
|
|
95
127
|
* @throws If the keys are not registered in the key store.
|
|
128
|
+
* @throws If scopes are defined and the account is not in the scopes.
|
|
96
129
|
*/
|
|
97
|
-
public utilityGetKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
130
|
+
public async utilityGetKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
131
|
+
// If scopes are defined, check that the key belongs to an account in the scopes.
|
|
132
|
+
if (this.scopes && this.scopes.length > 0) {
|
|
133
|
+
let hasAccess = false;
|
|
134
|
+
for (let i = 0; i < this.scopes.length && !hasAccess; i++) {
|
|
135
|
+
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
136
|
+
hasAccess = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!hasAccess) {
|
|
140
|
+
throw new Error(`Key validation request denied: no scoped account has a key with hash ${pkMHash.toString()}.`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
98
143
|
return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
|
|
99
144
|
}
|
|
100
145
|
|
|
101
146
|
/**
|
|
102
|
-
* Fetches the index and sibling path of a leaf at a given block from
|
|
103
|
-
* @param
|
|
104
|
-
*
|
|
105
|
-
* @param
|
|
106
|
-
* @returns The index and sibling path
|
|
147
|
+
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
148
|
+
* @param anchorBlockHash - The hash of a block that contains the note hash tree root in which to find the membership
|
|
149
|
+
* witness.
|
|
150
|
+
* @param noteHash - The note hash to find in the note hash tree.
|
|
151
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
152
|
+
*/
|
|
153
|
+
public utilityGetNoteHashMembershipWitness(
|
|
154
|
+
anchorBlockHash: BlockHash,
|
|
155
|
+
noteHash: Fr,
|
|
156
|
+
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
157
|
+
return this.aztecNode.getNoteHashMembershipWitness(anchorBlockHash, noteHash);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Fetches the index and sibling path of a block hash in the archive tree.
|
|
162
|
+
*
|
|
163
|
+
* Block hashes are the leaves of the archive tree. Each time a new block is added to the chain,
|
|
164
|
+
* its block hash is appended as a new leaf to the archive tree.
|
|
165
|
+
*
|
|
166
|
+
* @param anchorBlockHash - The hash of a block that contains the archive tree root in which to find the membership
|
|
167
|
+
* witness.
|
|
168
|
+
* @param blockHash - The block hash to find in the archive tree.
|
|
169
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
107
170
|
*/
|
|
108
|
-
public
|
|
109
|
-
|
|
110
|
-
|
|
171
|
+
public utilityGetBlockHashMembershipWitness(
|
|
172
|
+
anchorBlockHash: BlockHash,
|
|
173
|
+
blockHash: BlockHash,
|
|
174
|
+
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
175
|
+
return this.aztecNode.getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
111
176
|
}
|
|
112
177
|
|
|
113
178
|
/**
|
|
114
179
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
115
|
-
* @param
|
|
180
|
+
* @param blockHash - The block hash at which to get the index.
|
|
116
181
|
* @param nullifier - Nullifier we try to find witness for.
|
|
117
182
|
* @returns The nullifier membership witness (if found).
|
|
118
183
|
*/
|
|
119
|
-
public
|
|
120
|
-
|
|
184
|
+
public utilityGetNullifierMembershipWitness(
|
|
185
|
+
blockHash: BlockHash,
|
|
121
186
|
nullifier: Fr,
|
|
122
187
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
123
|
-
return
|
|
188
|
+
return this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
|
|
124
189
|
}
|
|
125
190
|
|
|
126
191
|
/**
|
|
127
192
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
128
|
-
* @param
|
|
193
|
+
* @param blockHash - The block hash at which to get the index.
|
|
129
194
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
130
195
|
* @returns The low nullifier membership witness (if found).
|
|
131
196
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
132
197
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
133
198
|
* we are trying to prove non-inclusion for.
|
|
134
199
|
*/
|
|
135
|
-
public
|
|
136
|
-
|
|
200
|
+
public utilityGetLowNullifierMembershipWitness(
|
|
201
|
+
blockHash: BlockHash,
|
|
137
202
|
nullifier: Fr,
|
|
138
203
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
139
|
-
|
|
140
|
-
return await treeMembershipService.getLowNullifierMembershipWitness(blockNumber, nullifier);
|
|
204
|
+
return this.aztecNode.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
141
205
|
}
|
|
142
206
|
|
|
143
207
|
/**
|
|
144
208
|
* Returns a public data tree witness for a given leaf slot at a given block.
|
|
145
|
-
* @param
|
|
209
|
+
* @param blockHash - The block hash at which to get the index.
|
|
146
210
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
147
211
|
* @returns - The witness
|
|
148
212
|
*/
|
|
149
|
-
public
|
|
150
|
-
|
|
151
|
-
leafSlot: Fr,
|
|
152
|
-
): Promise<PublicDataWitness | undefined> {
|
|
153
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockDataProvider);
|
|
154
|
-
return await treeMembershipService.getPublicDataWitness(blockNumber, leafSlot);
|
|
213
|
+
public utilityGetPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
214
|
+
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
155
215
|
}
|
|
156
216
|
|
|
157
217
|
/**
|
|
@@ -160,27 +220,26 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
160
220
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
161
221
|
*/
|
|
162
222
|
public async utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
163
|
-
const anchorBlockNumber =
|
|
223
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
164
224
|
if (blockNumber > anchorBlockNumber) {
|
|
165
225
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
166
226
|
}
|
|
167
227
|
|
|
168
228
|
const block = await this.aztecNode.getBlock(blockNumber);
|
|
169
|
-
return block?.
|
|
229
|
+
return block?.header;
|
|
170
230
|
}
|
|
171
231
|
|
|
172
232
|
/**
|
|
173
233
|
* Retrieve the complete address associated to a given address.
|
|
174
234
|
* @param account - The account address.
|
|
175
|
-
* @returns A complete address associated with the input address.
|
|
176
|
-
* @throws An error if the account is not registered in the database.
|
|
235
|
+
* @returns A complete address associated with the input address, or `undefined` if not registered.
|
|
177
236
|
*/
|
|
178
|
-
public
|
|
179
|
-
return this.getCompleteAddress(account);
|
|
237
|
+
public utilityTryGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
238
|
+
return this.addressStore.getCompleteAddress(account);
|
|
180
239
|
}
|
|
181
240
|
|
|
182
|
-
protected async
|
|
183
|
-
const completeAddress = await this.
|
|
241
|
+
protected async getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress> {
|
|
242
|
+
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
184
243
|
if (!completeAddress) {
|
|
185
244
|
throw new Error(
|
|
186
245
|
`No public key registered for address ${account}.
|
|
@@ -200,7 +259,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
200
259
|
}
|
|
201
260
|
|
|
202
261
|
protected async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
203
|
-
const instance = await this.
|
|
262
|
+
const instance = await this.contractStore.getContractInstance(address);
|
|
204
263
|
if (!instance) {
|
|
205
264
|
throw new Error(`No contract instance found for address ${address.toString()}`);
|
|
206
265
|
}
|
|
@@ -256,7 +315,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
256
315
|
offset: number,
|
|
257
316
|
status: NoteStatus,
|
|
258
317
|
): Promise<NoteData[]> {
|
|
259
|
-
const noteService = new NoteService(this.
|
|
318
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
260
319
|
|
|
261
320
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
262
321
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -280,14 +339,18 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
280
339
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
281
340
|
*/
|
|
282
341
|
public async utilityCheckNullifierExists(innerNullifier: Fr) {
|
|
283
|
-
const nullifier = await
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
342
|
+
const [nullifier, anchorBlockHash] = await Promise.all([
|
|
343
|
+
siloNullifier(this.contractAddress, innerNullifier!),
|
|
344
|
+
this.anchorBlockHeader.hash(),
|
|
345
|
+
]);
|
|
346
|
+
const [leafIndex] = await this.aztecNode.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, [
|
|
347
|
+
nullifier,
|
|
348
|
+
]);
|
|
349
|
+
return leafIndex?.data !== undefined;
|
|
287
350
|
}
|
|
288
351
|
|
|
289
352
|
/**
|
|
290
|
-
* Fetches a message from the
|
|
353
|
+
* Fetches a message from the executionStore, given its key.
|
|
291
354
|
* @param contractAddress - Address of a contract by which the message was emitted.
|
|
292
355
|
* @param messageHash - Hash of the message.
|
|
293
356
|
* @param secret - Secret used to compute a nullifier.
|
|
@@ -295,69 +358,82 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
295
358
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
296
359
|
*/
|
|
297
360
|
public async utilityGetL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
298
|
-
const
|
|
299
|
-
|
|
361
|
+
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
362
|
+
this.aztecNode,
|
|
300
363
|
contractAddress,
|
|
301
364
|
messageHash,
|
|
302
365
|
secret,
|
|
303
366
|
);
|
|
304
367
|
|
|
305
|
-
// Assuming messageIndex is what you intended to use for the index in MessageLoadOracleInputs
|
|
306
368
|
return new MessageLoadOracleInputs(messageIndex, siblingPath);
|
|
307
369
|
}
|
|
308
370
|
|
|
309
371
|
/**
|
|
310
372
|
* Read the public storage data.
|
|
373
|
+
* @param blockHash - The block hash to read storage at.
|
|
311
374
|
* @param contractAddress - The address to read storage from.
|
|
312
375
|
* @param startStorageSlot - The starting storage slot.
|
|
313
|
-
* @param blockNumber - The block number to read storage at.
|
|
314
376
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
315
377
|
*/
|
|
316
378
|
public async utilityStorageRead(
|
|
379
|
+
blockHash: BlockHash,
|
|
317
380
|
contractAddress: AztecAddress,
|
|
318
381
|
startStorageSlot: Fr,
|
|
319
|
-
blockNumber: BlockNumber,
|
|
320
382
|
numberOfElements: number,
|
|
321
383
|
) {
|
|
322
|
-
const
|
|
323
|
-
|
|
384
|
+
const slots = Array(numberOfElements)
|
|
385
|
+
.fill(0)
|
|
386
|
+
.map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
|
|
324
387
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
388
|
+
const values = await Promise.all(
|
|
389
|
+
slots.map(storageSlot => this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)),
|
|
390
|
+
);
|
|
391
|
+
|
|
392
|
+
this.log.debug(
|
|
393
|
+
`Oracle storage read: slots=[${slots.map(slot => slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`,
|
|
394
|
+
);
|
|
330
395
|
|
|
331
|
-
this.log.debug(
|
|
332
|
-
`Oracle storage read: slot=${storageSlot.toString()} address-${contractAddress.toString()} value=${value}`,
|
|
333
|
-
);
|
|
334
|
-
values.push(value);
|
|
335
|
-
}
|
|
336
396
|
return values;
|
|
337
397
|
}
|
|
338
398
|
|
|
339
|
-
|
|
399
|
+
/**
|
|
400
|
+
* Returns a per-contract logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
401
|
+
*/
|
|
402
|
+
async #getContractLogger(): Promise<Logger> {
|
|
403
|
+
if (!this.contractLogger) {
|
|
404
|
+
const addrAbbrev = this.contractAddress.toString().slice(0, 10);
|
|
405
|
+
const name = await this.contractStore.getDebugContractName(this.contractAddress);
|
|
406
|
+
const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::${addrAbbrev}`;
|
|
407
|
+
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
408
|
+
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
409
|
+
this.contractLogger = createLogger(module, { instanceId: this.jobId });
|
|
410
|
+
}
|
|
411
|
+
return this.contractLogger;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
public async utilityLog(level: number, message: string, fields: Fr[]): Promise<void> {
|
|
340
415
|
if (!LogLevels[level]) {
|
|
341
|
-
throw new Error(`Invalid
|
|
416
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
342
417
|
}
|
|
343
418
|
const levelName = LogLevels[level];
|
|
344
|
-
this
|
|
419
|
+
const logger = await this.#getContractLogger();
|
|
420
|
+
logger[levelName](`${applyStringFormatting(message, fields)}`);
|
|
345
421
|
}
|
|
346
422
|
|
|
347
423
|
public async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
348
424
|
const logService = new LogService(
|
|
349
425
|
this.aztecNode,
|
|
350
|
-
this.
|
|
426
|
+
this.anchorBlockHeader,
|
|
351
427
|
this.keyStore,
|
|
352
|
-
this.
|
|
353
|
-
this.
|
|
354
|
-
this.
|
|
428
|
+
this.capsuleStore,
|
|
429
|
+
this.recipientTaggingStore,
|
|
430
|
+
this.senderAddressBookStore,
|
|
431
|
+
this.addressStore,
|
|
432
|
+
this.jobId,
|
|
433
|
+
this.log.getBindings(),
|
|
355
434
|
);
|
|
356
435
|
|
|
357
|
-
await logService.
|
|
358
|
-
|
|
359
|
-
const noteService = new NoteService(this.noteDataProvider, this.aztecNode, this.anchorBlockDataProvider);
|
|
360
|
-
await noteService.syncNoteNullifiers(this.contractAddress);
|
|
436
|
+
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
361
437
|
}
|
|
362
438
|
|
|
363
439
|
/**
|
|
@@ -370,12 +446,12 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
370
446
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
371
447
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
372
448
|
*/
|
|
373
|
-
public async
|
|
449
|
+
public async utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
374
450
|
contractAddress: AztecAddress,
|
|
375
451
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
376
452
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
377
453
|
) {
|
|
378
|
-
// TODO(#10727): allow other contracts to
|
|
454
|
+
// TODO(#10727): allow other contracts to store notes
|
|
379
455
|
if (!this.contractAddress.equals(contractAddress)) {
|
|
380
456
|
throw new Error(`Got a note validation request from ${contractAddress}, expected ${this.contractAddress}`);
|
|
381
457
|
}
|
|
@@ -383,16 +459,16 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
383
459
|
// We read all note and event validation requests and process them all concurrently. This makes the process much
|
|
384
460
|
// faster as we don't need to wait for the network round-trip.
|
|
385
461
|
const noteValidationRequests = (
|
|
386
|
-
await this.
|
|
462
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)
|
|
387
463
|
).map(NoteValidationRequest.fromFields);
|
|
388
464
|
|
|
389
465
|
const eventValidationRequests = (
|
|
390
|
-
await this.
|
|
466
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
391
467
|
).map(EventValidationRequest.fromFields);
|
|
392
468
|
|
|
393
|
-
const noteService = new NoteService(this.
|
|
394
|
-
const
|
|
395
|
-
noteService.
|
|
469
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
470
|
+
const noteStorePromises = noteValidationRequests.map(request =>
|
|
471
|
+
noteService.validateAndStoreNote(
|
|
396
472
|
request.contractAddress,
|
|
397
473
|
request.owner,
|
|
398
474
|
request.storageSlot,
|
|
@@ -406,11 +482,12 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
406
482
|
),
|
|
407
483
|
);
|
|
408
484
|
|
|
409
|
-
const eventService = new EventService(this.
|
|
410
|
-
const
|
|
411
|
-
eventService.
|
|
485
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
486
|
+
const eventStorePromises = eventValidationRequests.map(request =>
|
|
487
|
+
eventService.validateAndStoreEvent(
|
|
412
488
|
request.contractAddress,
|
|
413
489
|
request.eventTypeId,
|
|
490
|
+
request.randomness,
|
|
414
491
|
request.serializedEvent,
|
|
415
492
|
request.eventCommitment,
|
|
416
493
|
request.txHash,
|
|
@@ -418,11 +495,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
418
495
|
),
|
|
419
496
|
);
|
|
420
497
|
|
|
421
|
-
await Promise.all([...
|
|
498
|
+
await Promise.all([...noteStorePromises, ...eventStorePromises]);
|
|
422
499
|
|
|
423
500
|
// Requests are cleared once we're done.
|
|
424
|
-
await this.
|
|
425
|
-
await this.
|
|
501
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
502
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
426
503
|
}
|
|
427
504
|
|
|
428
505
|
public async utilityBulkRetrieveLogs(
|
|
@@ -438,28 +515,32 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
438
515
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
439
516
|
// don't need to wait for the network round-trip.
|
|
440
517
|
const logRetrievalRequests = (
|
|
441
|
-
await this.
|
|
518
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, this.jobId)
|
|
442
519
|
).map(LogRetrievalRequest.fromFields);
|
|
443
520
|
|
|
444
521
|
const logService = new LogService(
|
|
445
522
|
this.aztecNode,
|
|
446
|
-
this.
|
|
523
|
+
this.anchorBlockHeader,
|
|
447
524
|
this.keyStore,
|
|
448
|
-
this.
|
|
449
|
-
this.
|
|
450
|
-
this.
|
|
525
|
+
this.capsuleStore,
|
|
526
|
+
this.recipientTaggingStore,
|
|
527
|
+
this.senderAddressBookStore,
|
|
528
|
+
this.addressStore,
|
|
529
|
+
this.jobId,
|
|
530
|
+
this.log.getBindings(),
|
|
451
531
|
);
|
|
452
532
|
|
|
453
533
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
454
534
|
|
|
455
535
|
// Requests are cleared once we're done.
|
|
456
|
-
await this.
|
|
536
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, [], this.jobId);
|
|
457
537
|
|
|
458
538
|
// The responses are stored as Option<LogRetrievalResponse> in a second CapsuleArray.
|
|
459
|
-
await this.
|
|
539
|
+
await this.capsuleStore.setCapsuleArray(
|
|
460
540
|
contractAddress,
|
|
461
541
|
logRetrievalResponsesArrayBaseSlot,
|
|
462
542
|
maybeLogRetrievalResponses.map(LogRetrievalResponse.toSerializedOption),
|
|
543
|
+
this.jobId,
|
|
463
544
|
);
|
|
464
545
|
}
|
|
465
546
|
|
|
@@ -468,7 +549,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
468
549
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
469
550
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
470
551
|
}
|
|
471
|
-
|
|
552
|
+
this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule, this.jobId);
|
|
553
|
+
return Promise.resolve();
|
|
472
554
|
}
|
|
473
555
|
|
|
474
556
|
public async utilityLoadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
@@ -479,7 +561,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
479
561
|
return (
|
|
480
562
|
// TODO(#12425): On the following line, the pertinent capsule gets overshadowed by the transient one. Tackle this.
|
|
481
563
|
this.capsules.find(c => c.contractAddress.equals(contractAddress) && c.storageSlot.equals(slot))?.data ??
|
|
482
|
-
(await this.
|
|
564
|
+
(await this.capsuleStore.loadCapsule(this.contractAddress, slot, this.jobId))
|
|
483
565
|
);
|
|
484
566
|
}
|
|
485
567
|
|
|
@@ -488,7 +570,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
488
570
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
489
571
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
490
572
|
}
|
|
491
|
-
|
|
573
|
+
this.capsuleStore.deleteCapsule(this.contractAddress, slot, this.jobId);
|
|
574
|
+
return Promise.resolve();
|
|
492
575
|
}
|
|
493
576
|
|
|
494
577
|
public utilityCopyCapsule(
|
|
@@ -501,7 +584,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
501
584
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
502
585
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
503
586
|
}
|
|
504
|
-
return this.
|
|
587
|
+
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries, this.jobId);
|
|
505
588
|
}
|
|
506
589
|
|
|
507
590
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
@@ -522,7 +605,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
522
605
|
|
|
523
606
|
protected async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
524
607
|
// TODO(#12656): return an app-siloed secret
|
|
525
|
-
const recipientCompleteAddress = await this.
|
|
608
|
+
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
526
609
|
const ivskM = await this.keyStore.getMasterSecretKey(
|
|
527
610
|
recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey,
|
|
528
611
|
);
|
|
@@ -2,21 +2,21 @@ import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
|
2
2
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { ContractOverrides } from '@aztec/stdlib/tx';
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
|
-
* Proxy generator for a
|
|
8
|
+
* Proxy generator for a ContractStore that allows overriding contract instances and artifacts, so
|
|
9
9
|
* the contract function simulator can execute different bytecode on certain addresses. An example use case
|
|
10
10
|
* would be overriding your own account contract so that valid signatures don't have to be provided while simulating.
|
|
11
11
|
*/
|
|
12
|
-
export class
|
|
13
|
-
static create(
|
|
12
|
+
export class ProxiedContractStoreFactory {
|
|
13
|
+
static create(contractStore: ContractStore, overrides?: ContractOverrides) {
|
|
14
14
|
if (!overrides) {
|
|
15
|
-
return
|
|
15
|
+
return contractStore;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
return new Proxy(
|
|
19
|
-
get(target, prop: keyof
|
|
18
|
+
return new Proxy(contractStore, {
|
|
19
|
+
get(target, prop: keyof ContractStore) {
|
|
20
20
|
switch (prop) {
|
|
21
21
|
case 'getContractInstance': {
|
|
22
22
|
return async (address: AztecAddress) => {
|