@aztec/pxe 0.0.1-commit.d3ec352c → 0.0.1-commit.fcb71a6
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 +37 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
- package/dest/{synchronizer/synchronizer.js → block_synchronizer/block_synchronizer.js} +19 -22
- 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/contract_function_simulator/contract_function_simulator.d.ts +41 -12
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +49 -19
- package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -4
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +3 -3
- 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 +2 -2
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- 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 +2 -2
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +6 -6
- 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 +7 -3
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +7 -3
- package/dest/contract_function_simulator/oracle/oracle.d.ts +2 -2
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +18 -7
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +8 -10
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +12 -12
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +25 -11
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +26 -14
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +51 -11
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +146 -40
- 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.js +2 -2
- 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.js +2 -2
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +2 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -1
- package/dest/entrypoints/server/utils.js +1 -1
- package/dest/error_enriching.d.ts +4 -4
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +6 -6
- package/dest/events/event_service.d.ts +15 -0
- package/dest/events/event_service.d.ts.map +1 -0
- package/dest/events/event_service.js +47 -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 +39 -0
- package/dest/logs/log_service.d.ts +26 -0
- package/dest/logs/log_service.d.ts.map +1 -0
- package/dest/logs/log_service.js +120 -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 +152 -0
- package/dest/oracle_version.d.ts +2 -2
- package/dest/oracle_version.js +2 -2
- package/dest/private_kernel/private_kernel_execution_prover.js +4 -4
- package/dest/private_kernel/private_kernel_oracle.d.ts +3 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +6 -5
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +7 -7
- package/dest/public_storage/public_storage_service.d.ts +24 -0
- package/dest/public_storage/public_storage_service.d.ts.map +1 -0
- package/dest/public_storage/public_storage_service.js +26 -0
- package/dest/pxe.d.ts +38 -46
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +135 -143
- 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 +57 -0
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
- package/dest/storage/{capsule_data_provider/capsule_data_provider.js → capsule_store/capsule_store.js} +34 -6
- 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} +10 -9
- 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} +16 -8
- package/dest/storage/private_event_store/private_event_store.d.ts +51 -0
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
- package/dest/storage/{private_event_data_provider/private_event_data_provider.js → private_event_store/private_event_store.js} +37 -27
- 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 +21 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/recipient_tagging_store.js +42 -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 +67 -0
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/sender_tagging_store.js +196 -0
- package/dest/tagging/index.d.ts +15 -6
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +23 -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 +18 -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 +55 -0
- package/dest/tree_membership/tree_membership_service.d.ts +52 -0
- package/dest/tree_membership/tree_membership_service.d.ts.map +1 -0
- package/dest/tree_membership/tree_membership_service.js +84 -0
- package/package.json +16 -16
- package/src/bin/check_oracle_version.ts +130 -20
- package/src/{synchronizer/synchronizer.ts → block_synchronizer/block_synchronizer.ts} +18 -22
- package/src/block_synchronizer/index.ts +1 -0
- package/src/config/index.ts +3 -3
- package/src/contract_function_simulator/contract_function_simulator.ts +86 -17
- package/src/contract_function_simulator/execution_note_cache.ts +7 -4
- 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 +1 -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 +1 -1
- package/src/contract_function_simulator/oracle/interfaces.ts +5 -5
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +17 -3
- package/src/contract_function_simulator/oracle/oracle.ts +21 -7
- package/src/contract_function_simulator/oracle/private_execution.ts +15 -14
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +92 -22
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +213 -49
- 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 +2 -2
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +2 -2
- package/src/entrypoints/pxe_creation_options.ts +2 -0
- package/src/entrypoints/server/index.ts +1 -1
- package/src/entrypoints/server/utils.ts +1 -1
- package/src/error_enriching.ts +7 -15
- package/src/events/event_service.ts +77 -0
- package/src/events/index.ts +1 -0
- package/src/events/private_event_filter_validator.ts +48 -0
- package/src/logs/log_service.ts +202 -0
- package/src/notes/index.ts +1 -0
- package/src/notes/note_service.ts +200 -0
- package/src/oracle_version.ts +2 -2
- package/src/private_kernel/hints/build_private_kernel_reset_private_inputs.ts +1 -1
- package/src/private_kernel/private_kernel_execution_prover.ts +4 -4
- package/src/private_kernel/private_kernel_oracle.ts +2 -1
- package/src/private_kernel/private_kernel_oracle_impl.ts +8 -7
- package/src/public_storage/public_storage_service.ts +33 -0
- package/src/pxe.ts +162 -181
- 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_data_provider/capsule_data_provider.ts → capsule_store/capsule_store.ts} +34 -2
- 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} +19 -10
- package/src/storage/{private_event_data_provider/private_event_data_provider.ts → private_event_store/private_event_store.ts} +60 -41
- package/src/storage/tagging_store/index.ts +3 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +53 -0
- package/src/storage/tagging_store/sender_address_book_store.ts +42 -0
- package/src/storage/tagging_store/sender_tagging_store.ts +244 -0
- package/src/tagging/index.ts +27 -5
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +129 -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 +96 -0
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -0
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +72 -0
- package/src/tree_membership/tree_membership_service.ts +112 -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/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/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/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/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/constants.d.ts +0 -2
- package/dest/tagging/constants.d.ts.map +0 -1
- package/dest/tagging/constants.js +0 -2
- 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/pxe_oracle_interface.ts +0 -1023
- package/src/storage/address_data_provider/index.ts +0 -1
- 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/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/constants.ts +0 -2
- package/src/tagging/siloed_tag.ts +0 -22
- package/src/tagging/tag.ts +0 -16
- package/src/tagging/utils.ts +0 -31
package/dest/pxe.js
CHANGED
|
@@ -1,69 +1,77 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
5
|
import { KeyStore } from '@aztec/key-store';
|
|
6
6
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
7
7
|
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
8
|
-
import {
|
|
8
|
+
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
9
9
|
import { computeContractAddressFromInstance, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
10
10
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
11
11
|
import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
|
|
12
12
|
import { PrivateSimulationResult, TxProfileResult, TxProvingResult, TxSimulationResult } from '@aztec/stdlib/tx';
|
|
13
13
|
import { inspect } from 'util';
|
|
14
|
+
import { BlockSynchronizer } from './block_synchronizer/index.js';
|
|
14
15
|
import { ContractFunctionSimulator, generateSimulatedProvingResult } from './contract_function_simulator/contract_function_simulator.js';
|
|
15
16
|
import { readCurrentClassId } from './contract_function_simulator/oracle/private_execution.js';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { PXEOracleInterface } from './contract_function_simulator/pxe_oracle_interface.js';
|
|
17
|
+
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
18
|
+
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
19
19
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
20
|
+
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
20
21
|
import { PrivateKernelExecutionProver } from './private_kernel/private_kernel_execution_prover.js';
|
|
21
22
|
import { PrivateKernelOracleImpl } from './private_kernel/private_kernel_oracle_impl.js';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
23
|
+
import { AddressStore } from './storage/address_store/address_store.js';
|
|
24
|
+
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
25
|
+
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
26
|
+
import { ContractStore } from './storage/contract_store/contract_store.js';
|
|
27
|
+
import { NoteStore } from './storage/note_store/note_store.js';
|
|
28
|
+
import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
|
|
29
|
+
import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
|
|
30
|
+
import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
|
|
31
|
+
import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
|
|
30
32
|
/**
|
|
31
33
|
* Private eXecution Environment (PXE) is a library used by wallets to simulate private phase of transactions and to
|
|
32
34
|
* manage private state of users.
|
|
33
35
|
*/ export class PXE {
|
|
34
36
|
node;
|
|
35
|
-
|
|
37
|
+
blockStateSynchronizer;
|
|
36
38
|
keyStore;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
contractStore;
|
|
40
|
+
noteStore;
|
|
41
|
+
capsuleStore;
|
|
42
|
+
anchorBlockStore;
|
|
43
|
+
senderTaggingStore;
|
|
44
|
+
senderAddressBookStore;
|
|
45
|
+
recipientTaggingStore;
|
|
46
|
+
addressStore;
|
|
47
|
+
privateEventStore;
|
|
44
48
|
simulator;
|
|
45
49
|
proverEnabled;
|
|
46
50
|
proofCreator;
|
|
47
51
|
protocolContractsProvider;
|
|
48
52
|
log;
|
|
49
53
|
jobQueue;
|
|
50
|
-
|
|
54
|
+
debug;
|
|
55
|
+
constructor(node, blockStateSynchronizer, keyStore, contractStore, noteStore, capsuleStore, anchorBlockStore, senderTaggingStore, senderAddressBookStore, recipientTaggingStore, addressStore, privateEventStore, simulator, proverEnabled, proofCreator, protocolContractsProvider, log, jobQueue, debug){
|
|
51
56
|
this.node = node;
|
|
52
|
-
this.
|
|
57
|
+
this.blockStateSynchronizer = blockStateSynchronizer;
|
|
53
58
|
this.keyStore = keyStore;
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
56
|
-
this.
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
59
|
+
this.contractStore = contractStore;
|
|
60
|
+
this.noteStore = noteStore;
|
|
61
|
+
this.capsuleStore = capsuleStore;
|
|
62
|
+
this.anchorBlockStore = anchorBlockStore;
|
|
63
|
+
this.senderTaggingStore = senderTaggingStore;
|
|
64
|
+
this.senderAddressBookStore = senderAddressBookStore;
|
|
65
|
+
this.recipientTaggingStore = recipientTaggingStore;
|
|
66
|
+
this.addressStore = addressStore;
|
|
67
|
+
this.privateEventStore = privateEventStore;
|
|
61
68
|
this.simulator = simulator;
|
|
62
69
|
this.proverEnabled = proverEnabled;
|
|
63
70
|
this.proofCreator = proofCreator;
|
|
64
71
|
this.protocolContractsProvider = protocolContractsProvider;
|
|
65
72
|
this.log = log;
|
|
66
73
|
this.jobQueue = jobQueue;
|
|
74
|
+
this.debug = debug;
|
|
67
75
|
}
|
|
68
76
|
/**
|
|
69
77
|
* Creates an instance of a PXE by instantiating all the necessary data providers and services.
|
|
@@ -74,18 +82,22 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
74
82
|
*/ static async create(node, store, proofCreator, simulator, protocolContractsProvider, config, loggerOrSuffix) {
|
|
75
83
|
const log = !loggerOrSuffix || typeof loggerOrSuffix === 'string' ? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`) : loggerOrSuffix;
|
|
76
84
|
const proverEnabled = !!config.proverEnabled;
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const
|
|
85
|
+
const addressStore = new AddressStore(store);
|
|
86
|
+
const privateEventStore = new PrivateEventStore(store);
|
|
87
|
+
const contractStore = new ContractStore(store);
|
|
88
|
+
const noteStore = await NoteStore.create(store);
|
|
89
|
+
const anchorBlockStore = new AnchorBlockStore(store);
|
|
90
|
+
const senderTaggingStore = new SenderTaggingStore(store);
|
|
91
|
+
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
92
|
+
const recipientTaggingStore = new RecipientTaggingStore(store);
|
|
93
|
+
const capsuleStore = new CapsuleStore(store);
|
|
84
94
|
const keyStore = new KeyStore(store);
|
|
85
95
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
86
|
-
const synchronizer = new
|
|
96
|
+
const synchronizer = new BlockSynchronizer(node, anchorBlockStore, noteStore, tipsStore, config, loggerOrSuffix);
|
|
97
|
+
const debugUtils = new PXEDebugUtils(contractStore, noteStore);
|
|
87
98
|
const jobQueue = new SerialQueue();
|
|
88
|
-
const pxe = new PXE(node, synchronizer, keyStore,
|
|
99
|
+
const pxe = new PXE(node, synchronizer, keyStore, contractStore, noteStore, capsuleStore, anchorBlockStore, senderTaggingStore, senderAddressBookStore, recipientTaggingStore, addressStore, privateEventStore, simulator, proverEnabled, proofCreator, protocolContractsProvider, log, jobQueue, debugUtils);
|
|
100
|
+
debugUtils.setPXE(pxe);
|
|
89
101
|
pxe.jobQueue.start();
|
|
90
102
|
await pxe.#registerProtocolContracts();
|
|
91
103
|
const info = await node.getNodeInfo();
|
|
@@ -94,8 +106,8 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
94
106
|
}
|
|
95
107
|
// Internal methods
|
|
96
108
|
#getSimulatorForTx(overrides) {
|
|
97
|
-
const
|
|
98
|
-
return new ContractFunctionSimulator(
|
|
109
|
+
const proxyContractStore = ProxiedContractStoreFactory.create(this.contractStore, overrides?.contracts);
|
|
110
|
+
return new ContractFunctionSimulator(proxyContractStore, this.noteStore, this.keyStore, this.addressStore, this.node, this.anchorBlockStore, this.senderTaggingStore, this.recipientTaggingStore, this.senderAddressBookStore, this.capsuleStore, this.privateEventStore, this.simulator);
|
|
99
111
|
}
|
|
100
112
|
#contextualizeError(err, ...context) {
|
|
101
113
|
let contextStr = '';
|
|
@@ -126,8 +138,8 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
126
138
|
const registered = {};
|
|
127
139
|
for (const name of protocolContractNames){
|
|
128
140
|
const { address, contractClass, instance, artifact } = await this.protocolContractsProvider.getProtocolContractArtifact(name);
|
|
129
|
-
await this.
|
|
130
|
-
await this.
|
|
141
|
+
await this.contractStore.addContractArtifact(contractClass.id, artifact);
|
|
142
|
+
await this.contractStore.addContractInstance(instance);
|
|
131
143
|
registered[name] = address.toString();
|
|
132
144
|
}
|
|
133
145
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
@@ -142,39 +154,20 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
142
154
|
const initNullifier = await siloNullifier(address, address.toField());
|
|
143
155
|
return !!await this.node.getNullifierMembershipWitness('latest', initNullifier);
|
|
144
156
|
}
|
|
145
|
-
async #getFunctionCall(functionName, args, to) {
|
|
146
|
-
const contract = await this.contractDataProvider.getContract(to);
|
|
147
|
-
if (!contract) {
|
|
148
|
-
throw new Error(`Unknown contract ${to}: add it to PXE by calling server.addContracts(...).\nSee docs for context: https://docs.aztec.network/developers/resources/debugging/aztecnr-errors#unknown-contract-0x0-add-it-to-pxe-by-calling-serveraddcontracts`);
|
|
149
|
-
}
|
|
150
|
-
const functionDao = contract.functions.find((f)=>f.name === functionName);
|
|
151
|
-
if (!functionDao) {
|
|
152
|
-
throw new Error(`Unknown function ${functionName} in contract ${contract.name}.`);
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
name: functionDao.name,
|
|
156
|
-
args: encodeArguments(functionDao, args),
|
|
157
|
-
selector: await FunctionSelector.fromNameAndParameters(functionDao.name, functionDao.parameters),
|
|
158
|
-
type: functionDao.functionType,
|
|
159
|
-
to,
|
|
160
|
-
hideMsgSender: false,
|
|
161
|
-
isStatic: functionDao.isStatic,
|
|
162
|
-
returnTypes: functionDao.returnTypes
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
157
|
// Executes the entrypoint private function, as well as all nested private
|
|
166
158
|
// functions that might arise.
|
|
167
159
|
async #executePrivate(contractFunctionSimulator, txRequest, scopes) {
|
|
168
160
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
169
161
|
try {
|
|
170
|
-
const
|
|
162
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
163
|
+
const result = await contractFunctionSimulator.run(txRequest, contractAddress, functionSelector, undefined, anchorBlockHeader, // The sender for tags is set by contracts, typically by an account
|
|
171
164
|
// contract entrypoint
|
|
172
165
|
undefined, scopes);
|
|
173
166
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
174
167
|
return result;
|
|
175
168
|
} catch (err) {
|
|
176
169
|
if (err instanceof SimulationError) {
|
|
177
|
-
await enrichSimulationError(err, this.
|
|
170
|
+
await enrichSimulationError(err, this.contractStore, this.log);
|
|
178
171
|
}
|
|
179
172
|
throw err;
|
|
180
173
|
}
|
|
@@ -189,10 +182,11 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
189
182
|
* @returns The simulation result containing the outputs of the utility function.
|
|
190
183
|
*/ async #simulateUtility(contractFunctionSimulator, call, authWitnesses, scopes) {
|
|
191
184
|
try {
|
|
192
|
-
|
|
185
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
186
|
+
return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes);
|
|
193
187
|
} catch (err) {
|
|
194
188
|
if (err instanceof SimulationError) {
|
|
195
|
-
await enrichSimulationError(err, this.
|
|
189
|
+
await enrichSimulationError(err, this.contractStore, this.log);
|
|
196
190
|
}
|
|
197
191
|
throw err;
|
|
198
192
|
}
|
|
@@ -214,7 +208,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
214
208
|
} catch (err) {
|
|
215
209
|
if (err instanceof SimulationError) {
|
|
216
210
|
try {
|
|
217
|
-
await enrichPublicSimulationError(err, this.
|
|
211
|
+
await enrichPublicSimulationError(err, this.contractStore, this.log);
|
|
218
212
|
} catch (enrichErr) {
|
|
219
213
|
this.log.error(`Failed to enrich public simulation error: ${enrichErr}`);
|
|
220
214
|
}
|
|
@@ -234,14 +228,14 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
234
228
|
* @returns An object that contains the output of the kernel execution, including the ChonkProof if proving is enabled.
|
|
235
229
|
*/ async #prove(txExecutionRequest, proofCreator, privateExecutionResult, config) {
|
|
236
230
|
const simulationAnchorBlock = privateExecutionResult.getSimulationAnchorBlockNumber();
|
|
237
|
-
const kernelOracle = new PrivateKernelOracleImpl(this.
|
|
231
|
+
const kernelOracle = new PrivateKernelOracleImpl(this.contractStore, this.keyStore, this.node, simulationAnchorBlock);
|
|
238
232
|
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
239
233
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
240
234
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
241
235
|
}
|
|
242
236
|
// Public API
|
|
243
237
|
getContractInstance(address) {
|
|
244
|
-
return this.
|
|
238
|
+
return this.contractStore.getContractInstance(address);
|
|
245
239
|
}
|
|
246
240
|
/**
|
|
247
241
|
* Returns the contract class metadata given a contract class id.
|
|
@@ -257,7 +251,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
257
251
|
* during a public deployment. We probably want a nicer and more general API for this, but it'll have to
|
|
258
252
|
* do for the time being.
|
|
259
253
|
*/ async getContractClassMetadata(id, includeArtifact = false) {
|
|
260
|
-
const artifact = await this.
|
|
254
|
+
const artifact = await this.contractStore.getContractArtifact(id);
|
|
261
255
|
if (!artifact) {
|
|
262
256
|
this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
|
|
263
257
|
}
|
|
@@ -280,7 +274,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
280
274
|
*/ async getContractMetadata(address) {
|
|
281
275
|
let instance;
|
|
282
276
|
try {
|
|
283
|
-
instance = await this.
|
|
277
|
+
instance = await this.contractStore.getContractInstance(address);
|
|
284
278
|
} catch {
|
|
285
279
|
this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
|
|
286
280
|
}
|
|
@@ -309,46 +303,48 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
309
303
|
this.log.info(`Registered account ${accountCompleteAddress.address.toString()}`);
|
|
310
304
|
this.log.debug(`Registered account\n ${accountCompleteAddress.toReadableString()}`);
|
|
311
305
|
}
|
|
312
|
-
await this.
|
|
313
|
-
await this.
|
|
306
|
+
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
307
|
+
await this.noteStore.addScope(accountCompleteAddress.address);
|
|
314
308
|
return accountCompleteAddress;
|
|
315
309
|
}
|
|
316
310
|
/**
|
|
317
|
-
* Registers a
|
|
311
|
+
* Registers a sender in this PXE.
|
|
318
312
|
*
|
|
319
|
-
*
|
|
320
|
-
* Will do nothing if the
|
|
313
|
+
* After registering a new sender, the PXE will sync private logs that are tagged with this sender's address.
|
|
314
|
+
* Will do nothing if the address is already registered.
|
|
321
315
|
*
|
|
322
|
-
* @param
|
|
323
|
-
* @returns The address
|
|
324
|
-
|
|
316
|
+
* @param sender - Address of the sender to register.
|
|
317
|
+
* @returns The address of the sender.
|
|
318
|
+
* TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
|
|
319
|
+
*/ async registerSender(sender) {
|
|
325
320
|
const accounts = await this.keyStore.getAccounts();
|
|
326
|
-
if (accounts.includes(
|
|
327
|
-
this.log.info(`Sender:\n "${
|
|
328
|
-
return
|
|
321
|
+
if (accounts.includes(sender)) {
|
|
322
|
+
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
323
|
+
return sender;
|
|
329
324
|
}
|
|
330
|
-
const wasAdded = await this.
|
|
325
|
+
const wasAdded = await this.senderAddressBookStore.addSender(sender);
|
|
331
326
|
if (wasAdded) {
|
|
332
|
-
this.log.info(`Added sender:\n ${
|
|
327
|
+
this.log.info(`Added sender:\n ${sender.toString()}`);
|
|
333
328
|
} else {
|
|
334
|
-
this.log.info(`Sender:\n "${
|
|
329
|
+
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
335
330
|
}
|
|
336
|
-
return
|
|
331
|
+
return sender;
|
|
337
332
|
}
|
|
338
333
|
/**
|
|
339
|
-
* Retrieves
|
|
340
|
-
* @returns
|
|
334
|
+
* Retrieves senders registered in this PXE.
|
|
335
|
+
* @returns Senders registered in this PXE.
|
|
341
336
|
*/ getSenders() {
|
|
342
|
-
return this.
|
|
337
|
+
return this.senderAddressBookStore.getSenders();
|
|
343
338
|
}
|
|
344
339
|
/**
|
|
345
|
-
* Removes a sender in
|
|
346
|
-
|
|
347
|
-
|
|
340
|
+
* Removes a sender registered in this PXE.
|
|
341
|
+
* @param sender - The address of the sender to remove.
|
|
342
|
+
*/ async removeSender(sender) {
|
|
343
|
+
const wasRemoved = await this.senderAddressBookStore.removeSender(sender);
|
|
348
344
|
if (wasRemoved) {
|
|
349
|
-
this.log.info(`Removed sender:\n ${
|
|
345
|
+
this.log.info(`Removed sender:\n ${sender.toString()}`);
|
|
350
346
|
} else {
|
|
351
|
-
this.log.info(`Sender:\n "${
|
|
347
|
+
this.log.info(`Sender:\n "${sender.toString()}"\n not registered in PXE.`);
|
|
352
348
|
}
|
|
353
349
|
}
|
|
354
350
|
/**
|
|
@@ -356,7 +352,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
356
352
|
* @returns An array of the accounts registered on this PXE.
|
|
357
353
|
*/ async getRegisteredAccounts() {
|
|
358
354
|
// Get complete addresses of both the recipients and the accounts
|
|
359
|
-
const completeAddresses = await this.
|
|
355
|
+
const completeAddresses = await this.addressStore.getCompleteAddresses();
|
|
360
356
|
// Filter out the addresses not corresponding to accounts
|
|
361
357
|
const accounts = await this.keyStore.getAccounts();
|
|
362
358
|
return completeAddresses.filter((completeAddress)=>accounts.find((address)=>address.equals(completeAddress.address)));
|
|
@@ -367,7 +363,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
367
363
|
* @param artifact - The build artifact for the contract class.
|
|
368
364
|
*/ async registerContractClass(artifact) {
|
|
369
365
|
const { id: contractClassId } = await getContractClassFromArtifact(artifact);
|
|
370
|
-
await this.
|
|
366
|
+
await this.contractStore.addContractArtifact(contractClassId, artifact);
|
|
371
367
|
this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
|
|
372
368
|
}
|
|
373
369
|
/**
|
|
@@ -391,17 +387,17 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
391
387
|
if (!computedAddress.equals(instance.address)) {
|
|
392
388
|
throw new Error('Added a contract in which the address does not match the contract instance.');
|
|
393
389
|
}
|
|
394
|
-
await this.
|
|
390
|
+
await this.contractStore.addContractArtifact(contractClass.id, artifact);
|
|
395
391
|
const publicFunctionSignatures = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
|
|
396
392
|
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
397
393
|
} else {
|
|
398
394
|
// Otherwise, make sure there is an artifact already registered for that class id
|
|
399
|
-
artifact = await this.
|
|
395
|
+
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
|
|
400
396
|
if (!artifact) {
|
|
401
397
|
throw new Error(`Artifact not found when registering an instance. Contract class: ${instance.currentContractClassId}.`);
|
|
402
398
|
}
|
|
403
399
|
}
|
|
404
|
-
await this.
|
|
400
|
+
await this.contractStore.addContractInstance(instance);
|
|
405
401
|
this.log.info(`Added contract ${artifact.name} at ${instance.address.toString()} with class ${instance.currentContractClassId}`);
|
|
406
402
|
}
|
|
407
403
|
/**
|
|
@@ -416,22 +412,22 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
416
412
|
// We disable concurrently updating contracts to avoid concurrently syncing with the node, or changing a contract's
|
|
417
413
|
// class while we're simulating it.
|
|
418
414
|
return this.#putInJobQueue(async ()=>{
|
|
419
|
-
const currentInstance = await this.
|
|
415
|
+
const currentInstance = await this.contractStore.getContractInstance(contractAddress);
|
|
420
416
|
if (!currentInstance) {
|
|
421
417
|
throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
|
|
422
418
|
}
|
|
423
419
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
424
|
-
await this.
|
|
425
|
-
const header = await this.
|
|
420
|
+
await this.blockStateSynchronizer.sync();
|
|
421
|
+
const header = await this.anchorBlockStore.getBlockHeader();
|
|
426
422
|
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header.globalVariables.blockNumber, header.globalVariables.timestamp);
|
|
427
423
|
if (!contractClass.id.equals(currentClassId)) {
|
|
428
424
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
429
425
|
}
|
|
430
|
-
await this.
|
|
426
|
+
await this.contractStore.addContractArtifact(contractClass.id, artifact);
|
|
431
427
|
const publicFunctionSignatures = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
|
|
432
428
|
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
433
429
|
currentInstance.currentContractClassId = contractClass.id;
|
|
434
|
-
await this.
|
|
430
|
+
await this.contractStore.addContractInstance(currentInstance);
|
|
435
431
|
this.log.info(`Updated contract ${artifact.name} at ${contractAddress.toString()} to class ${contractClass.id}`);
|
|
436
432
|
});
|
|
437
433
|
}
|
|
@@ -439,23 +435,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
439
435
|
* Retrieves the addresses of contracts added to this PXE.
|
|
440
436
|
* @returns An array of contracts addresses registered on this PXE.
|
|
441
437
|
*/ getContracts() {
|
|
442
|
-
return this.
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* A debugging utility to get notes based on the provided filter.
|
|
446
|
-
*
|
|
447
|
-
* Note that this should not be used in production code because the structure of notes is considered to be
|
|
448
|
-
* an implementation detail of contracts. This is only meant to be used for debugging purposes. If you need to obtain
|
|
449
|
-
* note-related information in production code, please implement a custom utility function on your contract and call
|
|
450
|
-
* that function instead (e.g. `get_balance(owner: AztecAddress) -> u128` utility function on a Token contract).
|
|
451
|
-
*
|
|
452
|
-
* @param filter - The filter to apply to the notes.
|
|
453
|
-
* @returns The requested notes.
|
|
454
|
-
*/ async getNotes(filter) {
|
|
455
|
-
// We need to manually trigger private state sync to have a guarantee that all the notes are available.
|
|
456
|
-
const call = await this.#getFunctionCall('sync_private_state', [], filter.contractAddress);
|
|
457
|
-
await this.simulateUtility(call);
|
|
458
|
-
return this.noteDataProvider.getNotes(filter);
|
|
438
|
+
return this.contractStore.getContractsAddresses();
|
|
459
439
|
}
|
|
460
440
|
/**
|
|
461
441
|
* Proves the private portion of a simulated transaction, ready to send to the network
|
|
@@ -473,7 +453,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
473
453
|
const totalTimer = new Timer();
|
|
474
454
|
try {
|
|
475
455
|
const syncTimer = new Timer();
|
|
476
|
-
await this.
|
|
456
|
+
await this.blockStateSynchronizer.sync();
|
|
477
457
|
const syncTime = syncTimer.ms();
|
|
478
458
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
479
459
|
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
|
|
@@ -502,14 +482,21 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
502
482
|
timings,
|
|
503
483
|
nodeRPCCalls: contractFunctionSimulator?.getStats().nodeRPCCalls
|
|
504
484
|
});
|
|
485
|
+
// While not strictly necessary to store tagging cache contents in the DB since we sync tagging indexes from
|
|
486
|
+
// chain before sending new logs, the sync can only see logs already included in blocks. If we send another
|
|
487
|
+
// transaction before this one is included in a block from this PXE, and that transaction contains a log with
|
|
488
|
+
// a tag derived from the same secret, we would reuse the tag and the transactions would be linked. Hence
|
|
489
|
+
// storing the tags here prevents linkage of txs sent from the same PXE.
|
|
505
490
|
const preTagsUsedInTheTx = privateExecutionResult.entrypoint.preTags;
|
|
506
491
|
if (preTagsUsedInTheTx.length > 0) {
|
|
507
|
-
|
|
508
|
-
|
|
492
|
+
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
493
|
+
const txHash = (await txProvingResult.toTx()).txHash;
|
|
494
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash);
|
|
495
|
+
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
509
496
|
preTagsUsedInTheTx
|
|
510
497
|
});
|
|
511
498
|
} else {
|
|
512
|
-
this.log.debug(`No pre
|
|
499
|
+
this.log.debug(`No pre-tags used in the tx`);
|
|
513
500
|
}
|
|
514
501
|
return txProvingResult;
|
|
515
502
|
} catch (err) {
|
|
@@ -540,7 +527,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
540
527
|
};
|
|
541
528
|
this.log.info(`Profiling transaction execution request to ${txRequest.functionSelector} at ${txRequest.origin}`, txInfo);
|
|
542
529
|
const syncTimer = new Timer();
|
|
543
|
-
await this.
|
|
530
|
+
await this.blockStateSynchronizer.sync();
|
|
544
531
|
const syncTime = syncTimer.ms();
|
|
545
532
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
546
533
|
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
|
|
@@ -616,7 +603,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
616
603
|
};
|
|
617
604
|
this.log.info(`Simulating transaction execution request to ${txRequest.functionSelector} at ${txRequest.origin}`, txInfo);
|
|
618
605
|
const syncTimer = new Timer();
|
|
619
|
-
await this.
|
|
606
|
+
await this.blockStateSynchronizer.sync();
|
|
620
607
|
const syncTime = syncTimer.ms();
|
|
621
608
|
const contractFunctionSimulator = this.#getSimulatorForTx(overrides);
|
|
622
609
|
// Temporary: in case there are overrides, we have to skip the kernels or validations
|
|
@@ -631,7 +618,7 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
631
618
|
// According to the protocol rules, the nonce generator for the note hashes
|
|
632
619
|
// can either be the first nullifier in the tx or the protocol nullifier if there are none.
|
|
633
620
|
const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO) ? await computeProtocolNullifier(await txRequest.toTxRequest().hash()) : privateExecutionResult.firstNullifier;
|
|
634
|
-
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(privateExecutionResult, nonceGenerator, this.
|
|
621
|
+
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(privateExecutionResult, nonceGenerator, this.contractStore));
|
|
635
622
|
} else {
|
|
636
623
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
637
624
|
({ publicInputs, executionSteps } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, {
|
|
@@ -711,10 +698,11 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
711
698
|
try {
|
|
712
699
|
const totalTimer = new Timer();
|
|
713
700
|
const syncTimer = new Timer();
|
|
714
|
-
await this.
|
|
701
|
+
await this.blockStateSynchronizer.sync();
|
|
715
702
|
const syncTime = syncTimer.ms();
|
|
716
703
|
const functionTimer = new Timer();
|
|
717
704
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
705
|
+
await this.contractStore.syncPrivateState(call.to, call.selector, (privateSyncCall)=>this.#simulateUtility(contractFunctionSimulator, privateSyncCall));
|
|
718
706
|
const executionResult = await this.#simulateUtility(contractFunctionSimulator, call, authwits ?? [], scopes);
|
|
719
707
|
const functionTime = functionTimer.ms();
|
|
720
708
|
const totalTime = totalTimer.ms();
|
|
@@ -747,21 +735,25 @@ import { Synchronizer } from './synchronizer/index.js';
|
|
|
747
735
|
}
|
|
748
736
|
/**
|
|
749
737
|
* Returns the private events given search parameters.
|
|
750
|
-
* @param contractAddress - The address of the contract to get events from.
|
|
751
738
|
* @param eventSelector - Event selector to search for.
|
|
752
|
-
* @param
|
|
753
|
-
*
|
|
754
|
-
*
|
|
739
|
+
* @param filter
|
|
740
|
+
* contractAddress - The address of the contract to get events from. Required.
|
|
741
|
+
* scopes - One or more event scope addresses to filter by. Required.
|
|
742
|
+
* fromBlock - The block number to search from (inclusive). Optional. If provided, it must be >= 0.
|
|
743
|
+
* Defaults to 0.
|
|
744
|
+
* If toBlock is defined but fromBlock is not, fromBlock defaults to toBlock - 1.
|
|
745
|
+
* toBlock - The block number to search up to (exclusive). Optional. If provided, it must be > 0.
|
|
746
|
+
* Defaults to the latest known block to PXE + 1.
|
|
755
747
|
* @returns - The packed events with block and tx metadata.
|
|
756
|
-
*/
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
748
|
+
*/ getPrivateEvents(eventSelector, filter) {
|
|
749
|
+
return this.#putInJobQueue(async ()=>{
|
|
750
|
+
await this.blockStateSynchronizer.sync();
|
|
751
|
+
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
752
|
+
await this.contractStore.syncPrivateState(filter.contractAddress, null, async (privateSyncCall)=>await this.#simulateUtility(contractFunctionSimulator, privateSyncCall));
|
|
753
|
+
const sanitizedFilter = await new PrivateEventFilterValidator(this.anchorBlockStore).validate(filter);
|
|
754
|
+
this.log.debug(`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`);
|
|
755
|
+
return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
|
|
756
|
+
});
|
|
765
757
|
}
|
|
766
758
|
/**
|
|
767
759
|
* Stops the PXE's job queue.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
+
import { CompleteAddress } from '@aztec/stdlib/contract';
|
|
4
|
+
export declare class AddressStore {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(store: AztecAsyncKVStore);
|
|
7
|
+
addCompleteAddress(completeAddress: CompleteAddress): Promise<boolean>;
|
|
8
|
+
getCompleteAddress(account: AztecAddress): Promise<CompleteAddress | undefined>;
|
|
9
|
+
getCompleteAddresses(): Promise<CompleteAddress[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc19zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvYWRkcmVzc19zdG9yZS9hZGRyZXNzX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFtQixpQkFBaUIsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQscUJBQWEsWUFBWTs7SUFLdkIsWUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBS25DO0lBRUQsa0JBQWtCLENBQUMsZUFBZSxFQUFFLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBMEJyRTtJQVlELGtCQUFrQixDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsQ0FFOUU7SUFFSyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FJdkQ7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address_store.d.ts","sourceRoot":"","sources":["../../../src/storage/address_store/address_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,qBAAa,YAAY;;IAKvB,YAAY,KAAK,EAAE,iBAAiB,EAKnC;IAED,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BrE;IAYD,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAE9E;IAEK,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAIvD;CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AddressStore } from './address_store.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL2FkZHJlc3Nfc3RvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/address_store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AddressStore } from './address_store.js';
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
1
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
2
|
import { BlockHeader } from '@aztec/stdlib/tx';
|
|
4
|
-
export declare class
|
|
3
|
+
export declare class AnchorBlockStore {
|
|
5
4
|
#private;
|
|
6
5
|
constructor(store: AztecAsyncKVStore);
|
|
7
6
|
setHeader(header: BlockHeader): Promise<void>;
|
|
8
|
-
getBlockNumber(): Promise<BlockNumber>;
|
|
9
7
|
getBlockHeader(): Promise<BlockHeader>;
|
|
10
8
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yX2Jsb2NrX3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmFnZS9hbmNob3JfYmxvY2tfc3RvcmUvYW5jaG9yX2Jsb2NrX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxxQkFBYSxnQkFBZ0I7O0lBSTNCLFlBQVksS0FBSyxFQUFFLGlCQUFpQixFQUduQztJQUVLLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFbEQ7SUFFSyxjQUFjLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQU8zQztDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor_block_store.d.ts","sourceRoot":"","sources":["../../../src/storage/anchor_block_store/anchor_block_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,gBAAgB;;IAI3B,YAAY,KAAK,EAAE,iBAAiB,EAGnC;IAEK,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAElD;IAEK,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAO3C;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BlockHeader } from '@aztec/stdlib/tx';
|
|
2
|
-
export class
|
|
2
|
+
export class AnchorBlockStore {
|
|
3
3
|
#store;
|
|
4
4
|
#synchronizedHeader;
|
|
5
5
|
constructor(store){
|
|
@@ -9,17 +9,10 @@ export class SyncDataProvider {
|
|
|
9
9
|
async setHeader(header) {
|
|
10
10
|
await this.#synchronizedHeader.set(header.toBuffer());
|
|
11
11
|
}
|
|
12
|
-
async getBlockNumber() {
|
|
13
|
-
const headerBuffer = await this.#synchronizedHeader.getAsync();
|
|
14
|
-
if (!headerBuffer) {
|
|
15
|
-
throw new Error(`Trying to get block number with a not-yet-synchronized PXE - this should never happen`);
|
|
16
|
-
}
|
|
17
|
-
return BlockHeader.fromBuffer(headerBuffer).globalVariables.blockNumber;
|
|
18
|
-
}
|
|
19
12
|
async getBlockHeader() {
|
|
20
13
|
const headerBuffer = await this.#synchronizedHeader.getAsync();
|
|
21
14
|
if (!headerBuffer) {
|
|
22
|
-
throw new Error(`
|
|
15
|
+
throw new Error(`Trying to get block header with a not-yet-synchronized PXE - this should never happen`);
|
|
23
16
|
}
|
|
24
17
|
return BlockHeader.fromBuffer(headerBuffer);
|
|
25
18
|
}
|