@aztec-labs/pxe 6.0.0-nightly.20260829
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/README.md +13 -0
- package/dest/bin/check_oracle_version.d.ts +2 -0
- package/dest/bin/check_oracle_version.d.ts.map +1 -0
- package/dest/bin/check_oracle_version.js +22 -0
- 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 +20 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +25 -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 +47 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
- package/dest/block_synchronizer/block_synchronizer.js +192 -0
- package/dest/block_synchronizer/index.d.ts +2 -0
- package/dest/block_synchronizer/index.d.ts.map +1 -0
- package/dest/block_synchronizer/index.js +1 -0
- package/dest/config/index.d.ts +57 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +80 -0
- package/dest/config/package_info.d.ts +5 -0
- package/dest/config/package_info.d.ts.map +1 -0
- package/dest/config/package_info.js +6 -0
- package/dest/contract/contract_call_graph.d.ts +51 -0
- package/dest/contract/contract_call_graph.d.ts.map +1 -0
- package/dest/contract/contract_call_graph.js +91 -0
- package/dest/contract/contract_class_service.d.ts +24 -0
- package/dest/contract/contract_class_service.d.ts.map +1 -0
- package/dest/contract/contract_class_service.js +36 -0
- package/dest/contract/contract_sync_service.d.ts +82 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/contract/contract_sync_service.js +210 -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/contract_function_simulator.d.ts +114 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -0
- package/dest/contract_function_simulator/contract_function_simulator.js +495 -0
- 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 +98 -0
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/execution_note_cache.js +189 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +12 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +30 -0
- package/dest/contract_function_simulator/hashed_values_cache.d.ts +28 -0
- package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/hashed_values_cache.js +36 -0
- package/dest/contract_function_simulator/index.d.ts +36 -0
- package/dest/contract_function_simulator/index.d.ts.map +1 -0
- package/dest/contract_function_simulator/index.js +20 -0
- 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 +20 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +39 -0
- 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 +25 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +14 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +19 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +4 -0
- 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 +22 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +47 -0
- package/dest/contract_function_simulator/noir-structs/nullifier_membership_witness_data.d.ts +12 -0
- package/dest/contract_function_simulator/noir-structs/nullifier_membership_witness_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/nullifier_membership_witness_data.js +6 -0
- 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/public_data_witness_data.d.ts +13 -0
- package/dest/contract_function_simulator/noir-structs/public_data_witness_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/public_data_witness_data.js +3 -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 +11 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.js +3 -0
- 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 +3 -0
- package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/index.js +2 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +24 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/interfaces.js +4 -0
- 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/note_packing_utils.d.ts +28 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +54 -0
- 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 +1024 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +292 -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 +1258 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +23 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +88 -0
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +226 -0
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +585 -0
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +333 -0
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +900 -0
- package/dest/contract_function_simulator/pick_notes.d.ts +85 -0
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -0
- package/dest/contract_function_simulator/pick_notes.js +68 -0
- 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 +38 -0
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
- package/dest/debug/pxe_debug_utils.js +44 -0
- package/dest/entrypoints/client/bundle/index.d.ts +10 -0
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -0
- package/dest/entrypoints/client/bundle/index.js +8 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +16 -0
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -0
- package/dest/entrypoints/client/bundle/utils.js +78 -0
- package/dest/entrypoints/client/lazy/index.d.ts +10 -0
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -0
- package/dest/entrypoints/client/lazy/index.js +8 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +15 -0
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -0
- package/dest/entrypoints/client/lazy/utils.js +77 -0
- 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 +32 -0
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -0
- package/dest/entrypoints/pxe_creation_options.js +3 -0
- package/dest/entrypoints/server/circuit_recording/circuit_recorder.d.ts +121 -0
- package/dest/entrypoints/server/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/entrypoints/server/circuit_recording/circuit_recorder.js +208 -0
- package/dest/entrypoints/server/circuit_recording/file_circuit_recorder.d.ts +20 -0
- package/dest/entrypoints/server/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/entrypoints/server/circuit_recording/file_circuit_recorder.js +131 -0
- package/dest/entrypoints/server/circuit_recording/memory_circuit_recorder.d.ts +10 -0
- package/dest/entrypoints/server/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/entrypoints/server/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/entrypoints/server/circuit_recording/simulator_recorder_wrapper.d.ts +18 -0
- package/dest/entrypoints/server/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/entrypoints/server/circuit_recording/simulator_recorder_wrapper.js +41 -0
- package/dest/entrypoints/server/index.d.ts +17 -0
- package/dest/entrypoints/server/index.d.ts.map +1 -0
- package/dest/entrypoints/server/index.js +14 -0
- 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 +9 -0
- package/dest/entrypoints/server/utils.d.ts.map +1 -0
- package/dest/entrypoints/server/utils.js +84 -0
- package/dest/error_enriching.d.ts +13 -0
- package/dest/error_enriching.d.ts.map +1 -0
- package/dest/error_enriching.js +80 -0
- package/dest/events/event_service.d.ts +30 -0
- package/dest/events/event_service.d.ts.map +1 -0
- package/dest/events/event_service.js +76 -0
- package/dest/events/index.d.ts +2 -0
- package/dest/events/index.d.ts.map +1 -0
- package/dest/events/index.js +1 -0
- package/dest/events/private_event_filter_validator.d.ts +10 -0
- package/dest/events/private_event_filter_validator.d.ts.map +1 -0
- package/dest/events/private_event_filter_validator.js +53 -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/logs/log_service.d.ts +40 -0
- package/dest/logs/log_service.d.ts.map +1 -0
- package/dest/logs/log_service.js +217 -0
- package/dest/messages/tx_resolver_service.d.ts +28 -0
- package/dest/messages/tx_resolver_service.d.ts.map +1 -0
- package/dest/messages/tx_resolver_service.js +62 -0
- package/dest/node/benchmarked_node.d.ts +22 -0
- package/dest/node/benchmarked_node.d.ts.map +1 -0
- package/dest/node/benchmarked_node.js +93 -0
- package/dest/node/caching_aztec_node.d.ts +24 -0
- package/dest/node/caching_aztec_node.d.ts.map +1 -0
- package/dest/node/caching_aztec_node.js +268 -0
- package/dest/notes/index.d.ts +2 -0
- package/dest/notes/index.d.ts.map +1 -0
- package/dest/notes/index.js +1 -0
- package/dest/notes/note_service.d.ts +77 -0
- package/dest/notes/note_service.d.ts.map +1 -0
- package/dest/notes/note_service.js +173 -0
- 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/operation_lifecycle.d.ts +45 -0
- package/dest/operation_lifecycle.d.ts.map +1 -0
- package/dest/operation_lifecycle.js +68 -0
- package/dest/operation_queue.d.ts +75 -0
- package/dest/operation_queue.d.ts.map +1 -0
- package/dest/operation_queue.js +100 -0
- package/dest/oracle_version.d.ts +4 -0
- package/dest/oracle_version.d.ts.map +1 -0
- package/dest/oracle_version.js +21 -0
- 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_expiration_timestamp.js +41 -0
- package/dest/private_kernel/hints/index.d.ts +3 -0
- package/dest/private_kernel/hints/index.d.ts.map +1 -0
- package/dest/private_kernel/hints/index.js +2 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +343 -0
- 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/index.d.ts +3 -0
- package/dest/private_kernel/index.d.ts.map +1 -0
- package/dest/private_kernel/index.js +2 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +49 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -0
- package/dest/private_kernel/private_kernel_execution_prover.js +408 -0
- package/dest/private_kernel/private_kernel_oracle.d.ts +65 -0
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -0
- package/dest/private_kernel/private_kernel_oracle.js +110 -0
- package/dest/pxe.d.ts +364 -0
- package/dest/pxe.d.ts.map +1 -0
- package/dest/pxe.js +903 -0
- package/dest/storage/address_store/address_store.d.ts +11 -0
- package/dest/storage/address_store/address_store.d.ts.map +1 -0
- package/dest/storage/address_store/address_store.js +49 -0
- package/dest/storage/address_store/index.d.ts +2 -0
- package/dest/storage/address_store/index.d.ts.map +1 -0
- package/dest/storage/address_store/index.js +1 -0
- package/dest/storage/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 +20 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
- package/dest/storage/anchor_block_store/anchor_block_store.js +28 -0
- package/dest/storage/anchor_block_store/index.d.ts +2 -0
- package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
- package/dest/storage/anchor_block_store/index.js +1 -0
- package/dest/storage/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 +674 -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/base_staging_store.d.ts +110 -0
- package/dest/storage/base_staging_store.d.ts.map +1 -0
- package/dest/storage/base_staging_store.js +141 -0
- package/dest/storage/capsule_store/capsule_service.d.ts +22 -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 +72 -0
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_store.js +256 -0
- package/dest/storage/capsule_store/index.d.ts +3 -0
- package/dest/storage/capsule_store/index.d.ts.map +1 -0
- package/dest/storage/capsule_store/index.js +2 -0
- package/dest/storage/contract_store/contract_store.d.ts +96 -0
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
- package/dest/storage/contract_store/contract_store.js +282 -0
- package/dest/storage/contract_store/index.d.ts +2 -0
- package/dest/storage/contract_store/index.d.ts.map +1 -0
- package/dest/storage/contract_store/index.js +1 -0
- package/dest/storage/contract_store/private_functions_tree.d.ts +27 -0
- package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
- package/dest/storage/contract_store/private_functions_tree.js +48 -0
- package/dest/storage/fact_store/fact_service.d.ts +23 -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 +101 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +350 -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 +10 -0
- package/dest/storage/index.d.ts.map +1 -0
- package/dest/storage/index.js +9 -0
- package/dest/storage/metadata.d.ts +2 -0
- package/dest/storage/metadata.d.ts.map +1 -0
- package/dest/storage/metadata.js +1 -0
- package/dest/storage/note_store/index.d.ts +3 -0
- package/dest/storage/note_store/index.d.ts.map +1 -0
- package/dest/storage/note_store/index.js +2 -0
- package/dest/storage/note_store/note_store.d.ts +92 -0
- package/dest/storage/note_store/note_store.d.ts.map +1 -0
- package/dest/storage/note_store/note_store.js +273 -0
- 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/note_store/test_utils.d.ts +9 -0
- package/dest/storage/note_store/test_utils.d.ts.map +1 -0
- package/dest/storage/note_store/test_utils.js +10 -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 +90 -0
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
- package/dest/storage/private_event_store/private_event_store.js +276 -0
- 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/rollbackable.d.ts +15 -0
- package/dest/storage/rollbackable.d.ts.map +1 -0
- package/dest/storage/rollbackable.js +3 -0
- package/dest/storage/staged_write_coordinator.d.ts +103 -0
- package/dest/storage/staged_write_coordinator.d.ts.map +1 -0
- package/dest/storage/staged_write_coordinator.js +141 -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 +4 -0
- package/dest/storage/tagging_store/index.d.ts.map +1 -0
- package/dest/storage/tagging_store/index.js +3 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +36 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/recipient_tagging_store.js +74 -0
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +113 -0
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/sender_tagging_store.js +432 -0
- 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 +11 -0
- package/dest/tagging/constants.d.ts.map +1 -0
- package/dest/tagging/constants.js +38 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts +69 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +79 -0
- package/dest/tagging/index.d.ts +18 -0
- package/dest/tagging/index.d.ts.map +1 -0
- package/dest/tagging/index.js +16 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +31 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +43 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +75 -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 +235 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
- package/dest/tagging/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 +20 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +77 -0
- package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts +22 -0
- package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/classify_pending_txs.js +62 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +30 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +74 -0
- package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts +29 -0
- package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/resolve_pending_txs.js +42 -0
- package/dest/tagging/sender_sync/utils/test_utils.d.ts +16 -0
- package/dest/tagging/sender_sync/utils/test_utils.d.ts.map +1 -0
- package/dest/tagging/sender_sync/utils/test_utils.js +24 -0
- 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/dest/test_utils.d.ts +3 -0
- package/dest/test_utils.d.ts.map +1 -0
- package/dest/test_utils.js +1 -0
- package/package.json +119 -0
- package/src/bin/check_oracle_version.ts +28 -0
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +30 -0
- package/src/block_synchronizer/block_stream_source.ts +48 -0
- package/src/block_synchronizer/block_synchronizer.ts +225 -0
- package/src/block_synchronizer/index.ts +1 -0
- package/src/config/index.ts +141 -0
- package/src/config/package_info.ts +3 -0
- package/src/contract/contract_call_graph.ts +121 -0
- package/src/contract/contract_class_service.ts +45 -0
- package/src/contract/contract_sync_service.ts +349 -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/contract_function_simulator.ts +928 -0
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +232 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +33 -0
- package/src/contract_function_simulator/hashed_values_cache.ts +47 -0
- package/src/contract_function_simulator/index.ts +107 -0
- 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 +52 -0
- 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 +35 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +19 -0
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +59 -0
- package/src/contract_function_simulator/noir-structs/nullifier_membership_witness_data.ts +15 -0
- 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/public_data_witness_data.ts +13 -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 +11 -0
- package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
- package/src/contract_function_simulator/oracle/index.ts +2 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +20 -0
- package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +68 -0
- package/src/contract_function_simulator/oracle/oracle_registry.ts +709 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1089 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +140 -0
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +812 -0
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +1341 -0
- package/src/contract_function_simulator/pick_notes.ts +160 -0
- 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 +89 -0
- package/src/entrypoints/client/bundle/index.ts +9 -0
- package/src/entrypoints/client/bundle/utils.ts +89 -0
- package/src/entrypoints/client/lazy/index.ts +9 -0
- package/src/entrypoints/client/lazy/utils.ts +89 -0
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +34 -0
- package/src/entrypoints/server/circuit_recording/circuit_recorder.ts +267 -0
- package/src/entrypoints/server/circuit_recording/file_circuit_recorder.ts +152 -0
- package/src/entrypoints/server/circuit_recording/memory_circuit_recorder.ts +13 -0
- package/src/entrypoints/server/circuit_recording/simulator_recorder_wrapper.ts +90 -0
- package/src/entrypoints/server/index.ts +17 -0
- package/src/entrypoints/server/store.ts +46 -0
- package/src/entrypoints/server/utils.ts +103 -0
- package/src/error_enriching.ts +124 -0
- package/src/events/event_service.ts +129 -0
- package/src/events/index.ts +1 -0
- package/src/events/private_event_filter_validator.ts +66 -0
- 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/logs/log_service.ts +295 -0
- package/src/messages/tx_resolver_service.ts +81 -0
- package/src/node/benchmarked_node.ts +141 -0
- package/src/node/caching_aztec_node.ts +407 -0
- package/src/notes/index.ts +1 -0
- package/src/notes/note_service.ts +238 -0
- package/src/notes_filter.ts +24 -0
- package/src/operation_lifecycle.ts +99 -0
- package/src/operation_queue.ts +149 -0
- package/src/oracle_version.ts +22 -0
- package/src/private_kernel/batch_planner.ts +168 -0
- package/src/private_kernel/hints/compute_tx_expiration_timestamp.ts +58 -0
- package/src/private_kernel/hints/index.ts +2 -0
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +553 -0
- package/src/private_kernel/hints/test_utils.ts +318 -0
- package/src/private_kernel/index.ts +2 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +656 -0
- package/src/private_kernel/private_kernel_oracle.ts +184 -0
- package/src/pxe.ts +1417 -0
- package/src/storage/address_store/address_store.ts +66 -0
- package/src/storage/address_store/index.ts +1 -0
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +35 -0
- package/src/storage/anchor_block_store/index.ts +1 -0
- 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 +813 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/base_staging_store.ts +227 -0
- package/src/storage/capsule_store/capsule_service.ts +97 -0
- package/src/storage/capsule_store/capsule_store.ts +349 -0
- package/src/storage/capsule_store/index.ts +2 -0
- package/src/storage/contract_store/contract_store.ts +403 -0
- package/src/storage/contract_store/index.ts +1 -0
- package/src/storage/contract_store/private_functions_tree.ts +68 -0
- package/src/storage/fact_store/fact_service.ts +70 -0
- package/src/storage/fact_store/fact_store.ts +424 -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 +9 -0
- package/src/storage/metadata.ts +1 -0
- package/src/storage/note_store/index.ts +2 -0
- package/src/storage/note_store/note_store.ts +367 -0
- package/src/storage/note_store/stored_note.ts +26 -0
- package/src/storage/note_store/test_utils.ts +16 -0
- package/src/storage/open_pxe_stores.ts +52 -0
- package/src/storage/private_event_store/private_event_store.ts +383 -0
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/rollbackable.ts +14 -0
- package/src/storage/staged_write_coordinator.ts +218 -0
- package/src/storage/store_identity.ts +72 -0
- package/src/storage/tagging_store/index.ts +3 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +114 -0
- package/src/storage/tagging_store/sender_tagging_store.ts +564 -0
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +42 -0
- package/src/tagging/get_all_logs_by_tags.ts +157 -0
- package/src/tagging/index.ts +25 -0
- package/src/tagging/persist_sender_tagging_index_ranges.ts +59 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +357 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +113 -0
- package/src/tagging/sender_sync/utils/classify_pending_txs.ts +92 -0
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +92 -0
- package/src/tagging/sender_sync/utils/resolve_pending_txs.ts +65 -0
- package/src/tagging/sender_sync/utils/test_utils.ts +46 -0
- package/src/tagging/testing/tag_query_test_utils.ts +11 -0
- package/src/test_utils.ts +2 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec-labs/foundation/branded-types';
|
|
2
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
3
|
+
import { allToCompletion } from '@aztec-labs/foundation/promise';
|
|
4
|
+
import { Semaphore } from '@aztec-labs/foundation/queue';
|
|
5
|
+
import { StoredPrivateEvent } from './stored_private_event.js';
|
|
6
|
+
/**
|
|
7
|
+
* Stores decrypted private event logs.
|
|
8
|
+
*
|
|
9
|
+
* Append-only: events are never deleted during normal operation. Reorgs are handled by delete-on-prune, which removes
|
|
10
|
+
* every event originating on a reorg'd block.
|
|
11
|
+
*/ export class PrivateEventStore {
|
|
12
|
+
storeName = 'private_event';
|
|
13
|
+
#store;
|
|
14
|
+
/** Actual private event log entries, keyed by siloedEventCommitment */ #events;
|
|
15
|
+
/** Multi-map from contractAddress_eventSelector to siloedEventCommitment for efficient lookup */ #eventsByContractAndEventSelector;
|
|
16
|
+
/** Multi-map from block number to siloedEventCommitment, for delete-on-prune. */ #eventsByBlockNumber;
|
|
17
|
+
/** changeSetId => eventId (event siloed nullifier) => StoredPrivateEvent */ #eventsForChangeSet;
|
|
18
|
+
/** Per-change-set locks to prevent concurrent writes from affecting each other. */ #changeSetLocks;
|
|
19
|
+
logger = createLogger('private_event_store');
|
|
20
|
+
constructor(store){
|
|
21
|
+
this.#store = store;
|
|
22
|
+
this.#events = this.#store.openMap('private_event_logs');
|
|
23
|
+
this.#eventsByContractAndEventSelector = this.#store.openMultiMap('events_by_contract_selector');
|
|
24
|
+
this.#eventsByBlockNumber = this.#store.openMultiMap('events_by_block_number');
|
|
25
|
+
this.#eventsForChangeSet = new Map();
|
|
26
|
+
this.#changeSetLocks = new Map();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Store a private event log.
|
|
30
|
+
* @param eventSelector - The event selector of the event.
|
|
31
|
+
* @param randomness - The randomness used for the event commitment.
|
|
32
|
+
* @param msgContent - The content of the event.
|
|
33
|
+
* @param siloedEventCommitment - The siloed event commitment (used as unique identifier).
|
|
34
|
+
* @param metadata
|
|
35
|
+
* contractAddress - The address of the contract that emitted the event.
|
|
36
|
+
* scope - The address to which the event is scoped.
|
|
37
|
+
* txHash - The transaction hash of the event log.
|
|
38
|
+
* blockNumber - The block number in which the event was emitted.
|
|
39
|
+
*/ storePrivateEventLog(eventSelector, randomness, msgContent, siloedEventCommitment, metadata, changeSetId) {
|
|
40
|
+
return this.#withChangeSetLock(changeSetId, ()=>this.#store.transactionAsync(async ()=>{
|
|
41
|
+
const { contractAddress, scope, txHash, l2BlockNumber, l2BlockHash, txIndexInBlock, eventIndexInTx } = metadata;
|
|
42
|
+
const eventId = siloedEventCommitment.toString();
|
|
43
|
+
this.logger.verbose('storing private event log (staged)', {
|
|
44
|
+
eventId,
|
|
45
|
+
contractAddress,
|
|
46
|
+
scope,
|
|
47
|
+
msgContent,
|
|
48
|
+
l2BlockNumber
|
|
49
|
+
});
|
|
50
|
+
const existing = await this.#readEvent(eventId, changeSetId);
|
|
51
|
+
if (existing) {
|
|
52
|
+
// If we already stored this event, we still want to make sure to track it for the given scope
|
|
53
|
+
existing.addScope(scope.toString());
|
|
54
|
+
this.#writeEvent(eventId, existing, changeSetId);
|
|
55
|
+
} else {
|
|
56
|
+
this.#writeEvent(eventId, new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set([
|
|
57
|
+
scope.toString()
|
|
58
|
+
])), changeSetId);
|
|
59
|
+
}
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns the private events given search parameters.
|
|
64
|
+
* @param eventSelector - The event selector to filter by.
|
|
65
|
+
* @param filter - Filtering criteria:
|
|
66
|
+
* contractAddress: The address of the contract to get events from.
|
|
67
|
+
* fromBlock: The block number to search from (inclusive).
|
|
68
|
+
* toBlock: The block number to search upto (exclusive).
|
|
69
|
+
* scope: - The addresses that decrypted the logs.
|
|
70
|
+
* @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
|
|
71
|
+
* included.
|
|
72
|
+
*/ getPrivateEvents(eventSelector, filter) {
|
|
73
|
+
return this.#store.transactionAsync(async ()=>{
|
|
74
|
+
const key = this.#keyFor(filter.contractAddress, eventSelector);
|
|
75
|
+
const targetScopes = new Set(filter.scopes.map((s)=>s.toString()));
|
|
76
|
+
// Map from eventId to the promise that reads the event buffer.
|
|
77
|
+
// We start reads during iteration to keep DB requests pending and avoid IndexedDB auto-commit.
|
|
78
|
+
const eventReadPromises = new Map();
|
|
79
|
+
for await (const eventId of this.#eventsByContractAndEventSelector.getValuesAsync(key)){
|
|
80
|
+
eventReadPromises.set(eventId, this.#events.getAsync(eventId));
|
|
81
|
+
}
|
|
82
|
+
const eventIds = [
|
|
83
|
+
...eventReadPromises.keys()
|
|
84
|
+
];
|
|
85
|
+
const eventBuffers = await allToCompletion([
|
|
86
|
+
...eventReadPromises.values()
|
|
87
|
+
]);
|
|
88
|
+
const events = [];
|
|
89
|
+
for(let i = 0; i < eventIds.length; i++){
|
|
90
|
+
const eventId = eventIds[i];
|
|
91
|
+
const eventBuffer = eventBuffers[i];
|
|
92
|
+
// Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
|
|
93
|
+
if (!eventBuffer) {
|
|
94
|
+
this.logger.verbose(`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
|
|
98
|
+
// Filter by block range
|
|
99
|
+
if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Filter by scopes
|
|
103
|
+
if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// Filter by txHash
|
|
107
|
+
if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
events.push({
|
|
111
|
+
l2BlockNumber: storedPrivateEvent.l2BlockNumber,
|
|
112
|
+
txIndexInBlock: storedPrivateEvent.txIndexInBlock,
|
|
113
|
+
eventIndexInTx: storedPrivateEvent.eventIndexInTx,
|
|
114
|
+
event: {
|
|
115
|
+
packedEvent: storedPrivateEvent.msgContent,
|
|
116
|
+
l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
|
|
117
|
+
txHash: storedPrivateEvent.txHash,
|
|
118
|
+
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
119
|
+
eventSelector
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Sort by block number, then by tx index within block, then by event index within tx
|
|
124
|
+
events.sort((a, b)=>{
|
|
125
|
+
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
126
|
+
return a.l2BlockNumber - b.l2BlockNumber;
|
|
127
|
+
}
|
|
128
|
+
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
129
|
+
return a.txIndexInBlock - b.txIndexInBlock;
|
|
130
|
+
}
|
|
131
|
+
return a.eventIndexInTx - b.eventIndexInTx;
|
|
132
|
+
});
|
|
133
|
+
return events.map((ev)=>ev.event);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/** Returns the ids (siloed event commitments) of all events emitted at the given block number. Used by delete-on-prune. */ async eventIdsAtBlock(blockNumber) {
|
|
137
|
+
const eventIds = [];
|
|
138
|
+
for await (const eventId of this.#eventsByBlockNumber.getValuesAsync(blockNumber)){
|
|
139
|
+
eventIds.push(eventId);
|
|
140
|
+
}
|
|
141
|
+
return eventIds;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Rolls the store back to `toBlock`: deletes every event anchored to a block strictly above it, as if nothing past
|
|
145
|
+
* that block height ever happened. Used by the reorg (`chain-pruned`) path to truncate the orphaned tail. Scanning
|
|
146
|
+
* from `toBlock + 1` upward covers everything above the rollback target without needing to know the chain tip.
|
|
147
|
+
*
|
|
148
|
+
* Must be called inside a transaction owned by the caller (it issues no `transactionAsync` of its own, the reorg path
|
|
149
|
+
* wraps it together with the anchor update, and IndexedDB has no nested transactions). Throws if any change set has
|
|
150
|
+
* uncommitted staged writes, since rolling back mid-change-set could later re-introduce events anchored to deleted
|
|
151
|
+
* blocks.
|
|
152
|
+
*/ async rollbackToBlock(toBlock) {
|
|
153
|
+
if (this.#eventsForChangeSet.size > 0) {
|
|
154
|
+
throw new Error('PXE private event store rollback is not allowed while staged writes are pending');
|
|
155
|
+
}
|
|
156
|
+
// Snapshot before mutating so we never delete from the multimap we are iterating.
|
|
157
|
+
const orphaned = [];
|
|
158
|
+
for await (const [block, eventId] of this.#eventsByBlockNumber.entriesAsync({
|
|
159
|
+
start: toBlock + 1
|
|
160
|
+
})){
|
|
161
|
+
orphaned.push({
|
|
162
|
+
block,
|
|
163
|
+
eventId
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
let removedCount = 0;
|
|
167
|
+
for (const { block, eventId } of orphaned){
|
|
168
|
+
const buf = await this.#events.getAsync(eventId);
|
|
169
|
+
if (!buf) {
|
|
170
|
+
throw new Error(`Event not found for eventId ${eventId}`);
|
|
171
|
+
}
|
|
172
|
+
const stored = StoredPrivateEvent.fromBuffer(buf);
|
|
173
|
+
await this.#events.delete(eventId);
|
|
174
|
+
await this.#eventsByContractAndEventSelector.deleteValue(this.#keyFor(stored.contractAddress, stored.eventSelector), eventId);
|
|
175
|
+
await this.#eventsByBlockNumber.deleteValue(block, eventId);
|
|
176
|
+
removedCount++;
|
|
177
|
+
}
|
|
178
|
+
this.logger.verbose('rolled back private events', {
|
|
179
|
+
removedCount,
|
|
180
|
+
toBlock
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Commits in-memory staged data to persistent storage.
|
|
185
|
+
*
|
|
186
|
+
* Called by StagedWriteCoordinator when an operation completes successfully.
|
|
187
|
+
*
|
|
188
|
+
* Note: StagedWriteCoordinator wraps all commits in a single transaction, so we don't need our own transactionAsync
|
|
189
|
+
* here (and using one would throw on IndexedDB as it does not support nested txs).
|
|
190
|
+
*
|
|
191
|
+
* @param changeSetId - The changeSetId identifying which staged data to commit
|
|
192
|
+
*/ async commitChangeSet(changeSetId) {
|
|
193
|
+
// Note: Don't use #withChangeSetLock here - commit runs within StagedWriteCoordinator's transactionAsync,
|
|
194
|
+
// and awaiting the lock would create a microtask boundary with no pending DB request,
|
|
195
|
+
// causing IndexedDB to auto-commit the transaction.
|
|
196
|
+
for (const [eventId, entry] of this.#getEventsForChangeSet(changeSetId).entries()){
|
|
197
|
+
const lookupKey = this.#keyFor(entry.contractAddress, entry.eventSelector);
|
|
198
|
+
this.logger.verbose('storing private event log', {
|
|
199
|
+
eventId,
|
|
200
|
+
lookupKey
|
|
201
|
+
});
|
|
202
|
+
await allToCompletion([
|
|
203
|
+
this.#events.set(eventId, entry.toBuffer()),
|
|
204
|
+
this.#eventsByContractAndEventSelector.set(lookupKey, eventId),
|
|
205
|
+
this.#eventsByBlockNumber.set(entry.l2BlockNumber, eventId)
|
|
206
|
+
]);
|
|
207
|
+
}
|
|
208
|
+
this.#clearChangeSetData(changeSetId);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Discards in-memory staged data without persisting it.
|
|
212
|
+
*/ discardChangeSet(changeSetId) {
|
|
213
|
+
this.#clearChangeSetData(changeSetId);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Reads an event from in-memory staged data first, falling back to persistent storage if not found.
|
|
217
|
+
*
|
|
218
|
+
* Returns undefined if the event does not exist in the store overall.
|
|
219
|
+
*/ async #readEvent(eventId, changeSetId) {
|
|
220
|
+
// Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
|
|
221
|
+
// are no pending read requests). The staged value still takes precedence if it exists.
|
|
222
|
+
const buffer = await this.#events.getAsync(eventId);
|
|
223
|
+
const eventForChangeSet = this.#getEventsForChangeSet(changeSetId).get(eventId);
|
|
224
|
+
return eventForChangeSet ?? (buffer ? StoredPrivateEvent.fromBuffer(buffer) : undefined);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Writes an event to in-memory staged data.
|
|
228
|
+
*
|
|
229
|
+
* Writes are only allowed in a change set context. Events modified while staged will only be persisted when `commit`
|
|
230
|
+
* is called.
|
|
231
|
+
*/ #writeEvent(eventId, entry, changeSetId) {
|
|
232
|
+
this.#getEventsForChangeSet(changeSetId).set(eventId, entry);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get in-memory data only visible to @param changeSetId
|
|
236
|
+
*/ #getEventsForChangeSet(changeSetId) {
|
|
237
|
+
let eventsForChangeSet = this.#eventsForChangeSet.get(changeSetId);
|
|
238
|
+
if (eventsForChangeSet === undefined) {
|
|
239
|
+
eventsForChangeSet = new Map();
|
|
240
|
+
this.#eventsForChangeSet.set(changeSetId, eventsForChangeSet);
|
|
241
|
+
}
|
|
242
|
+
return eventsForChangeSet;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Clear data structures supporting a specific change set.
|
|
246
|
+
*/ #clearChangeSetData(changeSetId) {
|
|
247
|
+
this.#eventsForChangeSet.delete(changeSetId);
|
|
248
|
+
this.#changeSetLocks.delete(changeSetId);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Ensures a function can only run once it acquires a unique per-change-set lock, and handles proper lock release
|
|
252
|
+
* after it runs.
|
|
253
|
+
*
|
|
254
|
+
* This primitive allows concurrent writes on this store without risking data corruption due to unsound write
|
|
255
|
+
* interleaving.
|
|
256
|
+
*/ async #withChangeSetLock(changeSetId, fn) {
|
|
257
|
+
let lock = this.#changeSetLocks.get(changeSetId);
|
|
258
|
+
if (!lock) {
|
|
259
|
+
lock = new Semaphore(1);
|
|
260
|
+
this.#changeSetLocks.set(changeSetId, lock);
|
|
261
|
+
}
|
|
262
|
+
await lock.acquire();
|
|
263
|
+
try {
|
|
264
|
+
return await fn();
|
|
265
|
+
} finally{
|
|
266
|
+
lock.release();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Returns a string key based on @param contractAddress and @param eventSelector.
|
|
271
|
+
*
|
|
272
|
+
* The returned key is meant to be used when interacting with index #eventsByContractAndEventSelector.
|
|
273
|
+
*/ #keyFor(contractAddress, eventSelector) {
|
|
274
|
+
return `${contractAddress.toString()}_${eventSelector.toString()}`;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import { EventSelector } from '@aztec-labs/stdlib/abi';
|
|
3
|
+
import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
|
|
4
|
+
import { BlockHash } from '@aztec-labs/stdlib/block';
|
|
5
|
+
import { TxHash } from '@aztec-labs/stdlib/tx';
|
|
6
|
+
/** Serializable private event entry with scope tracking. */
|
|
7
|
+
export declare class StoredPrivateEvent {
|
|
8
|
+
readonly randomness: Fr;
|
|
9
|
+
readonly msgContent: Fr[];
|
|
10
|
+
readonly l2BlockNumber: number;
|
|
11
|
+
readonly l2BlockHash: BlockHash;
|
|
12
|
+
readonly txHash: TxHash;
|
|
13
|
+
readonly txIndexInBlock: number;
|
|
14
|
+
readonly eventIndexInTx: number;
|
|
15
|
+
readonly contractAddress: AztecAddress;
|
|
16
|
+
readonly eventSelector: EventSelector;
|
|
17
|
+
readonly scopes: Set<string>;
|
|
18
|
+
constructor(randomness: Fr, msgContent: Fr[], l2BlockNumber: number, l2BlockHash: BlockHash, txHash: TxHash, txIndexInBlock: number, eventIndexInTx: number, contractAddress: AztecAddress, eventSelector: EventSelector, scopes: Set<string>);
|
|
19
|
+
addScope(scope: string): void;
|
|
20
|
+
toBuffer(): Buffer;
|
|
21
|
+
static fromBuffer(buffer: Buffer): StoredPrivateEvent;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkX3ByaXZhdGVfZXZlbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL3ByaXZhdGVfZXZlbnRfc3RvcmUvc3RvcmVkX3ByaXZhdGVfZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyw0REFBNEQ7QUFDNUQscUJBQWEsa0JBQWtCO0lBRTNCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUN2QixRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRTtJQUN6QixRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU07SUFDOUIsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTO0lBQy9CLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUN2QixRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU07SUFDL0IsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNO0lBQy9CLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBWTtJQUN0QyxRQUFRLENBQUMsYUFBYSxFQUFFLGFBQWE7SUFDckMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO0lBVjlCLFlBQ1csVUFBVSxFQUFFLEVBQUUsRUFDZCxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLFdBQVcsRUFBRSxTQUFTLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsY0FBYyxFQUFFLE1BQU0sRUFDdEIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsZUFBZSxFQUFFLFlBQVksRUFDN0IsYUFBYSxFQUFFLGFBQWEsRUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDMUI7SUFFSixRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFckI7SUFFRCxRQUFRLElBQUksTUFBTSxDQWdCakI7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBMkJwRDtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stored_private_event.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/stored_private_event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,4DAA4D;AAC5D,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,UAAU,EAAE,EAAE;IACvB,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,eAAe,EAAE,YAAY;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;IAV9B,YACW,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,YAAY,EAC7B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B;IAEJ,QAAQ,CAAC,KAAK,EAAE,MAAM,QAErB;IAED,QAAQ,IAAI,MAAM,CAgBjB;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA2BpD;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import { BufferReader, serializeToBuffer } from '@aztec-labs/foundation/serialize';
|
|
3
|
+
import { EventSelector } from '@aztec-labs/stdlib/abi';
|
|
4
|
+
import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
|
|
5
|
+
import { BlockHash } from '@aztec-labs/stdlib/block';
|
|
6
|
+
import { TxHash } from '@aztec-labs/stdlib/tx';
|
|
7
|
+
/** Serializable private event entry with scope tracking. */ export class StoredPrivateEvent {
|
|
8
|
+
randomness;
|
|
9
|
+
msgContent;
|
|
10
|
+
l2BlockNumber;
|
|
11
|
+
l2BlockHash;
|
|
12
|
+
txHash;
|
|
13
|
+
txIndexInBlock;
|
|
14
|
+
eventIndexInTx;
|
|
15
|
+
contractAddress;
|
|
16
|
+
eventSelector;
|
|
17
|
+
scopes;
|
|
18
|
+
constructor(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, scopes){
|
|
19
|
+
this.randomness = randomness;
|
|
20
|
+
this.msgContent = msgContent;
|
|
21
|
+
this.l2BlockNumber = l2BlockNumber;
|
|
22
|
+
this.l2BlockHash = l2BlockHash;
|
|
23
|
+
this.txHash = txHash;
|
|
24
|
+
this.txIndexInBlock = txIndexInBlock;
|
|
25
|
+
this.eventIndexInTx = eventIndexInTx;
|
|
26
|
+
this.contractAddress = contractAddress;
|
|
27
|
+
this.eventSelector = eventSelector;
|
|
28
|
+
this.scopes = scopes;
|
|
29
|
+
}
|
|
30
|
+
addScope(scope) {
|
|
31
|
+
this.scopes.add(scope);
|
|
32
|
+
}
|
|
33
|
+
toBuffer() {
|
|
34
|
+
const scopesArray = [
|
|
35
|
+
...this.scopes
|
|
36
|
+
];
|
|
37
|
+
return serializeToBuffer(this.randomness, this.msgContent.length, ...this.msgContent, this.l2BlockNumber, this.l2BlockHash, this.txHash, this.txIndexInBlock, this.eventIndexInTx, this.contractAddress, this.eventSelector.toBuffer(), scopesArray.length, ...scopesArray);
|
|
38
|
+
}
|
|
39
|
+
static fromBuffer(buffer) {
|
|
40
|
+
const reader = BufferReader.asReader(buffer);
|
|
41
|
+
const randomness = Fr.fromBuffer(reader);
|
|
42
|
+
const msgContentLength = reader.readNumber();
|
|
43
|
+
const msgContent = reader.readArray(msgContentLength, Fr);
|
|
44
|
+
const l2BlockNumber = reader.readNumber();
|
|
45
|
+
const l2BlockHash = BlockHash.fromBuffer(reader);
|
|
46
|
+
const txHash = TxHash.fromBuffer(reader);
|
|
47
|
+
const txIndexInBlock = reader.readNumber();
|
|
48
|
+
const eventIndexInTx = reader.readNumber();
|
|
49
|
+
const contractAddress = AztecAddress.fromBuffer(reader);
|
|
50
|
+
const eventSelector = EventSelector.fromBuffer(reader);
|
|
51
|
+
const scopes = reader.readVector({
|
|
52
|
+
fromBuffer: (r)=>r.readString()
|
|
53
|
+
});
|
|
54
|
+
return new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set(scopes));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A store holding block-indexed state that must be truncated when a chain prune (reorg) is detected.
|
|
3
|
+
*/
|
|
4
|
+
export interface Rollbackable {
|
|
5
|
+
/**
|
|
6
|
+
* Rolls the store back to `toBlock`: deletes all state originating from blocks strictly above it, as if nothing
|
|
7
|
+
* past that block height ever happened.
|
|
8
|
+
*
|
|
9
|
+
* Called inside an already open store transaction shared with every other rollbackable and with the anchor block
|
|
10
|
+
* update, so implementations must not open one of their own. Throwing aborts that transaction, undoing the whole
|
|
11
|
+
* prune and leaving the sync cursor untouched so the prune event is re-emitted on the next sync.
|
|
12
|
+
*/
|
|
13
|
+
rollbackToBlock(toBlock: number): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbGJhY2thYmxlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9yb2xsYmFja2FibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLFdBQVcsWUFBWTtJQUMzQjs7Ozs7OztPQU9HO0lBQ0gsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2pEIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollbackable.d.ts","sourceRoot":"","sources":["../../src/storage/rollbackable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec-labs/foundation/log';
|
|
2
|
+
import type { AztecAsyncKVStore } from '@aztec-labs/kv-store';
|
|
3
|
+
/**
|
|
4
|
+
* Identifies a change set: the writes staged between a {@link StagedWriteCoordinator.begin} and its matching commit or
|
|
5
|
+
* abort, which are promoted to the database or dropped as a unit.
|
|
6
|
+
*/
|
|
7
|
+
export type ChangeSetId = string;
|
|
8
|
+
/**
|
|
9
|
+
* A store that buffers its writes per change set instead of sending them straight to the database.
|
|
10
|
+
*
|
|
11
|
+
* Every read and write on such a store takes a change set ID. Writes are held under that ID; a read sees the database
|
|
12
|
+
* plus whatever its own change set has staged, never another's.
|
|
13
|
+
*
|
|
14
|
+
* {@link StagedWriteCoordinator} ends a change set by calling {@link commitChangeSet}, which promotes its staged writes
|
|
15
|
+
* to the database, or {@link discardChangeSet}, which throws them away.
|
|
16
|
+
*/
|
|
17
|
+
export interface StagedStore {
|
|
18
|
+
/** Unique name identifying this store (used for tracking staged stores from StagedWriteCoordinator) */
|
|
19
|
+
readonly storeName: string;
|
|
20
|
+
/**
|
|
21
|
+
* Notifies the store that a change set has been opened.
|
|
22
|
+
*
|
|
23
|
+
* TODO: make it required once every staged store extends `BaseStagingStore`. It is optional only while
|
|
24
|
+
* they migrate to per-change-set staging.
|
|
25
|
+
*
|
|
26
|
+
* @param changeSetId - The change set identifier
|
|
27
|
+
*/
|
|
28
|
+
beginChangeSet?(changeSetId: ChangeSetId): void;
|
|
29
|
+
/**
|
|
30
|
+
* Commits staged data to persistent storage. Will be called within a db transaction for atomicity, alongside the
|
|
31
|
+
* writes of all other staged stores for the same change set.
|
|
32
|
+
*
|
|
33
|
+
* @param changeSetId - The change set identifier
|
|
34
|
+
*/
|
|
35
|
+
commitChangeSet(changeSetId: ChangeSetId): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Discards staged data without committing. Called on abort.
|
|
38
|
+
*
|
|
39
|
+
* @param changeSetId - The change set identifier
|
|
40
|
+
*/
|
|
41
|
+
discardChangeSet(changeSetId: ChangeSetId): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* StagedWriteCoordinator simulates a database transaction across the PXE stores, which some underlying KV stores
|
|
45
|
+
* (e.g. IndexedDB) cannot provide on their own for long-running async operations.
|
|
46
|
+
*
|
|
47
|
+
* It uses a staged writes pattern:
|
|
48
|
+
* 1. When a change set is opened, a unique ID is created
|
|
49
|
+
* 2. While a change set is open, all writes are staged under its ID, and reads observe the staged data
|
|
50
|
+
* 3. On commit, the staged data is promoted to persistent storage
|
|
51
|
+
* 4. On abort, staged data is discarded
|
|
52
|
+
*
|
|
53
|
+
* Only one change set can be open at a time: {@link begin} throws if one already is. Supporting overlapping change
|
|
54
|
+
* sets would mean merging them when one of them commits — a problem in its own right, and one no caller needs solved.
|
|
55
|
+
* Avoiding that throw is up to the caller, which must serialize whatever opens change sets, e.g. with a queue.
|
|
56
|
+
*
|
|
57
|
+
* Staged data is nonetheless keyed by change set ID, because aborting a change set does not cancel the async work it
|
|
58
|
+
* started. An oracle that was mid-write when the operation failed still finishes writing afterwards, and stages its
|
|
59
|
+
* write under the aborted ID, which nothing will ever promote. Were staged data not keyed by ID, that late write
|
|
60
|
+
* would instead sit in the store and be promoted by whichever change set commits next.
|
|
61
|
+
*/
|
|
62
|
+
export declare class StagedWriteCoordinator {
|
|
63
|
+
#private;
|
|
64
|
+
constructor(args: StagedWriteCoordinatorArgs);
|
|
65
|
+
/**
|
|
66
|
+
* Opens a change set and returns its ID for staged writes.
|
|
67
|
+
*
|
|
68
|
+
* All or nothing: if a store fails to open the change set, the stores that already opened it discard it again and
|
|
69
|
+
* nothing is left active, so a later change set can still be opened on this PXE instance.
|
|
70
|
+
*
|
|
71
|
+
* @returns Change set ID to pass to store operations
|
|
72
|
+
* @throws If a change set is already open, or if a store rejects the new one.
|
|
73
|
+
*/
|
|
74
|
+
begin(): ChangeSetId;
|
|
75
|
+
/**
|
|
76
|
+
* Commits by promoting all staged data to persistent storage.
|
|
77
|
+
*
|
|
78
|
+
* Unlike {@link begin} and {@link abort}, a failed commit leaves the change set open, so the caller must still
|
|
79
|
+
* {@link abort} it before another can be opened.
|
|
80
|
+
*
|
|
81
|
+
* @param changeSetId - The change set ID returned from begin
|
|
82
|
+
* @throws If `changeSetId` is not the open change set, or if a store failed to commit.
|
|
83
|
+
*/
|
|
84
|
+
commit(changeSetId: ChangeSetId): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Aborts by discarding all staged data.
|
|
87
|
+
*
|
|
88
|
+
* Every store gets to drop its staged data even if an earlier one failed, and the change set always ends, so a
|
|
89
|
+
* failed abort never blocks later change sets.
|
|
90
|
+
*
|
|
91
|
+
* @param changeSetId - The change set ID returned from begin
|
|
92
|
+
* @throws If `changeSetId` is not the open change set, or if any store failed to discard.
|
|
93
|
+
*/
|
|
94
|
+
abort(changeSetId: ChangeSetId): void;
|
|
95
|
+
}
|
|
96
|
+
/** Dependencies of the {@link StagedWriteCoordinator}. */
|
|
97
|
+
type StagedWriteCoordinatorArgs = {
|
|
98
|
+
kvStore: AztecAsyncKVStore;
|
|
99
|
+
stagedStores: StagedStore[];
|
|
100
|
+
bindings?: LoggerBindings;
|
|
101
|
+
};
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2VkX3dyaXRlX2Nvb3JkaW5hdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9zdGFnZWRfd3JpdGVfY29vcmRpbmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQzVGLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsTUFBTSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFFakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFdBQVcsV0FBVztJQUMxQix1R0FBdUc7SUFDdkcsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFFM0I7Ozs7Ozs7T0FPRztJQUNILGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRWhEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztDQUNsRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxxQkFBYSxzQkFBc0I7O0lBT2pDLFlBQVksSUFBSSxFQUFFLDBCQUEwQixFQVMzQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxJQUFJLFdBQVcsQ0FhbkI7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FtQnBEO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxJQUFJLENBY3BDO0NBK0NGO0FBRUQsMERBQTBEO0FBQzFELEtBQUssMEJBQTBCLEdBQUc7SUFDaEMsT0FBTyxFQUFFLGlCQUFpQixDQUFDO0lBQzNCLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM1QixRQUFRLENBQUMsRUFBRSxjQUFjLENBQUM7Q0FDM0IsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staged_write_coordinator.d.ts","sourceRoot":"","sources":["../../src/storage/staged_write_coordinator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,uGAAuG;IACvG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAEhD;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;OAIG;IACH,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,sBAAsB;;IAOjC,YAAY,IAAI,EAAE,0BAA0B,EAS3C;IAED;;;;;;;;OAQG;IACH,KAAK,IAAI,WAAW,CAanB;IAED;;;;;;;;OAQG;IACG,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBpD;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAcpC;CA+CF;AAED,0DAA0D;AAC1D,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { randomBytes } from '@aztec-labs/foundation/crypto/random';
|
|
2
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
3
|
+
/**
|
|
4
|
+
* StagedWriteCoordinator simulates a database transaction across the PXE stores, which some underlying KV stores
|
|
5
|
+
* (e.g. IndexedDB) cannot provide on their own for long-running async operations.
|
|
6
|
+
*
|
|
7
|
+
* It uses a staged writes pattern:
|
|
8
|
+
* 1. When a change set is opened, a unique ID is created
|
|
9
|
+
* 2. While a change set is open, all writes are staged under its ID, and reads observe the staged data
|
|
10
|
+
* 3. On commit, the staged data is promoted to persistent storage
|
|
11
|
+
* 4. On abort, staged data is discarded
|
|
12
|
+
*
|
|
13
|
+
* Only one change set can be open at a time: {@link begin} throws if one already is. Supporting overlapping change
|
|
14
|
+
* sets would mean merging them when one of them commits — a problem in its own right, and one no caller needs solved.
|
|
15
|
+
* Avoiding that throw is up to the caller, which must serialize whatever opens change sets, e.g. with a queue.
|
|
16
|
+
*
|
|
17
|
+
* Staged data is nonetheless keyed by change set ID, because aborting a change set does not cancel the async work it
|
|
18
|
+
* started. An oracle that was mid-write when the operation failed still finishes writing afterwards, and stages its
|
|
19
|
+
* write under the aborted ID, which nothing will ever promote. Were staged data not keyed by ID, that late write
|
|
20
|
+
* would instead sit in the store and be promoted by whichever change set commits next.
|
|
21
|
+
*/ export class StagedWriteCoordinator {
|
|
22
|
+
#kvStore;
|
|
23
|
+
#stagedStores = new Map();
|
|
24
|
+
#log;
|
|
25
|
+
#currentChangeSetId;
|
|
26
|
+
constructor(args){
|
|
27
|
+
this.#kvStore = args.kvStore;
|
|
28
|
+
this.#log = createLogger('pxe:staged_write_coordinator', args.bindings);
|
|
29
|
+
for (const store of args.stagedStores){
|
|
30
|
+
if (this.#stagedStores.has(store.storeName)) {
|
|
31
|
+
throw new Error(`Store "${store.storeName}" is already registered`);
|
|
32
|
+
}
|
|
33
|
+
this.#stagedStores.set(store.storeName, store);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Opens a change set and returns its ID for staged writes.
|
|
38
|
+
*
|
|
39
|
+
* All or nothing: if a store fails to open the change set, the stores that already opened it discard it again and
|
|
40
|
+
* nothing is left active, so a later change set can still be opened on this PXE instance.
|
|
41
|
+
*
|
|
42
|
+
* @returns Change set ID to pass to store operations
|
|
43
|
+
* @throws If a change set is already open, or if a store rejects the new one.
|
|
44
|
+
*/ begin() {
|
|
45
|
+
if (this.#currentChangeSetId) {
|
|
46
|
+
throw new Error(`Cannot open change set: change set ${this.#currentChangeSetId} is already active. ` + `This should not happen - ensure change sets are properly committed or aborted.`);
|
|
47
|
+
}
|
|
48
|
+
const changeSetId = randomBytes(8).toString('hex');
|
|
49
|
+
this.#beginChangeSetOnStores(changeSetId);
|
|
50
|
+
this.#currentChangeSetId = changeSetId;
|
|
51
|
+
this.#log.debug(`Opened change set ${changeSetId}`, {
|
|
52
|
+
changeSetId
|
|
53
|
+
});
|
|
54
|
+
return changeSetId;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Commits by promoting all staged data to persistent storage.
|
|
58
|
+
*
|
|
59
|
+
* Unlike {@link begin} and {@link abort}, a failed commit leaves the change set open, so the caller must still
|
|
60
|
+
* {@link abort} it before another can be opened.
|
|
61
|
+
*
|
|
62
|
+
* @param changeSetId - The change set ID returned from begin
|
|
63
|
+
* @throws If `changeSetId` is not the open change set, or if a store failed to commit.
|
|
64
|
+
*/ async commit(changeSetId) {
|
|
65
|
+
if (this.#currentChangeSetId !== changeSetId) {
|
|
66
|
+
throw new Error(`Cannot commit change set ${changeSetId}: no matching change set active. ` + `Current change set: ${this.#currentChangeSetId ?? 'none'}`);
|
|
67
|
+
}
|
|
68
|
+
this.#log.debug(`Committing change set ${changeSetId}`, {
|
|
69
|
+
changeSetId
|
|
70
|
+
});
|
|
71
|
+
// Commit all stores atomically in a single transaction.
|
|
72
|
+
await this.#kvStore.transactionAsync(async ()=>{
|
|
73
|
+
for (const store of this.#stagedStores.values()){
|
|
74
|
+
await store.commitChangeSet(changeSetId);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
this.#currentChangeSetId = undefined;
|
|
78
|
+
this.#log.debug(`Change set ${changeSetId} committed successfully`, {
|
|
79
|
+
changeSetId
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Aborts by discarding all staged data.
|
|
84
|
+
*
|
|
85
|
+
* Every store gets to drop its staged data even if an earlier one failed, and the change set always ends, so a
|
|
86
|
+
* failed abort never blocks later change sets.
|
|
87
|
+
*
|
|
88
|
+
* @param changeSetId - The change set ID returned from begin
|
|
89
|
+
* @throws If `changeSetId` is not the open change set, or if any store failed to discard.
|
|
90
|
+
*/ abort(changeSetId) {
|
|
91
|
+
if (this.#currentChangeSetId !== changeSetId) {
|
|
92
|
+
throw new Error(`Cannot abort change set ${changeSetId}: no matching change set active. ` + `Current change set: ${this.#currentChangeSetId ?? 'none'}`);
|
|
93
|
+
}
|
|
94
|
+
this.#log.debug(`Aborting change set ${changeSetId}`, {
|
|
95
|
+
changeSetId
|
|
96
|
+
});
|
|
97
|
+
this.#currentChangeSetId = undefined;
|
|
98
|
+
this.#discardChangeSetOnStores(this.#stagedStores.values(), changeSetId);
|
|
99
|
+
this.#log.debug(`Change set ${changeSetId} aborted`, {
|
|
100
|
+
changeSetId
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/** Opens the change set on every store, undoing it on any that accepted if a later one rejects, and rethrows. */ #beginChangeSetOnStores(changeSetId) {
|
|
104
|
+
const begunStores = [];
|
|
105
|
+
try {
|
|
106
|
+
for (const store of this.#stagedStores.values()){
|
|
107
|
+
store.beginChangeSet?.(changeSetId);
|
|
108
|
+
begunStores.push(store);
|
|
109
|
+
}
|
|
110
|
+
} catch (err) {
|
|
111
|
+
try {
|
|
112
|
+
this.#discardChangeSetOnStores(begunStores, changeSetId);
|
|
113
|
+
} catch (discardError) {
|
|
114
|
+
// The original error is that a store failed to begin the changeset, and we're throwing that
|
|
115
|
+
// unconditionally, so we just log this additional failure.
|
|
116
|
+
this.#log.error(`Failed to roll back change set ${changeSetId} after a store rejected it`, discardError, {
|
|
117
|
+
changeSetId
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
throw err;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** Discards the change set on every store in `stores`, throwing only once they have all had the chance. */ #discardChangeSetOnStores(stores, changeSetId) {
|
|
124
|
+
// A store that fails must not stop the ones after it, so the failures are collected and thrown at the end.
|
|
125
|
+
const failures = [];
|
|
126
|
+
for (const store of stores){
|
|
127
|
+
try {
|
|
128
|
+
store.discardChangeSet(changeSetId);
|
|
129
|
+
} catch (err) {
|
|
130
|
+
failures.push(new Error(`Store "${store.storeName}" failed to discard change set ${changeSetId} and may still hold staged data.`, {
|
|
131
|
+
cause: err
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (failures.length === 1) {
|
|
136
|
+
throw failures[0];
|
|
137
|
+
} else if (failures.length > 1) {
|
|
138
|
+
throw new AggregateError(failures);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|