@aztec/pxe 0.0.1-commit.03f7ef2 → 0.0.1-commit.0658669b3
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/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- 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 +65 -40
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +209 -89
- 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 +7 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
- 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 +46 -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 +88 -56
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +82 -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 +141 -120
- 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_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +43 -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 +29 -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 +26 -12
- 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/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- 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/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- 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 +5 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -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 +18 -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 +13 -12
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +42 -46
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -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/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +3 -3
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +2 -2
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -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} +141 -74
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- 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 +24 -17
- package/dest/private_kernel/private_kernel_oracle.d.ts +24 -24
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +94 -2
- package/dest/pxe.d.ts +85 -66
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +203 -185
- 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_store/contract_store.d.ts +93 -0
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
- package/dest/storage/contract_store/contract_store.js +309 -0
- 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 +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 +60 -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 +12 -12
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- 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/access_scopes.ts +9 -0
- 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 +363 -153
- 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 +6 -2
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
- 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 +121 -135
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +217 -132
- package/src/contract_function_simulator/proxied_contract_data_source.ts +7 -7
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +65 -20
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +23 -16
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +24 -17
- package/src/entrypoints/pxe_creation_options.ts +4 -2
- package/src/entrypoints/server/index.ts +4 -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 +118 -274
- package/src/notes/note_service.ts +45 -49
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +2 -2
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +196 -138
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +27 -19
- package/src/private_kernel/private_kernel_oracle.ts +116 -36
- package/src/pxe.ts +331 -257
- 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_store/contract_store.ts +429 -0
- 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 +418 -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 +92 -0
- package/src/tagging/index.ts +17 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +27 -13
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- 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/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.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 +0 -66
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/contract_data_provider.js +0 -224
- 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/contract_data_provider.ts +0 -319
- 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
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';
|
|
@@ -19,14 +20,12 @@ import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
|
19
20
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
20
21
|
import {
|
|
21
22
|
CompleteAddress,
|
|
22
|
-
type ContractClassWithId,
|
|
23
23
|
type ContractInstanceWithAddress,
|
|
24
24
|
type PartialAddress,
|
|
25
25
|
computeContractAddressFromInstance,
|
|
26
26
|
getContractClassFromArtifact,
|
|
27
27
|
} from '@aztec/stdlib/contract';
|
|
28
28
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
29
|
-
import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
|
|
30
29
|
import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
31
30
|
import type {
|
|
32
31
|
PrivateExecutionStep,
|
|
@@ -34,6 +33,7 @@ import type {
|
|
|
34
33
|
PrivateKernelTailCircuitPublicInputs,
|
|
35
34
|
} from '@aztec/stdlib/kernel';
|
|
36
35
|
import {
|
|
36
|
+
BlockHeader,
|
|
37
37
|
type ContractOverrides,
|
|
38
38
|
type InTx,
|
|
39
39
|
PrivateExecutionResult,
|
|
@@ -47,41 +47,97 @@ import {
|
|
|
47
47
|
TxProfileResult,
|
|
48
48
|
TxProvingResult,
|
|
49
49
|
TxSimulationResult,
|
|
50
|
-
|
|
50
|
+
UtilityExecutionResult,
|
|
51
51
|
} from '@aztec/stdlib/tx';
|
|
52
52
|
|
|
53
53
|
import { inspect } from 'util';
|
|
54
54
|
|
|
55
|
+
import type { AccessScopes } from './access_scopes.js';
|
|
55
56
|
import { BlockSynchronizer } from './block_synchronizer/index.js';
|
|
56
57
|
import type { PXEConfig } from './config/index.js';
|
|
58
|
+
import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
|
|
57
59
|
import {
|
|
58
60
|
ContractFunctionSimulator,
|
|
59
61
|
generateSimulatedProvingResult,
|
|
60
62
|
} from './contract_function_simulator/contract_function_simulator.js';
|
|
61
|
-
import {
|
|
62
|
-
import {
|
|
63
|
+
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
64
|
+
import { displayDebugLogs } from './contract_logging.js';
|
|
65
|
+
import { ContractSyncService } from './contract_sync/contract_sync_service.js';
|
|
66
|
+
import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
63
67
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
64
68
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
65
69
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
70
|
+
import { JobCoordinator } from './job_coordinator/job_coordinator.js';
|
|
66
71
|
import {
|
|
67
72
|
PrivateKernelExecutionProver,
|
|
68
73
|
type PrivateKernelExecutionProverConfig,
|
|
69
74
|
} from './private_kernel/private_kernel_execution_prover.js';
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
75
|
+
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
76
|
+
import { AddressStore } from './storage/address_store/address_store.js';
|
|
77
|
+
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
78
|
+
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
79
|
+
import { ContractStore } from './storage/contract_store/contract_store.js';
|
|
80
|
+
import { NoteStore } from './storage/note_store/note_store.js';
|
|
81
|
+
import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
|
|
82
|
+
import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
|
|
83
|
+
import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
|
|
84
|
+
import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
|
|
79
85
|
|
|
80
86
|
export type PackedPrivateEvent = InTx & {
|
|
81
87
|
packedEvent: Fr[];
|
|
82
88
|
eventSelector: EventSelector;
|
|
83
89
|
};
|
|
84
90
|
|
|
91
|
+
/** Options for PXE.profileTx. */
|
|
92
|
+
export type ProfileTxOpts = {
|
|
93
|
+
/** The profiling mode to use. */
|
|
94
|
+
profileMode: 'full' | 'execution-steps' | 'gates';
|
|
95
|
+
/** If true, proof generation is skipped during profiling. Defaults to true. */
|
|
96
|
+
skipProofGeneration?: boolean;
|
|
97
|
+
/** Addresses whose private state and keys are accessible during private execution. */
|
|
98
|
+
scopes: AccessScopes;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/** Options for PXE.simulateTx. */
|
|
102
|
+
export type SimulateTxOpts = {
|
|
103
|
+
/** Whether to simulate the public part of the transaction. */
|
|
104
|
+
simulatePublic: boolean;
|
|
105
|
+
/** If false, this function throws if the transaction is unable to be included in a block at the current state. */
|
|
106
|
+
skipTxValidation?: boolean;
|
|
107
|
+
/** If false, fees are enforced. */
|
|
108
|
+
skipFeeEnforcement?: boolean;
|
|
109
|
+
/** State overrides for the simulation, such as contract instances and artifacts. */
|
|
110
|
+
overrides?: SimulationOverrides;
|
|
111
|
+
/** Addresses whose private state and keys are accessible during private execution */
|
|
112
|
+
scopes: AccessScopes;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/** Options for PXE.executeUtility. */
|
|
116
|
+
export type ExecuteUtilityOpts = {
|
|
117
|
+
/** The authentication witnesses required for the function call. */
|
|
118
|
+
authwits?: AuthWitness[];
|
|
119
|
+
/** The accounts whose notes we can access in this call */
|
|
120
|
+
scopes: AccessScopes;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** Args for PXE.create. */
|
|
124
|
+
export type PXECreateArgs = {
|
|
125
|
+
/** The Aztec node to connect to. */
|
|
126
|
+
node: AztecNode;
|
|
127
|
+
/** The key-value store for persisting PXE state. */
|
|
128
|
+
store: AztecAsyncKVStore;
|
|
129
|
+
/** The prover for generating private kernel proofs. */
|
|
130
|
+
proofCreator: PrivateKernelProver;
|
|
131
|
+
/** The circuit simulator for executing ACIR circuits. */
|
|
132
|
+
simulator: CircuitSimulator;
|
|
133
|
+
/** Provider for protocol contract artifacts and instances. */
|
|
134
|
+
protocolContractsProvider: ProtocolContractsProvider;
|
|
135
|
+
/** PXE configuration options. */
|
|
136
|
+
config: PXEConfig;
|
|
137
|
+
/** Optional logger instance or string suffix for the logger name. */
|
|
138
|
+
loggerOrSuffix?: string | Logger;
|
|
139
|
+
};
|
|
140
|
+
|
|
85
141
|
/**
|
|
86
142
|
* Private eXecution Environment (PXE) is a library used by wallets to simulate private phase of transactions and to
|
|
87
143
|
* manage private state of users.
|
|
@@ -91,20 +147,23 @@ export class PXE {
|
|
|
91
147
|
private node: AztecNode,
|
|
92
148
|
private blockStateSynchronizer: BlockSynchronizer,
|
|
93
149
|
private keyStore: KeyStore,
|
|
94
|
-
private
|
|
95
|
-
private
|
|
96
|
-
private
|
|
97
|
-
private
|
|
98
|
-
private
|
|
99
|
-
private
|
|
100
|
-
private
|
|
101
|
-
private
|
|
150
|
+
private contractStore: ContractStore,
|
|
151
|
+
private noteStore: NoteStore,
|
|
152
|
+
private capsuleStore: CapsuleStore,
|
|
153
|
+
private anchorBlockStore: AnchorBlockStore,
|
|
154
|
+
private senderTaggingStore: SenderTaggingStore,
|
|
155
|
+
private senderAddressBookStore: SenderAddressBookStore,
|
|
156
|
+
private recipientTaggingStore: RecipientTaggingStore,
|
|
157
|
+
private addressStore: AddressStore,
|
|
158
|
+
private privateEventStore: PrivateEventStore,
|
|
159
|
+
private contractSyncService: ContractSyncService,
|
|
102
160
|
private simulator: CircuitSimulator,
|
|
103
161
|
private proverEnabled: boolean,
|
|
104
162
|
private proofCreator: PrivateKernelProver,
|
|
105
163
|
private protocolContractsProvider: ProtocolContractsProvider,
|
|
106
164
|
private log: Logger,
|
|
107
165
|
private jobQueue: SerialQueue,
|
|
166
|
+
private jobCoordinator: JobCoordinator,
|
|
108
167
|
public debug: PXEDebugUtils,
|
|
109
168
|
) {}
|
|
110
169
|
|
|
@@ -115,42 +174,67 @@ export class PXE {
|
|
|
115
174
|
*
|
|
116
175
|
* @returns A promise that resolves PXE is ready to be used.
|
|
117
176
|
*/
|
|
118
|
-
public static async create(
|
|
119
|
-
node
|
|
120
|
-
store
|
|
121
|
-
proofCreator
|
|
122
|
-
simulator
|
|
123
|
-
protocolContractsProvider
|
|
124
|
-
config
|
|
125
|
-
loggerOrSuffix
|
|
126
|
-
) {
|
|
177
|
+
public static async create({
|
|
178
|
+
node,
|
|
179
|
+
store,
|
|
180
|
+
proofCreator,
|
|
181
|
+
simulator,
|
|
182
|
+
protocolContractsProvider,
|
|
183
|
+
config,
|
|
184
|
+
loggerOrSuffix,
|
|
185
|
+
}: PXECreateArgs) {
|
|
186
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
187
|
+
const bindings: LoggerBindings | undefined =
|
|
188
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
189
|
+
|
|
127
190
|
const log =
|
|
128
191
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
129
192
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
130
193
|
: loggerOrSuffix;
|
|
131
194
|
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const
|
|
195
|
+
const info = await node.getNodeInfo();
|
|
196
|
+
|
|
197
|
+
const proverEnabled = config.proverEnabled !== undefined ? config.proverEnabled : info.realProofs;
|
|
198
|
+
const addressStore = new AddressStore(store);
|
|
199
|
+
const privateEventStore = new PrivateEventStore(store);
|
|
200
|
+
const contractStore = new ContractStore(store);
|
|
201
|
+
const noteStore = new NoteStore(store);
|
|
202
|
+
const anchorBlockStore = new AnchorBlockStore(store);
|
|
203
|
+
const senderTaggingStore = new SenderTaggingStore(store);
|
|
204
|
+
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
205
|
+
const recipientTaggingStore = new RecipientTaggingStore(store);
|
|
206
|
+
const capsuleStore = new CapsuleStore(store);
|
|
141
207
|
const keyStore = new KeyStore(store);
|
|
142
208
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
209
|
+
const contractSyncService = new ContractSyncService(
|
|
210
|
+
node,
|
|
211
|
+
contractStore,
|
|
212
|
+
noteStore,
|
|
213
|
+
createLogger('pxe:contract_sync', bindings),
|
|
214
|
+
);
|
|
143
215
|
const synchronizer = new BlockSynchronizer(
|
|
144
216
|
node,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
217
|
+
store,
|
|
218
|
+
anchorBlockStore,
|
|
219
|
+
noteStore,
|
|
220
|
+
privateEventStore,
|
|
148
221
|
tipsStore,
|
|
222
|
+
contractSyncService,
|
|
149
223
|
config,
|
|
150
|
-
|
|
224
|
+
bindings,
|
|
151
225
|
);
|
|
152
226
|
|
|
153
|
-
const
|
|
227
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
228
|
+
jobCoordinator.registerStores([
|
|
229
|
+
capsuleStore,
|
|
230
|
+
senderTaggingStore,
|
|
231
|
+
recipientTaggingStore,
|
|
232
|
+
privateEventStore,
|
|
233
|
+
noteStore,
|
|
234
|
+
contractSyncService,
|
|
235
|
+
]);
|
|
236
|
+
|
|
237
|
+
const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
|
|
154
238
|
|
|
155
239
|
const jobQueue = new SerialQueue();
|
|
156
240
|
|
|
@@ -158,29 +242,35 @@ export class PXE {
|
|
|
158
242
|
node,
|
|
159
243
|
synchronizer,
|
|
160
244
|
keyStore,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
245
|
+
contractStore,
|
|
246
|
+
noteStore,
|
|
247
|
+
capsuleStore,
|
|
248
|
+
anchorBlockStore,
|
|
249
|
+
senderTaggingStore,
|
|
250
|
+
senderAddressBookStore,
|
|
251
|
+
recipientTaggingStore,
|
|
252
|
+
addressStore,
|
|
253
|
+
privateEventStore,
|
|
254
|
+
contractSyncService,
|
|
169
255
|
simulator,
|
|
170
256
|
proverEnabled,
|
|
171
257
|
proofCreator,
|
|
172
258
|
protocolContractsProvider,
|
|
173
259
|
log,
|
|
174
260
|
jobQueue,
|
|
261
|
+
jobCoordinator,
|
|
175
262
|
debugUtils,
|
|
176
263
|
);
|
|
177
264
|
|
|
178
|
-
debugUtils.
|
|
265
|
+
debugUtils.setPXEHelpers(
|
|
266
|
+
pxe.#putInJobQueue.bind(pxe),
|
|
267
|
+
pxe.#getSimulatorForTx.bind(pxe),
|
|
268
|
+
pxe.#executeUtility.bind(pxe),
|
|
269
|
+
);
|
|
179
270
|
|
|
180
271
|
pxe.jobQueue.start();
|
|
181
272
|
|
|
182
273
|
await pxe.#registerProtocolContracts();
|
|
183
|
-
const info = await node.getNodeInfo();
|
|
184
274
|
log.info(`Started PXE connected to chain ${info.l1ChainId} version ${info.rollupVersion}`);
|
|
185
275
|
return pxe;
|
|
186
276
|
}
|
|
@@ -188,24 +278,22 @@ export class PXE {
|
|
|
188
278
|
// Internal methods
|
|
189
279
|
|
|
190
280
|
#getSimulatorForTx(overrides?: { contracts?: ContractOverrides }) {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
this.
|
|
199
|
-
this.
|
|
200
|
-
this.
|
|
201
|
-
this.
|
|
202
|
-
this.
|
|
203
|
-
this.
|
|
204
|
-
this.
|
|
205
|
-
this.
|
|
206
|
-
|
|
207
|
-
this.simulator,
|
|
208
|
-
);
|
|
281
|
+
const proxyContractStore = ProxiedContractStoreFactory.create(this.contractStore, overrides?.contracts);
|
|
282
|
+
|
|
283
|
+
return new ContractFunctionSimulator({
|
|
284
|
+
contractStore: proxyContractStore,
|
|
285
|
+
noteStore: this.noteStore,
|
|
286
|
+
keyStore: this.keyStore,
|
|
287
|
+
addressStore: this.addressStore,
|
|
288
|
+
aztecNode: BenchmarkedNodeFactory.create(this.node),
|
|
289
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
290
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
291
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
292
|
+
capsuleStore: this.capsuleStore,
|
|
293
|
+
privateEventStore: this.privateEventStore,
|
|
294
|
+
simulator: this.simulator,
|
|
295
|
+
contractSyncService: this.contractSyncService,
|
|
296
|
+
});
|
|
209
297
|
}
|
|
210
298
|
|
|
211
299
|
#contextualizeError(err: Error, ...context: string[]): Error {
|
|
@@ -228,7 +316,7 @@ export class PXE {
|
|
|
228
316
|
*
|
|
229
317
|
* Useful for tasks that cannot run concurrently, such as contract function simulation.
|
|
230
318
|
*/
|
|
231
|
-
#putInJobQueue<T>(fn: () => Promise<T>): Promise<T> {
|
|
319
|
+
#putInJobQueue<T>(fn: (jobId: string) => Promise<T>): Promise<T> {
|
|
232
320
|
// TODO(#12636): relax the conditions under which we forbid concurrency.
|
|
233
321
|
if (this.jobQueue.length() != 0) {
|
|
234
322
|
this.log.warn(
|
|
@@ -236,88 +324,98 @@ export class PXE {
|
|
|
236
324
|
);
|
|
237
325
|
}
|
|
238
326
|
|
|
239
|
-
return this.jobQueue.put(
|
|
327
|
+
return this.jobQueue.put(async () => {
|
|
328
|
+
const jobId = this.jobCoordinator.beginJob();
|
|
329
|
+
this.log.verbose(`Beginning job ${jobId}`);
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
const result = await fn(jobId);
|
|
333
|
+
this.log.verbose(`Committing job ${jobId}`);
|
|
334
|
+
|
|
335
|
+
await this.jobCoordinator.commitJob(jobId);
|
|
336
|
+
return result;
|
|
337
|
+
} catch (err) {
|
|
338
|
+
this.log.verbose(`Aborting job ${jobId}`);
|
|
339
|
+
await this.jobCoordinator.abortJob(jobId);
|
|
340
|
+
throw err;
|
|
341
|
+
}
|
|
342
|
+
});
|
|
240
343
|
}
|
|
241
344
|
|
|
242
345
|
async #registerProtocolContracts() {
|
|
243
346
|
const registered: Record<string, string> = {};
|
|
244
347
|
for (const name of protocolContractNames) {
|
|
245
|
-
const { address,
|
|
246
|
-
|
|
247
|
-
await this.
|
|
248
|
-
await this.contractDataProvider.addContractInstance(instance);
|
|
348
|
+
const { address, instance, artifact } = await this.protocolContractsProvider.getProtocolContractArtifact(name);
|
|
349
|
+
await this.contractStore.addContractArtifact(artifact);
|
|
350
|
+
await this.contractStore.addContractInstance(instance);
|
|
249
351
|
registered[name] = address.toString();
|
|
250
352
|
}
|
|
251
353
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
252
354
|
}
|
|
253
355
|
|
|
254
|
-
async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
|
|
255
|
-
return !!(await this.node.getContractClass(id));
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
async #isContractPublished(address: AztecAddress): Promise<boolean> {
|
|
259
|
-
return !!(await this.node.getContract(address));
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
async #isContractInitialized(address: AztecAddress): Promise<boolean> {
|
|
263
|
-
const initNullifier = await siloNullifier(address, address.toField());
|
|
264
|
-
return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
|
|
265
|
-
}
|
|
266
|
-
|
|
267
356
|
// Executes the entrypoint private function, as well as all nested private
|
|
268
357
|
// functions that might arise.
|
|
269
358
|
async #executePrivate(
|
|
270
359
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
271
360
|
txRequest: TxExecutionRequest,
|
|
272
|
-
scopes
|
|
361
|
+
scopes: AccessScopes,
|
|
362
|
+
jobId: string,
|
|
273
363
|
): Promise<PrivateExecutionResult> {
|
|
274
364
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
275
365
|
|
|
276
366
|
try {
|
|
277
|
-
const anchorBlockHeader = await this.
|
|
367
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
278
368
|
|
|
279
|
-
|
|
280
|
-
txRequest,
|
|
369
|
+
await this.contractSyncService.ensureContractSynced(
|
|
281
370
|
contractAddress,
|
|
282
371
|
functionSelector,
|
|
283
|
-
|
|
372
|
+
(privateSyncCall, execScopes) =>
|
|
373
|
+
this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
|
|
284
374
|
anchorBlockHeader,
|
|
285
|
-
|
|
286
|
-
// contract entrypoint
|
|
287
|
-
undefined, // senderForTags
|
|
375
|
+
jobId,
|
|
288
376
|
scopes,
|
|
289
377
|
);
|
|
378
|
+
|
|
379
|
+
const result = await contractFunctionSimulator.run(txRequest, {
|
|
380
|
+
contractAddress,
|
|
381
|
+
selector: functionSelector,
|
|
382
|
+
anchorBlockHeader,
|
|
383
|
+
scopes,
|
|
384
|
+
jobId,
|
|
385
|
+
});
|
|
290
386
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
291
387
|
return result;
|
|
292
388
|
} catch (err) {
|
|
293
389
|
if (err instanceof SimulationError) {
|
|
294
|
-
await enrichSimulationError(err, this.
|
|
390
|
+
await enrichSimulationError(err, this.contractStore, this.log);
|
|
295
391
|
}
|
|
296
392
|
throw err;
|
|
297
393
|
}
|
|
298
394
|
}
|
|
299
395
|
|
|
300
396
|
/**
|
|
301
|
-
*
|
|
397
|
+
* Execute a utility function call on the given contract.
|
|
302
398
|
* @param contractFunctionSimulator - The simulator to use for the function call.
|
|
303
399
|
* @param call - The function call to execute.
|
|
304
400
|
* @param authWitnesses - Authentication witnesses required for the function call.
|
|
305
401
|
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
306
402
|
* accounts if not specified.
|
|
307
|
-
* @
|
|
403
|
+
* @param jobId - The job ID for staged writes.
|
|
404
|
+
* @returns The execution result containing the outputs of the utility function.
|
|
308
405
|
*/
|
|
309
|
-
async #
|
|
406
|
+
async #executeUtility(
|
|
310
407
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
311
408
|
call: FunctionCall,
|
|
312
|
-
authWitnesses
|
|
313
|
-
scopes
|
|
409
|
+
authWitnesses: AuthWitness[] | undefined,
|
|
410
|
+
scopes: AccessScopes,
|
|
411
|
+
jobId: string,
|
|
314
412
|
) {
|
|
315
413
|
try {
|
|
316
|
-
const anchorBlockHeader = await this.
|
|
317
|
-
return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes);
|
|
414
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
415
|
+
return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes, jobId);
|
|
318
416
|
} catch (err) {
|
|
319
417
|
if (err instanceof SimulationError) {
|
|
320
|
-
await enrichSimulationError(err, this.
|
|
418
|
+
await enrichSimulationError(err, this.contractStore, this.log);
|
|
321
419
|
}
|
|
322
420
|
throw err;
|
|
323
421
|
}
|
|
@@ -341,7 +439,7 @@ export class PXE {
|
|
|
341
439
|
} catch (err) {
|
|
342
440
|
if (err instanceof SimulationError) {
|
|
343
441
|
try {
|
|
344
|
-
await enrichPublicSimulationError(err, this.
|
|
442
|
+
await enrichPublicSimulationError(err, this.contractStore, this.log);
|
|
345
443
|
} catch (enrichErr) {
|
|
346
444
|
this.log.error(`Failed to enrich public simulation error: ${enrichErr}`);
|
|
347
445
|
}
|
|
@@ -367,85 +465,45 @@ export class PXE {
|
|
|
367
465
|
privateExecutionResult: PrivateExecutionResult,
|
|
368
466
|
config: PrivateKernelExecutionProverConfig,
|
|
369
467
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
370
|
-
const
|
|
371
|
-
const
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
468
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
469
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
470
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
471
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
472
|
+
kernelOracle,
|
|
473
|
+
proofCreator,
|
|
474
|
+
!this.proverEnabled,
|
|
475
|
+
this.log.getBindings(),
|
|
376
476
|
);
|
|
377
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
378
477
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
379
478
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
380
479
|
}
|
|
381
480
|
|
|
382
481
|
// Public API
|
|
383
482
|
|
|
384
|
-
|
|
385
|
-
|
|
483
|
+
/**
|
|
484
|
+
* Returns the block header up to which the PXE has synced.
|
|
485
|
+
* @returns The synced block header
|
|
486
|
+
*/
|
|
487
|
+
public getSyncedBlockHeader(): Promise<BlockHeader> {
|
|
488
|
+
return this.anchorBlockStore.getBlockHeader();
|
|
386
489
|
}
|
|
387
490
|
|
|
388
491
|
/**
|
|
389
|
-
* Returns the contract
|
|
390
|
-
*
|
|
391
|
-
* @
|
|
392
|
-
* @param id - Identifier of the class.
|
|
393
|
-
* @param includeArtifact - Identifier of the class.
|
|
394
|
-
* @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
|
|
395
|
-
* for `includeArtifact`
|
|
396
|
-
* TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
|
|
397
|
-
* should the pxe query the node for contract public info, and merge it with its own definitions?
|
|
398
|
-
* TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
|
|
399
|
-
* during a public deployment. We probably want a nicer and more general API for this, but it'll have to
|
|
400
|
-
* do for the time being.
|
|
492
|
+
* Returns the contract instance for a given address, if it's registered in the PXE.
|
|
493
|
+
* @param address - The contract address.
|
|
494
|
+
* @returns The contract instance if found, undefined otherwise.
|
|
401
495
|
*/
|
|
402
|
-
public
|
|
403
|
-
|
|
404
|
-
includeArtifact: boolean = false,
|
|
405
|
-
): Promise<{
|
|
406
|
-
contractClass: ContractClassWithId | undefined;
|
|
407
|
-
isContractClassPubliclyRegistered: boolean;
|
|
408
|
-
artifact: ContractArtifact | undefined;
|
|
409
|
-
}> {
|
|
410
|
-
const artifact = await this.contractDataProvider.getContractArtifact(id);
|
|
411
|
-
if (!artifact) {
|
|
412
|
-
this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
return {
|
|
416
|
-
contractClass: artifact && (await getContractClassFromArtifact(artifact)),
|
|
417
|
-
isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
|
|
418
|
-
artifact: includeArtifact ? artifact : undefined,
|
|
419
|
-
};
|
|
496
|
+
public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
|
|
497
|
+
return this.contractStore.getContractInstance(address);
|
|
420
498
|
}
|
|
421
499
|
|
|
422
500
|
/**
|
|
423
|
-
* Returns the contract
|
|
424
|
-
*
|
|
425
|
-
*
|
|
426
|
-
* and whether the contract instance with the given address has been publicly deployed.
|
|
427
|
-
* @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
|
|
428
|
-
* This query is not dependent on the PXE.
|
|
429
|
-
* @param address - The address that the contract instance resides at.
|
|
430
|
-
* @returns - It returns the contract metadata
|
|
431
|
-
* TODO(@spalladino): Should we return the public keys in plain as well here?
|
|
501
|
+
* Returns the contract artifact for a given contract class id, if it's registered in the PXE.
|
|
502
|
+
* @param id - Identifier of the contract class.
|
|
503
|
+
* @returns The contract artifact if found, undefined otherwise.
|
|
432
504
|
*/
|
|
433
|
-
public async
|
|
434
|
-
|
|
435
|
-
isContractInitialized: boolean;
|
|
436
|
-
isContractPublished: boolean;
|
|
437
|
-
}> {
|
|
438
|
-
let instance;
|
|
439
|
-
try {
|
|
440
|
-
instance = await this.contractDataProvider.getContractInstance(address);
|
|
441
|
-
} catch {
|
|
442
|
-
this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
|
|
443
|
-
}
|
|
444
|
-
return {
|
|
445
|
-
contractInstance: instance,
|
|
446
|
-
isContractInitialized: await this.#isContractInitialized(address),
|
|
447
|
-
isContractPublished: await this.#isContractPublished(address),
|
|
448
|
-
};
|
|
505
|
+
public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
|
|
506
|
+
return await this.contractStore.getContractArtifact(id);
|
|
449
507
|
}
|
|
450
508
|
|
|
451
509
|
/**
|
|
@@ -469,8 +527,7 @@ export class PXE {
|
|
|
469
527
|
this.log.debug(`Registered account\n ${accountCompleteAddress.toReadableString()}`);
|
|
470
528
|
}
|
|
471
529
|
|
|
472
|
-
await this.
|
|
473
|
-
await this.noteDataProvider.addScope(accountCompleteAddress.address);
|
|
530
|
+
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
474
531
|
return accountCompleteAddress;
|
|
475
532
|
}
|
|
476
533
|
|
|
@@ -491,7 +548,7 @@ export class PXE {
|
|
|
491
548
|
return sender;
|
|
492
549
|
}
|
|
493
550
|
|
|
494
|
-
const wasAdded = await this.
|
|
551
|
+
const wasAdded = await this.senderAddressBookStore.addSender(sender);
|
|
495
552
|
|
|
496
553
|
if (wasAdded) {
|
|
497
554
|
this.log.info(`Added sender:\n ${sender.toString()}`);
|
|
@@ -507,7 +564,7 @@ export class PXE {
|
|
|
507
564
|
* @returns Senders registered in this PXE.
|
|
508
565
|
*/
|
|
509
566
|
public getSenders(): Promise<AztecAddress[]> {
|
|
510
|
-
return this.
|
|
567
|
+
return this.senderAddressBookStore.getSenders();
|
|
511
568
|
}
|
|
512
569
|
|
|
513
570
|
/**
|
|
@@ -515,7 +572,7 @@ export class PXE {
|
|
|
515
572
|
* @param sender - The address of the sender to remove.
|
|
516
573
|
*/
|
|
517
574
|
public async removeSender(sender: AztecAddress): Promise<void> {
|
|
518
|
-
const wasRemoved = await this.
|
|
575
|
+
const wasRemoved = await this.senderAddressBookStore.removeSender(sender);
|
|
519
576
|
|
|
520
577
|
if (wasRemoved) {
|
|
521
578
|
this.log.info(`Removed sender:\n ${sender.toString()}`);
|
|
@@ -530,7 +587,7 @@ export class PXE {
|
|
|
530
587
|
*/
|
|
531
588
|
public async getRegisteredAccounts(): Promise<CompleteAddress[]> {
|
|
532
589
|
// Get complete addresses of both the recipients and the accounts
|
|
533
|
-
const completeAddresses = await this.
|
|
590
|
+
const completeAddresses = await this.addressStore.getCompleteAddresses();
|
|
534
591
|
// Filter out the addresses not corresponding to accounts
|
|
535
592
|
const accounts = await this.keyStore.getAccounts();
|
|
536
593
|
return completeAddresses.filter(completeAddress =>
|
|
@@ -544,8 +601,7 @@ export class PXE {
|
|
|
544
601
|
* @param artifact - The build artifact for the contract class.
|
|
545
602
|
*/
|
|
546
603
|
public async registerContractClass(artifact: ContractArtifact): Promise<void> {
|
|
547
|
-
const
|
|
548
|
-
await this.contractDataProvider.addContractArtifact(contractClassId, artifact);
|
|
604
|
+
const contractClassId = await this.contractStore.addContractArtifact(artifact);
|
|
549
605
|
this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
|
|
550
606
|
}
|
|
551
607
|
|
|
@@ -564,17 +620,17 @@ export class PXE {
|
|
|
564
620
|
if (artifact) {
|
|
565
621
|
// If the user provides an artifact, validate it against the expected class id and register it
|
|
566
622
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
567
|
-
|
|
568
|
-
if (!contractClassId.equals(instance.currentContractClassId)) {
|
|
623
|
+
if (!contractClass.id.equals(instance.currentContractClassId)) {
|
|
569
624
|
throw new Error(
|
|
570
|
-
`Artifact does not match expected class id (computed ${
|
|
625
|
+
`Artifact does not match expected class id (computed ${contractClass.id} but instance refers to ${instance.currentContractClassId})`,
|
|
571
626
|
);
|
|
572
627
|
}
|
|
573
628
|
const computedAddress = await computeContractAddressFromInstance(instance);
|
|
574
629
|
if (!computedAddress.equals(instance.address)) {
|
|
575
630
|
throw new Error('Added a contract in which the address does not match the contract instance.');
|
|
576
631
|
}
|
|
577
|
-
|
|
632
|
+
|
|
633
|
+
await this.contractStore.addContractArtifact(artifact, contractClass);
|
|
578
634
|
|
|
579
635
|
const publicFunctionSignatures = artifact.functions
|
|
580
636
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
@@ -582,7 +638,7 @@ export class PXE {
|
|
|
582
638
|
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
583
639
|
} else {
|
|
584
640
|
// Otherwise, make sure there is an artifact already registered for that class id
|
|
585
|
-
artifact = await this.
|
|
641
|
+
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
|
|
586
642
|
if (!artifact) {
|
|
587
643
|
throw new Error(
|
|
588
644
|
`Artifact not found when registering an instance. Contract class: ${instance.currentContractClassId}.`,
|
|
@@ -590,7 +646,7 @@ export class PXE {
|
|
|
590
646
|
}
|
|
591
647
|
}
|
|
592
648
|
|
|
593
|
-
await this.
|
|
649
|
+
await this.contractStore.addContractInstance(instance);
|
|
594
650
|
this.log.info(
|
|
595
651
|
`Added contract ${artifact.name} at ${instance.address.toString()} with class ${instance.currentContractClassId}`,
|
|
596
652
|
);
|
|
@@ -609,35 +665,30 @@ export class PXE {
|
|
|
609
665
|
// We disable concurrently updating contracts to avoid concurrently syncing with the node, or changing a contract's
|
|
610
666
|
// class while we're simulating it.
|
|
611
667
|
return this.#putInJobQueue(async () => {
|
|
612
|
-
const currentInstance = await this.
|
|
668
|
+
const currentInstance = await this.contractStore.getContractInstance(contractAddress);
|
|
613
669
|
if (!currentInstance) {
|
|
614
670
|
throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
|
|
615
671
|
}
|
|
616
672
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
617
673
|
await this.blockStateSynchronizer.sync();
|
|
618
674
|
|
|
619
|
-
const header = await this.
|
|
675
|
+
const header = await this.anchorBlockStore.getBlockHeader();
|
|
620
676
|
|
|
621
|
-
const currentClassId = await readCurrentClassId(
|
|
622
|
-
contractAddress,
|
|
623
|
-
currentInstance,
|
|
624
|
-
this.node,
|
|
625
|
-
header.globalVariables.blockNumber,
|
|
626
|
-
header.globalVariables.timestamp,
|
|
627
|
-
);
|
|
677
|
+
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
628
678
|
if (!contractClass.id.equals(currentClassId)) {
|
|
629
679
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
630
680
|
}
|
|
631
681
|
|
|
632
|
-
await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
|
|
633
|
-
|
|
634
682
|
const publicFunctionSignatures = artifact.functions
|
|
635
683
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
636
684
|
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
637
685
|
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
638
686
|
|
|
639
687
|
currentInstance.currentContractClassId = contractClass.id;
|
|
640
|
-
await
|
|
688
|
+
await Promise.all([
|
|
689
|
+
this.contractStore.addContractArtifact(artifact, contractClass),
|
|
690
|
+
this.contractStore.addContractInstance(currentInstance),
|
|
691
|
+
]);
|
|
641
692
|
this.log.info(`Updated contract ${artifact.name} at ${contractAddress.toString()} to class ${contractClass.id}`);
|
|
642
693
|
});
|
|
643
694
|
}
|
|
@@ -647,7 +698,7 @@ export class PXE {
|
|
|
647
698
|
* @returns An array of contracts addresses registered on this PXE.
|
|
648
699
|
*/
|
|
649
700
|
public getContracts(): Promise<AztecAddress[]> {
|
|
650
|
-
return this.
|
|
701
|
+
return this.contractStore.getContractsAddresses();
|
|
651
702
|
}
|
|
652
703
|
|
|
653
704
|
/**
|
|
@@ -655,22 +706,23 @@ export class PXE {
|
|
|
655
706
|
* (where validators prove the public portion).
|
|
656
707
|
*
|
|
657
708
|
* @param txRequest - An authenticated tx request ready for proving
|
|
709
|
+
* @param scopes - Addresses whose private state and keys are accessible during private execution.
|
|
658
710
|
* @returns A result containing the proof and public inputs of the tail circuit.
|
|
659
711
|
* @throws If contract code not found, or public simulation reverts.
|
|
660
712
|
* Also throws if simulatePublic is true and public simulation reverts.
|
|
661
713
|
*/
|
|
662
|
-
public proveTx(txRequest: TxExecutionRequest): Promise<TxProvingResult> {
|
|
714
|
+
public proveTx(txRequest: TxExecutionRequest, scopes: AztecAddress[]): Promise<TxProvingResult> {
|
|
663
715
|
let privateExecutionResult: PrivateExecutionResult;
|
|
664
716
|
// We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
|
|
665
717
|
// computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
|
|
666
|
-
return this.#putInJobQueue(async
|
|
718
|
+
return this.#putInJobQueue(async jobId => {
|
|
667
719
|
const totalTimer = new Timer();
|
|
668
720
|
try {
|
|
669
721
|
const syncTimer = new Timer();
|
|
670
722
|
await this.blockStateSynchronizer.sync();
|
|
671
723
|
const syncTime = syncTimer.ms();
|
|
672
724
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
673
|
-
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
|
|
725
|
+
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
674
726
|
|
|
675
727
|
const {
|
|
676
728
|
publicInputs,
|
|
@@ -717,7 +769,7 @@ export class PXE {
|
|
|
717
769
|
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
718
770
|
const txHash = (await txProvingResult.toTx()).txHash;
|
|
719
771
|
|
|
720
|
-
await this.
|
|
772
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
721
773
|
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
722
774
|
preTagsUsedInTheTx,
|
|
723
775
|
});
|
|
@@ -734,20 +786,16 @@ export class PXE {
|
|
|
734
786
|
|
|
735
787
|
/**
|
|
736
788
|
* Profiles a transaction, reporting gate counts (unless disabled) and returns an execution trace.
|
|
737
|
-
*
|
|
738
|
-
* @param txRequest - An authenticated tx request ready for simulation
|
|
739
|
-
* @param msgSender - (Optional) The message sender to use for the simulation.
|
|
740
|
-
* @param skipTxValidation - (Optional) If false, this function throws if the transaction is unable to be included in a block at the current state.
|
|
789
|
+
* @param txRequest - An authenticated tx request ready for simulation.
|
|
741
790
|
* @returns A trace of the program execution with gate counts.
|
|
742
791
|
* @throws If the code for the functions executed in this transaction have not been made available via `addContracts`.
|
|
743
792
|
*/
|
|
744
793
|
public profileTx(
|
|
745
794
|
txRequest: TxExecutionRequest,
|
|
746
|
-
profileMode
|
|
747
|
-
skipProofGeneration: boolean = true,
|
|
795
|
+
{ profileMode, skipProofGeneration = true, scopes }: ProfileTxOpts,
|
|
748
796
|
): Promise<TxProfileResult> {
|
|
749
797
|
// We disable concurrent profiles for consistency with simulateTx.
|
|
750
|
-
return this.#putInJobQueue(async
|
|
798
|
+
return this.#putInJobQueue(async jobId => {
|
|
751
799
|
const totalTimer = new Timer();
|
|
752
800
|
try {
|
|
753
801
|
const txInfo = {
|
|
@@ -767,7 +815,7 @@ export class PXE {
|
|
|
767
815
|
const syncTime = syncTimer.ms();
|
|
768
816
|
|
|
769
817
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
770
|
-
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
|
|
818
|
+
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
771
819
|
|
|
772
820
|
const { executionSteps, timings: { proving } = {} } = await this.#prove(
|
|
773
821
|
txRequest,
|
|
@@ -824,12 +872,7 @@ export class PXE {
|
|
|
824
872
|
* In that case, the transaction returned is only potentially ready to be sent to the network for execution.
|
|
825
873
|
*
|
|
826
874
|
*
|
|
827
|
-
* @param txRequest - An authenticated tx request ready for simulation
|
|
828
|
-
* @param simulatePublic - Whether to simulate the public part of the transaction.
|
|
829
|
-
* @param skipTxValidation - (Optional) If false, this function throws if the transaction is unable to be included in a block at the current state.
|
|
830
|
-
* @param skipFeeEnforcement - (Optional) If false, fees are enforced.
|
|
831
|
-
* @param overrides - (Optional) State overrides for the simulation, such as msgSender, contract instances and artifacts.
|
|
832
|
-
* @param scopes - (Optional) The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
875
|
+
* @param txRequest - An authenticated tx request ready for simulation.
|
|
833
876
|
* @returns A simulated transaction result object that includes public and private return values.
|
|
834
877
|
* @throws If the code for the functions executed in this transaction have not been made available via `addContracts`.
|
|
835
878
|
* Also throws if simulatePublic is true and public simulation reverts.
|
|
@@ -838,16 +881,12 @@ export class PXE {
|
|
|
838
881
|
*/
|
|
839
882
|
public simulateTx(
|
|
840
883
|
txRequest: TxExecutionRequest,
|
|
841
|
-
simulatePublic:
|
|
842
|
-
skipTxValidation: boolean = false,
|
|
843
|
-
skipFeeEnforcement: boolean = false,
|
|
844
|
-
overrides?: SimulationOverrides,
|
|
845
|
-
scopes?: AztecAddress[],
|
|
884
|
+
{ simulatePublic, skipTxValidation = false, skipFeeEnforcement = false, overrides, scopes }: SimulateTxOpts,
|
|
846
885
|
): Promise<TxSimulationResult> {
|
|
847
886
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
848
887
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
849
888
|
// delete the same read value, or reading values that another simulation is currently modifying).
|
|
850
|
-
return this.#putInJobQueue(async
|
|
889
|
+
return this.#putInJobQueue(async jobId => {
|
|
851
890
|
try {
|
|
852
891
|
const totalTimer = new Timer();
|
|
853
892
|
const txInfo = {
|
|
@@ -870,24 +909,26 @@ export class PXE {
|
|
|
870
909
|
// Temporary: in case there are overrides, we have to skip the kernels or validations
|
|
871
910
|
// will fail. Consider handing control to the user/wallet on whether they want to run them
|
|
872
911
|
// or not.
|
|
873
|
-
const
|
|
912
|
+
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
913
|
+
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
914
|
+
const skipKernels = hasOverriddenContracts;
|
|
915
|
+
|
|
916
|
+
// Set overridden contracts on the sync service so it knows to skip syncing them
|
|
917
|
+
if (hasOverriddenContracts) {
|
|
918
|
+
this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
|
|
919
|
+
}
|
|
874
920
|
|
|
875
921
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
876
|
-
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes);
|
|
922
|
+
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
877
923
|
|
|
878
924
|
let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
|
|
879
925
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
880
926
|
|
|
881
927
|
if (skipKernels) {
|
|
882
|
-
// According to the protocol rules, the nonce generator for the note hashes
|
|
883
|
-
// can either be the first nullifier in the tx or the protocol nullifier if there are none.
|
|
884
|
-
const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
|
|
885
|
-
? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
|
|
886
|
-
: privateExecutionResult.firstNullifier;
|
|
887
928
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
|
|
888
929
|
privateExecutionResult,
|
|
889
|
-
|
|
890
|
-
this.
|
|
930
|
+
(addr, sel) => this.contractStore.getDebugFunctionName(addr, sel),
|
|
931
|
+
this.node,
|
|
891
932
|
));
|
|
892
933
|
} else {
|
|
893
934
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
@@ -906,6 +947,9 @@ export class PXE {
|
|
|
906
947
|
const publicSimulationTimer = new Timer();
|
|
907
948
|
publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement);
|
|
908
949
|
publicSimulationTime = publicSimulationTimer.ms();
|
|
950
|
+
if (publicOutput?.debugLogs?.length) {
|
|
951
|
+
await displayDebugLogs(publicOutput.debugLogs, addr => this.contractStore.getDebugContractName(addr));
|
|
952
|
+
}
|
|
909
953
|
}
|
|
910
954
|
|
|
911
955
|
let validationTime: number | undefined;
|
|
@@ -965,30 +1009,24 @@ export class PXE {
|
|
|
965
1009
|
inspect(txRequest),
|
|
966
1010
|
`simulatePublic=${simulatePublic}`,
|
|
967
1011
|
`skipTxValidation=${skipTxValidation}`,
|
|
968
|
-
`scopes=${scopes
|
|
1012
|
+
`scopes=${scopes === 'ALL_SCOPES' ? scopes : scopes.map(s => s.toString()).join(', ')}`,
|
|
969
1013
|
);
|
|
970
1014
|
}
|
|
971
1015
|
});
|
|
972
1016
|
}
|
|
973
1017
|
|
|
974
1018
|
/**
|
|
975
|
-
*
|
|
976
|
-
*
|
|
1019
|
+
* Executes a contract utility function.
|
|
977
1020
|
* @param call - The function call containing the function details, arguments, and target contract address.
|
|
978
|
-
* @param authwits - (Optional) The authentication witnesses required for the function call.
|
|
979
|
-
* @param scopes - (Optional) The accounts whose notes we can access in this call. Currently optional and will
|
|
980
|
-
* default to all.
|
|
981
|
-
* @returns The result of the utility function call, structured based on the function ABI.
|
|
982
1021
|
*/
|
|
983
|
-
public
|
|
1022
|
+
public executeUtility(
|
|
984
1023
|
call: FunctionCall,
|
|
985
|
-
authwits
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
1024
|
+
{ authwits, scopes }: ExecuteUtilityOpts = { scopes: 'ALL_SCOPES' },
|
|
1025
|
+
): Promise<UtilityExecutionResult> {
|
|
1026
|
+
// We disable concurrent executions since those might execute oracles which read and write to the PXE stores (e.g.
|
|
989
1027
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
990
|
-
// delete the same read value, or reading values that another
|
|
991
|
-
return this.#putInJobQueue(async
|
|
1028
|
+
// delete the same read value, or reading values that another execution is currently modifying).
|
|
1029
|
+
return this.#putInJobQueue(async jobId => {
|
|
992
1030
|
try {
|
|
993
1031
|
const totalTimer = new Timer();
|
|
994
1032
|
const syncTimer = new Timer();
|
|
@@ -996,7 +1034,25 @@ export class PXE {
|
|
|
996
1034
|
const syncTime = syncTimer.ms();
|
|
997
1035
|
const functionTimer = new Timer();
|
|
998
1036
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
999
|
-
|
|
1037
|
+
|
|
1038
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1039
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1040
|
+
call.to,
|
|
1041
|
+
call.selector,
|
|
1042
|
+
(privateSyncCall, execScopes) =>
|
|
1043
|
+
this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
|
|
1044
|
+
anchorBlockHeader,
|
|
1045
|
+
jobId,
|
|
1046
|
+
scopes,
|
|
1047
|
+
);
|
|
1048
|
+
|
|
1049
|
+
const executionResult = await this.#executeUtility(
|
|
1050
|
+
contractFunctionSimulator,
|
|
1051
|
+
call,
|
|
1052
|
+
authwits ?? [],
|
|
1053
|
+
scopes,
|
|
1054
|
+
jobId,
|
|
1055
|
+
);
|
|
1000
1056
|
const functionTime = functionTimer.ms();
|
|
1001
1057
|
|
|
1002
1058
|
const totalTime = totalTimer.ms();
|
|
@@ -1017,8 +1073,8 @@ export class PXE {
|
|
|
1017
1073
|
const stringifiedArgs = args.map(arg => arg.toString()).join(', ');
|
|
1018
1074
|
throw this.#contextualizeError(
|
|
1019
1075
|
err,
|
|
1020
|
-
`
|
|
1021
|
-
`scopes=${scopes
|
|
1076
|
+
`executeUtility ${to}:${name}(${stringifiedArgs})`,
|
|
1077
|
+
`scopes=${scopes === 'ALL_SCOPES' ? scopes : scopes.map(s => s.toString()).join(', ')}`,
|
|
1022
1078
|
);
|
|
1023
1079
|
}
|
|
1024
1080
|
});
|
|
@@ -1041,17 +1097,35 @@ export class PXE {
|
|
|
1041
1097
|
eventSelector: EventSelector,
|
|
1042
1098
|
filter: PrivateEventFilter,
|
|
1043
1099
|
): Promise<PackedPrivateEvent[]> {
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
await this
|
|
1100
|
+
let anchorBlockNumber: BlockNumber;
|
|
1101
|
+
|
|
1102
|
+
await this.#putInJobQueue(async jobId => {
|
|
1103
|
+
await this.blockStateSynchronizer.sync();
|
|
1104
|
+
|
|
1105
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1106
|
+
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
1107
|
+
|
|
1108
|
+
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1109
|
+
|
|
1110
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1111
|
+
filter.contractAddress,
|
|
1112
|
+
null,
|
|
1113
|
+
async (privateSyncCall, execScopes) =>
|
|
1114
|
+
await this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
|
|
1115
|
+
anchorBlockHeader,
|
|
1116
|
+
jobId,
|
|
1117
|
+
filter.scopes,
|
|
1118
|
+
);
|
|
1119
|
+
});
|
|
1047
1120
|
|
|
1048
|
-
|
|
1121
|
+
// anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
|
|
1122
|
+
const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
|
|
1049
1123
|
|
|
1050
1124
|
this.log.debug(
|
|
1051
1125
|
`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
|
|
1052
1126
|
);
|
|
1053
1127
|
|
|
1054
|
-
return this.
|
|
1128
|
+
return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
|
|
1055
1129
|
}
|
|
1056
1130
|
|
|
1057
1131
|
/**
|