@aztec/pxe 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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 +40 -111
- 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 +34 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +46 -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 +37 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +26 -14
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +128 -26
- package/dest/config/index.d.ts +11 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +18 -2
- package/dest/config/package_info.js +1 -1
- package/dest/contract/contract_class_service.d.ts +31 -0
- package/dest/contract/contract_class_service.d.ts.map +1 -0
- package/dest/contract/contract_class_service.js +68 -0
- package/dest/contract/contract_sync_service.d.ts +48 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/contract/contract_sync_service.js +116 -0
- package/dest/contract/helpers.d.ts +7 -0
- package/dest/contract/helpers.d.ts.map +1 -0
- package/dest/contract/helpers.js +20 -0
- package/dest/contract/skip_sync_contracts.d.ts +11 -0
- package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
- package/dest/contract/skip_sync_contracts.js +18 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +72 -36
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +265 -98
- 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 +4 -10
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +8 -28
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
- package/dest/contract_function_simulator/index.d.ts +26 -5
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +11 -3
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -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 +30 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -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 +4 -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 +10 -11
- package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
- package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
- 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 +12 -24
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
- 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 +2 -63
- 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 +4 -6
- 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 +9 -13
- package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +67 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -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 +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
- 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 -20
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
- package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
- package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/index.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -95
- 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/legacy_oracle_registry.d.ts +39 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
- 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 -24
- 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_registry.d.ts +139 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +274 -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 +1243 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +7 -43
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +88 -95
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +268 -116
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +215 -86
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +625 -204
- 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/transient_array_service.d.ts +31 -0
- package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/transient_array_service.js +62 -0
- package/dest/contract_logging.d.ts +27 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +38 -0
- package/dest/debug/pxe_debug_utils.d.ts +19 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +22 -17
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +45 -12
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +46 -13
- package/dest/entrypoints/client/store.d.ts +14 -0
- package/dest/entrypoints/client/store.d.ts.map +1 -0
- package/dest/entrypoints/client/store.js +42 -0
- package/dest/entrypoints/pxe_creation_options.d.ts +18 -3
- 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 +8 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +6 -1
- package/dest/entrypoints/server/store.d.ts +18 -0
- package/dest/entrypoints/server/store.d.ts.map +1 -0
- package/dest/entrypoints/server/store.js +28 -0
- 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 +54 -15
- package/dest/error_enriching.d.ts +5 -3
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +13 -11
- package/dest/events/event_service.d.ts +16 -8
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +46 -14
- 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 +62 -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 +5 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +2 -0
- package/dest/hooks/resolve_custom_request.d.ts +23 -0
- package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
- package/dest/hooks/resolve_custom_request.js +3 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
- package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +17 -13
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +201 -91
- package/dest/messages/tx_resolver_service.d.ts +17 -0
- package/dest/messages/tx_resolver_service.d.ts.map +1 -0
- package/dest/messages/tx_resolver_service.js +60 -0
- package/dest/notes/note_service.d.ts +31 -9
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +95 -70
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -9
- 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/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +135 -70
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +202 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +7 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +209 -87
- package/dest/private_kernel/private_kernel_oracle.d.ts +17 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +47 -29
- package/dest/pxe.d.ts +228 -66
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +418 -231
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/allowed_scopes.d.ts +6 -0
- package/dest/storage/allowed_scopes.d.ts.map +1 -0
- package/dest/storage/allowed_scopes.js +7 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +12 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +12 -3
- 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 +671 -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 +47 -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 +42 -36
- 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 +63 -34
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +191 -146
- package/dest/storage/fact_store/fact_service.d.ts +22 -0
- package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_service.js +45 -0
- package/dest/storage/fact_store/fact_store.d.ts +95 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +408 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store_keys.js +50 -0
- package/dest/storage/fact_store/index.d.ts +6 -0
- package/dest/storage/fact_store/index.d.ts.map +1 -0
- package/dest/storage/fact_store/index.js +4 -0
- package/dest/storage/fact_store/origin_state.d.ts +59 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +60 -0
- package/dest/storage/fact_store/stored_fact.d.ts +32 -0
- package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
- package/dest/storage/fact_store/stored_fact.js +64 -0
- package/dest/storage/index.d.ts +3 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -1
- package/dest/storage/metadata.d.ts +2 -2
- package/dest/storage/metadata.d.ts.map +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +63 -56
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +321 -266
- package/dest/storage/note_store/stored_note.d.ts +11 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +27 -0
- package/dest/storage/open_pxe_stores.d.ts +35 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +29 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +26 -16
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +214 -163
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/store_identity.d.ts +35 -0
- package/dest/storage/store_identity.d.ts.map +1 -0
- package/dest/storage/store_identity.js +44 -0
- package/dest/storage/tagging_store/index.d.ts +2 -2
- package/dest/storage/tagging_store/index.d.ts.map +1 -1
- package/dest/storage/tagging_store/index.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/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +45 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +270 -137
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
- package/dest/tagging/constants.d.ts +3 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +28 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts +48 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +59 -0
- package/dest/tagging/index.d.ts +8 -6
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +6 -4
- 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 +74 -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 +238 -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/recipient_sync/utils/find_highest_indexes.js +2 -2
- 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 +5 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +32 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
- 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 +44 -16
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -7
- 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 +46 -27
- package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
- package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
- package/dest/tagging/testing/tag_query_test_utils.js +10 -0
- package/package.json +29 -17
- package/src/bin/check_oracle_version.ts +46 -134
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +54 -0
- package/src/block_synchronizer/block_stream_source.ts +42 -0
- package/src/block_synchronizer/block_synchronizer.ts +154 -48
- package/src/config/index.ts +22 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract/contract_class_service.ts +83 -0
- package/src/contract/contract_sync_service.ts +176 -0
- package/src/contract/helpers.ts +35 -0
- package/src/contract/skip_sync_contracts.ts +23 -0
- package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
- package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +463 -162
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +8 -29
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +89 -4
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
- package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
- package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +11 -10
- package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
- package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +7 -12
- package/src/contract_function_simulator/noir-structs/option.ts +75 -0
- package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
- package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
- package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
- package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
- package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
- package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
- package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
- package/src/contract_function_simulator/oracle/index.ts +1 -15
- package/src/contract_function_simulator/oracle/interfaces.ts +11 -167
- package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle_registry.ts +710 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1052 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +7 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +340 -213
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +966 -275
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/transient_array_service.ts +91 -0
- package/src/contract_logging.ts +52 -0
- package/src/debug/pxe_debug_utils.ts +55 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +46 -21
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +48 -22
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +23 -2
- package/src/entrypoints/server/index.ts +8 -1
- package/src/entrypoints/server/store.ts +47 -0
- package/src/entrypoints/server/utils.ts +61 -34
- package/src/error_enriching.ts +27 -11
- package/src/events/event_service.ts +70 -24
- 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 +68 -0
- package/src/hooks/index.ts +13 -0
- package/src/hooks/resolve_custom_request.ts +24 -0
- package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +248 -152
- package/src/messages/tx_resolver_service.ts +69 -0
- package/src/notes/note_service.ts +137 -101
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -9
- package/src/private_kernel/batch_planner.ts +168 -0
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +176 -119
- package/src/private_kernel/hints/test_utils.ts +318 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +347 -123
- package/src/private_kernel/private_kernel_oracle.ts +65 -36
- package/src/pxe.ts +732 -297
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +12 -2
- 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__/FactStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +85 -0
- package/src/storage/capsule_store/capsule_store.ts +52 -34
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +247 -185
- package/src/storage/fact_store/fact_service.ts +69 -0
- package/src/storage/fact_store/fact_store.ts +487 -0
- package/src/storage/fact_store/fact_store_keys.ts +75 -0
- package/src/storage/fact_store/index.ts +15 -0
- package/src/storage/fact_store/origin_state.ts +84 -0
- package/src/storage/fact_store/stored_fact.ts +80 -0
- package/src/storage/index.ts +2 -1
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +363 -324
- package/src/storage/note_store/stored_note.ts +26 -0
- package/src/storage/open_pxe_stores.ts +52 -0
- package/src/storage/private_event_store/private_event_store.ts +268 -210
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/store_identity.ts +72 -0
- package/src/storage/tagging_store/index.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +34 -24
- package/src/storage/tagging_store/sender_tagging_store.ts +333 -155
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +30 -10
- package/src/tagging/get_all_logs_by_tags.ts +120 -0
- package/src/tagging/index.ts +7 -5
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +358 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +54 -17
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +47 -29
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +42 -29
- package/src/tagging/testing/tag_query_test_utils.ts +11 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -58
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/oracle.js +0 -346
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +0 -30
- 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 -29
- package/dest/tree_membership/tree_membership_service.d.ts +0 -50
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -75
- package/src/contract_function_simulator/oracle/oracle.ts +0 -607
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
- package/src/storage/tagging_store/sender_address_book_store.ts +0 -42
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -133
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -43
- package/src/tree_membership/tree_membership_service.ts +0 -97
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
2
|
+
import { NoteDao } from '@aztec/stdlib/note';
|
|
3
|
+
|
|
4
|
+
/** A note as stored by the PXE: the note DAO plus the scopes that observed it. Append-only — never mutated. */
|
|
5
|
+
export class StoredNote {
|
|
6
|
+
constructor(
|
|
7
|
+
readonly noteDao: NoteDao,
|
|
8
|
+
readonly scopes: Set<string>,
|
|
9
|
+
) {}
|
|
10
|
+
|
|
11
|
+
static fromBuffer(buffer: Buffer): StoredNote {
|
|
12
|
+
const reader = BufferReader.asReader(buffer);
|
|
13
|
+
const noteDao = NoteDao.fromBuffer(reader);
|
|
14
|
+
const scopes = reader.readVector({ fromBuffer: (r: BufferReader) => r.readString() });
|
|
15
|
+
return new StoredNote(noteDao, new Set(scopes));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
toBuffer(): Buffer {
|
|
19
|
+
const scopesArray = [...this.scopes];
|
|
20
|
+
return serializeToBuffer(this.noteDao, scopesArray.length, ...scopesArray);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
addScope(scope: string): void {
|
|
24
|
+
this.scopes.add(scope);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { KeyStore } from '@aztec/key-store';
|
|
2
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
|
+
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
4
|
+
import type { BlockHash } from '@aztec/stdlib/block';
|
|
5
|
+
|
|
6
|
+
import { AddressStore } from './address_store/address_store.js';
|
|
7
|
+
import { AnchorBlockStore } from './anchor_block_store/anchor_block_store.js';
|
|
8
|
+
import { CapsuleStore } from './capsule_store/capsule_store.js';
|
|
9
|
+
import { ContractStore } from './contract_store/contract_store.js';
|
|
10
|
+
import { FactStore } from './fact_store/fact_store.js';
|
|
11
|
+
import { NoteStore } from './note_store/note_store.js';
|
|
12
|
+
import { PrivateEventStore } from './private_event_store/private_event_store.js';
|
|
13
|
+
import { RecipientTaggingStore, SenderTaggingStore, TaggingSecretSourcesStore } from './tagging_store/index.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The set of sub-stores opened against a single `AztecAsyncKVStore` to back PXE state.
|
|
17
|
+
*/
|
|
18
|
+
export type PxeStores = {
|
|
19
|
+
addressStore: AddressStore;
|
|
20
|
+
privateEventStore: PrivateEventStore;
|
|
21
|
+
contractStore: ContractStore;
|
|
22
|
+
noteStore: NoteStore;
|
|
23
|
+
anchorBlockStore: AnchorBlockStore;
|
|
24
|
+
senderTaggingStore: SenderTaggingStore;
|
|
25
|
+
taggingSecretSourcesStore: TaggingSecretSourcesStore;
|
|
26
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
27
|
+
capsuleStore: CapsuleStore;
|
|
28
|
+
keyStore: KeyStore;
|
|
29
|
+
l2TipsStore: L2TipsKVStore;
|
|
30
|
+
factStore: FactStore;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Opens every PXE sub-store against the given backing store. The `initialBlockHash` seeds the
|
|
35
|
+
* `L2TipsKVStore` so it agrees with the node's archiver on the dynamic genesis header hash.
|
|
36
|
+
*/
|
|
37
|
+
export function openPxeStores(store: AztecAsyncKVStore, initialBlockHash: BlockHash): PxeStores {
|
|
38
|
+
return {
|
|
39
|
+
addressStore: new AddressStore(store),
|
|
40
|
+
privateEventStore: new PrivateEventStore(store),
|
|
41
|
+
contractStore: new ContractStore(store),
|
|
42
|
+
noteStore: new NoteStore(store),
|
|
43
|
+
anchorBlockStore: new AnchorBlockStore(store),
|
|
44
|
+
senderTaggingStore: new SenderTaggingStore(store),
|
|
45
|
+
taggingSecretSourcesStore: new TaggingSecretSourcesStore(store),
|
|
46
|
+
recipientTaggingStore: new RecipientTaggingStore(store),
|
|
47
|
+
capsuleStore: new CapsuleStore(store),
|
|
48
|
+
keyStore: new KeyStore(store),
|
|
49
|
+
l2TipsStore: new L2TipsKVStore(store, 'pxe', initialBlockHash),
|
|
50
|
+
factStore: new FactStore(store),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
-
import {
|
|
4
|
+
import { Semaphore } from '@aztec/foundation/queue';
|
|
5
5
|
import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncMultiMap } from '@aztec/kv-store';
|
|
6
6
|
import type { EventSelector } from '@aztec/stdlib/abi';
|
|
7
7
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
|
-
import {
|
|
9
|
-
import { type InTx, TxHash } from '@aztec/stdlib/tx';
|
|
8
|
+
import type { InTx, TxHash } from '@aztec/stdlib/tx';
|
|
10
9
|
|
|
11
10
|
import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
|
|
12
11
|
import type { PackedPrivateEvent } from '../../pxe.js';
|
|
12
|
+
import { StoredPrivateEvent } from './stored_private_event.js';
|
|
13
13
|
|
|
14
14
|
export type PrivateEventStoreFilter = {
|
|
15
15
|
contractAddress: AztecAddress;
|
|
@@ -19,20 +19,6 @@ export type PrivateEventStoreFilter = {
|
|
|
19
19
|
txHash?: TxHash;
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
type PrivateEventEntry = {
|
|
23
|
-
randomness: Fr; // Note that this value is currently not being returned on queries and is therefore temporarily unused
|
|
24
|
-
msgContent: Buffer;
|
|
25
|
-
l2BlockNumber: number;
|
|
26
|
-
l2BlockHash: Buffer;
|
|
27
|
-
txHash: Buffer;
|
|
28
|
-
/** The index of the tx within the block, used for ordering events */
|
|
29
|
-
txIndexInBlock: number;
|
|
30
|
-
/** The index of the event within the tx (based on nullifier position), used for ordering events */
|
|
31
|
-
eventIndexInTx: number;
|
|
32
|
-
/** The lookup key for #eventsByContractScopeSelector, used for cleanup during rollback */
|
|
33
|
-
lookupKey: string;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
22
|
type PrivateEventMetadata = InTx & {
|
|
37
23
|
contractAddress: AztecAddress;
|
|
38
24
|
scope: AztecAddress;
|
|
@@ -42,111 +28,46 @@ type PrivateEventMetadata = InTx & {
|
|
|
42
28
|
eventIndexInTx: number;
|
|
43
29
|
};
|
|
44
30
|
|
|
31
|
+
/// Alias types for kv map readability
|
|
32
|
+
type EventId = string; // the siloedEventCommitment, stringified
|
|
33
|
+
type JobId = string;
|
|
34
|
+
type ContractAndSelectorKey = string;
|
|
35
|
+
type BlockNum = number;
|
|
36
|
+
type StoredEventBuffer = Buffer;
|
|
37
|
+
|
|
45
38
|
/**
|
|
46
39
|
* Stores decrypted private event logs.
|
|
40
|
+
*
|
|
41
|
+
* Append-only: events are never deleted during normal operation. Reorgs are handled by delete-on-prune, which removes
|
|
42
|
+
* every event originating on a reorg'd block.
|
|
47
43
|
*/
|
|
48
44
|
export class PrivateEventStore implements StagedStore {
|
|
49
45
|
readonly storeName: string = 'private_event';
|
|
50
46
|
|
|
51
47
|
#store: AztecAsyncKVStore;
|
|
52
|
-
/**
|
|
53
|
-
#
|
|
54
|
-
/** Multi-map from
|
|
55
|
-
#
|
|
56
|
-
/** Multi-map from block number to siloedEventCommitment for
|
|
57
|
-
#eventsByBlockNumber: AztecAsyncMultiMap<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
/** Actual private event log entries, keyed by siloedEventCommitment */
|
|
49
|
+
#events: AztecAsyncMap<EventId, StoredEventBuffer>;
|
|
50
|
+
/** Multi-map from contractAddress_eventSelector to siloedEventCommitment for efficient lookup */
|
|
51
|
+
#eventsByContractAndEventSelector: AztecAsyncMultiMap<ContractAndSelectorKey, EventId>;
|
|
52
|
+
/** Multi-map from block number to siloedEventCommitment, for delete-on-prune. */
|
|
53
|
+
#eventsByBlockNumber: AztecAsyncMultiMap<BlockNum, EventId>;
|
|
54
|
+
|
|
55
|
+
/** jobId => eventId (event siloed nullifier) => StoredPrivateEvent */
|
|
56
|
+
#eventsForJob: Map<JobId, Map<EventId, StoredPrivateEvent>>;
|
|
57
|
+
|
|
58
|
+
/** Per-job locks to prevent concurrent writes from affecting each other. */
|
|
59
|
+
#jobLocks: Map<JobId, Semaphore>;
|
|
63
60
|
|
|
64
61
|
logger = createLogger('private_event_store');
|
|
65
62
|
|
|
66
63
|
constructor(store: AztecAsyncKVStore) {
|
|
67
64
|
this.#store = store;
|
|
68
|
-
this.#
|
|
69
|
-
this.#
|
|
70
|
-
this.#seenLogs = this.#store.openMap('seen_logs');
|
|
65
|
+
this.#events = this.#store.openMap('private_event_logs');
|
|
66
|
+
this.#eventsByContractAndEventSelector = this.#store.openMultiMap('events_by_contract_selector');
|
|
71
67
|
this.#eventsByBlockNumber = this.#store.openMultiMap('events_by_block_number');
|
|
72
68
|
|
|
73
|
-
this.#
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
#keyFor(contractAddress: AztecAddress, scope: AztecAddress, eventSelector: EventSelector): string {
|
|
77
|
-
return `${contractAddress.toString()}_${scope.toString()}_${eventSelector.toString()}`;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
async commit(jobId: string): Promise<void> {
|
|
81
|
-
await Promise.all(
|
|
82
|
-
[...this.#getEventLogsInJobStage(jobId).entries()].map(async ([eventId, eventEntry]) => {
|
|
83
|
-
this.logger.verbose('storing private event log (KV store)', eventEntry);
|
|
84
|
-
|
|
85
|
-
await Promise.all([
|
|
86
|
-
this.#eventLogs.set(eventId, eventEntry),
|
|
87
|
-
this.#eventsByContractScopeSelector.set(eventEntry.lookupKey, eventId),
|
|
88
|
-
this.#eventsByBlockNumber.set(eventEntry.l2BlockNumber, eventId),
|
|
89
|
-
this.#seenLogs.set(eventId, true),
|
|
90
|
-
]);
|
|
91
|
-
}),
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
return this.discardStaged(jobId);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
discardStaged(jobId: string): Promise<void> {
|
|
98
|
-
this.#eventLogsInJobStage.delete(jobId);
|
|
99
|
-
return Promise.resolve();
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
#getEventLogsInJobStage(jobId: string): Map<string, PrivateEventEntry> {
|
|
103
|
-
let jobStage = this.#eventLogsInJobStage.get(jobId);
|
|
104
|
-
if (jobStage === undefined) {
|
|
105
|
-
jobStage = new Map();
|
|
106
|
-
this.#eventLogsInJobStage.set(jobId, jobStage);
|
|
107
|
-
}
|
|
108
|
-
return jobStage;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
async #isSeenLog(jobId: string, eventId: string): Promise<boolean> {
|
|
112
|
-
const eventLogsInJobStage = this.#getEventLogsInJobStage(jobId).get(eventId);
|
|
113
|
-
return !!eventLogsInJobStage || !!(await this.#seenLogs.getAsync(eventId));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
#addEventLogToStage(jobId: string, eventId: string, eventEntry: PrivateEventEntry) {
|
|
117
|
-
this.#getEventLogsInJobStage(jobId).set(eventId, eventEntry);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
async #getEventSiloedNullifiers(
|
|
121
|
-
contractAddress: AztecAddress,
|
|
122
|
-
scope: AztecAddress,
|
|
123
|
-
eventSelector: EventSelector,
|
|
124
|
-
jobId?: string,
|
|
125
|
-
): Promise<string[]> {
|
|
126
|
-
const key = this.#keyFor(contractAddress, scope, eventSelector);
|
|
127
|
-
const eventSiloedNullifiersInStorage: string[] = [];
|
|
128
|
-
for await (const eventId of this.#eventsByContractScopeSelector.getValuesAsync(key)) {
|
|
129
|
-
eventSiloedNullifiersInStorage.push(eventId);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (!jobId) {
|
|
133
|
-
return eventSiloedNullifiersInStorage;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const eventSiloedNullifiersInJobStage = new Set(
|
|
137
|
-
[...this.#getEventLogsInJobStage(jobId).entries()]
|
|
138
|
-
.filter(([_, entry]) => entry.lookupKey === key)
|
|
139
|
-
.map(([idx, _]) => idx),
|
|
140
|
-
);
|
|
141
|
-
return [...new Set(eventSiloedNullifiersInStorage).union(eventSiloedNullifiersInJobStage)];
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
async #getEventLogBySiloedNullifier(eventId: string, jobId?: string): Promise<PrivateEventEntry | undefined> {
|
|
145
|
-
if (jobId) {
|
|
146
|
-
return this.#getEventLogsInJobStage(jobId).get(eventId) ?? (await this.#eventLogs.getAsync(eventId));
|
|
147
|
-
} else {
|
|
148
|
-
return await this.#eventLogs.getAsync(eventId);
|
|
149
|
-
}
|
|
69
|
+
this.#eventsForJob = new Map();
|
|
70
|
+
this.#jobLocks = new Map();
|
|
150
71
|
}
|
|
151
72
|
|
|
152
73
|
/**
|
|
@@ -168,40 +89,46 @@ export class PrivateEventStore implements StagedStore {
|
|
|
168
89
|
siloedEventCommitment: Fr,
|
|
169
90
|
metadata: PrivateEventMetadata,
|
|
170
91
|
jobId: string,
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
this.logger.verbose('storing private event log (job stage)', {
|
|
188
|
-
contractAddress,
|
|
189
|
-
scope,
|
|
190
|
-
msgContent,
|
|
191
|
-
l2BlockNumber,
|
|
192
|
-
});
|
|
92
|
+
) {
|
|
93
|
+
return this.#withJobLock(jobId, () =>
|
|
94
|
+
this.#store.transactionAsync(async () => {
|
|
95
|
+
const { contractAddress, scope, txHash, l2BlockNumber, l2BlockHash, txIndexInBlock, eventIndexInTx } = metadata;
|
|
96
|
+
const eventId = siloedEventCommitment.toString();
|
|
97
|
+
|
|
98
|
+
this.logger.verbose('storing private event log (job stage)', {
|
|
99
|
+
eventId,
|
|
100
|
+
contractAddress,
|
|
101
|
+
scope,
|
|
102
|
+
msgContent,
|
|
103
|
+
l2BlockNumber,
|
|
104
|
+
});
|
|
193
105
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
106
|
+
const existing = await this.#readEvent(eventId, jobId);
|
|
107
|
+
|
|
108
|
+
if (existing) {
|
|
109
|
+
// If we already stored this event, we still want to make sure to track it for the given scope
|
|
110
|
+
existing.addScope(scope.toString());
|
|
111
|
+
this.#writeEvent(eventId, existing, jobId);
|
|
112
|
+
} else {
|
|
113
|
+
this.#writeEvent(
|
|
114
|
+
eventId,
|
|
115
|
+
new StoredPrivateEvent(
|
|
116
|
+
randomness,
|
|
117
|
+
msgContent,
|
|
118
|
+
l2BlockNumber,
|
|
119
|
+
l2BlockHash,
|
|
120
|
+
txHash,
|
|
121
|
+
txIndexInBlock,
|
|
122
|
+
eventIndexInTx,
|
|
123
|
+
contractAddress,
|
|
124
|
+
eventSelector,
|
|
125
|
+
new Set([scope.toString()]),
|
|
126
|
+
),
|
|
127
|
+
jobId,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}),
|
|
131
|
+
);
|
|
205
132
|
}
|
|
206
133
|
|
|
207
134
|
/**
|
|
@@ -215,110 +142,241 @@ export class PrivateEventStore implements StagedStore {
|
|
|
215
142
|
* @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
|
|
216
143
|
* included.
|
|
217
144
|
*/
|
|
218
|
-
public
|
|
145
|
+
public getPrivateEvents(
|
|
219
146
|
eventSelector: EventSelector,
|
|
220
147
|
filter: PrivateEventStoreFilter,
|
|
221
148
|
): Promise<PackedPrivateEvent[]> {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
eventIndexInTx: number;
|
|
226
|
-
event: PackedPrivateEvent;
|
|
227
|
-
}> = [];
|
|
149
|
+
return this.#store.transactionAsync(async () => {
|
|
150
|
+
const key = this.#keyFor(filter.contractAddress, eventSelector);
|
|
151
|
+
const targetScopes = new Set(filter.scopes.map(s => s.toString()));
|
|
228
152
|
|
|
229
|
-
|
|
230
|
-
|
|
153
|
+
// Map from eventId to the promise that reads the event buffer.
|
|
154
|
+
// We start reads during iteration to keep DB requests pending and avoid IndexedDB auto-commit.
|
|
155
|
+
const eventReadPromises: Map<string, Promise<Buffer | undefined>> = new Map();
|
|
231
156
|
|
|
232
|
-
for (const eventId of
|
|
233
|
-
|
|
157
|
+
for await (const eventId of this.#eventsByContractAndEventSelector.getValuesAsync(key)) {
|
|
158
|
+
eventReadPromises.set(eventId, this.#events.getAsync(eventId));
|
|
159
|
+
}
|
|
234
160
|
|
|
235
|
-
|
|
161
|
+
const eventIds = [...eventReadPromises.keys()];
|
|
162
|
+
const eventBuffers = await Promise.all(eventReadPromises.values());
|
|
163
|
+
|
|
164
|
+
const events: Array<{
|
|
165
|
+
l2BlockNumber: number;
|
|
166
|
+
txIndexInBlock: number;
|
|
167
|
+
eventIndexInTx: number;
|
|
168
|
+
event: PackedPrivateEvent;
|
|
169
|
+
}> = [];
|
|
170
|
+
|
|
171
|
+
for (let i = 0; i < eventIds.length; i++) {
|
|
172
|
+
const eventId = eventIds[i];
|
|
173
|
+
const eventBuffer = eventBuffers[i];
|
|
174
|
+
|
|
175
|
+
// Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
|
|
176
|
+
if (!eventBuffer) {
|
|
177
|
+
this.logger.verbose(
|
|
178
|
+
`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`,
|
|
179
|
+
);
|
|
236
180
|
continue;
|
|
237
181
|
}
|
|
238
182
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
183
|
+
const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
|
|
184
|
+
|
|
185
|
+
// Filter by block range
|
|
186
|
+
if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Filter by scopes
|
|
191
|
+
if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
245
194
|
|
|
246
|
-
|
|
195
|
+
// Filter by txHash
|
|
196
|
+
if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
|
|
247
197
|
continue;
|
|
248
198
|
}
|
|
249
199
|
|
|
250
200
|
events.push({
|
|
251
|
-
l2BlockNumber:
|
|
252
|
-
txIndexInBlock:
|
|
253
|
-
eventIndexInTx:
|
|
201
|
+
l2BlockNumber: storedPrivateEvent.l2BlockNumber,
|
|
202
|
+
txIndexInBlock: storedPrivateEvent.txIndexInBlock,
|
|
203
|
+
eventIndexInTx: storedPrivateEvent.eventIndexInTx,
|
|
254
204
|
event: {
|
|
255
|
-
packedEvent: msgContent,
|
|
256
|
-
l2BlockNumber: BlockNumber(
|
|
257
|
-
txHash,
|
|
258
|
-
l2BlockHash,
|
|
205
|
+
packedEvent: storedPrivateEvent.msgContent,
|
|
206
|
+
l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
|
|
207
|
+
txHash: storedPrivateEvent.txHash,
|
|
208
|
+
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
259
209
|
eventSelector,
|
|
260
210
|
},
|
|
261
211
|
});
|
|
262
212
|
}
|
|
263
|
-
}
|
|
264
213
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
214
|
+
// Sort by block number, then by tx index within block, then by event index within tx
|
|
215
|
+
events.sort((a, b) => {
|
|
216
|
+
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
217
|
+
return a.l2BlockNumber - b.l2BlockNumber;
|
|
218
|
+
}
|
|
219
|
+
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
220
|
+
return a.txIndexInBlock - b.txIndexInBlock;
|
|
221
|
+
}
|
|
222
|
+
return a.eventIndexInTx - b.eventIndexInTx;
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
return events.map(ev => ev.event);
|
|
274
226
|
});
|
|
275
|
-
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** Returns the ids (siloed event commitments) of all events emitted at the given block number. Used by delete-on-prune. */
|
|
230
|
+
public async eventIdsAtBlock(blockNumber: number): Promise<string[]> {
|
|
231
|
+
const eventIds: string[] = [];
|
|
232
|
+
for await (const eventId of this.#eventsByBlockNumber.getValuesAsync(blockNumber)) {
|
|
233
|
+
eventIds.push(eventId);
|
|
234
|
+
}
|
|
235
|
+
return eventIds;
|
|
276
236
|
}
|
|
277
237
|
|
|
278
238
|
/**
|
|
279
|
-
* Rolls back
|
|
280
|
-
*
|
|
239
|
+
* Rolls the store back to `toBlock`: deletes every event anchored to a block strictly above it, as if nothing past
|
|
240
|
+
* that block height ever happened. Used by the reorg (`chain-pruned`) path to truncate the orphaned tail. Scanning
|
|
241
|
+
* from `toBlock + 1` upward covers everything above the rollback target without needing to know the chain tip.
|
|
281
242
|
*
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
|
|
243
|
+
* Must be called inside a transaction owned by the caller (it issues no `transactionAsync` of its own, the reorg
|
|
244
|
+
* path wraps it together with the anchor update, and IndexedDB has no nested transactions). Throws if any job has
|
|
245
|
+
* uncommitted staged writes, since rolling back mid-job could later re-introduce events anchored to deleted blocks.
|
|
246
|
+
*/
|
|
247
|
+
public async rollback(toBlock: number): Promise<void> {
|
|
248
|
+
if (this.#eventsForJob.size > 0) {
|
|
249
|
+
throw new Error('PXE private event store rollback is not allowed while jobs are running');
|
|
250
|
+
}
|
|
251
|
+
// Snapshot before mutating so we never delete from the multimap we are iterating.
|
|
252
|
+
const orphaned: { block: number; eventId: string }[] = [];
|
|
253
|
+
for await (const [block, eventId] of this.#eventsByBlockNumber.entriesAsync({ start: toBlock + 1 })) {
|
|
254
|
+
orphaned.push({ block, eventId });
|
|
255
|
+
}
|
|
256
|
+
let removedCount = 0;
|
|
257
|
+
for (const { block, eventId } of orphaned) {
|
|
258
|
+
const buf = await this.#events.getAsync(eventId);
|
|
259
|
+
if (!buf) {
|
|
260
|
+
throw new Error(`Event not found for eventId ${eventId}`);
|
|
261
|
+
}
|
|
262
|
+
const stored = StoredPrivateEvent.fromBuffer(buf);
|
|
263
|
+
await this.#events.delete(eventId);
|
|
264
|
+
await this.#eventsByContractAndEventSelector.deleteValue(
|
|
265
|
+
this.#keyFor(stored.contractAddress, stored.eventSelector),
|
|
266
|
+
eventId,
|
|
267
|
+
);
|
|
268
|
+
await this.#eventsByBlockNumber.deleteValue(block, eventId);
|
|
269
|
+
removedCount++;
|
|
270
|
+
}
|
|
271
|
+
this.logger.verbose('rolled back private events', { removedCount, toBlock });
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Commits in memory job data to persistent storage.
|
|
286
276
|
*
|
|
287
|
-
*
|
|
288
|
-
* lost and the anchor block will not be updated; which means this code will eventually need to run again
|
|
289
|
-
* (i.e.: PXE will detect it's basing it work on an invalid block hash, then which re-triggers rewind).
|
|
277
|
+
* Called by JobCoordinator when a job completes successfully.
|
|
290
278
|
*
|
|
291
|
-
*
|
|
279
|
+
* Note: JobCoordinator wraps all commits in a single transaction, so we don't need our own transactionAsync here
|
|
280
|
+
* (and using one would throw on IndexedDB as it does not support nested txs).
|
|
292
281
|
*
|
|
293
|
-
*
|
|
282
|
+
* @param jobId - The jobId identifying which staged data to commit
|
|
294
283
|
*/
|
|
295
|
-
|
|
296
|
-
|
|
284
|
+
async commit(jobId: string): Promise<void> {
|
|
285
|
+
// Note: Don't use #withJobLock here - commit runs within JobCoordinator's transactionAsync,
|
|
286
|
+
// and awaiting the lock would create a microtask boundary with no pending DB request,
|
|
287
|
+
// causing IndexedDB to auto-commit the transaction.
|
|
288
|
+
for (const [eventId, entry] of this.#getEventsForJob(jobId).entries()) {
|
|
289
|
+
const lookupKey = this.#keyFor(entry.contractAddress, entry.eventSelector);
|
|
290
|
+
this.logger.verbose('storing private event log', { eventId, lookupKey });
|
|
291
|
+
|
|
292
|
+
await Promise.all([
|
|
293
|
+
this.#events.set(eventId, entry.toBuffer()),
|
|
294
|
+
this.#eventsByContractAndEventSelector.set(lookupKey, eventId),
|
|
295
|
+
this.#eventsByBlockNumber.set(entry.l2BlockNumber, eventId),
|
|
296
|
+
]);
|
|
297
|
+
}
|
|
297
298
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
for await (const eventId of this.#eventsByBlockNumber.getValuesAsync(block)) {
|
|
301
|
-
eventIds.push(eventId);
|
|
302
|
-
}
|
|
299
|
+
this.#clearJobData(jobId);
|
|
300
|
+
}
|
|
303
301
|
|
|
304
|
-
|
|
305
|
-
|
|
302
|
+
/**
|
|
303
|
+
* Discards in memory job data without persisting it.
|
|
304
|
+
*/
|
|
305
|
+
discardStaged(jobId: string): Promise<void> {
|
|
306
|
+
this.#clearJobData(jobId);
|
|
307
|
+
return Promise.resolve();
|
|
308
|
+
}
|
|
306
309
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
310
|
+
/**
|
|
311
|
+
* Reads an event from in-memory job data first, falling back to persistent storage if not found.
|
|
312
|
+
*
|
|
313
|
+
* Returns undefined if the event does not exist in the store overall.
|
|
314
|
+
*/
|
|
315
|
+
async #readEvent(eventId: string, jobId: string): Promise<StoredPrivateEvent | undefined> {
|
|
316
|
+
// Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
|
|
317
|
+
// are no pending read requests). The staged value still takes precedence if it exists.
|
|
318
|
+
const buffer = await this.#events.getAsync(eventId);
|
|
319
|
+
const eventForJob = this.#getEventsForJob(jobId).get(eventId);
|
|
320
|
+
return eventForJob ?? (buffer ? StoredPrivateEvent.fromBuffer(buffer) : undefined);
|
|
321
|
+
}
|
|
312
322
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
323
|
+
/**
|
|
324
|
+
* Writes an event to in-memory job data.
|
|
325
|
+
*
|
|
326
|
+
* Writes are only allowed in a job context. Events modified during a job will only be persisted when `commit` is
|
|
327
|
+
* called.
|
|
328
|
+
*/
|
|
329
|
+
#writeEvent(eventId: string, entry: StoredPrivateEvent, jobId: string) {
|
|
330
|
+
this.#getEventsForJob(jobId).set(eventId, entry);
|
|
331
|
+
}
|
|
316
332
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
333
|
+
/**
|
|
334
|
+
* Get in-memory data only visible to @param jobId
|
|
335
|
+
*/
|
|
336
|
+
#getEventsForJob(jobId: string): Map<string, StoredPrivateEvent> {
|
|
337
|
+
let eventsForJob = this.#eventsForJob.get(jobId);
|
|
338
|
+
if (eventsForJob === undefined) {
|
|
339
|
+
eventsForJob = new Map();
|
|
340
|
+
this.#eventsForJob.set(jobId, eventsForJob);
|
|
341
|
+
}
|
|
342
|
+
return eventsForJob;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Clear data structures supporting a specific job.
|
|
347
|
+
*/
|
|
348
|
+
#clearJobData(jobId: string) {
|
|
349
|
+
this.#eventsForJob.delete(jobId);
|
|
350
|
+
this.#jobLocks.delete(jobId);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Ensures a function can only run once it acquires a unique per-job lock, and handles proper lock release after it
|
|
355
|
+
* runs.
|
|
356
|
+
*
|
|
357
|
+
* This primitive allows concurrent writes on this store without risking data corruption due to unsound write
|
|
358
|
+
* interleaving.
|
|
359
|
+
*/
|
|
360
|
+
async #withJobLock<T>(jobId: string, fn: () => Promise<T>): Promise<T> {
|
|
361
|
+
let lock = this.#jobLocks.get(jobId);
|
|
362
|
+
if (!lock) {
|
|
363
|
+
lock = new Semaphore(1);
|
|
364
|
+
this.#jobLocks.set(jobId, lock);
|
|
320
365
|
}
|
|
366
|
+
await lock.acquire();
|
|
367
|
+
try {
|
|
368
|
+
return await fn();
|
|
369
|
+
} finally {
|
|
370
|
+
lock.release();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
321
373
|
|
|
322
|
-
|
|
374
|
+
/**
|
|
375
|
+
* Returns a string key based on @param contractAddress and @param eventSelector.
|
|
376
|
+
*
|
|
377
|
+
* The returned key is meant to be used when interacting with index #eventsByContractAndEventSelector.
|
|
378
|
+
*/
|
|
379
|
+
#keyFor(contractAddress: AztecAddress, eventSelector: EventSelector): string {
|
|
380
|
+
return `${contractAddress.toString()}_${eventSelector.toString()}`;
|
|
323
381
|
}
|
|
324
382
|
}
|