@aztec/pxe 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52
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.d.ts +1 -1
- 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} +36 -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 -12
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +7 -13
- package/dest/config/package_info.d.ts +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 +44 -16
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +80 -37
- package/dest/contract_function_simulator/execution_note_cache.d.ts +25 -14
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +59 -34
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +2 -2
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +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/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 +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 +3 -3
- 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 +6 -4
- 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 +12 -3
- 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/index.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +22 -15
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +2 -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 +14 -8
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +16 -11
- package/dest/contract_function_simulator/oracle/oracle.d.ts +10 -9
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +51 -33
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +10 -15
- 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 +29 -33
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +46 -48
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +65 -22
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +163 -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 +13 -4
- 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 +13 -4
- 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 +13 -20
- 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 +3 -3
- package/dest/oracle_version.js +2 -2
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +1 -1
- 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} +19 -13
- package/dest/private_kernel/index.d.ts +1 -1
- 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 +15 -15
- 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 +54 -83
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +189 -240
- 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/anchor_block_store/anchor_block_store.d.ts +9 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
- package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +2 -9
- 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 +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 -15
- 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 -15
- 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/metadata.d.ts +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_data_provider/note_data_provider.d.ts → note_store/note_store.d.ts} +19 -17
- 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} +115 -106
- 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 +20 -19
- package/src/bin/check_oracle_version.ts +130 -20
- package/src/{synchronizer/synchronizer.ts → block_synchronizer/block_synchronizer.ts} +45 -30
- package/src/block_synchronizer/index.ts +1 -0
- package/src/config/index.ts +10 -25
- 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 +132 -39
- package/src/contract_function_simulator/execution_note_cache.ts +58 -28
- 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/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +6 -5
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -2
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +14 -2
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +29 -13
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +30 -14
- package/src/contract_function_simulator/oracle/oracle.ts +62 -30
- package/src/contract_function_simulator/oracle/private_execution.ts +22 -29
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +111 -59
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +238 -56
- 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 +10 -4
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +10 -5
- package/src/entrypoints/pxe_creation_options.ts +4 -1
- package/src/entrypoints/server/index.ts +2 -1
- package/src/entrypoints/server/utils.ts +13 -31
- 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} +38 -31
- package/src/private_kernel/private_kernel_execution_prover.ts +15 -21
- package/src/private_kernel/private_kernel_oracle.ts +118 -37
- package/src/pxe.ts +238 -312
- 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 -11
- 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 -20
- 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} +131 -109
- 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 -274
- 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 -122
- package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
- package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -701
- 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_dao.d.ts +0 -100
- package/dest/storage/note_data_provider/note_dao.d.ts.map +0 -1
- package/dest/storage/note_data_provider/note_dao.js +0 -102
- 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 -43
- 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 -104
- package/dest/storage/sync_data_provider/index.d.ts +0 -2
- package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
- package/dest/storage/sync_data_provider/index.js +0 -1
- package/dest/storage/sync_data_provider/sync_data_provider.d.ts +0 -10
- 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 -35
- 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 -343
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1019
- 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/note_data_provider/note_dao.ts +0 -154
- package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -148
- 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,35 +1,43 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
4
|
import type { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
3
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
L2BlockHash,
|
|
7
|
+
L2BlockStream,
|
|
8
|
+
type L2BlockStreamEvent,
|
|
9
|
+
type L2BlockStreamEventHandler,
|
|
10
|
+
} from '@aztec/stdlib/block';
|
|
4
11
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
5
12
|
|
|
6
13
|
import type { PXEConfig } from '../config/index.js';
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
9
|
-
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';
|
|
10
17
|
|
|
11
18
|
/**
|
|
12
|
-
* The
|
|
19
|
+
* The BlockSynchronizer class orchestrates synchronization between PXE and Aztec node, maintaining an up-to-date
|
|
13
20
|
* view of the L2 chain state. It handles block header retrieval, chain reorganizations, and provides an interface
|
|
14
21
|
* for querying sync status.
|
|
15
22
|
*/
|
|
16
|
-
export class
|
|
23
|
+
export class BlockSynchronizer implements L2BlockStreamEventHandler {
|
|
17
24
|
private log: Logger;
|
|
18
25
|
private isSyncing: Promise<void> | undefined;
|
|
19
26
|
protected readonly blockStream: L2BlockStream;
|
|
20
27
|
|
|
21
28
|
constructor(
|
|
22
29
|
private node: AztecNode,
|
|
23
|
-
private
|
|
24
|
-
private
|
|
25
|
-
private
|
|
30
|
+
private store: AztecAsyncKVStore,
|
|
31
|
+
private anchorBlockStore: AnchorBlockStore,
|
|
32
|
+
private noteStore: NoteStore,
|
|
33
|
+
private privateEventStore: PrivateEventStore,
|
|
26
34
|
private l2TipsStore: L2TipsKVStore,
|
|
27
35
|
config: Partial<Pick<PXEConfig, 'l2BlockBatchSize'>> = {},
|
|
28
36
|
loggerOrSuffix?: string | Logger,
|
|
29
37
|
) {
|
|
30
38
|
this.log =
|
|
31
39
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
32
|
-
? createLogger(loggerOrSuffix ? `pxe:
|
|
40
|
+
? createLogger(loggerOrSuffix ? `pxe:block_synchronizer:${loggerOrSuffix}` : `pxe:block_synchronizer`)
|
|
33
41
|
: loggerOrSuffix;
|
|
34
42
|
this.blockStream = this.createBlockStream(config);
|
|
35
43
|
}
|
|
@@ -49,30 +57,36 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
49
57
|
|
|
50
58
|
switch (event.type) {
|
|
51
59
|
case 'blocks-added': {
|
|
52
|
-
const lastBlock = event.blocks.at(-1)
|
|
60
|
+
const lastBlock = event.blocks.at(-1)!;
|
|
53
61
|
this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
|
|
54
62
|
blockHash: lastBlock.hash(),
|
|
55
63
|
archive: lastBlock.archive.root.toString(),
|
|
56
64
|
header: lastBlock.header.toInspect(),
|
|
57
65
|
});
|
|
58
|
-
await this.
|
|
66
|
+
await this.anchorBlockStore.setHeader(lastBlock.header);
|
|
59
67
|
break;
|
|
60
68
|
}
|
|
61
69
|
case 'chain-pruned': {
|
|
62
70
|
this.log.warn(`Pruning data after block ${event.block.number} due to reorg`);
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
await this.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
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
|
+
);
|
|
75
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
|
+
});
|
|
76
90
|
break;
|
|
77
91
|
}
|
|
78
92
|
}
|
|
@@ -81,6 +95,11 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
81
95
|
/**
|
|
82
96
|
* Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
|
|
83
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.
|
|
84
103
|
*/
|
|
85
104
|
public async sync() {
|
|
86
105
|
if (this.isSyncing !== undefined) {
|
|
@@ -103,18 +122,14 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
103
122
|
let currentHeader;
|
|
104
123
|
|
|
105
124
|
try {
|
|
106
|
-
currentHeader = await this.
|
|
125
|
+
currentHeader = await this.anchorBlockStore.getBlockHeader();
|
|
107
126
|
} catch {
|
|
108
127
|
this.log.debug('Header is not set, requesting from the node');
|
|
109
128
|
}
|
|
110
129
|
if (!currentHeader) {
|
|
111
130
|
// REFACTOR: We should know the header of the genesis block without having to request it from the node.
|
|
112
|
-
await this.
|
|
131
|
+
await this.anchorBlockStore.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
|
|
113
132
|
}
|
|
114
133
|
await this.blockStream.sync();
|
|
115
134
|
}
|
|
116
|
-
|
|
117
|
-
public getSynchedBlockNumber() {
|
|
118
|
-
return this.syncDataProvider.getBlockNumber();
|
|
119
|
-
}
|
|
120
135
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './block_synchronizer.js';
|
package/src/config/index.ts
CHANGED
|
@@ -10,15 +10,6 @@ import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
|
|
|
10
10
|
|
|
11
11
|
export { getPackageInfo } from './package_info.js';
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
* Temporary configuration until WASM can be used instead of native
|
|
15
|
-
*/
|
|
16
|
-
export interface BBProverConfig {
|
|
17
|
-
bbWorkingDirectory?: string;
|
|
18
|
-
bbBinaryPath?: string;
|
|
19
|
-
bbSkipCleanup?: boolean;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
13
|
/**
|
|
23
14
|
* Configuration settings for the prover factory
|
|
24
15
|
*/
|
|
@@ -28,14 +19,14 @@ export interface KernelProverConfig {
|
|
|
28
19
|
}
|
|
29
20
|
|
|
30
21
|
/**
|
|
31
|
-
* Configuration settings for the synchronizer.
|
|
22
|
+
* Configuration settings for the block synchronizer.
|
|
32
23
|
*/
|
|
33
|
-
export interface
|
|
24
|
+
export interface BlockSynchronizerConfig {
|
|
34
25
|
/** Maximum amount of blocks to pull from the stream in one request when synchronizing */
|
|
35
26
|
l2BlockBatchSize: number;
|
|
36
27
|
}
|
|
37
28
|
|
|
38
|
-
export type PXEConfig = KernelProverConfig &
|
|
29
|
+
export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
|
|
39
30
|
|
|
40
31
|
export type CliPXEOptions = {
|
|
41
32
|
/** Custom Aztec Node URL to connect to */
|
|
@@ -50,19 +41,13 @@ export const pxeConfigMappings: ConfigMappingsType<PXEConfig> = {
|
|
|
50
41
|
...numberConfigHelper(50),
|
|
51
42
|
description: 'Maximum amount of blocks to pull from the stream in one request when synchronizing',
|
|
52
43
|
},
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
bbSkipCleanup: {
|
|
62
|
-
env: 'BB_SKIP_CLEANUP',
|
|
63
|
-
description: 'True to skip cleanup of temporary files for debugging purposes',
|
|
64
|
-
...booleanConfigHelper(),
|
|
65
|
-
},
|
|
44
|
+
// TODO: We're losing this feature in moving to bb.js api.
|
|
45
|
+
// Reimplement it as a setting that dumps the msgpack data on the bb.js backend if needed.
|
|
46
|
+
// bbSkipCleanup: {
|
|
47
|
+
// env: 'BB_SKIP_CLEANUP',
|
|
48
|
+
// description: 'True to skip cleanup of temporary files for debugging purposes',
|
|
49
|
+
// ...booleanConfigHelper(),
|
|
50
|
+
// },
|
|
66
51
|
proverEnabled: {
|
|
67
52
|
env: 'PXE_PROVER_ENABLED',
|
|
68
53
|
description: 'Enable real proofs',
|
|
@@ -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 {
|
|
@@ -32,12 +33,19 @@ import {
|
|
|
32
33
|
toACVMWitness,
|
|
33
34
|
witnessMapToFields,
|
|
34
35
|
} from '@aztec/simulator/client';
|
|
35
|
-
import type {
|
|
36
|
-
import { FunctionSelector, FunctionType
|
|
36
|
+
import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
37
|
+
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
37
38
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
38
39
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
39
40
|
import { Gas } from '@aztec/stdlib/gas';
|
|
40
|
-
import {
|
|
41
|
+
import {
|
|
42
|
+
computeNoteHashNonce,
|
|
43
|
+
computeProtocolNullifier,
|
|
44
|
+
computeUniqueNoteHash,
|
|
45
|
+
siloNoteHash,
|
|
46
|
+
siloNullifier,
|
|
47
|
+
} from '@aztec/stdlib/hash';
|
|
48
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
41
49
|
import {
|
|
42
50
|
PartialPrivateTailPublicInputsForPublic,
|
|
43
51
|
PartialPrivateTailPublicInputsForRollup,
|
|
@@ -53,6 +61,7 @@ import { PrivateLog } from '@aztec/stdlib/logs';
|
|
|
53
61
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
54
62
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
55
63
|
import {
|
|
64
|
+
BlockHeader,
|
|
56
65
|
CallContext,
|
|
57
66
|
HashedValues,
|
|
58
67
|
PrivateExecutionResult,
|
|
@@ -62,8 +71,16 @@ import {
|
|
|
62
71
|
getFinalMinRevertibleSideEffectCounter,
|
|
63
72
|
} from '@aztec/stdlib/tx';
|
|
64
73
|
|
|
65
|
-
import type {
|
|
66
|
-
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';
|
|
67
84
|
import { ExecutionNoteCache } from './execution_note_cache.js';
|
|
68
85
|
import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
69
86
|
import { HashedValuesCache } from './hashed_values_cache.js';
|
|
@@ -79,7 +96,17 @@ export class ContractFunctionSimulator {
|
|
|
79
96
|
private log: Logger;
|
|
80
97
|
|
|
81
98
|
constructor(
|
|
82
|
-
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,
|
|
83
110
|
private simulator: CircuitSimulator,
|
|
84
111
|
) {
|
|
85
112
|
this.log = createLogger('simulator');
|
|
@@ -92,9 +119,11 @@ export class ContractFunctionSimulator {
|
|
|
92
119
|
* @param contractAddress - The address of the contract (should match request.origin)
|
|
93
120
|
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
94
121
|
* or a specific account.
|
|
122
|
+
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
95
123
|
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
96
124
|
* the `privateGetSenderForTags` oracle.
|
|
97
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.
|
|
98
127
|
* @returns The result of the execution.
|
|
99
128
|
*/
|
|
100
129
|
public async run(
|
|
@@ -102,15 +131,20 @@ export class ContractFunctionSimulator {
|
|
|
102
131
|
contractAddress: AztecAddress,
|
|
103
132
|
selector: FunctionSelector,
|
|
104
133
|
msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
|
|
105
|
-
|
|
106
|
-
|
|
134
|
+
anchorBlockHeader: BlockHeader,
|
|
135
|
+
senderForTags: AztecAddress | undefined,
|
|
136
|
+
scopes: AztecAddress[] | undefined,
|
|
137
|
+
jobId: string,
|
|
107
138
|
): Promise<PrivateExecutionResult> {
|
|
108
139
|
const simulatorSetupTimer = new Timer();
|
|
109
|
-
const anchorBlockHeader = await this.executionDataProvider.getAnchorBlockHeader();
|
|
110
140
|
|
|
111
|
-
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);
|
|
112
146
|
|
|
113
|
-
const entryPointArtifact = await this.
|
|
147
|
+
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
|
|
114
148
|
|
|
115
149
|
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
116
150
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
@@ -123,7 +157,7 @@ export class ContractFunctionSimulator {
|
|
|
123
157
|
}
|
|
124
158
|
|
|
125
159
|
// reserve the first side effect for the tx hash (inserted by the private kernel)
|
|
126
|
-
const startSideEffectCounter =
|
|
160
|
+
const startSideEffectCounter = 2;
|
|
127
161
|
|
|
128
162
|
const callContext = new CallContext(
|
|
129
163
|
msgSender,
|
|
@@ -132,8 +166,8 @@ export class ContractFunctionSimulator {
|
|
|
132
166
|
entryPointArtifact.isStatic,
|
|
133
167
|
);
|
|
134
168
|
|
|
135
|
-
const
|
|
136
|
-
const noteCache = new ExecutionNoteCache(
|
|
169
|
+
const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
|
|
170
|
+
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
137
171
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
138
172
|
|
|
139
173
|
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
@@ -141,12 +175,26 @@ export class ContractFunctionSimulator {
|
|
|
141
175
|
request.txContext,
|
|
142
176
|
callContext,
|
|
143
177
|
anchorBlockHeader,
|
|
178
|
+
async call => {
|
|
179
|
+
await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
|
|
180
|
+
},
|
|
144
181
|
request.authWitnesses,
|
|
145
182
|
request.capsules,
|
|
146
183
|
HashedValuesCache.create(request.argsOfCalls),
|
|
147
184
|
noteCache,
|
|
148
185
|
taggingIndexCache,
|
|
149
|
-
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,
|
|
150
198
|
0, // totalPublicArgsCount
|
|
151
199
|
startSideEffectCounter,
|
|
152
200
|
undefined, // log
|
|
@@ -170,8 +218,9 @@ export class ContractFunctionSimulator {
|
|
|
170
218
|
request.functionSelector,
|
|
171
219
|
);
|
|
172
220
|
const simulatorTeardownTimer = new Timer();
|
|
173
|
-
|
|
174
|
-
|
|
221
|
+
|
|
222
|
+
noteCache.finish();
|
|
223
|
+
const firstNullifierHint = noteCache.getNonceGenerator();
|
|
175
224
|
|
|
176
225
|
const publicCallRequests = collectNested([executionResult], r =>
|
|
177
226
|
r.publicInputs.publicCallRequests
|
|
@@ -207,20 +256,45 @@ export class ContractFunctionSimulator {
|
|
|
207
256
|
* Runs a utility function.
|
|
208
257
|
* @param call - The function call to execute.
|
|
209
258
|
* @param authwits - Authentication witnesses required for the function call.
|
|
259
|
+
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
210
260
|
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
211
261
|
* accounts if not specified.
|
|
212
|
-
* @returns A
|
|
262
|
+
* @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
|
|
213
263
|
*/
|
|
214
|
-
public async runUtility(
|
|
215
|
-
|
|
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);
|
|
216
272
|
|
|
217
|
-
const entryPointArtifact = await this.
|
|
273
|
+
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
218
274
|
|
|
219
275
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
220
276
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
221
277
|
}
|
|
222
278
|
|
|
223
|
-
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
|
+
);
|
|
224
298
|
|
|
225
299
|
try {
|
|
226
300
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
@@ -244,17 +318,28 @@ export class ContractFunctionSimulator {
|
|
|
244
318
|
);
|
|
245
319
|
});
|
|
246
320
|
|
|
247
|
-
const returnWitness = witnessMapToFields(acirExecutionResult.returnWitness);
|
|
248
321
|
this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
|
|
249
|
-
return
|
|
322
|
+
return witnessMapToFields(acirExecutionResult.returnWitness);
|
|
250
323
|
} catch (err) {
|
|
251
324
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
252
325
|
}
|
|
253
326
|
}
|
|
254
327
|
// docs:end:execute_utility_function
|
|
255
328
|
|
|
329
|
+
/**
|
|
330
|
+
* Returns the execution statistics collected during the simulator run.
|
|
331
|
+
* @returns The execution statistics.
|
|
332
|
+
*/
|
|
256
333
|
getStats() {
|
|
257
|
-
|
|
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 };
|
|
258
343
|
}
|
|
259
344
|
}
|
|
260
345
|
|
|
@@ -275,15 +360,15 @@ class OrderedSideEffect<T> {
|
|
|
275
360
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
276
361
|
* output that can be sent to the node for public simulation
|
|
277
362
|
* @param privateExecutionResult - The result of the private execution.
|
|
278
|
-
* @param
|
|
279
|
-
*
|
|
280
|
-
*
|
|
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).
|
|
281
366
|
* @returns The simulated proving result.
|
|
282
367
|
*/
|
|
283
368
|
export async function generateSimulatedProvingResult(
|
|
284
369
|
privateExecutionResult: PrivateExecutionResult,
|
|
285
|
-
|
|
286
|
-
|
|
370
|
+
contractStore: ContractStore,
|
|
371
|
+
minRevertibleSideEffectCounterOverride?: number,
|
|
287
372
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
288
373
|
const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
|
|
289
374
|
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
@@ -360,7 +445,7 @@ export async function generateSimulatedProvingResult(
|
|
|
360
445
|
: execution.publicInputs.publicTeardownCallRequest;
|
|
361
446
|
|
|
362
447
|
executionSteps.push({
|
|
363
|
-
functionName: await
|
|
448
|
+
functionName: await contractStore.getDebugFunctionName(
|
|
364
449
|
execution.publicInputs.callContext.contractAddress,
|
|
365
450
|
execution.publicInputs.callContext.functionSelector,
|
|
366
451
|
),
|
|
@@ -387,16 +472,18 @@ export async function generateSimulatedProvingResult(
|
|
|
387
472
|
const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
|
|
388
473
|
|
|
389
474
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
390
|
-
const minRevertibleSideEffectCounter =
|
|
475
|
+
const minRevertibleSideEffectCounter =
|
|
476
|
+
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
391
477
|
|
|
392
478
|
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
|
|
393
479
|
nullifiers.sort(sortByCounter),
|
|
394
480
|
minRevertibleSideEffectCounter,
|
|
395
481
|
);
|
|
396
|
-
|
|
482
|
+
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
483
|
+
if (nonRevertibleNullifiers.length === 0) {
|
|
484
|
+
nonRevertibleNullifiers.push(nonceGenerator);
|
|
485
|
+
} else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
|
|
397
486
|
throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
|
|
398
|
-
} else {
|
|
399
|
-
nonRevertibleNullifiers.unshift(nonceGenerator);
|
|
400
487
|
}
|
|
401
488
|
|
|
402
489
|
if (isPrivateOnlyTx) {
|
|
@@ -432,6 +519,12 @@ export async function generateSimulatedProvingResult(
|
|
|
432
519
|
siloedNoteHashes.sort(sortByCounter),
|
|
433
520
|
minRevertibleSideEffectCounter,
|
|
434
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
|
+
);
|
|
435
528
|
const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(
|
|
436
529
|
l2ToL1Messages.sort(sortByCounter),
|
|
437
530
|
minRevertibleSideEffectCounter,
|
|
@@ -450,7 +543,7 @@ export async function generateSimulatedProvingResult(
|
|
|
450
543
|
);
|
|
451
544
|
|
|
452
545
|
const nonRevertibleData = new PrivateToPublicAccumulatedData(
|
|
453
|
-
padArrayEnd(
|
|
546
|
+
padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
454
547
|
padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
|
|
455
548
|
padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
|
|
456
549
|
padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
@@ -498,7 +591,7 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
|
|
|
498
591
|
const revertibleSideEffects: T[] = [];
|
|
499
592
|
const nonRevertibleSideEffects: T[] = [];
|
|
500
593
|
effects.forEach(effect => {
|
|
501
|
-
if (effect.counter < minRevertibleSideEffectCounter) {
|
|
594
|
+
if (minRevertibleSideEffectCounter === 0 || effect.counter < minRevertibleSideEffectCounter) {
|
|
502
595
|
nonRevertibleSideEffects.push(effect.sideEffect);
|
|
503
596
|
} else {
|
|
504
597
|
revertibleSideEffects.push(effect.sideEffect);
|