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