@aztec/pxe 0.0.1-commit.b6e433891 → 0.0.1-commit.b9865e97
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 +43 -99
- package/dest/bin/index.d.ts +2 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +1 -0
- package/dest/bin/oracle_version_helpers.d.ts +26 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +93 -0
- package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
- package/dest/block_synchronizer/block_stream_source.js +62 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -10
- package/dest/config/index.d.ts +7 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +12 -14
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +9 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +26 -13
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_note_cache.d.ts +2 -2
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -9
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -7
- package/dest/contract_function_simulator/index.d.ts +13 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +10 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +48 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +45 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +5 -5
- 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 +6 -8
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +13 -3
- 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 +35 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +5 -5
- 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 +6 -8
- package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +62 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.js +24 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +16 -103
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
- package/dest/contract_function_simulator/oracle/oracle.d.ts +74 -46
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +407 -292
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +127 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +786 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +139 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +560 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +33 -36
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +70 -52
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +95 -59
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +365 -162
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -64
- package/dest/contract_logging.d.ts +9 -4
- package/dest/contract_logging.d.ts.map +1 -1
- package/dest/contract_logging.js +21 -6
- package/dest/contract_sync/contract_sync_service.d.ts +6 -9
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +71 -50
- package/dest/contract_sync/helpers.d.ts +2 -4
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +12 -14
- package/dest/debug/pxe_debug_utils.d.ts +3 -8
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +0 -6
- 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 +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +13 -5
- 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 +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +13 -5
- package/dest/entrypoints/pxe_creation_options.d.ts +9 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +3 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -2
- package/dest/entrypoints/server/utils.d.ts +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +13 -5
- package/dest/events/event_service.d.ts +15 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +44 -11
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/hooks/authorize_utility_call.d.ts +41 -0
- package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
- package/dest/hooks/authorize_utility_call.js +4 -0
- package/dest/hooks/execution_hooks.d.ts +42 -0
- package/dest/hooks/execution_hooks.d.ts.map +1 -0
- package/dest/hooks/execution_hooks.js +9 -0
- package/dest/hooks/index.d.ts +4 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +1 -0
- package/dest/logs/log_service.d.ts +9 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +126 -72
- package/dest/messages/message_context_service.d.ts +3 -3
- package/dest/messages/message_context_service.d.ts.map +1 -1
- package/dest/messages/message_context_service.js +30 -11
- package/dest/notes/note_service.d.ts +27 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +80 -56
- package/dest/notes_filter.d.ts +2 -3
- package/dest/notes_filter.d.ts.map +1 -1
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/batch_planner.d.ts +47 -0
- package/dest/private_kernel/batch_planner.d.ts.map +1 -0
- package/dest/private_kernel/batch_planner.js +104 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
- package/dest/private_kernel/hints/test_utils.js +2 -3
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +152 -59
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -10
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +24 -22
- package/dest/pxe.d.ts +56 -10
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +138 -91
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +591 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +50 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +36 -28
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +1 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +9 -26
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +1 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +2 -2
- package/dest/storage/open_pxe_stores.d.ts +33 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +27 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +3 -0
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +5 -5
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +3 -3
- package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +36 -37
- package/dest/tagging/index.d.ts +5 -4
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +4 -3
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +56 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +163 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -5
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +26 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +21 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +2 -2
- package/package.json +20 -17
- package/src/bin/check_oracle_version.ts +49 -122
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +121 -0
- package/src/block_synchronizer/block_stream_source.ts +81 -0
- package/src/block_synchronizer/block_synchronizer.ts +33 -11
- package/src/config/index.ts +14 -8
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +44 -16
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +1 -1
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -9
- package/src/contract_function_simulator/index.ts +50 -1
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +4 -6
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -6
- package/src/contract_function_simulator/noir-structs/option.ts +69 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +27 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +12 -176
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +498 -462
- package/src/contract_function_simulator/oracle/oracle_registry.ts +585 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +553 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +93 -71
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +534 -267
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
- package/src/contract_logging.ts +18 -5
- package/src/contract_sync/contract_sync_service.ts +97 -89
- package/src/contract_sync/helpers.ts +13 -25
- package/src/debug/pxe_debug_utils.ts +3 -11
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +10 -5
- 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 +14 -0
- package/src/entrypoints/server/index.ts +2 -2
- package/src/entrypoints/server/utils.ts +15 -6
- package/src/events/event_service.ts +69 -21
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/hooks/authorize_utility_call.ts +44 -0
- package/src/hooks/execution_hooks.ts +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/logs/log_service.ts +158 -134
- package/src/messages/message_context_service.ts +43 -26
- package/src/notes/note_service.ts +119 -85
- package/src/notes_filter.ts +1 -3
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +169 -0
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +1 -1
- package/src/private_kernel/hints/test_utils.ts +2 -9
- package/src/private_kernel/private_kernel_execution_prover.ts +240 -82
- package/src/private_kernel/private_kernel_oracle.ts +35 -25
- package/src/pxe.ts +226 -95
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +46 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +712 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +14 -35
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +2 -5
- package/src/storage/open_pxe_stores.ts +49 -0
- package/src/storage/private_event_store/private_event_store.ts +4 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
- package/src/storage/tagging_store/sender_tagging_store.ts +6 -6
- package/src/tagging/get_all_logs_by_tags.ts +78 -50
- package/src/tagging/index.ts +4 -3
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +240 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +41 -19
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +4 -5
- package/dest/access_scopes.d.ts +0 -9
- package/dest/access_scopes.d.ts.map +0 -1
- package/dest/access_scopes.js +0 -6
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +0 -16
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +0 -1
- package/dest/contract_function_simulator/noir-structs/message_tx_context.js +0 -57
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +0 -9
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +0 -42
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
- package/src/access_scopes.ts +0 -9
- package/src/contract_function_simulator/noir-structs/message_tx_context.ts +0 -55
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -135
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
|
@@ -85,9 +85,24 @@ interface ContainsNote {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
const selectPropertyFromPackedNoteContent = (noteData: Fr[], selector: PropertySelector): Fr => {
|
|
88
|
+
if (selector.index >= noteData.length) {
|
|
89
|
+
throw new Error(`Property selector index ${selector.index} out of bounds for note with ${noteData.length} fields`);
|
|
90
|
+
}
|
|
91
|
+
if (selector.offset + selector.length > Fr.SIZE_IN_BYTES) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
`Property selector range (offset=${selector.offset}, length=${selector.length}) exceeds Fr buffer size of ${Fr.SIZE_IN_BYTES} bytes`,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
88
96
|
const noteValueBuffer = noteData[selector.index].toBuffer();
|
|
89
|
-
|
|
90
|
-
|
|
97
|
+
// Noir's PropertySelector counts offset from the LSB (last byte of the big-endian buffer),
|
|
98
|
+
// so offset=0,length=Fr.SIZE_IN_BYTES reads the entire field, and offset=0,length=1 reads the last byte.
|
|
99
|
+
const start = Fr.SIZE_IN_BYTES - selector.offset - selector.length;
|
|
100
|
+
const end = Fr.SIZE_IN_BYTES - selector.offset;
|
|
101
|
+
const noteValue = noteValueBuffer.subarray(start, end);
|
|
102
|
+
// Left-pad to Fr.SIZE_IN_BYTES so Fr.fromBuffer interprets the value correctly.
|
|
103
|
+
const padded = Buffer.alloc(Fr.SIZE_IN_BYTES);
|
|
104
|
+
noteValue.copy(padded, Fr.SIZE_IN_BYTES - noteValue.length);
|
|
105
|
+
return Fr.fromBuffer(padded);
|
|
91
106
|
};
|
|
92
107
|
|
|
93
108
|
const selectNotes = <T extends ContainsNote>(noteDatas: T[], selects: Select[]): T[] =>
|
|
@@ -103,7 +118,11 @@ const selectNotes = <T extends ContainsNote>(noteDatas: T[], selects: Select[]):
|
|
|
103
118
|
[Comparator.GTE]: () => !noteValueFr.lt(value),
|
|
104
119
|
};
|
|
105
120
|
|
|
106
|
-
|
|
121
|
+
const fn = comparatorSelector[comparator];
|
|
122
|
+
if (!fn) {
|
|
123
|
+
throw new Error(`Invalid comparator value: ${comparator}`);
|
|
124
|
+
}
|
|
125
|
+
return fn();
|
|
107
126
|
}),
|
|
108
127
|
);
|
|
109
128
|
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
2
|
-
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
1
|
+
import { type FunctionSelector, findFunctionArtifactBySelector } from '@aztec/stdlib/abi';
|
|
2
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { ContractOverrides } from '@aztec/stdlib/tx';
|
|
4
4
|
|
|
5
5
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
|
-
* Proxy generator for a ContractStore that allows overriding contract instances
|
|
9
|
-
* the contract function simulator can execute different bytecode on certain addresses. An example
|
|
10
|
-
* would be overriding your own account contract so that valid signatures don't have to be
|
|
8
|
+
* Proxy generator for a ContractStore that allows overriding contract instances at given addresses,
|
|
9
|
+
* so the contract function simulator can execute different bytecode on certain addresses. An example
|
|
10
|
+
* use case would be overriding your own account contract so that valid signatures don't have to be
|
|
11
|
+
* provided while simulating.
|
|
12
|
+
*
|
|
13
|
+
* Function artifact lookups for an overridden address are routed via the override-instance's
|
|
14
|
+
* `currentContractClassId` rather than the underlying ContractStore's address→class mapping —
|
|
15
|
+
* `ContractStore.getFunctionArtifact` calls `this.getContractInstance` internally, which the proxy
|
|
16
|
+
* cannot intercept (the binding sees the raw target, not the proxy). The target class must be
|
|
17
|
+
* registered ahead of time via `pxe.registerContractClass(...)`.
|
|
11
18
|
*/
|
|
12
19
|
export class ProxiedContractStoreFactory {
|
|
13
20
|
static create(contractStore: ContractStore, overrides?: ContractOverrides) {
|
|
@@ -17,67 +24,37 @@ export class ProxiedContractStoreFactory {
|
|
|
17
24
|
|
|
18
25
|
return new Proxy(contractStore, {
|
|
19
26
|
get(target, prop: keyof ContractStore) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const fn = functions[i];
|
|
45
|
-
const fnSelector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
|
|
46
|
-
if (fnSelector.equals(selector)) {
|
|
47
|
-
return fn;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
return target.getFunctionArtifact(contractAddress, selector);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
case 'getFunctionArtifactWithDebugMetadata': {
|
|
56
|
-
return async (contractAddress: AztecAddress, selector: FunctionSelector) => {
|
|
57
|
-
if (overrides[contractAddress.toString()]) {
|
|
58
|
-
const { artifact } = overrides[contractAddress.toString()]!;
|
|
59
|
-
const functions = artifact.functions;
|
|
60
|
-
for (let i = 0; i < functions.length; i++) {
|
|
61
|
-
const fn = functions[i];
|
|
62
|
-
const fnSelector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
|
|
63
|
-
if (fnSelector.equals(selector)) {
|
|
64
|
-
return fn;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
return target.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
default: {
|
|
73
|
-
const value = Reflect.get(target, prop);
|
|
74
|
-
if (typeof value === 'function') {
|
|
75
|
-
return value.bind(target);
|
|
27
|
+
if (prop === 'getContractInstance') {
|
|
28
|
+
return (address: AztecAddress) => {
|
|
29
|
+
const override = overrides[address.toString()];
|
|
30
|
+
return override ? Promise.resolve(override.instance) : target.getContractInstance(address);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (prop === 'getFunctionArtifact' || prop === 'getFunctionArtifactWithDebugMetadata') {
|
|
34
|
+
return async (contractAddress: AztecAddress, selector: FunctionSelector) => {
|
|
35
|
+
const override = overrides[contractAddress.toString()];
|
|
36
|
+
if (!override) {
|
|
37
|
+
return (target[prop] as Function).call(target, contractAddress, selector);
|
|
38
|
+
}
|
|
39
|
+
const artifact = await target.getContractArtifact(override.instance.currentContractClassId);
|
|
40
|
+
if (!artifact) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
`No artifact registered for override class ${override.instance.currentContractClassId} ` +
|
|
43
|
+
`at ${contractAddress}. Register it via pxe.registerContractClass(...) before simulating.`,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
const fn = await findFunctionArtifactBySelector(artifact, selector);
|
|
47
|
+
if (!fn) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
`Function with selector ${selector} not found in stub artifact for overridden contract at ${contractAddress}.`,
|
|
50
|
+
);
|
|
76
51
|
}
|
|
77
|
-
return
|
|
78
|
-
}
|
|
52
|
+
return { ...fn, contractName: artifact.name };
|
|
53
|
+
};
|
|
79
54
|
}
|
|
55
|
+
const value = Reflect.get(target, prop);
|
|
56
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
80
57
|
},
|
|
81
|
-
});
|
|
58
|
+
}) satisfies ContractStore;
|
|
82
59
|
}
|
|
83
60
|
}
|
package/src/contract_logging.ts
CHANGED
|
@@ -5,18 +5,22 @@ import type { DebugLog } from '@aztec/stdlib/logs';
|
|
|
5
5
|
|
|
6
6
|
/** Resolves a contract address to a human-readable name, if available. */
|
|
7
7
|
export type ContractNameResolver = (address: AztecAddress) => Promise<string | undefined>;
|
|
8
|
+
export type CONTRACT_LOG_KIND = 'aztecnr' | 'user';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
|
-
* Creates a logger whose output is prefixed with `
|
|
11
|
+
* Creates a logger whose output is prefixed with `contract:<name>(<addrAbbrev>)`.
|
|
11
12
|
*/
|
|
12
13
|
export async function createContractLogger(
|
|
13
14
|
contractAddress: AztecAddress,
|
|
14
15
|
getContractName: ContractNameResolver,
|
|
16
|
+
kind: CONTRACT_LOG_KIND,
|
|
15
17
|
options?: { instanceId?: string },
|
|
16
18
|
): Promise<Logger> {
|
|
17
19
|
const addrAbbrev = contractAddress.toString().slice(0, 10);
|
|
18
20
|
const name = await getContractName(contractAddress);
|
|
19
|
-
|
|
21
|
+
|
|
22
|
+
const prefix = kind == 'aztecnr' ? 'aztecnr' : 'contract';
|
|
23
|
+
const module = name ? `${prefix}:${name}(${addrAbbrev})` : `${prefix}:Unknown(${addrAbbrev})`;
|
|
20
24
|
return createLogger(module, options);
|
|
21
25
|
}
|
|
22
26
|
|
|
@@ -29,11 +33,20 @@ export function logContractMessage(logger: Logger, level: LogLevel, message: str
|
|
|
29
33
|
|
|
30
34
|
/**
|
|
31
35
|
* Displays debug logs collected during public function simulation,
|
|
32
|
-
* using the `
|
|
36
|
+
* using the `contract:` prefixed logger format.
|
|
33
37
|
*/
|
|
34
38
|
export async function displayDebugLogs(debugLogs: DebugLog[], getContractName: ContractNameResolver): Promise<void> {
|
|
35
39
|
for (const log of debugLogs) {
|
|
36
|
-
const
|
|
37
|
-
|
|
40
|
+
const { kind, message } = stripAztecnrLogPrefix(log.message);
|
|
41
|
+
const logger = await createContractLogger(log.contractAddress, getContractName, kind);
|
|
42
|
+
logContractMessage(logger, log.level, message, log.fields);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function stripAztecnrLogPrefix(message: string): { kind: CONTRACT_LOG_KIND; message: string } {
|
|
47
|
+
if (message.startsWith('[aztec-nr] ')) {
|
|
48
|
+
return { kind: 'aztecnr', message: message.slice('[aztec-nr] '.length) };
|
|
49
|
+
} else {
|
|
50
|
+
return { kind: 'user', message };
|
|
38
51
|
}
|
|
39
52
|
}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import { Semaphore } from '@aztec/foundation/queue';
|
|
3
|
+
import { isProtocolContract } from '@aztec/protocol-contracts';
|
|
2
4
|
import type { FunctionCall, FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
6
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
5
7
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
6
8
|
|
|
7
|
-
import type { AccessScopes } from '../access_scopes.js';
|
|
8
9
|
import type { StagedStore } from '../job_coordinator/job_coordinator.js';
|
|
10
|
+
import { NoteService } from '../notes/note_service.js';
|
|
9
11
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
10
12
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
11
|
-
import {
|
|
13
|
+
import { syncScope, verifyCurrentClassId } from './helpers.js';
|
|
14
|
+
|
|
15
|
+
/** Maximum number of scope syncs running concurrently across the PXE. */
|
|
16
|
+
const MAX_CONCURRENT_SCOPE_SYNCS = 5;
|
|
12
17
|
|
|
13
18
|
/**
|
|
14
19
|
* Service for syncing the private state of contracts and verifying that the PXE holds the current class artifact.
|
|
@@ -24,8 +29,14 @@ export class ContractSyncService implements StagedStore {
|
|
|
24
29
|
// The value is a promise that resolves when the contract is synced.
|
|
25
30
|
private syncedContracts: Map<string, Promise<void>> = new Map();
|
|
26
31
|
|
|
27
|
-
//
|
|
28
|
-
|
|
32
|
+
// Tracks class ID verification per contract. Keyed by contract address only (no scope), since
|
|
33
|
+
// class ID verification is scope-independent. Cleared on wipe/discard.
|
|
34
|
+
private classIdVerificationCache: Map<string, Promise<void>> = new Map();
|
|
35
|
+
|
|
36
|
+
// Bounds the number of scope syncs running concurrently. Scopes beyond this limit queue here. Sized to trade off
|
|
37
|
+
// parallelism on non-ACIR work (node RPC, note store reads) against memory pressure from concurrent circuit
|
|
38
|
+
// execution.
|
|
39
|
+
#syncSlot = new Semaphore(MAX_CONCURRENT_SCOPE_SYNCS);
|
|
29
40
|
|
|
30
41
|
constructor(
|
|
31
42
|
private aztecNode: AztecNode,
|
|
@@ -34,11 +45,6 @@ export class ContractSyncService implements StagedStore {
|
|
|
34
45
|
private log: Logger,
|
|
35
46
|
) {}
|
|
36
47
|
|
|
37
|
-
/** Sets contracts that should be skipped during sync for a specific job. */
|
|
38
|
-
setExcludedFromSync(jobId: string, addresses: Set<string>): void {
|
|
39
|
-
this.excludedFromSync.set(jobId, addresses);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
48
|
/**
|
|
43
49
|
* Ensures a contract's private state is synchronized and that the PXE holds the current class artifact.
|
|
44
50
|
* Uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
|
|
@@ -51,131 +57,133 @@ export class ContractSyncService implements StagedStore {
|
|
|
51
57
|
async ensureContractSynced(
|
|
52
58
|
contractAddress: AztecAddress,
|
|
53
59
|
functionToInvokeAfterSync: FunctionSelector | null,
|
|
54
|
-
utilityExecutor: (call: FunctionCall, scopes:
|
|
60
|
+
utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<any>,
|
|
55
61
|
anchorBlockHeader: BlockHeader,
|
|
56
62
|
jobId: string,
|
|
57
|
-
scopes:
|
|
63
|
+
scopes: AztecAddress[],
|
|
58
64
|
): Promise<void> {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
this.#startSyncIfNeeded(contractAddress, scopes, scopesToSync =>
|
|
64
|
-
this.#syncContract(
|
|
65
|
-
contractAddress,
|
|
66
|
-
functionToInvokeAfterSync,
|
|
67
|
-
utilityExecutor,
|
|
68
|
-
anchorBlockHeader,
|
|
69
|
-
jobId,
|
|
70
|
-
scopesToSync,
|
|
71
|
-
),
|
|
65
|
+
this.#startSyncIfNeeded(contractAddress, scopes, anchorBlockHeader, jobId, scope =>
|
|
66
|
+
syncScope(contractAddress, this.contractStore, functionToInvokeAfterSync, utilityExecutor, scope),
|
|
72
67
|
);
|
|
73
68
|
|
|
74
69
|
await this.#awaitSync(contractAddress, scopes);
|
|
75
70
|
}
|
|
76
71
|
|
|
77
|
-
/** Clears sync cache entries for the given scopes of a contract.
|
|
72
|
+
/** Clears sync cache entries for the given scopes of a contract. */
|
|
78
73
|
invalidateContractForScopes(contractAddress: AztecAddress, scopes: AztecAddress[]): void {
|
|
79
74
|
if (scopes.length === 0) {
|
|
80
75
|
return;
|
|
81
76
|
}
|
|
82
77
|
scopes.forEach(scope => this.syncedContracts.delete(toKey(contractAddress, scope)));
|
|
83
|
-
this.syncedContracts.delete(toKey(contractAddress, 'ALL_SCOPES'));
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async #syncContract(
|
|
87
|
-
contractAddress: AztecAddress,
|
|
88
|
-
functionToInvokeAfterSync: FunctionSelector | null,
|
|
89
|
-
utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<any>,
|
|
90
|
-
anchorBlockHeader: BlockHeader,
|
|
91
|
-
jobId: string,
|
|
92
|
-
scopes: AccessScopes,
|
|
93
|
-
): Promise<void> {
|
|
94
|
-
this.log.debug(`Syncing contract ${contractAddress}`);
|
|
95
|
-
await Promise.all([
|
|
96
|
-
syncState(
|
|
97
|
-
contractAddress,
|
|
98
|
-
this.contractStore,
|
|
99
|
-
functionToInvokeAfterSync,
|
|
100
|
-
utilityExecutor,
|
|
101
|
-
this.noteStore,
|
|
102
|
-
this.aztecNode,
|
|
103
|
-
anchorBlockHeader,
|
|
104
|
-
jobId,
|
|
105
|
-
scopes,
|
|
106
|
-
),
|
|
107
|
-
verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader),
|
|
108
|
-
]);
|
|
109
|
-
this.log.debug(`Contract ${contractAddress} synced`);
|
|
110
78
|
}
|
|
111
79
|
|
|
112
80
|
/** Clears sync cache. Called by BlockSynchronizer when anchor block changes. */
|
|
113
81
|
wipe(): void {
|
|
114
82
|
this.log.debug(`Wiping contract sync cache (${this.syncedContracts.size} entries)`);
|
|
115
83
|
this.syncedContracts.clear();
|
|
84
|
+
this.classIdVerificationCache.clear();
|
|
116
85
|
}
|
|
117
86
|
|
|
118
|
-
commit(
|
|
119
|
-
// Clear excluded contracts for this job
|
|
120
|
-
this.excludedFromSync.delete(jobId);
|
|
87
|
+
commit(_jobId: string): Promise<void> {
|
|
121
88
|
return Promise.resolve();
|
|
122
89
|
}
|
|
123
90
|
|
|
124
|
-
discardStaged(
|
|
91
|
+
discardStaged(_jobId: string): Promise<void> {
|
|
125
92
|
// We clear the synced contracts cache here because, when the job is discarded, any associated database writes from
|
|
126
93
|
// the sync are also undone.
|
|
127
94
|
this.syncedContracts.clear();
|
|
128
|
-
this.
|
|
95
|
+
this.classIdVerificationCache.clear();
|
|
129
96
|
return Promise.resolve();
|
|
130
97
|
}
|
|
131
|
-
/** Returns true if sync should be skipped for this contract */
|
|
132
|
-
#shouldSkipSync(jobId: string, contractAddress: AztecAddress): boolean {
|
|
133
|
-
return !!this.excludedFromSync.get(jobId)?.has(contractAddress.toString());
|
|
134
|
-
}
|
|
135
98
|
|
|
136
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* For each unsynced scope, creates a promise that waits on:
|
|
101
|
+
* 1. Class ID verification (cached per contract, scope-independent).
|
|
102
|
+
* 2. Note nullifier sync (shared, batched across all unsynced scopes).
|
|
103
|
+
* 3. Per-scope sync (individual, semaphore-bounded).
|
|
104
|
+
*/
|
|
137
105
|
#startSyncIfNeeded(
|
|
138
106
|
contractAddress: AztecAddress,
|
|
139
|
-
scopes:
|
|
140
|
-
|
|
107
|
+
scopes: AztecAddress[],
|
|
108
|
+
anchorBlockHeader: BlockHeader,
|
|
109
|
+
jobId: string,
|
|
110
|
+
syncScopeFn: (scope: AztecAddress) => Promise<void>,
|
|
141
111
|
): void {
|
|
142
|
-
const scopesToSync = this
|
|
143
|
-
|
|
144
|
-
if (keys.length === 0) {
|
|
112
|
+
const scopesToSync = scopes.filter(scope => !this.syncedContracts.has(toKey(contractAddress, scope)));
|
|
113
|
+
if (scopesToSync.length === 0) {
|
|
145
114
|
return;
|
|
146
115
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
116
|
+
|
|
117
|
+
this.log.debug(`Syncing contract ${contractAddress} for ${scopesToSync.length} scope(s)`);
|
|
118
|
+
|
|
119
|
+
const verifyPromise = this.#verifyClassId(contractAddress, anchorBlockHeader);
|
|
120
|
+
const syncNullifiersPromise = this.#syncNoteNullifiers(contractAddress, anchorBlockHeader, jobId, scopesToSync);
|
|
121
|
+
|
|
122
|
+
for (const scope of scopesToSync) {
|
|
123
|
+
const key = toKey(contractAddress, scope);
|
|
124
|
+
const promise = Promise.all([verifyPromise, syncNullifiersPromise, this.#runBounded(() => syncScopeFn(scope))])
|
|
125
|
+
.then(() => {})
|
|
126
|
+
.catch(err => {
|
|
127
|
+
this.syncedContracts.delete(key);
|
|
128
|
+
throw err;
|
|
129
|
+
});
|
|
130
|
+
this.syncedContracts.set(key, promise);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Verifies the local class ID matches the on-chain value (cached, evicts on failure so retries re-verify). */
|
|
135
|
+
#verifyClassId(contractAddress: AztecAddress, anchorBlockHeader: BlockHeader): Promise<void> {
|
|
136
|
+
const contractKey = contractAddress.toString();
|
|
137
|
+
const cached = this.classIdVerificationCache.get(contractKey);
|
|
138
|
+
if (cached) {
|
|
139
|
+
return cached;
|
|
140
|
+
}
|
|
141
|
+
const promise = verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader).catch(
|
|
142
|
+
err => {
|
|
143
|
+
this.classIdVerificationCache.delete(contractKey);
|
|
144
|
+
throw err;
|
|
145
|
+
},
|
|
146
|
+
);
|
|
147
|
+
this.classIdVerificationCache.set(contractKey, promise);
|
|
148
|
+
return promise;
|
|
152
149
|
}
|
|
153
150
|
|
|
154
|
-
/**
|
|
155
|
-
#
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
151
|
+
/** Syncs note nullifiers across all unsynced scopes in a single batched call. */
|
|
152
|
+
async #syncNoteNullifiers(
|
|
153
|
+
contractAddress: AztecAddress,
|
|
154
|
+
anchorBlockHeader: BlockHeader,
|
|
155
|
+
jobId: string,
|
|
156
|
+
scopes: AztecAddress[],
|
|
157
|
+
): Promise<void> {
|
|
158
|
+
// Protocol contracts don't have private state to sync
|
|
159
|
+
if (isProtocolContract(contractAddress)) {
|
|
160
|
+
return;
|
|
159
161
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
+
// This runs in parallel with per-scope sync (which also writes to the note store). That's safe because
|
|
163
|
+
// the note store handles concurrent operations.
|
|
164
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, anchorBlockHeader, jobId);
|
|
165
|
+
await noteService.syncNoteNullifiers(contractAddress, scopes);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Runs fn while holding a slot in #syncSlot, bounding total concurrent scope syncs. */
|
|
169
|
+
async #runBounded<T>(fn: () => Promise<T>): Promise<T> {
|
|
170
|
+
await this.#syncSlot.acquire();
|
|
171
|
+
try {
|
|
172
|
+
return await fn();
|
|
173
|
+
} finally {
|
|
174
|
+
this.#syncSlot.release();
|
|
162
175
|
}
|
|
163
|
-
return scopes.filter(scope => !this.syncedContracts.has(toKey(contractAddress, scope)));
|
|
164
176
|
}
|
|
165
177
|
|
|
166
178
|
/** Collects all relevant scope promises (including in-flight ones from concurrent calls) and awaits them. */
|
|
167
|
-
async #awaitSync(contractAddress: AztecAddress, scopes:
|
|
168
|
-
const promises =
|
|
169
|
-
.map(
|
|
179
|
+
async #awaitSync(contractAddress: AztecAddress, scopes: AztecAddress[]): Promise<void> {
|
|
180
|
+
const promises = scopes
|
|
181
|
+
.map(scope => this.syncedContracts.get(toKey(contractAddress, scope)))
|
|
170
182
|
.filter(p => p !== undefined);
|
|
171
183
|
await Promise.all(promises);
|
|
172
184
|
}
|
|
173
185
|
}
|
|
174
186
|
|
|
175
|
-
function
|
|
176
|
-
return
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function toKey(contract: AztecAddress, scope: AztecAddress | 'ALL_SCOPES') {
|
|
180
|
-
return scope === 'ALL_SCOPES' ? `${contract.toString()}:*` : `${contract.toString()}:${scope.toString()}`;
|
|
187
|
+
function toKey(contract: AztecAddress, scope: AztecAddress) {
|
|
188
|
+
return `${contract.toString()}:${scope.toString()}`;
|
|
181
189
|
}
|
|
@@ -6,10 +6,7 @@ import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '
|
|
|
6
6
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
7
7
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
8
8
|
|
|
9
|
-
import type { AccessScopes } from '../access_scopes.js';
|
|
10
|
-
import { NoteService } from '../notes/note_service.js';
|
|
11
9
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
12
|
-
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
13
10
|
|
|
14
11
|
/**
|
|
15
12
|
* Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
|
|
@@ -39,35 +36,26 @@ export async function readCurrentClassId(
|
|
|
39
36
|
return currentClassId;
|
|
40
37
|
}
|
|
41
38
|
|
|
42
|
-
export async function
|
|
39
|
+
export async function syncScope(
|
|
43
40
|
contractAddress: AztecAddress,
|
|
44
41
|
contractStore: ContractStore,
|
|
45
42
|
functionToInvokeAfterSync: FunctionSelector | null,
|
|
46
|
-
utilityExecutor: (privateSyncCall: FunctionCall, scopes:
|
|
47
|
-
|
|
48
|
-
aztecNode: AztecNode,
|
|
49
|
-
anchorBlockHeader: BlockHeader,
|
|
50
|
-
jobId: string,
|
|
51
|
-
scopes: AccessScopes,
|
|
43
|
+
utilityExecutor: (privateSyncCall: FunctionCall, scopes: AztecAddress[]) => Promise<any>,
|
|
44
|
+
scope: AztecAddress,
|
|
52
45
|
) {
|
|
53
46
|
// Protocol contracts don't have private state to sync
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
throw new Error(
|
|
58
|
-
'Forbidden `sync_state` invocation. `sync_state` can only be invoked by PXE, manual execution can lead to inconsistencies.',
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const noteService = new NoteService(noteStore, aztecNode, anchorBlockHeader, jobId);
|
|
47
|
+
if (isProtocolContract(contractAddress)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
63
50
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
]);
|
|
51
|
+
const syncStateFunctionCall = await contractStore.getFunctionCall('sync_state', [scope], contractAddress);
|
|
52
|
+
if (functionToInvokeAfterSync && functionToInvokeAfterSync.equals(syncStateFunctionCall.selector)) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
'Forbidden `sync_state` invocation. `sync_state` can only be invoked by PXE, manual execution can lead to inconsistencies.',
|
|
55
|
+
);
|
|
70
56
|
}
|
|
57
|
+
|
|
58
|
+
await utilityExecutor(syncStateFunctionCall, [scope]);
|
|
71
59
|
}
|
|
72
60
|
|
|
73
61
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
2
2
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
3
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
4
|
import type { NoteDao } from '@aztec/stdlib/note';
|
|
4
5
|
import type { ContractOverrides } from '@aztec/stdlib/tx';
|
|
5
6
|
|
|
6
|
-
import type { AccessScopes } from '../access_scopes.js';
|
|
7
7
|
import type { BlockSynchronizer } from '../block_synchronizer/block_synchronizer.js';
|
|
8
8
|
import type { ContractFunctionSimulator } from '../contract_function_simulator/contract_function_simulator.js';
|
|
9
9
|
import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
|
|
@@ -22,7 +22,7 @@ export class PXEDebugUtils {
|
|
|
22
22
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
23
23
|
call: FunctionCall,
|
|
24
24
|
authWitnesses: AuthWitness[] | undefined,
|
|
25
|
-
scopes:
|
|
25
|
+
scopes: AztecAddress[],
|
|
26
26
|
jobId: string,
|
|
27
27
|
) => Promise<any>;
|
|
28
28
|
|
|
@@ -41,7 +41,7 @@ export class PXEDebugUtils {
|
|
|
41
41
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
42
42
|
call: FunctionCall,
|
|
43
43
|
authWitnesses: AuthWitness[] | undefined,
|
|
44
|
-
scopes:
|
|
44
|
+
scopes: AztecAddress[],
|
|
45
45
|
jobId: string,
|
|
46
46
|
) => Promise<any>,
|
|
47
47
|
) {
|
|
@@ -82,12 +82,4 @@ export class PXEDebugUtils {
|
|
|
82
82
|
return this.noteStore.getNotes(filter, jobId);
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Triggers a sync of the PXE with the node.
|
|
88
|
-
* Blocks until the sync is complete.
|
|
89
|
-
*/
|
|
90
|
-
public sync(): Promise<void> {
|
|
91
|
-
return this.#putJobInQueue(() => this.blockStateSynchronizer.sync());
|
|
92
|
-
}
|
|
93
85
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
2
1
|
import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
|
|
3
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
3
|
import { createStore } from '@aztec/kv-store/indexeddb';
|
|
5
4
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
6
5
|
import { WASMSimulator } from '@aztec/simulator/client';
|
|
6
|
+
import { getStandardMultiCallEntrypoint } from '@aztec/standard-contracts/multi-call-entrypoint';
|
|
7
7
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
8
8
|
|
|
9
9
|
import type { PXEConfig } from '../../../config/index.js';
|
|
10
10
|
import { PXE } from '../../../pxe.js';
|
|
11
11
|
import { PXE_DATA_SCHEMA_VERSION } from '../../../storage/metadata.js';
|
|
12
|
-
import type
|
|
12
|
+
import { type PXECreationOptions, isPrivateKernelProver } from '../../pxe_creation_options.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Create and start an PXE instance with the given AztecNode.
|
|
@@ -29,10 +29,10 @@ export async function createPXE(
|
|
|
29
29
|
const actor = options.loggerActorLabel;
|
|
30
30
|
const loggers = options.loggers ?? {};
|
|
31
31
|
|
|
32
|
-
const
|
|
32
|
+
const l1ContractAddresses = await aztecNode.getL1ContractAddresses();
|
|
33
33
|
const configWithContracts = {
|
|
34
34
|
...config,
|
|
35
|
-
|
|
35
|
+
...l1ContractAddresses,
|
|
36
36
|
} as PXEConfig;
|
|
37
37
|
|
|
38
38
|
const storeLogger = loggers.store ?? createLogger('pxe:data:idb', { actor });
|
|
@@ -44,12 +44,15 @@ export async function createPXE(
|
|
|
44
44
|
const proverLogger = loggers.prover ?? createLogger('pxe:bb:wasm:bundle', { actor });
|
|
45
45
|
|
|
46
46
|
let prover;
|
|
47
|
-
if (options.proverOrOptions
|
|
47
|
+
if (isPrivateKernelProver(options.proverOrOptions)) {
|
|
48
48
|
prover = options.proverOrOptions;
|
|
49
49
|
} else {
|
|
50
50
|
prover = new BBBundlePrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
51
51
|
}
|
|
52
52
|
const protocolContractsProvider = new BundledProtocolContractsProvider();
|
|
53
|
+
const preloadedContractsProvider = options.preloadedContractsProvider ?? {
|
|
54
|
+
getPreloadedContracts: async () => [await getStandardMultiCallEntrypoint()],
|
|
55
|
+
};
|
|
53
56
|
|
|
54
57
|
const pxeLogger = loggers.pxe ?? createLogger('pxe:service', { actor });
|
|
55
58
|
const pxe = await PXE.create({
|
|
@@ -58,8 +61,10 @@ export async function createPXE(
|
|
|
58
61
|
proofCreator: prover,
|
|
59
62
|
simulator,
|
|
60
63
|
protocolContractsProvider,
|
|
64
|
+
preloadedContractsProvider,
|
|
61
65
|
config,
|
|
62
66
|
loggerOrSuffix: pxeLogger,
|
|
67
|
+
hooks: options.hooks,
|
|
63
68
|
});
|
|
64
69
|
return pxe;
|
|
65
70
|
}
|