@aztec/pxe 0.0.1-commit.d3ec352c → 0.0.1-commit.f295ac2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +105 -15
- package/dest/block_synchronizer/block_synchronizer.d.ts +41 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
- package/dest/{synchronizer/synchronizer.js → block_synchronizer/block_synchronizer.js} +35 -30
- package/dest/block_synchronizer/index.d.ts +2 -0
- package/dest/block_synchronizer/index.d.ts.map +1 -0
- package/dest/block_synchronizer/index.js +1 -0
- package/dest/config/index.d.ts +4 -4
- package/dest/config/index.d.ts.map +1 -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 +42 -14
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +73 -29
- package/dest/contract_function_simulator/execution_note_cache.d.ts +21 -12
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +48 -31
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +1 -1
- package/dest/contract_function_simulator/hashed_values_cache.d.ts +2 -2
- package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +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 +5 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +5 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +14 -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 +4 -2
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +9 -5
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +11 -7
- package/dest/contract_function_simulator/oracle/oracle.d.ts +7 -7
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +37 -25
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +10 -16
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +19 -18
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +25 -25
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +29 -44
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +63 -21
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +162 -54
- package/dest/contract_function_simulator/pick_notes.d.ts +2 -2
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +23 -5
- package/dest/debug/pxe_debug_utils.d.ts +31 -0
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
- package/dest/debug/pxe_debug_utils.js +37 -0
- package/dest/entrypoints/client/bundle/index.d.ts +1 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +0 -1
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +12 -3
- package/dest/entrypoints/client/lazy/index.d.ts +1 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +0 -1
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +12 -3
- package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +3 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -1
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +12 -8
- 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 +16 -0
- package/dest/events/event_service.d.ts.map +1 -0
- package/dest/events/event_service.js +45 -0
- package/dest/events/index.d.ts +2 -0
- package/dest/events/index.d.ts.map +1 -0
- package/dest/events/index.js +1 -0
- package/dest/events/private_event_filter_validator.d.ts +9 -0
- package/dest/events/private_event_filter_validator.d.ts.map +1 -0
- package/dest/events/private_event_filter_validator.js +38 -0
- package/dest/job_coordinator/job_coordinator.d.ts +74 -0
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
- package/dest/job_coordinator/job_coordinator.js +93 -0
- package/dest/logs/log_service.d.ts +27 -0
- package/dest/logs/log_service.d.ts.map +1 -0
- package/dest/logs/log_service.js +122 -0
- package/dest/notes/index.d.ts +2 -0
- package/dest/notes/index.d.ts.map +1 -0
- package/dest/notes/index.js +1 -0
- package/dest/notes/note_service.d.ts +48 -0
- package/dest/notes/note_service.d.ts.map +1 -0
- package/dest/notes/note_service.js +147 -0
- package/dest/oracle_version.d.ts +2 -2
- package/dest/oracle_version.js +2 -2
- package/dest/private_kernel/hints/index.d.ts +2 -2
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +13 -7
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +8 -9
- package/dest/private_kernel/private_kernel_oracle.d.ts +26 -29
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +90 -2
- package/dest/pxe.d.ts +45 -81
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +182 -215
- 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} +1 -1
- 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/{sync_data_provider/sync_data_provider.d.ts → anchor_block_store/anchor_block_store.d.ts} +2 -4
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
- package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +2 -9
- package/dest/storage/{sync_data_provider → anchor_block_store}/index.d.ts +2 -2
- package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
- package/dest/storage/anchor_block_store/index.js +1 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_store.js +255 -0
- package/dest/storage/capsule_store/index.d.ts +2 -0
- package/dest/storage/capsule_store/index.d.ts.map +1 -0
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +8 -5
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
- package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +46 -3
- 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/{contract_data_provider → contract_store}/private_functions_tree.js +1 -1
- 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/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_data_provider/note_data_provider.d.ts → note_store/note_store.d.ts} +15 -13
- package/dest/storage/note_store/note_store.d.ts.map +1 -0
- package/dest/storage/{note_data_provider/note_data_provider.js → note_store/note_store.js} +105 -102
- package/dest/storage/private_event_store/private_event_store.d.ts +78 -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 +222 -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 +99 -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 +30 -0
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +77 -0
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/sender_tagging_store.js +278 -0
- package/dest/tagging/constants.d.ts +2 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +10 -2
- package/dest/tagging/index.d.ts +15 -6
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +14 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +14 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +14 -0
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +29 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +20 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +74 -0
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +32 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +20 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +57 -0
- package/dest/tree_membership/tree_membership_service.d.ts +50 -0
- package/dest/tree_membership/tree_membership_service.d.ts.map +1 -0
- package/dest/tree_membership/tree_membership_service.js +75 -0
- package/package.json +18 -18
- package/src/bin/check_oracle_version.ts +130 -20
- package/src/{synchronizer/synchronizer.ts → block_synchronizer/block_synchronizer.ts} +44 -30
- package/src/block_synchronizer/index.ts +1 -0
- package/src/config/index.ts +3 -3
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +118 -30
- package/src/contract_function_simulator/execution_note_cache.ts +51 -29
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +1 -1
- package/src/contract_function_simulator/hashed_values_cache.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +6 -5
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +13 -12
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +23 -9
- package/src/contract_function_simulator/oracle/oracle.ts +44 -28
- package/src/contract_function_simulator/oracle/private_execution.ts +22 -30
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +97 -58
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +233 -63
- package/src/contract_function_simulator/pick_notes.ts +1 -1
- package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
- package/src/debug/pxe_debug_utils.ts +48 -0
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +9 -3
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +9 -4
- package/src/entrypoints/pxe_creation_options.ts +4 -1
- package/src/entrypoints/server/index.ts +2 -1
- package/src/entrypoints/server/utils.ts +12 -16
- package/src/error_enriching.ts +7 -15
- package/src/events/event_service.ts +73 -0
- package/src/events/index.ts +1 -0
- package/src/events/private_event_filter_validator.ts +46 -0
- package/src/job_coordinator/job_coordinator.ts +149 -0
- package/src/logs/log_service.ts +204 -0
- package/src/notes/index.ts +1 -0
- package/src/notes/note_service.ts +194 -0
- package/src/oracle_version.ts +2 -2
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +34 -23
- package/src/private_kernel/private_kernel_execution_prover.ts +7 -9
- package/src/private_kernel/private_kernel_oracle.ts +118 -37
- package/src/pxe.ts +233 -279
- package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +1 -1
- package/src/storage/address_store/index.ts +1 -0
- package/src/storage/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +2 -12
- package/src/storage/anchor_block_store/index.ts +1 -0
- package/src/storage/capsule_store/capsule_store.ts +315 -0
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +65 -3
- package/src/storage/contract_store/index.ts +1 -0
- package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +1 -1
- package/src/storage/index.ts +7 -7
- package/src/storage/note_store/index.ts +2 -0
- package/src/storage/{note_data_provider/note_data_provider.ts → note_store/note_store.ts} +117 -105
- package/src/storage/private_event_store/private_event_store.ts +324 -0
- package/src/storage/tagging_store/index.ts +3 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +129 -0
- package/src/storage/tagging_store/sender_address_book_store.ts +42 -0
- package/src/storage/tagging_store/sender_tagging_store.ts +345 -0
- package/src/tagging/constants.ts +10 -2
- package/src/tagging/index.ts +17 -5
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +133 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +43 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +97 -0
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +48 -0
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +75 -0
- package/src/tree_membership/tree_membership_service.ts +97 -0
- package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -267
- package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
- package/dest/contract_function_simulator/execution_data_provider.js +0 -14
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +0 -123
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
- package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -696
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -45
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
- package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
- package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
- package/dest/storage/address_data_provider/index.d.ts +0 -2
- package/dest/storage/address_data_provider/index.d.ts.map +0 -1
- package/dest/storage/address_data_provider/index.js +0 -1
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -25
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
- package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -118
- package/dest/storage/capsule_data_provider/index.d.ts +0 -2
- package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
- package/dest/storage/capsule_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/index.d.ts +0 -2
- package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
- package/dest/storage/note_data_provider/index.d.ts +0 -3
- package/dest/storage/note_data_provider/index.d.ts.map +0 -1
- package/dest/storage/note_data_provider/index.js +0 -2
- package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
- package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -37
- 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 -105
- package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
- package/dest/storage/sync_data_provider/index.js +0 -1
- package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.d.ts +0 -2
- package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.js +0 -1
- package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
- package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
- package/dest/synchronizer/index.d.ts +0 -2
- package/dest/synchronizer/index.d.ts.map +0 -1
- package/dest/synchronizer/index.js +0 -1
- package/dest/synchronizer/synchronizer.d.ts +0 -36
- package/dest/synchronizer/synchronizer.d.ts.map +0 -1
- package/dest/tagging/siloed_tag.d.ts +0 -14
- package/dest/tagging/siloed_tag.d.ts.map +0 -1
- package/dest/tagging/siloed_tag.js +0 -20
- package/dest/tagging/tag.d.ts +0 -12
- package/dest/tagging/tag.d.ts.map +0 -1
- package/dest/tagging/tag.js +0 -17
- package/dest/tagging/utils.d.ts +0 -18
- package/dest/tagging/utils.d.ts.map +0 -1
- package/dest/tagging/utils.js +0 -24
- package/src/contract_function_simulator/execution_data_provider.ts +0 -342
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1023
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -132
- package/src/storage/address_data_provider/index.ts +0 -1
- package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
- package/src/storage/capsule_data_provider/index.ts +0 -1
- package/src/storage/contract_data_provider/index.ts +0 -1
- package/src/storage/note_data_provider/index.ts +0 -2
- package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -143
- package/src/storage/sync_data_provider/index.ts +0 -1
- package/src/storage/tagging_data_provider/index.ts +0 -1
- package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
- package/src/synchronizer/index.ts +0 -1
- package/src/tagging/siloed_tag.ts +0 -22
- package/src/tagging/tag.ts +0 -16
- package/src/tagging/utils.ts +0 -31
|
@@ -1,36 +1,43 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
4
|
import type { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
4
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
L2BlockHash,
|
|
7
|
+
L2BlockStream,
|
|
8
|
+
type L2BlockStreamEvent,
|
|
9
|
+
type L2BlockStreamEventHandler,
|
|
10
|
+
} from '@aztec/stdlib/block';
|
|
5
11
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
6
12
|
|
|
7
13
|
import type { PXEConfig } from '../config/index.js';
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
10
|
-
import type {
|
|
14
|
+
import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
15
|
+
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
16
|
+
import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
|
|
11
17
|
|
|
12
18
|
/**
|
|
13
|
-
* The
|
|
19
|
+
* The BlockSynchronizer class orchestrates synchronization between PXE and Aztec node, maintaining an up-to-date
|
|
14
20
|
* view of the L2 chain state. It handles block header retrieval, chain reorganizations, and provides an interface
|
|
15
21
|
* for querying sync status.
|
|
16
22
|
*/
|
|
17
|
-
export class
|
|
23
|
+
export class BlockSynchronizer implements L2BlockStreamEventHandler {
|
|
18
24
|
private log: Logger;
|
|
19
25
|
private isSyncing: Promise<void> | undefined;
|
|
20
26
|
protected readonly blockStream: L2BlockStream;
|
|
21
27
|
|
|
22
28
|
constructor(
|
|
23
29
|
private node: AztecNode,
|
|
24
|
-
private
|
|
25
|
-
private
|
|
26
|
-
private
|
|
30
|
+
private store: AztecAsyncKVStore,
|
|
31
|
+
private anchorBlockStore: AnchorBlockStore,
|
|
32
|
+
private noteStore: NoteStore,
|
|
33
|
+
private privateEventStore: PrivateEventStore,
|
|
27
34
|
private l2TipsStore: L2TipsKVStore,
|
|
28
35
|
config: Partial<Pick<PXEConfig, 'l2BlockBatchSize'>> = {},
|
|
29
36
|
loggerOrSuffix?: string | Logger,
|
|
30
37
|
) {
|
|
31
38
|
this.log =
|
|
32
39
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
33
|
-
? createLogger(loggerOrSuffix ? `pxe:
|
|
40
|
+
? createLogger(loggerOrSuffix ? `pxe:block_synchronizer:${loggerOrSuffix}` : `pxe:block_synchronizer`)
|
|
34
41
|
: loggerOrSuffix;
|
|
35
42
|
this.blockStream = this.createBlockStream(config);
|
|
36
43
|
}
|
|
@@ -50,30 +57,36 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
50
57
|
|
|
51
58
|
switch (event.type) {
|
|
52
59
|
case 'blocks-added': {
|
|
53
|
-
const lastBlock = event.blocks.at(-1)
|
|
60
|
+
const lastBlock = event.blocks.at(-1)!;
|
|
54
61
|
this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
|
|
55
62
|
blockHash: lastBlock.hash(),
|
|
56
63
|
archive: lastBlock.archive.root.toString(),
|
|
57
64
|
header: lastBlock.header.toInspect(),
|
|
58
65
|
});
|
|
59
|
-
await this.
|
|
66
|
+
await this.anchorBlockStore.setHeader(lastBlock.header);
|
|
60
67
|
break;
|
|
61
68
|
}
|
|
62
69
|
case 'chain-pruned': {
|
|
63
70
|
this.log.warn(`Pruning data after block ${event.block.number} due to reorg`);
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
await this.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
await this.syncDataProvider.setHeader(newHeader);
|
|
71
|
+
|
|
72
|
+
const oldAnchorBlockNumber = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
|
|
73
|
+
// Note that the following is not necessarily the anchor block that will be used in the transaction - if
|
|
74
|
+
// the chain has already moved past the reorg, we'll also see blocks-added events that will push the anchor
|
|
75
|
+
// forward.
|
|
76
|
+
const newAnchorBlockHeader = await this.node.getBlockHeader(L2BlockHash.fromString(event.block.hash));
|
|
77
|
+
|
|
78
|
+
if (!newAnchorBlockHeader) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
`Block header for block number ${event.block.number} and hash ${event.block.hash} not found during chain prune. This likely indicates a bug in the node, as we receive block stream events and fetch block headers from the same node.`,
|
|
81
|
+
);
|
|
76
82
|
}
|
|
83
|
+
|
|
84
|
+
// Operations are wrapped in a single transaction to ensure atomicity.
|
|
85
|
+
await this.store.transactionAsync(async () => {
|
|
86
|
+
await this.noteStore.rollback(event.block.number, oldAnchorBlockNumber);
|
|
87
|
+
await this.privateEventStore.rollback(event.block.number, oldAnchorBlockNumber);
|
|
88
|
+
await this.anchorBlockStore.setHeader(newAnchorBlockHeader);
|
|
89
|
+
});
|
|
77
90
|
break;
|
|
78
91
|
}
|
|
79
92
|
}
|
|
@@ -82,6 +95,11 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
82
95
|
/**
|
|
83
96
|
* Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
|
|
84
97
|
* recent data (e.g. notes), and handling any reorgs that might have occurred.
|
|
98
|
+
*
|
|
99
|
+
* Note this BlockSynchronizer is designed to let its users control when a synchronization is run,
|
|
100
|
+
* so this component doesn't proactively stay up to date with the blockchain.
|
|
101
|
+
*
|
|
102
|
+
* We do this so PXE can ensure data consistency.
|
|
85
103
|
*/
|
|
86
104
|
public async sync() {
|
|
87
105
|
if (this.isSyncing !== undefined) {
|
|
@@ -104,18 +122,14 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
104
122
|
let currentHeader;
|
|
105
123
|
|
|
106
124
|
try {
|
|
107
|
-
currentHeader = await this.
|
|
125
|
+
currentHeader = await this.anchorBlockStore.getBlockHeader();
|
|
108
126
|
} catch {
|
|
109
127
|
this.log.debug('Header is not set, requesting from the node');
|
|
110
128
|
}
|
|
111
129
|
if (!currentHeader) {
|
|
112
130
|
// REFACTOR: We should know the header of the genesis block without having to request it from the node.
|
|
113
|
-
await this.
|
|
131
|
+
await this.anchorBlockStore.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
|
|
114
132
|
}
|
|
115
133
|
await this.blockStream.sync();
|
|
116
134
|
}
|
|
117
|
-
|
|
118
|
-
public getSynchedBlockNumber() {
|
|
119
|
-
return this.syncDataProvider.getBlockNumber();
|
|
120
|
-
}
|
|
121
135
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './block_synchronizer.js';
|
package/src/config/index.ts
CHANGED
|
@@ -19,14 +19,14 @@ export interface KernelProverConfig {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* Configuration settings for the synchronizer.
|
|
22
|
+
* Configuration settings for the block synchronizer.
|
|
23
23
|
*/
|
|
24
|
-
export interface
|
|
24
|
+
export interface BlockSynchronizerConfig {
|
|
25
25
|
/** Maximum amount of blocks to pull from the stream in one request when synchronizing */
|
|
26
26
|
l2BlockBatchSize: number;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig &
|
|
29
|
+
export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
|
|
30
30
|
|
|
31
31
|
export type CliPXEOptions = {
|
|
32
32
|
/** Custom Aztec Node URL to connect to */
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
2
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
3
|
+
import type { NodeStats, RoundTripStats } from '@aztec/stdlib/tx';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Proxy generator for an AztecNode that tracks the time taken for each RPC call and the number of round trips (actual
|
|
7
|
+
* blocking waits for node responses).
|
|
8
|
+
*
|
|
9
|
+
* A round trip is counted when we transition from 0 to 1 in-flight calls, and ends when all concurrent calls complete.
|
|
10
|
+
* This means parallel calls in Promise.all count as a single round trip.
|
|
11
|
+
*
|
|
12
|
+
* Note that batching of RPC calls in `safe_json_rpc_client.ts` could affect the round trip counts but in places we
|
|
13
|
+
* currently use this information we do not even use HTTP as we have direct access to the Aztec Node instance in TS
|
|
14
|
+
* (i.e. not running against external node) so this is not a problem for now.
|
|
15
|
+
*
|
|
16
|
+
* If you want to use this against external node and the info gets skewed by batching you can set the `maxBatchSize`
|
|
17
|
+
* value in `safe_json_rpc_client.ts` to 1 (the main motivation for batching was to get around parallel http requests
|
|
18
|
+
* limits in web browsers which is not a problem when debugging in node.js).
|
|
19
|
+
*/
|
|
20
|
+
export type BenchmarkedNode = AztecNode & { getStats(): NodeStats };
|
|
21
|
+
|
|
22
|
+
export class BenchmarkedNodeFactory {
|
|
23
|
+
static create(node: AztecNode): BenchmarkedNode {
|
|
24
|
+
// Per-method call stats
|
|
25
|
+
const perMethod: Partial<Record<keyof AztecNode, { times: number[] }>> = {};
|
|
26
|
+
|
|
27
|
+
// Round trip tracking
|
|
28
|
+
let inFlightCount = 0;
|
|
29
|
+
let currentRoundTripTimer: Timer | null = null;
|
|
30
|
+
let currentRoundTripMethods: string[] = [];
|
|
31
|
+
const roundTrips: RoundTripStats = {
|
|
32
|
+
roundTrips: 0,
|
|
33
|
+
totalBlockingTime: 0,
|
|
34
|
+
roundTripDurations: [],
|
|
35
|
+
roundTripMethods: [],
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return new Proxy(node, {
|
|
39
|
+
get(target, prop: keyof BenchmarkedNode) {
|
|
40
|
+
if (prop === 'getStats') {
|
|
41
|
+
return (): NodeStats => {
|
|
42
|
+
return { perMethod, roundTrips };
|
|
43
|
+
};
|
|
44
|
+
} else {
|
|
45
|
+
return function (...args: any[]) {
|
|
46
|
+
// Track per-method stats
|
|
47
|
+
if (!perMethod[prop]) {
|
|
48
|
+
perMethod[prop] = { times: [] };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Start of a new round trip batch?
|
|
52
|
+
if (inFlightCount === 0) {
|
|
53
|
+
roundTrips.roundTrips++;
|
|
54
|
+
currentRoundTripTimer = new Timer();
|
|
55
|
+
currentRoundTripMethods = [];
|
|
56
|
+
}
|
|
57
|
+
inFlightCount++;
|
|
58
|
+
currentRoundTripMethods.push(prop);
|
|
59
|
+
|
|
60
|
+
const callTimer = new Timer();
|
|
61
|
+
const result = (target[prop] as any).apply(target, args);
|
|
62
|
+
|
|
63
|
+
// Handle completion - called when the call finishes (after Promise resolves)
|
|
64
|
+
const handleCompletion = () => {
|
|
65
|
+
const callTime = callTimer.ms();
|
|
66
|
+
perMethod[prop]!.times.push(callTime);
|
|
67
|
+
|
|
68
|
+
inFlightCount--;
|
|
69
|
+
|
|
70
|
+
// End of round trip batch - all concurrent calls completed
|
|
71
|
+
if (inFlightCount === 0 && currentRoundTripTimer) {
|
|
72
|
+
const roundTripTime = currentRoundTripTimer.ms();
|
|
73
|
+
roundTrips.totalBlockingTime += roundTripTime;
|
|
74
|
+
roundTrips.roundTripDurations.push(roundTripTime);
|
|
75
|
+
roundTrips.roundTripMethods.push(currentRoundTripMethods);
|
|
76
|
+
currentRoundTripTimer = null;
|
|
77
|
+
currentRoundTripMethods = [];
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// If the result is a Promise, chain the completion handler
|
|
82
|
+
if (result && typeof result.then === 'function') {
|
|
83
|
+
return result.then(
|
|
84
|
+
(value: any) => {
|
|
85
|
+
handleCompletion();
|
|
86
|
+
return value;
|
|
87
|
+
},
|
|
88
|
+
(error: any) => {
|
|
89
|
+
handleCompletion();
|
|
90
|
+
throw error;
|
|
91
|
+
},
|
|
92
|
+
);
|
|
93
|
+
} else {
|
|
94
|
+
// Synchronous method - handle completion immediately
|
|
95
|
+
handleCompletion();
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
}) as BenchmarkedNode;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -17,10 +17,11 @@ import {
|
|
|
17
17
|
MAX_PRIVATE_LOGS_PER_TX,
|
|
18
18
|
} from '@aztec/constants';
|
|
19
19
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
20
|
-
import { poseidon2Hash } from '@aztec/foundation/crypto';
|
|
21
|
-
import { Fr } from '@aztec/foundation/
|
|
20
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
21
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
22
22
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
23
23
|
import { Timer } from '@aztec/foundation/timer';
|
|
24
|
+
import type { KeyStore } from '@aztec/key-store';
|
|
24
25
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
25
26
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
26
27
|
import {
|
|
@@ -44,6 +45,7 @@ import {
|
|
|
44
45
|
siloNoteHash,
|
|
45
46
|
siloNullifier,
|
|
46
47
|
} from '@aztec/stdlib/hash';
|
|
48
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
47
49
|
import {
|
|
48
50
|
PartialPrivateTailPublicInputsForPublic,
|
|
49
51
|
PartialPrivateTailPublicInputsForRollup,
|
|
@@ -59,6 +61,7 @@ import { PrivateLog } from '@aztec/stdlib/logs';
|
|
|
59
61
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
60
62
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
61
63
|
import {
|
|
64
|
+
BlockHeader,
|
|
62
65
|
CallContext,
|
|
63
66
|
HashedValues,
|
|
64
67
|
PrivateExecutionResult,
|
|
@@ -68,8 +71,16 @@ import {
|
|
|
68
71
|
getFinalMinRevertibleSideEffectCounter,
|
|
69
72
|
} from '@aztec/stdlib/tx';
|
|
70
73
|
|
|
71
|
-
import type {
|
|
72
|
-
import type {
|
|
74
|
+
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
75
|
+
import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
76
|
+
import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
77
|
+
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
78
|
+
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
79
|
+
import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
|
|
80
|
+
import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
|
|
81
|
+
import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
|
|
82
|
+
import type { SenderTaggingStore } from '../storage/tagging_store/sender_tagging_store.js';
|
|
83
|
+
import type { BenchmarkedNode } from './benchmarked_node.js';
|
|
73
84
|
import { ExecutionNoteCache } from './execution_note_cache.js';
|
|
74
85
|
import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
75
86
|
import { HashedValuesCache } from './hashed_values_cache.js';
|
|
@@ -85,7 +96,17 @@ export class ContractFunctionSimulator {
|
|
|
85
96
|
private log: Logger;
|
|
86
97
|
|
|
87
98
|
constructor(
|
|
88
|
-
private
|
|
99
|
+
private contractStore: ContractStore,
|
|
100
|
+
private noteStore: NoteStore,
|
|
101
|
+
private keyStore: KeyStore,
|
|
102
|
+
private addressStore: AddressStore,
|
|
103
|
+
private aztecNode: AztecNode,
|
|
104
|
+
private anchorBlockStore: AnchorBlockStore,
|
|
105
|
+
private senderTaggingStore: SenderTaggingStore,
|
|
106
|
+
private recipientTaggingStore: RecipientTaggingStore,
|
|
107
|
+
private senderAddressBookStore: SenderAddressBookStore,
|
|
108
|
+
private capsuleStore: CapsuleStore,
|
|
109
|
+
private privateEventStore: PrivateEventStore,
|
|
89
110
|
private simulator: CircuitSimulator,
|
|
90
111
|
) {
|
|
91
112
|
this.log = createLogger('simulator');
|
|
@@ -98,9 +119,11 @@ export class ContractFunctionSimulator {
|
|
|
98
119
|
* @param contractAddress - The address of the contract (should match request.origin)
|
|
99
120
|
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
100
121
|
* or a specific account.
|
|
122
|
+
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
101
123
|
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
102
124
|
* the `privateGetSenderForTags` oracle.
|
|
103
125
|
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
126
|
+
* @param jobId - The job ID for staged writes.
|
|
104
127
|
* @returns The result of the execution.
|
|
105
128
|
*/
|
|
106
129
|
public async run(
|
|
@@ -108,15 +131,20 @@ export class ContractFunctionSimulator {
|
|
|
108
131
|
contractAddress: AztecAddress,
|
|
109
132
|
selector: FunctionSelector,
|
|
110
133
|
msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
|
|
111
|
-
|
|
112
|
-
|
|
134
|
+
anchorBlockHeader: BlockHeader,
|
|
135
|
+
senderForTags: AztecAddress | undefined,
|
|
136
|
+
scopes: AztecAddress[] | undefined,
|
|
137
|
+
jobId: string,
|
|
113
138
|
): Promise<PrivateExecutionResult> {
|
|
114
139
|
const simulatorSetupTimer = new Timer();
|
|
115
|
-
const anchorBlockHeader = await this.executionDataProvider.getAnchorBlockHeader();
|
|
116
140
|
|
|
117
|
-
await
|
|
141
|
+
await this.contractStore.syncPrivateState(contractAddress, selector, privateSyncCall =>
|
|
142
|
+
this.runUtility(privateSyncCall, [], anchorBlockHeader, scopes, jobId),
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
await verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader);
|
|
118
146
|
|
|
119
|
-
const entryPointArtifact = await this.
|
|
147
|
+
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
|
|
120
148
|
|
|
121
149
|
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
122
150
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
@@ -147,12 +175,26 @@ export class ContractFunctionSimulator {
|
|
|
147
175
|
request.txContext,
|
|
148
176
|
callContext,
|
|
149
177
|
anchorBlockHeader,
|
|
178
|
+
async call => {
|
|
179
|
+
await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
|
|
180
|
+
},
|
|
150
181
|
request.authWitnesses,
|
|
151
182
|
request.capsules,
|
|
152
183
|
HashedValuesCache.create(request.argsOfCalls),
|
|
153
184
|
noteCache,
|
|
154
185
|
taggingIndexCache,
|
|
155
|
-
this.
|
|
186
|
+
this.contractStore,
|
|
187
|
+
this.noteStore,
|
|
188
|
+
this.keyStore,
|
|
189
|
+
this.addressStore,
|
|
190
|
+
this.aztecNode,
|
|
191
|
+
this.anchorBlockStore,
|
|
192
|
+
this.senderTaggingStore,
|
|
193
|
+
this.recipientTaggingStore,
|
|
194
|
+
this.senderAddressBookStore,
|
|
195
|
+
this.capsuleStore,
|
|
196
|
+
this.privateEventStore,
|
|
197
|
+
jobId,
|
|
156
198
|
0, // totalPublicArgsCount
|
|
157
199
|
startSideEffectCounter,
|
|
158
200
|
undefined, // log
|
|
@@ -176,8 +218,9 @@ export class ContractFunctionSimulator {
|
|
|
176
218
|
request.functionSelector,
|
|
177
219
|
);
|
|
178
220
|
const simulatorTeardownTimer = new Timer();
|
|
179
|
-
|
|
180
|
-
|
|
221
|
+
|
|
222
|
+
noteCache.finish();
|
|
223
|
+
const firstNullifierHint = noteCache.getNonceGenerator();
|
|
181
224
|
|
|
182
225
|
const publicCallRequests = collectNested([executionResult], r =>
|
|
183
226
|
r.publicInputs.publicCallRequests
|
|
@@ -213,20 +256,45 @@ export class ContractFunctionSimulator {
|
|
|
213
256
|
* Runs a utility function.
|
|
214
257
|
* @param call - The function call to execute.
|
|
215
258
|
* @param authwits - Authentication witnesses required for the function call.
|
|
259
|
+
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
216
260
|
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
217
261
|
* accounts if not specified.
|
|
218
262
|
* @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
|
|
219
263
|
*/
|
|
220
|
-
public async runUtility(
|
|
221
|
-
|
|
264
|
+
public async runUtility(
|
|
265
|
+
call: FunctionCall,
|
|
266
|
+
authwits: AuthWitness[],
|
|
267
|
+
anchorBlockHeader: BlockHeader,
|
|
268
|
+
scopes: AztecAddress[] | undefined,
|
|
269
|
+
jobId: string,
|
|
270
|
+
): Promise<Fr[]> {
|
|
271
|
+
await verifyCurrentClassId(call.to, this.aztecNode, this.contractStore, anchorBlockHeader);
|
|
222
272
|
|
|
223
|
-
const entryPointArtifact = await this.
|
|
273
|
+
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
224
274
|
|
|
225
275
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
226
276
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
227
277
|
}
|
|
228
278
|
|
|
229
|
-
const oracle = new UtilityExecutionOracle(
|
|
279
|
+
const oracle = new UtilityExecutionOracle(
|
|
280
|
+
call.to,
|
|
281
|
+
authwits,
|
|
282
|
+
[],
|
|
283
|
+
anchorBlockHeader,
|
|
284
|
+
this.contractStore,
|
|
285
|
+
this.noteStore,
|
|
286
|
+
this.keyStore,
|
|
287
|
+
this.addressStore,
|
|
288
|
+
this.aztecNode,
|
|
289
|
+
this.anchorBlockStore,
|
|
290
|
+
this.recipientTaggingStore,
|
|
291
|
+
this.senderAddressBookStore,
|
|
292
|
+
this.capsuleStore,
|
|
293
|
+
this.privateEventStore,
|
|
294
|
+
jobId,
|
|
295
|
+
undefined,
|
|
296
|
+
scopes,
|
|
297
|
+
);
|
|
230
298
|
|
|
231
299
|
try {
|
|
232
300
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
@@ -258,8 +326,20 @@ export class ContractFunctionSimulator {
|
|
|
258
326
|
}
|
|
259
327
|
// docs:end:execute_utility_function
|
|
260
328
|
|
|
329
|
+
/**
|
|
330
|
+
* Returns the execution statistics collected during the simulator run.
|
|
331
|
+
* @returns The execution statistics.
|
|
332
|
+
*/
|
|
261
333
|
getStats() {
|
|
262
|
-
|
|
334
|
+
const nodeRPCCalls =
|
|
335
|
+
typeof (this.aztecNode as BenchmarkedNode).getStats === 'function'
|
|
336
|
+
? (this.aztecNode as BenchmarkedNode).getStats()
|
|
337
|
+
: {
|
|
338
|
+
perMethod: {},
|
|
339
|
+
roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
return { nodeRPCCalls };
|
|
263
343
|
}
|
|
264
344
|
}
|
|
265
345
|
|
|
@@ -280,15 +360,15 @@ class OrderedSideEffect<T> {
|
|
|
280
360
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
281
361
|
* output that can be sent to the node for public simulation
|
|
282
362
|
* @param privateExecutionResult - The result of the private execution.
|
|
283
|
-
* @param
|
|
284
|
-
*
|
|
285
|
-
*
|
|
363
|
+
* @param contractStore - A provider for contract data in order to get function names and debug info.
|
|
364
|
+
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
365
|
+
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
286
366
|
* @returns The simulated proving result.
|
|
287
367
|
*/
|
|
288
368
|
export async function generateSimulatedProvingResult(
|
|
289
369
|
privateExecutionResult: PrivateExecutionResult,
|
|
290
|
-
|
|
291
|
-
|
|
370
|
+
contractStore: ContractStore,
|
|
371
|
+
minRevertibleSideEffectCounterOverride?: number,
|
|
292
372
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
293
373
|
const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
|
|
294
374
|
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
@@ -365,7 +445,7 @@ export async function generateSimulatedProvingResult(
|
|
|
365
445
|
: execution.publicInputs.publicTeardownCallRequest;
|
|
366
446
|
|
|
367
447
|
executionSteps.push({
|
|
368
|
-
functionName: await
|
|
448
|
+
functionName: await contractStore.getDebugFunctionName(
|
|
369
449
|
execution.publicInputs.callContext.contractAddress,
|
|
370
450
|
execution.publicInputs.callContext.functionSelector,
|
|
371
451
|
),
|
|
@@ -392,16 +472,18 @@ export async function generateSimulatedProvingResult(
|
|
|
392
472
|
const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
|
|
393
473
|
|
|
394
474
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
395
|
-
const minRevertibleSideEffectCounter =
|
|
475
|
+
const minRevertibleSideEffectCounter =
|
|
476
|
+
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
396
477
|
|
|
397
478
|
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
|
|
398
479
|
nullifiers.sort(sortByCounter),
|
|
399
480
|
minRevertibleSideEffectCounter,
|
|
400
481
|
);
|
|
401
|
-
|
|
482
|
+
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
483
|
+
if (nonRevertibleNullifiers.length === 0) {
|
|
484
|
+
nonRevertibleNullifiers.push(nonceGenerator);
|
|
485
|
+
} else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
|
|
402
486
|
throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
|
|
403
|
-
} else {
|
|
404
|
-
nonRevertibleNullifiers.unshift(nonceGenerator);
|
|
405
487
|
}
|
|
406
488
|
|
|
407
489
|
if (isPrivateOnlyTx) {
|
|
@@ -437,6 +519,12 @@ export async function generateSimulatedProvingResult(
|
|
|
437
519
|
siloedNoteHashes.sort(sortByCounter),
|
|
438
520
|
minRevertibleSideEffectCounter,
|
|
439
521
|
);
|
|
522
|
+
const nonRevertibleUniqueNoteHashes = await Promise.all(
|
|
523
|
+
nonRevertibleNoteHashes.map(async (noteHash, i) => {
|
|
524
|
+
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
525
|
+
return await computeUniqueNoteHash(nonce, noteHash);
|
|
526
|
+
}),
|
|
527
|
+
);
|
|
440
528
|
const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(
|
|
441
529
|
l2ToL1Messages.sort(sortByCounter),
|
|
442
530
|
minRevertibleSideEffectCounter,
|
|
@@ -455,7 +543,7 @@ export async function generateSimulatedProvingResult(
|
|
|
455
543
|
);
|
|
456
544
|
|
|
457
545
|
const nonRevertibleData = new PrivateToPublicAccumulatedData(
|
|
458
|
-
padArrayEnd(
|
|
546
|
+
padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
459
547
|
padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
|
|
460
548
|
padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
|
|
461
549
|
padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
@@ -503,7 +591,7 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
|
|
|
503
591
|
const revertibleSideEffects: T[] = [];
|
|
504
592
|
const nonRevertibleSideEffects: T[] = [];
|
|
505
593
|
effects.forEach(effect => {
|
|
506
|
-
if (effect.counter < minRevertibleSideEffectCounter) {
|
|
594
|
+
if (minRevertibleSideEffectCounter === 0 || effect.counter < minRevertibleSideEffectCounter) {
|
|
507
595
|
nonRevertibleSideEffects.push(effect.sideEffect);
|
|
508
596
|
} else {
|
|
509
597
|
revertibleSideEffects.push(effect.sideEffect);
|