@aztec/pxe 3.0.3 → 4.0.0-devnet.1-patch.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +45 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
- package/dest/block_synchronizer/block_synchronizer.js +153 -0
- package/dest/block_synchronizer/index.d.ts +2 -0
- package/dest/block_synchronizer/index.d.ts.map +1 -0
- package/dest/block_synchronizer/index.js +1 -0
- package/dest/config/index.d.ts +6 -4
- 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 +41 -13
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +73 -32
- 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/execution_tagging_index_cache.d.ts +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +1 -1
- 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/log_retrieval_request.d.ts +4 -3
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
- 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 +19 -16
- 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 +11 -9
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +70 -47
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -28
- 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 +31 -22
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +39 -43
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +84 -29
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +198 -71
- 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 +23 -5
- package/dest/contract_sync/contract_sync_service.d.ts +41 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +82 -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 +44 -0
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
- package/dest/debug/pxe_debug_utils.js +48 -0
- package/dest/entrypoints/client/bundle/index.d.ts +1 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +0 -1
- 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 +22 -7
- package/dest/entrypoints/client/lazy/index.d.ts +1 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +0 -1
- 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 +23 -8
- 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 +4 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -1
- 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 +30 -15
- 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 +15 -0
- package/dest/events/event_service.d.ts.map +1 -0
- package/dest/events/event_service.js +44 -0
- package/dest/events/private_event_filter_validator.d.ts +6 -5
- 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 +28 -0
- package/dest/logs/log_service.d.ts.map +1 -0
- package/dest/logs/log_service.js +123 -0
- package/dest/notes/index.d.ts +2 -0
- package/dest/notes/index.d.ts.map +1 -0
- package/dest/notes/index.js +1 -0
- package/dest/notes/note_service.d.ts +48 -0
- package/dest/notes/note_service.d.ts.map +1 -0
- package/dest/notes/note_service.js +147 -0
- 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 +44 -69
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +199 -210
- 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/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +10 -10
- package/dest/storage/{sync_data_provider → anchor_block_store}/index.d.ts +2 -2
- 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} +6 -4
- 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} +56 -16
- 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 +83 -0
- package/dest/storage/note_store/note_store.d.ts.map +1 -0
- package/dest/storage/note_store/note_store.js +344 -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_store/sender_tagging_store.d.ts +77 -0
- 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 -2
- 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 +16 -6
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +15 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +15 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +15 -0
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +32 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +21 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +74 -0
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +29 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +21 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +60 -0
- package/package.json +27 -18
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +178 -0
- package/src/block_synchronizer/index.ts +1 -0
- package/src/config/index.ts +17 -3
- 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 +116 -33
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +1 -1
- 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/log_retrieval_request.ts +5 -4
- 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 +24 -15
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +82 -50
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -68
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +118 -56
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +289 -87
- package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
- package/src/contract_sync/contract_sync_service.ts +129 -0
- package/src/contract_sync/helpers.ts +93 -0
- package/src/debug/pxe_debug_utils.ts +91 -0
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +15 -16
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +16 -17
- package/src/entrypoints/pxe_creation_options.ts +4 -2
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +26 -34
- package/src/error_enriching.ts +7 -15
- package/src/events/event_service.ts +71 -0
- package/src/events/private_event_filter_validator.ts +4 -5
- package/src/job_coordinator/job_coordinator.ts +150 -0
- package/src/logs/log_service.ts +220 -0
- package/src/notes/index.ts +1 -0
- package/src/notes/note_service.ts +195 -0
- 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 +281 -260
- 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/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +10 -12
- 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} +66 -13
- 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 +415 -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 -2
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +18 -5
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +143 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +49 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +99 -0
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +36 -0
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +84 -0
- package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -268
- package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
- package/dest/contract_function_simulator/execution_data_provider.js +0 -14
- 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/contract_function_simulator/pxe_oracle_interface.d.ts +0 -124
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
- package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -727
- 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/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/capsule_data_provider/capsule_data_provider.d.ts +0 -25
- 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 -118
- 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/sync_data_provider/index.d.ts.map +0 -1
- package/dest/storage/sync_data_provider/index.js +0 -1
- package/dest/storage/sync_data_provider/sync_data_provider.d.ts +0 -11
- package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.d.ts +0 -2
- package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.js +0 -1
- package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
- package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
- package/dest/synchronizer/index.d.ts +0 -2
- package/dest/synchronizer/index.d.ts.map +0 -1
- package/dest/synchronizer/index.js +0 -1
- package/dest/synchronizer/synchronizer.d.ts +0 -36
- package/dest/synchronizer/synchronizer.d.ts.map +0 -1
- package/dest/synchronizer/synchronizer.js +0 -102
- package/dest/tagging/siloed_tag.d.ts +0 -14
- package/dest/tagging/siloed_tag.d.ts.map +0 -1
- package/dest/tagging/siloed_tag.js +0 -20
- package/dest/tagging/tag.d.ts +0 -12
- package/dest/tagging/tag.d.ts.map +0 -1
- package/dest/tagging/tag.js +0 -17
- package/dest/tagging/utils.d.ts +0 -18
- package/dest/tagging/utils.d.ts.map +0 -1
- package/dest/tagging/utils.js +0 -24
- package/src/contract_function_simulator/execution_data_provider.ts +0 -343
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1055
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -133
- package/src/storage/address_data_provider/index.ts +0 -1
- package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
- 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/sync_data_provider/index.ts +0 -1
- package/src/storage/tagging_data_provider/index.ts +0 -1
- package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
- package/src/synchronizer/index.ts +0 -1
- package/src/synchronizer/synchronizer.ts +0 -121
- package/src/tagging/siloed_tag.ts +0 -22
- package/src/tagging/tag.ts +0 -16
- package/src/tagging/utils.ts +0 -31
- /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
package/src/pxe.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
4
5
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
5
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
7
|
import { KeyStore } from '@aztec/key-store';
|
|
@@ -12,32 +13,27 @@ import {
|
|
|
12
13
|
type ContractArtifact,
|
|
13
14
|
EventSelector,
|
|
14
15
|
FunctionCall,
|
|
15
|
-
FunctionSelector,
|
|
16
16
|
FunctionType,
|
|
17
17
|
decodeFunctionSignature,
|
|
18
|
-
encodeArguments,
|
|
19
18
|
} from '@aztec/stdlib/abi';
|
|
20
19
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
21
20
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
22
21
|
import {
|
|
23
22
|
CompleteAddress,
|
|
24
|
-
type ContractClassWithId,
|
|
25
23
|
type ContractInstanceWithAddress,
|
|
26
24
|
type PartialAddress,
|
|
27
25
|
computeContractAddressFromInstance,
|
|
28
26
|
getContractClassFromArtifact,
|
|
29
27
|
} from '@aztec/stdlib/contract';
|
|
30
28
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
31
|
-
import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
|
|
32
29
|
import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
33
30
|
import type {
|
|
34
31
|
PrivateExecutionStep,
|
|
35
32
|
PrivateKernelExecutionProofOutput,
|
|
36
33
|
PrivateKernelTailCircuitPublicInputs,
|
|
37
34
|
} from '@aztec/stdlib/kernel';
|
|
38
|
-
import type { NotesFilter } from '@aztec/stdlib/note';
|
|
39
|
-
import { NoteDao } from '@aztec/stdlib/note';
|
|
40
35
|
import {
|
|
36
|
+
BlockHeader,
|
|
41
37
|
type ContractOverrides,
|
|
42
38
|
type InTx,
|
|
43
39
|
PrivateExecutionResult,
|
|
@@ -56,30 +52,34 @@ import {
|
|
|
56
52
|
|
|
57
53
|
import { inspect } from 'util';
|
|
58
54
|
|
|
55
|
+
import { BlockSynchronizer } from './block_synchronizer/index.js';
|
|
59
56
|
import type { PXEConfig } from './config/index.js';
|
|
57
|
+
import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
|
|
60
58
|
import {
|
|
61
59
|
ContractFunctionSimulator,
|
|
62
60
|
generateSimulatedProvingResult,
|
|
63
61
|
} from './contract_function_simulator/contract_function_simulator.js';
|
|
64
|
-
import {
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
67
|
-
import {
|
|
62
|
+
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
63
|
+
import { ContractSyncService } from './contract_sync/contract_sync_service.js';
|
|
64
|
+
import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
65
|
+
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
68
66
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
69
67
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
68
|
+
import { JobCoordinator } from './job_coordinator/job_coordinator.js';
|
|
70
69
|
import {
|
|
71
70
|
PrivateKernelExecutionProver,
|
|
72
71
|
type PrivateKernelExecutionProverConfig,
|
|
73
72
|
} from './private_kernel/private_kernel_execution_prover.js';
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import {
|
|
81
|
-
import {
|
|
82
|
-
import {
|
|
73
|
+
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
74
|
+
import { AddressStore } from './storage/address_store/address_store.js';
|
|
75
|
+
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
76
|
+
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
77
|
+
import { ContractStore } from './storage/contract_store/contract_store.js';
|
|
78
|
+
import { NoteStore } from './storage/note_store/note_store.js';
|
|
79
|
+
import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
|
|
80
|
+
import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
|
|
81
|
+
import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
|
|
82
|
+
import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
|
|
83
83
|
|
|
84
84
|
export type PackedPrivateEvent = InTx & {
|
|
85
85
|
packedEvent: Fr[];
|
|
@@ -93,21 +93,26 @@ export type PackedPrivateEvent = InTx & {
|
|
|
93
93
|
export class PXE {
|
|
94
94
|
private constructor(
|
|
95
95
|
private node: AztecNode,
|
|
96
|
-
private
|
|
96
|
+
private blockStateSynchronizer: BlockSynchronizer,
|
|
97
97
|
private keyStore: KeyStore,
|
|
98
|
-
private
|
|
99
|
-
private
|
|
100
|
-
private
|
|
101
|
-
private
|
|
102
|
-
private
|
|
103
|
-
private
|
|
104
|
-
private
|
|
98
|
+
private contractStore: ContractStore,
|
|
99
|
+
private noteStore: NoteStore,
|
|
100
|
+
private capsuleStore: CapsuleStore,
|
|
101
|
+
private anchorBlockStore: AnchorBlockStore,
|
|
102
|
+
private senderTaggingStore: SenderTaggingStore,
|
|
103
|
+
private senderAddressBookStore: SenderAddressBookStore,
|
|
104
|
+
private recipientTaggingStore: RecipientTaggingStore,
|
|
105
|
+
private addressStore: AddressStore,
|
|
106
|
+
private privateEventStore: PrivateEventStore,
|
|
107
|
+
private contractSyncService: ContractSyncService,
|
|
105
108
|
private simulator: CircuitSimulator,
|
|
106
109
|
private proverEnabled: boolean,
|
|
107
110
|
private proofCreator: PrivateKernelProver,
|
|
108
111
|
private protocolContractsProvider: ProtocolContractsProvider,
|
|
109
112
|
private log: Logger,
|
|
110
113
|
private jobQueue: SerialQueue,
|
|
114
|
+
private jobCoordinator: JobCoordinator,
|
|
115
|
+
public debug: PXEDebugUtils,
|
|
111
116
|
) {}
|
|
112
117
|
|
|
113
118
|
/**
|
|
@@ -126,50 +131,87 @@ export class PXE {
|
|
|
126
131
|
config: PXEConfig,
|
|
127
132
|
loggerOrSuffix?: string | Logger,
|
|
128
133
|
) {
|
|
134
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
135
|
+
const bindings: LoggerBindings | undefined =
|
|
136
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
137
|
+
|
|
129
138
|
const log =
|
|
130
139
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
131
140
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
132
141
|
: loggerOrSuffix;
|
|
133
142
|
|
|
134
143
|
const proverEnabled = !!config.proverEnabled;
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
const
|
|
144
|
+
const addressStore = new AddressStore(store);
|
|
145
|
+
const privateEventStore = new PrivateEventStore(store);
|
|
146
|
+
const contractStore = new ContractStore(store);
|
|
147
|
+
const noteStore = new NoteStore(store);
|
|
148
|
+
const anchorBlockStore = new AnchorBlockStore(store);
|
|
149
|
+
const senderTaggingStore = new SenderTaggingStore(store);
|
|
150
|
+
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
151
|
+
const recipientTaggingStore = new RecipientTaggingStore(store);
|
|
152
|
+
const capsuleStore = new CapsuleStore(store);
|
|
142
153
|
const keyStore = new KeyStore(store);
|
|
143
154
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
144
|
-
const
|
|
155
|
+
const contractSyncService = new ContractSyncService(
|
|
156
|
+
node,
|
|
157
|
+
contractStore,
|
|
158
|
+
noteStore,
|
|
159
|
+
createLogger('pxe:contract_sync', bindings),
|
|
160
|
+
);
|
|
161
|
+
const synchronizer = new BlockSynchronizer(
|
|
145
162
|
node,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
163
|
+
store,
|
|
164
|
+
anchorBlockStore,
|
|
165
|
+
noteStore,
|
|
166
|
+
privateEventStore,
|
|
149
167
|
tipsStore,
|
|
168
|
+
contractSyncService,
|
|
150
169
|
config,
|
|
151
|
-
|
|
170
|
+
bindings,
|
|
152
171
|
);
|
|
153
172
|
|
|
173
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
174
|
+
jobCoordinator.registerStores([
|
|
175
|
+
capsuleStore,
|
|
176
|
+
senderTaggingStore,
|
|
177
|
+
recipientTaggingStore,
|
|
178
|
+
privateEventStore,
|
|
179
|
+
noteStore,
|
|
180
|
+
contractSyncService,
|
|
181
|
+
]);
|
|
182
|
+
|
|
183
|
+
const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
|
|
184
|
+
|
|
154
185
|
const jobQueue = new SerialQueue();
|
|
155
186
|
|
|
156
187
|
const pxe = new PXE(
|
|
157
188
|
node,
|
|
158
189
|
synchronizer,
|
|
159
190
|
keyStore,
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
191
|
+
contractStore,
|
|
192
|
+
noteStore,
|
|
193
|
+
capsuleStore,
|
|
194
|
+
anchorBlockStore,
|
|
195
|
+
senderTaggingStore,
|
|
196
|
+
senderAddressBookStore,
|
|
197
|
+
recipientTaggingStore,
|
|
198
|
+
addressStore,
|
|
199
|
+
privateEventStore,
|
|
200
|
+
contractSyncService,
|
|
167
201
|
simulator,
|
|
168
202
|
proverEnabled,
|
|
169
203
|
proofCreator,
|
|
170
204
|
protocolContractsProvider,
|
|
171
205
|
log,
|
|
172
206
|
jobQueue,
|
|
207
|
+
jobCoordinator,
|
|
208
|
+
debugUtils,
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
debugUtils.setPXEHelpers(
|
|
212
|
+
pxe.#putInJobQueue.bind(pxe),
|
|
213
|
+
pxe.#getSimulatorForTx.bind(pxe),
|
|
214
|
+
pxe.#simulateUtility.bind(pxe),
|
|
173
215
|
);
|
|
174
216
|
|
|
175
217
|
pxe.jobQueue.start();
|
|
@@ -183,19 +225,22 @@ export class PXE {
|
|
|
183
225
|
// Internal methods
|
|
184
226
|
|
|
185
227
|
#getSimulatorForTx(overrides?: { contracts?: ContractOverrides }) {
|
|
186
|
-
const
|
|
187
|
-
|
|
228
|
+
const proxyContractStore = ProxiedContractStoreFactory.create(this.contractStore, overrides?.contracts);
|
|
229
|
+
|
|
230
|
+
return new ContractFunctionSimulator(
|
|
231
|
+
proxyContractStore,
|
|
232
|
+
this.noteStore,
|
|
188
233
|
this.keyStore,
|
|
189
|
-
|
|
190
|
-
this.
|
|
191
|
-
this.
|
|
192
|
-
this.
|
|
193
|
-
this.
|
|
194
|
-
this.
|
|
195
|
-
this.
|
|
196
|
-
this.
|
|
234
|
+
this.addressStore,
|
|
235
|
+
BenchmarkedNodeFactory.create(this.node),
|
|
236
|
+
this.senderTaggingStore,
|
|
237
|
+
this.recipientTaggingStore,
|
|
238
|
+
this.senderAddressBookStore,
|
|
239
|
+
this.capsuleStore,
|
|
240
|
+
this.privateEventStore,
|
|
241
|
+
this.simulator,
|
|
242
|
+
this.contractSyncService,
|
|
197
243
|
);
|
|
198
|
-
return new ContractFunctionSimulator(pxeOracleInterface, this.simulator);
|
|
199
244
|
}
|
|
200
245
|
|
|
201
246
|
#contextualizeError(err: Error, ...context: string[]): Error {
|
|
@@ -218,7 +263,7 @@ export class PXE {
|
|
|
218
263
|
*
|
|
219
264
|
* Useful for tasks that cannot run concurrently, such as contract function simulation.
|
|
220
265
|
*/
|
|
221
|
-
#putInJobQueue<T>(fn: () => Promise<T>): Promise<T> {
|
|
266
|
+
#putInJobQueue<T>(fn: (jobId: string) => Promise<T>): Promise<T> {
|
|
222
267
|
// TODO(#12636): relax the conditions under which we forbid concurrency.
|
|
223
268
|
if (this.jobQueue.length() != 0) {
|
|
224
269
|
this.log.warn(
|
|
@@ -226,7 +271,22 @@ export class PXE {
|
|
|
226
271
|
);
|
|
227
272
|
}
|
|
228
273
|
|
|
229
|
-
return this.jobQueue.put(
|
|
274
|
+
return this.jobQueue.put(async () => {
|
|
275
|
+
const jobId = this.jobCoordinator.beginJob();
|
|
276
|
+
this.log.verbose(`Beginning job ${jobId}`);
|
|
277
|
+
|
|
278
|
+
try {
|
|
279
|
+
const result = await fn(jobId);
|
|
280
|
+
this.log.verbose(`Committing job ${jobId}`);
|
|
281
|
+
|
|
282
|
+
await this.jobCoordinator.commitJob(jobId);
|
|
283
|
+
return result;
|
|
284
|
+
} catch (err) {
|
|
285
|
+
this.log.verbose(`Aborting job ${jobId}`);
|
|
286
|
+
await this.jobCoordinator.abortJob(jobId);
|
|
287
|
+
throw err;
|
|
288
|
+
}
|
|
289
|
+
});
|
|
230
290
|
}
|
|
231
291
|
|
|
232
292
|
async #registerProtocolContracts() {
|
|
@@ -234,76 +294,51 @@ export class PXE {
|
|
|
234
294
|
for (const name of protocolContractNames) {
|
|
235
295
|
const { address, contractClass, instance, artifact } =
|
|
236
296
|
await this.protocolContractsProvider.getProtocolContractArtifact(name);
|
|
237
|
-
await this.
|
|
238
|
-
await this.
|
|
297
|
+
await this.contractStore.addContractArtifact(contractClass.id, artifact);
|
|
298
|
+
await this.contractStore.addContractInstance(instance);
|
|
239
299
|
registered[name] = address.toString();
|
|
240
300
|
}
|
|
241
301
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
242
302
|
}
|
|
243
303
|
|
|
244
|
-
async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
|
|
245
|
-
return !!(await this.node.getContractClass(id));
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
async #isContractPublished(address: AztecAddress): Promise<boolean> {
|
|
249
|
-
return !!(await this.node.getContract(address));
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
async #isContractInitialized(address: AztecAddress): Promise<boolean> {
|
|
253
|
-
const initNullifier = await siloNullifier(address, address.toField());
|
|
254
|
-
return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
async #getFunctionCall(functionName: string, args: any[], to: AztecAddress): Promise<FunctionCall> {
|
|
258
|
-
const contract = await this.contractDataProvider.getContract(to);
|
|
259
|
-
if (!contract) {
|
|
260
|
-
throw new Error(
|
|
261
|
-
`Unknown contract ${to}: add it to PXE by calling server.addContracts(...).\nSee docs for context: https://docs.aztec.network/developers/resources/debugging/aztecnr-errors#unknown-contract-0x0-add-it-to-pxe-by-calling-serveraddcontracts`,
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
const functionDao = contract.functions.find(f => f.name === functionName);
|
|
266
|
-
if (!functionDao) {
|
|
267
|
-
throw new Error(`Unknown function ${functionName} in contract ${contract.name}.`);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
return {
|
|
271
|
-
name: functionDao.name,
|
|
272
|
-
args: encodeArguments(functionDao, args),
|
|
273
|
-
selector: await FunctionSelector.fromNameAndParameters(functionDao.name, functionDao.parameters),
|
|
274
|
-
type: functionDao.functionType,
|
|
275
|
-
to,
|
|
276
|
-
hideMsgSender: false,
|
|
277
|
-
isStatic: functionDao.isStatic,
|
|
278
|
-
returnTypes: functionDao.returnTypes,
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
|
|
282
304
|
// Executes the entrypoint private function, as well as all nested private
|
|
283
305
|
// functions that might arise.
|
|
284
306
|
async #executePrivate(
|
|
285
307
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
286
308
|
txRequest: TxExecutionRequest,
|
|
287
|
-
scopes
|
|
309
|
+
scopes: AztecAddress[] | undefined,
|
|
310
|
+
jobId: string,
|
|
288
311
|
): Promise<PrivateExecutionResult> {
|
|
289
312
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
290
313
|
|
|
291
314
|
try {
|
|
315
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
316
|
+
|
|
317
|
+
await this.contractSyncService.ensureContractSynced(
|
|
318
|
+
contractAddress,
|
|
319
|
+
functionSelector,
|
|
320
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
321
|
+
anchorBlockHeader,
|
|
322
|
+
jobId,
|
|
323
|
+
);
|
|
324
|
+
|
|
292
325
|
const result = await contractFunctionSimulator.run(
|
|
293
326
|
txRequest,
|
|
294
327
|
contractAddress,
|
|
295
328
|
functionSelector,
|
|
296
329
|
undefined,
|
|
330
|
+
anchorBlockHeader,
|
|
297
331
|
// The sender for tags is set by contracts, typically by an account
|
|
298
332
|
// contract entrypoint
|
|
299
333
|
undefined, // senderForTags
|
|
300
334
|
scopes,
|
|
335
|
+
jobId,
|
|
301
336
|
);
|
|
302
337
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
303
338
|
return result;
|
|
304
339
|
} catch (err) {
|
|
305
340
|
if (err instanceof SimulationError) {
|
|
306
|
-
await enrichSimulationError(err, this.
|
|
341
|
+
await enrichSimulationError(err, this.contractStore, this.log);
|
|
307
342
|
}
|
|
308
343
|
throw err;
|
|
309
344
|
}
|
|
@@ -316,19 +351,22 @@ export class PXE {
|
|
|
316
351
|
* @param authWitnesses - Authentication witnesses required for the function call.
|
|
317
352
|
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
318
353
|
* accounts if not specified.
|
|
354
|
+
* @param jobId - The job ID for staged writes.
|
|
319
355
|
* @returns The simulation result containing the outputs of the utility function.
|
|
320
356
|
*/
|
|
321
357
|
async #simulateUtility(
|
|
322
358
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
323
359
|
call: FunctionCall,
|
|
324
|
-
authWitnesses
|
|
325
|
-
scopes
|
|
360
|
+
authWitnesses: AuthWitness[] | undefined,
|
|
361
|
+
scopes: AztecAddress[] | undefined,
|
|
362
|
+
jobId: string,
|
|
326
363
|
) {
|
|
327
364
|
try {
|
|
328
|
-
|
|
365
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
366
|
+
return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes, jobId);
|
|
329
367
|
} catch (err) {
|
|
330
368
|
if (err instanceof SimulationError) {
|
|
331
|
-
await enrichSimulationError(err, this.
|
|
369
|
+
await enrichSimulationError(err, this.contractStore, this.log);
|
|
332
370
|
}
|
|
333
371
|
throw err;
|
|
334
372
|
}
|
|
@@ -352,7 +390,7 @@ export class PXE {
|
|
|
352
390
|
} catch (err) {
|
|
353
391
|
if (err instanceof SimulationError) {
|
|
354
392
|
try {
|
|
355
|
-
await enrichPublicSimulationError(err, this.
|
|
393
|
+
await enrichPublicSimulationError(err, this.contractStore, this.log);
|
|
356
394
|
} catch (enrichErr) {
|
|
357
395
|
this.log.error(`Failed to enrich public simulation error: ${enrichErr}`);
|
|
358
396
|
}
|
|
@@ -378,85 +416,45 @@ export class PXE {
|
|
|
378
416
|
privateExecutionResult: PrivateExecutionResult,
|
|
379
417
|
config: PrivateKernelExecutionProverConfig,
|
|
380
418
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
381
|
-
const
|
|
382
|
-
const
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
419
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
420
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
421
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
422
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
423
|
+
kernelOracle,
|
|
424
|
+
proofCreator,
|
|
425
|
+
!this.proverEnabled,
|
|
426
|
+
this.log.getBindings(),
|
|
387
427
|
);
|
|
388
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
389
428
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
390
429
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
391
430
|
}
|
|
392
431
|
|
|
393
432
|
// Public API
|
|
394
433
|
|
|
395
|
-
|
|
396
|
-
|
|
434
|
+
/**
|
|
435
|
+
* Returns the block header up to which the PXE has synced.
|
|
436
|
+
* @returns The synced block header
|
|
437
|
+
*/
|
|
438
|
+
public getSyncedBlockHeader(): Promise<BlockHeader> {
|
|
439
|
+
return this.anchorBlockStore.getBlockHeader();
|
|
397
440
|
}
|
|
398
441
|
|
|
399
442
|
/**
|
|
400
|
-
* Returns the contract
|
|
401
|
-
*
|
|
402
|
-
* @
|
|
403
|
-
* @param id - Identifier of the class.
|
|
404
|
-
* @param includeArtifact - Identifier of the class.
|
|
405
|
-
* @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
|
|
406
|
-
* for `includeArtifact`
|
|
407
|
-
* TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
|
|
408
|
-
* should the pxe query the node for contract public info, and merge it with its own definitions?
|
|
409
|
-
* TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
|
|
410
|
-
* during a public deployment. We probably want a nicer and more general API for this, but it'll have to
|
|
411
|
-
* do for the time being.
|
|
443
|
+
* Returns the contract instance for a given address, if it's registered in the PXE.
|
|
444
|
+
* @param address - The contract address.
|
|
445
|
+
* @returns The contract instance if found, undefined otherwise.
|
|
412
446
|
*/
|
|
413
|
-
public
|
|
414
|
-
|
|
415
|
-
includeArtifact: boolean = false,
|
|
416
|
-
): Promise<{
|
|
417
|
-
contractClass: ContractClassWithId | undefined;
|
|
418
|
-
isContractClassPubliclyRegistered: boolean;
|
|
419
|
-
artifact: ContractArtifact | undefined;
|
|
420
|
-
}> {
|
|
421
|
-
const artifact = await this.contractDataProvider.getContractArtifact(id);
|
|
422
|
-
if (!artifact) {
|
|
423
|
-
this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
return {
|
|
427
|
-
contractClass: artifact && (await getContractClassFromArtifact(artifact)),
|
|
428
|
-
isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
|
|
429
|
-
artifact: includeArtifact ? artifact : undefined,
|
|
430
|
-
};
|
|
447
|
+
public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
|
|
448
|
+
return this.contractStore.getContractInstance(address);
|
|
431
449
|
}
|
|
432
450
|
|
|
433
451
|
/**
|
|
434
|
-
* Returns the contract
|
|
435
|
-
*
|
|
436
|
-
*
|
|
437
|
-
* and whether the contract instance with the given address has been publicly deployed.
|
|
438
|
-
* @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
|
|
439
|
-
* This query is not dependent on the PXE.
|
|
440
|
-
* @param address - The address that the contract instance resides at.
|
|
441
|
-
* @returns - It returns the contract metadata
|
|
442
|
-
* TODO(@spalladino): Should we return the public keys in plain as well here?
|
|
452
|
+
* Returns the contract artifact for a given contract class id, if it's registered in the PXE.
|
|
453
|
+
* @param id - Identifier of the contract class.
|
|
454
|
+
* @returns The contract artifact if found, undefined otherwise.
|
|
443
455
|
*/
|
|
444
|
-
public async
|
|
445
|
-
|
|
446
|
-
isContractInitialized: boolean;
|
|
447
|
-
isContractPublished: boolean;
|
|
448
|
-
}> {
|
|
449
|
-
let instance;
|
|
450
|
-
try {
|
|
451
|
-
instance = await this.contractDataProvider.getContractInstance(address);
|
|
452
|
-
} catch {
|
|
453
|
-
this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
|
|
454
|
-
}
|
|
455
|
-
return {
|
|
456
|
-
contractInstance: instance,
|
|
457
|
-
isContractInitialized: await this.#isContractInitialized(address),
|
|
458
|
-
isContractPublished: await this.#isContractPublished(address),
|
|
459
|
-
};
|
|
456
|
+
public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
|
|
457
|
+
return await this.contractStore.getContractArtifact(id);
|
|
460
458
|
}
|
|
461
459
|
|
|
462
460
|
/**
|
|
@@ -480,56 +478,57 @@ export class PXE {
|
|
|
480
478
|
this.log.debug(`Registered account\n ${accountCompleteAddress.toReadableString()}`);
|
|
481
479
|
}
|
|
482
480
|
|
|
483
|
-
await this.
|
|
484
|
-
await this.noteDataProvider.addScope(accountCompleteAddress.address);
|
|
481
|
+
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
485
482
|
return accountCompleteAddress;
|
|
486
483
|
}
|
|
487
484
|
|
|
488
485
|
/**
|
|
489
|
-
* Registers a
|
|
486
|
+
* Registers a sender in this PXE.
|
|
490
487
|
*
|
|
491
|
-
*
|
|
492
|
-
* Will do nothing if the
|
|
488
|
+
* After registering a new sender, the PXE will sync private logs that are tagged with this sender's address.
|
|
489
|
+
* Will do nothing if the address is already registered.
|
|
493
490
|
*
|
|
494
|
-
* @param
|
|
495
|
-
* @returns The address
|
|
491
|
+
* @param sender - Address of the sender to register.
|
|
492
|
+
* @returns The address of the sender.
|
|
493
|
+
* TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
|
|
496
494
|
*/
|
|
497
|
-
public async registerSender(
|
|
495
|
+
public async registerSender(sender: AztecAddress): Promise<AztecAddress> {
|
|
498
496
|
const accounts = await this.keyStore.getAccounts();
|
|
499
|
-
if (accounts.includes(
|
|
500
|
-
this.log.info(`Sender:\n "${
|
|
501
|
-
return
|
|
497
|
+
if (accounts.includes(sender)) {
|
|
498
|
+
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
499
|
+
return sender;
|
|
502
500
|
}
|
|
503
501
|
|
|
504
|
-
const wasAdded = await this.
|
|
502
|
+
const wasAdded = await this.senderAddressBookStore.addSender(sender);
|
|
505
503
|
|
|
506
504
|
if (wasAdded) {
|
|
507
|
-
this.log.info(`Added sender:\n ${
|
|
505
|
+
this.log.info(`Added sender:\n ${sender.toString()}`);
|
|
508
506
|
} else {
|
|
509
|
-
this.log.info(`Sender:\n "${
|
|
507
|
+
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
510
508
|
}
|
|
511
509
|
|
|
512
|
-
return
|
|
510
|
+
return sender;
|
|
513
511
|
}
|
|
514
512
|
|
|
515
513
|
/**
|
|
516
|
-
* Retrieves
|
|
517
|
-
* @returns
|
|
514
|
+
* Retrieves senders registered in this PXE.
|
|
515
|
+
* @returns Senders registered in this PXE.
|
|
518
516
|
*/
|
|
519
517
|
public getSenders(): Promise<AztecAddress[]> {
|
|
520
|
-
return this.
|
|
518
|
+
return this.senderAddressBookStore.getSenders();
|
|
521
519
|
}
|
|
522
520
|
|
|
523
521
|
/**
|
|
524
|
-
* Removes a sender in
|
|
522
|
+
* Removes a sender registered in this PXE.
|
|
523
|
+
* @param sender - The address of the sender to remove.
|
|
525
524
|
*/
|
|
526
|
-
public async removeSender(
|
|
527
|
-
const wasRemoved = await this.
|
|
525
|
+
public async removeSender(sender: AztecAddress): Promise<void> {
|
|
526
|
+
const wasRemoved = await this.senderAddressBookStore.removeSender(sender);
|
|
528
527
|
|
|
529
528
|
if (wasRemoved) {
|
|
530
|
-
this.log.info(`Removed sender:\n ${
|
|
529
|
+
this.log.info(`Removed sender:\n ${sender.toString()}`);
|
|
531
530
|
} else {
|
|
532
|
-
this.log.info(`Sender:\n "${
|
|
531
|
+
this.log.info(`Sender:\n "${sender.toString()}"\n not registered in PXE.`);
|
|
533
532
|
}
|
|
534
533
|
}
|
|
535
534
|
|
|
@@ -539,7 +538,7 @@ export class PXE {
|
|
|
539
538
|
*/
|
|
540
539
|
public async getRegisteredAccounts(): Promise<CompleteAddress[]> {
|
|
541
540
|
// Get complete addresses of both the recipients and the accounts
|
|
542
|
-
const completeAddresses = await this.
|
|
541
|
+
const completeAddresses = await this.addressStore.getCompleteAddresses();
|
|
543
542
|
// Filter out the addresses not corresponding to accounts
|
|
544
543
|
const accounts = await this.keyStore.getAccounts();
|
|
545
544
|
return completeAddresses.filter(completeAddress =>
|
|
@@ -554,7 +553,7 @@ export class PXE {
|
|
|
554
553
|
*/
|
|
555
554
|
public async registerContractClass(artifact: ContractArtifact): Promise<void> {
|
|
556
555
|
const { id: contractClassId } = await getContractClassFromArtifact(artifact);
|
|
557
|
-
await this.
|
|
556
|
+
await this.contractStore.addContractArtifact(contractClassId, artifact);
|
|
558
557
|
this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
|
|
559
558
|
}
|
|
560
559
|
|
|
@@ -583,7 +582,7 @@ export class PXE {
|
|
|
583
582
|
if (!computedAddress.equals(instance.address)) {
|
|
584
583
|
throw new Error('Added a contract in which the address does not match the contract instance.');
|
|
585
584
|
}
|
|
586
|
-
await this.
|
|
585
|
+
await this.contractStore.addContractArtifact(contractClass.id, artifact);
|
|
587
586
|
|
|
588
587
|
const publicFunctionSignatures = artifact.functions
|
|
589
588
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
@@ -591,7 +590,7 @@ export class PXE {
|
|
|
591
590
|
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
592
591
|
} else {
|
|
593
592
|
// Otherwise, make sure there is an artifact already registered for that class id
|
|
594
|
-
artifact = await this.
|
|
593
|
+
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
|
|
595
594
|
if (!artifact) {
|
|
596
595
|
throw new Error(
|
|
597
596
|
`Artifact not found when registering an instance. Contract class: ${instance.currentContractClassId}.`,
|
|
@@ -599,7 +598,7 @@ export class PXE {
|
|
|
599
598
|
}
|
|
600
599
|
}
|
|
601
600
|
|
|
602
|
-
await this.
|
|
601
|
+
await this.contractStore.addContractInstance(instance);
|
|
603
602
|
this.log.info(
|
|
604
603
|
`Added contract ${artifact.name} at ${instance.address.toString()} with class ${instance.currentContractClassId}`,
|
|
605
604
|
);
|
|
@@ -618,27 +617,21 @@ export class PXE {
|
|
|
618
617
|
// We disable concurrently updating contracts to avoid concurrently syncing with the node, or changing a contract's
|
|
619
618
|
// class while we're simulating it.
|
|
620
619
|
return this.#putInJobQueue(async () => {
|
|
621
|
-
const currentInstance = await this.
|
|
620
|
+
const currentInstance = await this.contractStore.getContractInstance(contractAddress);
|
|
622
621
|
if (!currentInstance) {
|
|
623
622
|
throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
|
|
624
623
|
}
|
|
625
624
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
626
|
-
await this.
|
|
625
|
+
await this.blockStateSynchronizer.sync();
|
|
627
626
|
|
|
628
|
-
const header = await this.
|
|
627
|
+
const header = await this.anchorBlockStore.getBlockHeader();
|
|
629
628
|
|
|
630
|
-
const currentClassId = await readCurrentClassId(
|
|
631
|
-
contractAddress,
|
|
632
|
-
currentInstance,
|
|
633
|
-
this.node,
|
|
634
|
-
header.globalVariables.blockNumber,
|
|
635
|
-
header.globalVariables.timestamp,
|
|
636
|
-
);
|
|
629
|
+
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
637
630
|
if (!contractClass.id.equals(currentClassId)) {
|
|
638
631
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
639
632
|
}
|
|
640
633
|
|
|
641
|
-
await this.
|
|
634
|
+
await this.contractStore.addContractArtifact(contractClass.id, artifact);
|
|
642
635
|
|
|
643
636
|
const publicFunctionSignatures = artifact.functions
|
|
644
637
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
@@ -646,7 +639,7 @@ export class PXE {
|
|
|
646
639
|
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
647
640
|
|
|
648
641
|
currentInstance.currentContractClassId = contractClass.id;
|
|
649
|
-
await this.
|
|
642
|
+
await this.contractStore.addContractInstance(currentInstance);
|
|
650
643
|
this.log.info(`Updated contract ${artifact.name} at ${contractAddress.toString()} to class ${contractClass.id}`);
|
|
651
644
|
});
|
|
652
645
|
}
|
|
@@ -656,26 +649,7 @@ export class PXE {
|
|
|
656
649
|
* @returns An array of contracts addresses registered on this PXE.
|
|
657
650
|
*/
|
|
658
651
|
public getContracts(): Promise<AztecAddress[]> {
|
|
659
|
-
return this.
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
/**
|
|
663
|
-
* A debugging utility to get notes based on the provided filter.
|
|
664
|
-
*
|
|
665
|
-
* Note that this should not be used in production code because the structure of notes is considered to be
|
|
666
|
-
* an implementation detail of contracts. This is only meant to be used for debugging purposes. If you need to obtain
|
|
667
|
-
* note-related information in production code, please implement a custom utility function on your contract and call
|
|
668
|
-
* that function instead (e.g. `get_balance(owner: AztecAddress) -> u128` utility function on a Token contract).
|
|
669
|
-
*
|
|
670
|
-
* @param filter - The filter to apply to the notes.
|
|
671
|
-
* @returns The requested notes.
|
|
672
|
-
*/
|
|
673
|
-
public async getNotes(filter: NotesFilter): Promise<NoteDao[]> {
|
|
674
|
-
// We need to manually trigger private state sync to have a guarantee that all the notes are available.
|
|
675
|
-
const call = await this.#getFunctionCall('sync_private_state', [], filter.contractAddress);
|
|
676
|
-
await this.simulateUtility(call);
|
|
677
|
-
|
|
678
|
-
return this.noteDataProvider.getNotes(filter);
|
|
652
|
+
return this.contractStore.getContractsAddresses();
|
|
679
653
|
}
|
|
680
654
|
|
|
681
655
|
/**
|
|
@@ -691,14 +665,14 @@ export class PXE {
|
|
|
691
665
|
let privateExecutionResult: PrivateExecutionResult;
|
|
692
666
|
// We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
|
|
693
667
|
// computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
|
|
694
|
-
return this.#putInJobQueue(async
|
|
668
|
+
return this.#putInJobQueue(async jobId => {
|
|
695
669
|
const totalTimer = new Timer();
|
|
696
670
|
try {
|
|
697
671
|
const syncTimer = new Timer();
|
|
698
|
-
await this.
|
|
672
|
+
await this.blockStateSynchronizer.sync();
|
|
699
673
|
const syncTime = syncTimer.ms();
|
|
700
674
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
701
|
-
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
|
|
675
|
+
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, undefined, jobId);
|
|
702
676
|
|
|
703
677
|
const {
|
|
704
678
|
publicInputs,
|
|
@@ -735,14 +709,22 @@ export class PXE {
|
|
|
735
709
|
nodeRPCCalls: contractFunctionSimulator?.getStats().nodeRPCCalls,
|
|
736
710
|
});
|
|
737
711
|
|
|
712
|
+
// While not strictly necessary to store tagging cache contents in the DB since we sync tagging indexes from
|
|
713
|
+
// chain before sending new logs, the sync can only see logs already included in blocks. If we send another
|
|
714
|
+
// transaction before this one is included in a block from this PXE, and that transaction contains a log with
|
|
715
|
+
// a tag derived from the same secret, we would reuse the tag and the transactions would be linked. Hence
|
|
716
|
+
// storing the tags here prevents linkage of txs sent from the same PXE.
|
|
738
717
|
const preTagsUsedInTheTx = privateExecutionResult.entrypoint.preTags;
|
|
739
718
|
if (preTagsUsedInTheTx.length > 0) {
|
|
740
|
-
|
|
741
|
-
|
|
719
|
+
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
720
|
+
const txHash = (await txProvingResult.toTx()).txHash;
|
|
721
|
+
|
|
722
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
723
|
+
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
742
724
|
preTagsUsedInTheTx,
|
|
743
725
|
});
|
|
744
726
|
} else {
|
|
745
|
-
this.log.debug(`No pre
|
|
727
|
+
this.log.debug(`No pre-tags used in the tx`);
|
|
746
728
|
}
|
|
747
729
|
|
|
748
730
|
return txProvingResult;
|
|
@@ -767,7 +749,7 @@ export class PXE {
|
|
|
767
749
|
skipProofGeneration: boolean = true,
|
|
768
750
|
): Promise<TxProfileResult> {
|
|
769
751
|
// We disable concurrent profiles for consistency with simulateTx.
|
|
770
|
-
return this.#putInJobQueue(async
|
|
752
|
+
return this.#putInJobQueue(async jobId => {
|
|
771
753
|
const totalTimer = new Timer();
|
|
772
754
|
try {
|
|
773
755
|
const txInfo = {
|
|
@@ -783,11 +765,16 @@ export class PXE {
|
|
|
783
765
|
txInfo,
|
|
784
766
|
);
|
|
785
767
|
const syncTimer = new Timer();
|
|
786
|
-
await this.
|
|
768
|
+
await this.blockStateSynchronizer.sync();
|
|
787
769
|
const syncTime = syncTimer.ms();
|
|
788
770
|
|
|
789
771
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
790
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
772
|
+
const privateExecutionResult = await this.#executePrivate(
|
|
773
|
+
contractFunctionSimulator,
|
|
774
|
+
txRequest,
|
|
775
|
+
undefined,
|
|
776
|
+
jobId,
|
|
777
|
+
);
|
|
791
778
|
|
|
792
779
|
const { executionSteps, timings: { proving } = {} } = await this.#prove(
|
|
793
780
|
txRequest,
|
|
@@ -867,7 +854,7 @@ export class PXE {
|
|
|
867
854
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
868
855
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
869
856
|
// delete the same read value, or reading values that another simulation is currently modifying).
|
|
870
|
-
return this.#putInJobQueue(async
|
|
857
|
+
return this.#putInJobQueue(async jobId => {
|
|
871
858
|
try {
|
|
872
859
|
const totalTimer = new Timer();
|
|
873
860
|
const txInfo = {
|
|
@@ -883,31 +870,32 @@ export class PXE {
|
|
|
883
870
|
txInfo,
|
|
884
871
|
);
|
|
885
872
|
const syncTimer = new Timer();
|
|
886
|
-
await this.
|
|
873
|
+
await this.blockStateSynchronizer.sync();
|
|
887
874
|
const syncTime = syncTimer.ms();
|
|
888
875
|
|
|
889
876
|
const contractFunctionSimulator = this.#getSimulatorForTx(overrides);
|
|
890
877
|
// Temporary: in case there are overrides, we have to skip the kernels or validations
|
|
891
878
|
// will fail. Consider handing control to the user/wallet on whether they want to run them
|
|
892
879
|
// or not.
|
|
893
|
-
const
|
|
880
|
+
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
881
|
+
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
882
|
+
const skipKernels = hasOverriddenContracts;
|
|
883
|
+
|
|
884
|
+
// Set overridden contracts on the sync service so it knows to skip syncing them
|
|
885
|
+
if (hasOverriddenContracts) {
|
|
886
|
+
this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
|
|
887
|
+
}
|
|
894
888
|
|
|
895
889
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
896
|
-
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes);
|
|
890
|
+
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
897
891
|
|
|
898
892
|
let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
|
|
899
893
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
900
894
|
|
|
901
895
|
if (skipKernels) {
|
|
902
|
-
// According to the protocol rules, the nonce generator for the note hashes
|
|
903
|
-
// can either be the first nullifier in the tx or the protocol nullifier if there are none.
|
|
904
|
-
const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
|
|
905
|
-
? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
|
|
906
|
-
: privateExecutionResult.firstNullifier;
|
|
907
896
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
|
|
908
897
|
privateExecutionResult,
|
|
909
|
-
|
|
910
|
-
this.contractDataProvider,
|
|
898
|
+
(addr, sel) => this.contractStore.getDebugFunctionName(addr, sel),
|
|
911
899
|
));
|
|
912
900
|
} else {
|
|
913
901
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
@@ -1008,15 +996,31 @@ export class PXE {
|
|
|
1008
996
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
1009
997
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
1010
998
|
// delete the same read value, or reading values that another simulation is currently modifying).
|
|
1011
|
-
return this.#putInJobQueue(async
|
|
999
|
+
return this.#putInJobQueue(async jobId => {
|
|
1012
1000
|
try {
|
|
1013
1001
|
const totalTimer = new Timer();
|
|
1014
1002
|
const syncTimer = new Timer();
|
|
1015
|
-
await this.
|
|
1003
|
+
await this.blockStateSynchronizer.sync();
|
|
1016
1004
|
const syncTime = syncTimer.ms();
|
|
1017
1005
|
const functionTimer = new Timer();
|
|
1018
1006
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1019
|
-
|
|
1007
|
+
|
|
1008
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1009
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1010
|
+
call.to,
|
|
1011
|
+
call.selector,
|
|
1012
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1013
|
+
anchorBlockHeader,
|
|
1014
|
+
jobId,
|
|
1015
|
+
);
|
|
1016
|
+
|
|
1017
|
+
const executionResult = await this.#simulateUtility(
|
|
1018
|
+
contractFunctionSimulator,
|
|
1019
|
+
call,
|
|
1020
|
+
authwits ?? [],
|
|
1021
|
+
scopes,
|
|
1022
|
+
jobId,
|
|
1023
|
+
);
|
|
1020
1024
|
const functionTime = functionTimer.ms();
|
|
1021
1025
|
|
|
1022
1026
|
const totalTime = totalTimer.ms();
|
|
@@ -1061,17 +1065,34 @@ export class PXE {
|
|
|
1061
1065
|
eventSelector: EventSelector,
|
|
1062
1066
|
filter: PrivateEventFilter,
|
|
1063
1067
|
): Promise<PackedPrivateEvent[]> {
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
await this
|
|
1068
|
+
let anchorBlockNumber: BlockNumber;
|
|
1069
|
+
|
|
1070
|
+
await this.#putInJobQueue(async jobId => {
|
|
1071
|
+
await this.blockStateSynchronizer.sync();
|
|
1072
|
+
|
|
1073
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1074
|
+
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
1075
|
+
|
|
1076
|
+
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1077
|
+
|
|
1078
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1079
|
+
filter.contractAddress,
|
|
1080
|
+
null,
|
|
1081
|
+
async privateSyncCall =>
|
|
1082
|
+
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1083
|
+
anchorBlockHeader,
|
|
1084
|
+
jobId,
|
|
1085
|
+
);
|
|
1086
|
+
});
|
|
1067
1087
|
|
|
1068
|
-
|
|
1088
|
+
// anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
|
|
1089
|
+
const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
|
|
1069
1090
|
|
|
1070
|
-
this.log.
|
|
1091
|
+
this.log.debug(
|
|
1071
1092
|
`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
|
|
1072
1093
|
);
|
|
1073
1094
|
|
|
1074
|
-
return this.
|
|
1095
|
+
return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
|
|
1075
1096
|
}
|
|
1076
1097
|
|
|
1077
1098
|
/**
|