@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,2 @@
|
|
|
1
|
+
export { ContractStore } from './contract_store.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL2NvbnRyYWN0X3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/contract_store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ContractStore } from './contract_store.js';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FUNCTION_TREE_HEIGHT } from '@aztec-labs/constants';
|
|
2
|
+
import { MembershipWitness } from '@aztec-labs/foundation/trees';
|
|
3
|
+
import { type ContractArtifact, FunctionSelector } from '@aztec-labs/stdlib/abi';
|
|
4
|
+
/**
|
|
5
|
+
* Represents a Merkle tree of functions for a particular Contract Class.
|
|
6
|
+
* It manages the construction of the function tree, computes its root, and generates membership witnesses
|
|
7
|
+
* for constrained functions. This class also enables lookup of specific function artifact using selectors.
|
|
8
|
+
* It is used in combination with the AztecNode to compute various data for executing private transactions.
|
|
9
|
+
*/
|
|
10
|
+
export declare class PrivateFunctionsTree {
|
|
11
|
+
private readonly privateFunctions;
|
|
12
|
+
private tree?;
|
|
13
|
+
private constructor();
|
|
14
|
+
static create(artifact: ContractArtifact): Promise<PrivateFunctionsTree>;
|
|
15
|
+
/**
|
|
16
|
+
* Retrieve the membership witness of a function within a contract's function tree.
|
|
17
|
+
* A membership witness represents the position and authentication path of a target function
|
|
18
|
+
* in the Merkle tree of constrained functions. It is required to prove the existence of the
|
|
19
|
+
* function within the contract during execution. Throws if fn does not exist or is not private.
|
|
20
|
+
*
|
|
21
|
+
* @param selector - The function selector.
|
|
22
|
+
* @returns A MembershipWitness instance representing the position and authentication path of the function in the function tree.
|
|
23
|
+
*/
|
|
24
|
+
getFunctionMembershipWitness(selector: FunctionSelector): Promise<MembershipWitness<typeof FUNCTION_TREE_HEIGHT>>;
|
|
25
|
+
private getTree;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9mdW5jdGlvbnNfdHJlZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvY29udHJhY3Rfc3RvcmUvcHJpdmF0ZV9mdW5jdGlvbnNfdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUk3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sOEJBQThCLENBQUM7QUFDbEYsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFRL0Y7Ozs7O0dBS0c7QUFDSCxxQkFBYSxvQkFBb0I7SUFHWCxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtJQUZyRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQWE7SUFFMUIsT0FBTyxlQUFxRTtJQUU1RSxPQUFhLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLGlDQU83QztJQUVEOzs7Ozs7OztPQVFHO0lBQ1UsNEJBQTRCLENBQ3ZDLFFBQVEsRUFBRSxnQkFBZ0IsR0FDekIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxDQWV6RDtZQUVhLE9BQU87Q0FNdEIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private_functions_tree.d.ts","sourceRoot":"","sources":["../../../src/storage/contract_store/private_functions_tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,EAAE,iBAAiB,EAAmB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAgB,MAAM,wBAAwB,CAAC;AAQ/F;;;;;GAKG;AACH,qBAAa,oBAAoB;IAGX,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAFrD,OAAO,CAAC,IAAI,CAAC,CAAa;IAE1B,OAAO,eAAqE;IAE5E,OAAa,MAAM,CAAC,QAAQ,EAAE,gBAAgB,iCAO7C;IAED;;;;;;;;OAQG;IACU,4BAA4B,CACvC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,iBAAiB,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAezD;YAEa,OAAO;CAMtB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { FUNCTION_TREE_HEIGHT } from '@aztec-labs/constants';
|
|
2
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
3
|
+
import { allToCompletion } from '@aztec-labs/foundation/promise';
|
|
4
|
+
import { assertLength } from '@aztec-labs/foundation/serialize';
|
|
5
|
+
import { MembershipWitness } from '@aztec-labs/foundation/trees';
|
|
6
|
+
import { FunctionType } from '@aztec-labs/stdlib/abi';
|
|
7
|
+
import { computePrivateFunctionLeaf, computePrivateFunctionsTree, getContractClassPrivateFunctionFromArtifact } from '@aztec-labs/stdlib/contract';
|
|
8
|
+
/**
|
|
9
|
+
* Represents a Merkle tree of functions for a particular Contract Class.
|
|
10
|
+
* It manages the construction of the function tree, computes its root, and generates membership witnesses
|
|
11
|
+
* for constrained functions. This class also enables lookup of specific function artifact using selectors.
|
|
12
|
+
* It is used in combination with the AztecNode to compute various data for executing private transactions.
|
|
13
|
+
*/ export class PrivateFunctionsTree {
|
|
14
|
+
privateFunctions;
|
|
15
|
+
tree;
|
|
16
|
+
constructor(privateFunctions){
|
|
17
|
+
this.privateFunctions = privateFunctions;
|
|
18
|
+
}
|
|
19
|
+
static async create(artifact) {
|
|
20
|
+
const privateFunctions = await allToCompletion(artifact.functions.filter((fn)=>fn.functionType === FunctionType.PRIVATE).map(getContractClassPrivateFunctionFromArtifact));
|
|
21
|
+
return new PrivateFunctionsTree(privateFunctions);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Retrieve the membership witness of a function within a contract's function tree.
|
|
25
|
+
* A membership witness represents the position and authentication path of a target function
|
|
26
|
+
* in the Merkle tree of constrained functions. It is required to prove the existence of the
|
|
27
|
+
* function within the contract during execution. Throws if fn does not exist or is not private.
|
|
28
|
+
*
|
|
29
|
+
* @param selector - The function selector.
|
|
30
|
+
* @returns A MembershipWitness instance representing the position and authentication path of the function in the function tree.
|
|
31
|
+
*/ async getFunctionMembershipWitness(selector) {
|
|
32
|
+
const fn = this.privateFunctions.find((f)=>f.selector.equals(selector));
|
|
33
|
+
if (!fn) {
|
|
34
|
+
throw new Error(`Private function with selector ${selector.toString()} not found in contract class.`);
|
|
35
|
+
}
|
|
36
|
+
const leaf = await computePrivateFunctionLeaf(fn);
|
|
37
|
+
const tree = await this.getTree();
|
|
38
|
+
const index = tree.getIndex(leaf);
|
|
39
|
+
const path = tree.getSiblingPath(index);
|
|
40
|
+
return new MembershipWitness(FUNCTION_TREE_HEIGHT, BigInt(index), assertLength(path.map(Fr.fromBuffer), FUNCTION_TREE_HEIGHT));
|
|
41
|
+
}
|
|
42
|
+
async getTree() {
|
|
43
|
+
if (!this.tree) {
|
|
44
|
+
this.tree = await computePrivateFunctionsTree(this.privateFunctions);
|
|
45
|
+
}
|
|
46
|
+
return this.tree;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import type { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
|
|
3
|
+
import type { ChangeSetId } from '../staged_write_coordinator.js';
|
|
4
|
+
import type { FactStore } from './fact_store.js';
|
|
5
|
+
import type { FactCollectionKey, FactCollectionTypeKey, OriginBlock } from './fact_store_keys.js';
|
|
6
|
+
import { type FactCollectionWithOriginState, type TipBlockNumbers } from './origin_state.js';
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a {@link FactStore} with scope-based access control.
|
|
9
|
+
*
|
|
10
|
+
* Each method asserts scope validity before delegating to FactStore, gating which accounts a contract may record facts
|
|
11
|
+
* under or read facts from.
|
|
12
|
+
*/
|
|
13
|
+
export declare class FactService {
|
|
14
|
+
#private;
|
|
15
|
+
private readonly factStore;
|
|
16
|
+
private readonly allowedScopes;
|
|
17
|
+
constructor(factStore: FactStore, allowedScopes: AztecAddress[]);
|
|
18
|
+
recordFact(factCollectionKey: FactCollectionKey, factTypeId: Fr, payload: Fr[], originBlock: OriginBlock | undefined, changeSetId: ChangeSetId): Promise<void>;
|
|
19
|
+
deleteFactCollection(factCollectionKey: FactCollectionKey, changeSetId: ChangeSetId): Promise<void>;
|
|
20
|
+
getFactCollection(factCollectionKey: FactCollectionKey, tips: TipBlockNumbers, changeSetId: ChangeSetId): Promise<FactCollectionWithOriginState | undefined>;
|
|
21
|
+
getFactCollectionsByType(factCollectionTypeKey: FactCollectionTypeKey, tips: TipBlockNumbers, changeSetId: ChangeSetId): Promise<FactCollectionWithOriginState[]>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdF9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmFnZS9mYWN0X3N0b3JlL2ZhY3Rfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUdyRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsS0FBSyw2QkFBNkIsRUFFbEMsS0FBSyxlQUFlLEVBRXJCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0I7Ozs7O0dBS0c7QUFDSCxxQkFBYSxXQUFXOztJQUVwQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhO0lBRmhDLFlBQ21CLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGFBQWEsRUFBRSxZQUFZLEVBQUUsRUFDNUM7SUFFSixVQUFVLENBQ1IsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLFVBQVUsRUFBRSxFQUFFLEVBQ2QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUNiLFdBQVcsRUFBRSxXQUFXLEdBQUcsU0FBUyxFQUNwQyxXQUFXLEVBQUUsV0FBVyxHQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBR2Y7SUFFRCxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHbEc7SUFFSyxpQkFBaUIsQ0FDckIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLElBQUksRUFBRSxlQUFlLEVBQ3JCLFdBQVcsRUFBRSxXQUFXLEdBQ3ZCLE9BQU8sQ0FBQyw2QkFBNkIsR0FBRyxTQUFTLENBQUMsQ0FPcEQ7SUFFSyx3QkFBd0IsQ0FDNUIscUJBQXFCLEVBQUUscUJBQXFCLEVBQzVDLElBQUksRUFBRSxlQUFlLEVBQ3JCLFdBQVcsRUFBRSxXQUFXLEdBQ3ZCLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBSTFDO0NBS0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fact_service.d.ts","sourceRoot":"","sources":["../../../src/storage/fact_store/fact_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EACL,KAAK,6BAA6B,EAElC,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAG3B;;;;;GAKG;AACH,qBAAa,WAAW;;IAEpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAFhC,YACmB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,YAAY,EAAE,EAC5C;IAEJ,UAAU,CACR,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,EAAE,EAAE,EACb,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CAGf;IAED,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlG;IAEK,iBAAiB,CACrB,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAOpD;IAEK,wBAAwB,CAC5B,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAI1C;CAKF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { assertAllowedScope } from '../allowed_scopes.js';
|
|
2
|
+
import { toFactWithOriginState } from './origin_state.js';
|
|
3
|
+
/**
|
|
4
|
+
* Wraps a {@link FactStore} with scope-based access control.
|
|
5
|
+
*
|
|
6
|
+
* Each method asserts scope validity before delegating to FactStore, gating which accounts a contract may record facts
|
|
7
|
+
* under or read facts from.
|
|
8
|
+
*/ export class FactService {
|
|
9
|
+
factStore;
|
|
10
|
+
allowedScopes;
|
|
11
|
+
constructor(factStore, allowedScopes){
|
|
12
|
+
this.factStore = factStore;
|
|
13
|
+
this.allowedScopes = allowedScopes;
|
|
14
|
+
}
|
|
15
|
+
recordFact(factCollectionKey, factTypeId, payload, originBlock, changeSetId) {
|
|
16
|
+
assertAllowedScope(factCollectionKey.scope, this.allowedScopes);
|
|
17
|
+
return this.factStore.recordFact(factCollectionKey, factTypeId, payload, originBlock, changeSetId);
|
|
18
|
+
}
|
|
19
|
+
deleteFactCollection(factCollectionKey, changeSetId) {
|
|
20
|
+
assertAllowedScope(factCollectionKey.scope, this.allowedScopes);
|
|
21
|
+
return this.factStore.deleteFactCollection(factCollectionKey, changeSetId);
|
|
22
|
+
}
|
|
23
|
+
async getFactCollection(factCollectionKey, tips, changeSetId) {
|
|
24
|
+
assertAllowedScope(factCollectionKey.scope, this.allowedScopes);
|
|
25
|
+
const collection = await this.factStore.getFactCollection(factCollectionKey, changeSetId);
|
|
26
|
+
if (!collection) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
key: collection.key,
|
|
31
|
+
facts: this.#annotate(collection.facts, tips)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async getFactCollectionsByType(factCollectionTypeKey, tips, changeSetId) {
|
|
35
|
+
assertAllowedScope(factCollectionTypeKey.scope, this.allowedScopes);
|
|
36
|
+
const collections = await this.factStore.getFactCollectionsByType(factCollectionTypeKey, changeSetId);
|
|
37
|
+
return collections.map((collection)=>({
|
|
38
|
+
key: collection.key,
|
|
39
|
+
facts: this.#annotate(collection.facts, tips)
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
#annotate(facts, tips) {
|
|
43
|
+
return facts.map((fact)=>toFactWithOriginState(fact, tips));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncMultiMap } from '@aztec-labs/kv-store';
|
|
3
|
+
import { BaseStagingStore } from '../base_staging_store.js';
|
|
4
|
+
import type { ChangeSetId } from '../staged_write_coordinator.js';
|
|
5
|
+
import { FactCollectionKey, type FactCollectionTypeKey, type OriginBlock } from './fact_store_keys.js';
|
|
6
|
+
import { type Fact, StoredFact } from './stored_fact.js';
|
|
7
|
+
type BlockNum = number;
|
|
8
|
+
type FactBuffer = Buffer;
|
|
9
|
+
type FactCollectionKeyStr = string;
|
|
10
|
+
type FactKeyStr = string;
|
|
11
|
+
/** A fact collection as returned by the store. */
|
|
12
|
+
export type FactCollection = {
|
|
13
|
+
key: FactCollectionKey;
|
|
14
|
+
facts: Fact[];
|
|
15
|
+
};
|
|
16
|
+
/** A pending operation for a change set: record a fact, or delete a fact collection. */
|
|
17
|
+
type StagedOp = {
|
|
18
|
+
kind: 'recordFact';
|
|
19
|
+
fact: StoredFact;
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'deleteFactCollection';
|
|
22
|
+
key: FactCollectionKey;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Stores immutable facts grouped into collections, isolated by contract and scope.
|
|
26
|
+
*
|
|
27
|
+
* A fact collection is a contract-defined bag of facts identified by a {@link FactCollectionKey} (contract, scope,
|
|
28
|
+
* collection type, and id). A fact is a contract-defined immutable, typed datum in a collection. Collections are
|
|
29
|
+
* implicit: one comes into being when its first fact is recorded and ceases to exist once it has no facts left.
|
|
30
|
+
*
|
|
31
|
+
* What makes this store different to, for example, the `CapsuleStore`, is that it is designed to support use cases
|
|
32
|
+
* where resilience to reorgs is needed, via what we call _retractability_.
|
|
33
|
+
*
|
|
34
|
+
* Facts can be retractable or non-retractable. They are retractable if they are associated to an origin block.
|
|
35
|
+
* Retractable facts are removed from the store when their origin block is pruned (typically due to a reorg).
|
|
36
|
+
* Non-retractable facts survive reorgs: they must then be explicitly deleted, so as not to keep consuming resources
|
|
37
|
+
* (storage and compute) indefinitely.
|
|
38
|
+
*
|
|
39
|
+
* Fact collections are isolated by scope.
|
|
40
|
+
*
|
|
41
|
+
* This store is designed to enable Aztec.nr to implement complex workflows such as offchain reception or partial note
|
|
42
|
+
* processing by storing structured data that is guaranteed to exist conditionally to specific blocks being included in
|
|
43
|
+
* the chain, while leaving the complexity of ensuring said guarantees to PXE.
|
|
44
|
+
*
|
|
45
|
+
* A key design driver is that PXE knows nothing about the actual fact contents: it just manages enough metadata to
|
|
46
|
+
* provide the guarantees mentioned above. That way, concepts such as offchain delivery or partial notes are completely
|
|
47
|
+
* defined by Aztec.nr, opening the door to further extension without the need for ad-hoc PXE support.
|
|
48
|
+
*
|
|
49
|
+
* As with most other PXE stores, writes are staged per change set ID and flushed atomically on commit.
|
|
50
|
+
*/
|
|
51
|
+
export declare class FactStore extends BaseStagingStore<FactStoreChangeSet, FactStoreDb> {
|
|
52
|
+
#private;
|
|
53
|
+
logger: import("@aztec-labs/foundation/log").Logger;
|
|
54
|
+
constructor(store: AztecAsyncKVStore);
|
|
55
|
+
/**
|
|
56
|
+
* Records a fact in a collection.
|
|
57
|
+
*
|
|
58
|
+
* The collection is created implicitly on the first fact recorded for its key: recording into an existing collection
|
|
59
|
+
* just adds to it.
|
|
60
|
+
*
|
|
61
|
+
* If `originBlock === undefined`, the fact is non-retractable: it survives reorgs. A defined origin block makes the
|
|
62
|
+
* fact retractable: on a prune below its block, it will be deleted.
|
|
63
|
+
*
|
|
64
|
+
* Idempotent: re-recording an identical fact (same collection, fact type, payload, and origin block) is a no-op.
|
|
65
|
+
* The same payload tied to a different origin block is a distinct fact.
|
|
66
|
+
*/
|
|
67
|
+
recordFact(factCollectionKey: FactCollectionKey, factTypeId: Fr, payload: Fr[], originBlock: OriginBlock | undefined, changeSetId: ChangeSetId): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Deletes a fact collection: removes every fact under the (scope-qualified) collection key.
|
|
70
|
+
*
|
|
71
|
+
* Idempotent: deleting a collection that does not exist is a no-op.
|
|
72
|
+
*/
|
|
73
|
+
deleteFactCollection(factCollectionKey: FactCollectionKey, changeSetId: ChangeSetId): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Returns the fact collection for the (scope-qualified) key, or undefined if it has no facts.
|
|
76
|
+
*/
|
|
77
|
+
getFactCollection(factCollectionKey: FactCollectionKey, changeSetId: ChangeSetId): Promise<FactCollection | undefined>;
|
|
78
|
+
/**
|
|
79
|
+
* Returns every fact collection of the given type for the queried scope, each holding its facts.
|
|
80
|
+
*/
|
|
81
|
+
getFactCollectionsByType(factCollectionTypeKey: FactCollectionTypeKey, changeSetId: ChangeSetId): Promise<FactCollection[]>;
|
|
82
|
+
protected flushChangeSet(changeSet: FactStoreChangeSet, db: FactStoreDb): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Removes every retractable fact originating from blocks over height `toBlock`, across all scopes.
|
|
85
|
+
*
|
|
86
|
+
* Non-retractable facts are untouched.
|
|
87
|
+
*/
|
|
88
|
+
protected applyRollback(toBlock: BlockNum, db: FactStoreDb): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
/** A change set's staged data: the ops it has accumulated, replayed over committed state on read and on flush. */
|
|
91
|
+
type FactStoreChangeSet = StagedOp[];
|
|
92
|
+
type FactStoreDb = {
|
|
93
|
+
/** Primary index of fact records. */
|
|
94
|
+
facts: AztecAsyncMap<FactKeyStr, FactBuffer>;
|
|
95
|
+
/** Index for per-collection fact enumeration and by-type collection discovery. */
|
|
96
|
+
factsByCollection: AztecAsyncMultiMap<FactCollectionKeyStr, FactKeyStr>;
|
|
97
|
+
/** Index for delete-on-prune of retractable facts (those with an origin block). */
|
|
98
|
+
factsByBlock: AztecAsyncMultiMap<BlockNum, FactKeyStr>;
|
|
99
|
+
};
|
|
100
|
+
export {};
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdF9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvZmFjdF9zdG9yZS9mYWN0X3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxLQUFLLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxVQUFVLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFFdkUsS0FBSyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLEtBQUssVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUV6QixLQUFLLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUNuQyxLQUFLLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFFekIsa0RBQWtEO0FBQ2xELE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFBRSxHQUFHLEVBQUUsaUJBQWlCLENBQUM7SUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7Q0FBRSxDQUFDO0FBS3ZFLHdGQUF3RjtBQUN4RixLQUFLLFFBQVEsR0FBRztJQUFFLElBQUksRUFBRSxZQUFZLENBQUM7SUFBQyxJQUFJLEVBQUUsVUFBVSxDQUFBO0NBQUUsR0FBRztJQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQztJQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQTtDQUFFLENBQUM7QUFFcEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gscUJBQWEsU0FBVSxTQUFRLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQzs7SUFDOUUsTUFBTSw4Q0FBOEI7SUFFcEMsWUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBV25DO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxVQUFVLENBQ1IsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLFVBQVUsRUFBRSxFQUFFLEVBQ2QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUNiLFdBQVcsRUFBRSxXQUFXLEdBQUcsU0FBUyxFQUNwQyxXQUFXLEVBQUUsV0FBVyxHQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBT2Y7SUFFRDs7OztPQUlHO0lBQ0gsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWxHO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FDZixpQkFBaUIsRUFBRSxpQkFBaUIsRUFDcEMsV0FBVyxFQUFFLFdBQVcsR0FDdkIsT0FBTyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FhckM7SUFFRDs7T0FFRztJQUNILHdCQUF3QixDQUN0QixxQkFBcUIsRUFBRSxxQkFBcUIsRUFDNUMsV0FBVyxFQUFFLFdBQVcsR0FDdkIsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBUzNCO0lBRUQsVUFBZ0IsY0FBYyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FlNUY7SUFFRDs7OztPQUlHO0lBQ0gsVUFBZ0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSS9FO0NBK09GO0FBRUQsa0hBQWtIO0FBQ2xILEtBQUssa0JBQWtCLEdBQUcsUUFBUSxFQUFFLENBQUM7QUFFckMsS0FBSyxXQUFXLEdBQUc7SUFDakIscUNBQXFDO0lBQ3JDLEtBQUssRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRTdDLGtGQUFrRjtJQUNsRixpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUV4RSxtRkFBbUY7SUFDbkYsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUN4RCxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fact_store.d.ts","sourceRoot":"","sources":["../../../src/storage/fact_store/fact_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,KAAK,IAAI,EAAE,UAAU,EAAgB,MAAM,kBAAkB,CAAC;AAEvE,KAAK,QAAQ,GAAG,MAAM,CAAC;AACvB,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,KAAK,oBAAoB,GAAG,MAAM,CAAC;AACnC,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG;IAAE,GAAG,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC;AAKvE,wFAAwF;AACxF,KAAK,QAAQ,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEpH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,SAAU,SAAQ,gBAAgB,CAAC,kBAAkB,EAAE,WAAW,CAAC;;IAC9E,MAAM,8CAA8B;IAEpC,YAAY,KAAK,EAAE,iBAAiB,EAWnC;IAED;;;;;;;;;;;OAWG;IACH,UAAU,CACR,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,EAAE,EAAE,EACb,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf;IAED;;;;OAIG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlG;IAED;;OAEG;IACH,iBAAiB,CACf,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAarC;IAED;;OAEG;IACH,wBAAwB,CACtB,qBAAqB,EAAE,qBAAqB,EAC5C,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CAS3B;IAED,UAAgB,cAAc,CAAC,SAAS,EAAE,kBAAkB,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5F;IAED;;;;OAIG;IACH,UAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/E;CA+OF;AAED,kHAAkH;AAClH,KAAK,kBAAkB,GAAG,QAAQ,EAAE,CAAC;AAErC,KAAK,WAAW,GAAG;IACjB,qCAAqC;IACrC,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE7C,kFAAkF;IAClF,iBAAiB,EAAE,kBAAkB,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAExE,mFAAmF;IACnF,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;CACxD,CAAC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { allToCompletion } from '@aztec-labs/foundation/promise';
|
|
3
|
+
import { BaseStagingStore } from '../base_staging_store.js';
|
|
4
|
+
import { FactCollectionKey } from './fact_store_keys.js';
|
|
5
|
+
import { StoredFact, factKeyStrOf } from './stored_fact.js';
|
|
6
|
+
/**
|
|
7
|
+
* Stores immutable facts grouped into collections, isolated by contract and scope.
|
|
8
|
+
*
|
|
9
|
+
* A fact collection is a contract-defined bag of facts identified by a {@link FactCollectionKey} (contract, scope,
|
|
10
|
+
* collection type, and id). A fact is a contract-defined immutable, typed datum in a collection. Collections are
|
|
11
|
+
* implicit: one comes into being when its first fact is recorded and ceases to exist once it has no facts left.
|
|
12
|
+
*
|
|
13
|
+
* What makes this store different to, for example, the `CapsuleStore`, is that it is designed to support use cases
|
|
14
|
+
* where resilience to reorgs is needed, via what we call _retractability_.
|
|
15
|
+
*
|
|
16
|
+
* Facts can be retractable or non-retractable. They are retractable if they are associated to an origin block.
|
|
17
|
+
* Retractable facts are removed from the store when their origin block is pruned (typically due to a reorg).
|
|
18
|
+
* Non-retractable facts survive reorgs: they must then be explicitly deleted, so as not to keep consuming resources
|
|
19
|
+
* (storage and compute) indefinitely.
|
|
20
|
+
*
|
|
21
|
+
* Fact collections are isolated by scope.
|
|
22
|
+
*
|
|
23
|
+
* This store is designed to enable Aztec.nr to implement complex workflows such as offchain reception or partial note
|
|
24
|
+
* processing by storing structured data that is guaranteed to exist conditionally to specific blocks being included in
|
|
25
|
+
* the chain, while leaving the complexity of ensuring said guarantees to PXE.
|
|
26
|
+
*
|
|
27
|
+
* A key design driver is that PXE knows nothing about the actual fact contents: it just manages enough metadata to
|
|
28
|
+
* provide the guarantees mentioned above. That way, concepts such as offchain delivery or partial notes are completely
|
|
29
|
+
* defined by Aztec.nr, opening the door to further extension without the need for ad-hoc PXE support.
|
|
30
|
+
*
|
|
31
|
+
* As with most other PXE stores, writes are staged per change set ID and flushed atomically on commit.
|
|
32
|
+
*/ export class FactStore extends BaseStagingStore {
|
|
33
|
+
logger = createLogger('fact_store');
|
|
34
|
+
constructor(store){
|
|
35
|
+
super({
|
|
36
|
+
storeName: 'fact',
|
|
37
|
+
store,
|
|
38
|
+
buildChangeSet: ()=>[],
|
|
39
|
+
buildDb: (db)=>({
|
|
40
|
+
facts: db.openMap('facts'),
|
|
41
|
+
factsByCollection: db.openMultiMap('facts_by_collection'),
|
|
42
|
+
factsByBlock: db.openMultiMap('facts_by_block')
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Records a fact in a collection.
|
|
48
|
+
*
|
|
49
|
+
* The collection is created implicitly on the first fact recorded for its key: recording into an existing collection
|
|
50
|
+
* just adds to it.
|
|
51
|
+
*
|
|
52
|
+
* If `originBlock === undefined`, the fact is non-retractable: it survives reorgs. A defined origin block makes the
|
|
53
|
+
* fact retractable: on a prune below its block, it will be deleted.
|
|
54
|
+
*
|
|
55
|
+
* Idempotent: re-recording an identical fact (same collection, fact type, payload, and origin block) is a no-op.
|
|
56
|
+
* The same payload tied to a different origin block is a distinct fact.
|
|
57
|
+
*/ recordFact(factCollectionKey, factTypeId, payload, originBlock, changeSetId) {
|
|
58
|
+
return this.withChangeSet(changeSetId, (changeSet)=>{
|
|
59
|
+
changeSet.push({
|
|
60
|
+
kind: 'recordFact',
|
|
61
|
+
fact: new StoredFact(factCollectionKey, factTypeId, payload, originBlock)
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Deletes a fact collection: removes every fact under the (scope-qualified) collection key.
|
|
67
|
+
*
|
|
68
|
+
* Idempotent: deleting a collection that does not exist is a no-op.
|
|
69
|
+
*/ deleteFactCollection(factCollectionKey, changeSetId) {
|
|
70
|
+
return this.withChangeSet(changeSetId, (changeSet)=>{
|
|
71
|
+
changeSet.push({
|
|
72
|
+
kind: 'deleteFactCollection',
|
|
73
|
+
key: factCollectionKey
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns the fact collection for the (scope-qualified) key, or undefined if it has no facts.
|
|
79
|
+
*/ getFactCollection(factCollectionKey, changeSetId) {
|
|
80
|
+
return this.withChangeSetAndDb(changeSetId, async (changeSet, db)=>{
|
|
81
|
+
const collectionKey = factCollectionKey.toString();
|
|
82
|
+
const committedCollection = await this.#loadCommittedCollection(db, factCollectionKey);
|
|
83
|
+
const committed = new Map(committedCollection ? [
|
|
84
|
+
[
|
|
85
|
+
collectionKey,
|
|
86
|
+
committedCollection
|
|
87
|
+
]
|
|
88
|
+
] : []);
|
|
89
|
+
const collection = this.#foldStagedOps(committed, changeSet).get(collectionKey);
|
|
90
|
+
if (!collection) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const facts = [
|
|
94
|
+
...collection.facts.values()
|
|
95
|
+
];
|
|
96
|
+
return facts.length > 0 ? {
|
|
97
|
+
key: factCollectionKey,
|
|
98
|
+
facts
|
|
99
|
+
} : undefined;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns every fact collection of the given type for the queried scope, each holding its facts.
|
|
104
|
+
*/ getFactCollectionsByType(factCollectionTypeKey, changeSetId) {
|
|
105
|
+
return this.withChangeSetAndDb(changeSetId, async (changeSet, db)=>{
|
|
106
|
+
const typeKey = factCollectionTypeKey.toString();
|
|
107
|
+
const committed = await this.#readCollectionsFromDbByType(db, typeKey);
|
|
108
|
+
return Array.from(this.#foldStagedOps(committed, changeSet, typeKey).values()).map((collection)=>({
|
|
109
|
+
key: collection.key,
|
|
110
|
+
facts: [
|
|
111
|
+
...collection.facts.values()
|
|
112
|
+
]
|
|
113
|
+
})).filter((collection)=>collection.facts.length > 0);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async flushChangeSet(changeSet, db) {
|
|
117
|
+
for (const op of changeSet){
|
|
118
|
+
switch(op.kind){
|
|
119
|
+
case 'recordFact':
|
|
120
|
+
await this.#commitFact(db, op.fact);
|
|
121
|
+
break;
|
|
122
|
+
case 'deleteFactCollection':
|
|
123
|
+
await this.#deleteCollection(db, op.key.toString());
|
|
124
|
+
break;
|
|
125
|
+
default:
|
|
126
|
+
{
|
|
127
|
+
const _exhaustive = op;
|
|
128
|
+
throw new Error(`Unhandled FactStore staged op kind: ${JSON.stringify(_exhaustive)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Removes every retractable fact originating from blocks over height `toBlock`, across all scopes.
|
|
135
|
+
*
|
|
136
|
+
* Non-retractable facts are untouched.
|
|
137
|
+
*/ async applyRollback(toBlock, db) {
|
|
138
|
+
const removedFacts = await this.#retractFacts(db, toBlock);
|
|
139
|
+
this.logger.verbose('rolled back fact store', {
|
|
140
|
+
removedFacts,
|
|
141
|
+
toBlock
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Deletes retractable facts originating above `toBlock`, returning the number of by-block entries scanned.
|
|
146
|
+
* Retraction is scope-agnostic: a reorg invalidates a fact regardless of which scope's collection it belongs to.
|
|
147
|
+
*
|
|
148
|
+
* Requires to be run in a transactionAsync context.
|
|
149
|
+
*/ async #retractFacts(db, toBlock) {
|
|
150
|
+
// Snapshot the orphaned fact keys before mutating so we never delete from the cursor we are iterating, kicking off
|
|
151
|
+
// each fact-body read during the scan so a DB request stays pending across the cursor-to-delete boundary (a drained
|
|
152
|
+
// cursor with no read in flight would let the transaction auto-commit before the deletes).
|
|
153
|
+
const factReads = new Map();
|
|
154
|
+
for await (const [, factKey] of db.factsByBlock.entriesAsync({
|
|
155
|
+
start: toBlock + 1
|
|
156
|
+
})){
|
|
157
|
+
factReads.set(factKey, db.facts.getAsync(factKey));
|
|
158
|
+
}
|
|
159
|
+
await allToCompletion(Array.from(factReads, async ([factKey, read])=>{
|
|
160
|
+
const buf = await read;
|
|
161
|
+
if (!buf) {
|
|
162
|
+
// The by-block index just yielded this factKey, so a missing primary record means the indexes are out of
|
|
163
|
+
// sync. Log as this should be unreachable unless there is a bug.
|
|
164
|
+
this.logger.warn('Skipping retraction of a fact missing from the primary store: by-block index is stale', {
|
|
165
|
+
factKey
|
|
166
|
+
});
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
await this.#deleteFact(db, factKey, StoredFact.fromBuffer(buf));
|
|
170
|
+
}));
|
|
171
|
+
return factReads.size;
|
|
172
|
+
}
|
|
173
|
+
async #readCollectionsFromDbByType(db, typeKey) {
|
|
174
|
+
const factReadsByCollection = new Map();
|
|
175
|
+
for await (const [collectionKey, factKey] of db.factsByCollection.entriesAsync({
|
|
176
|
+
start: `${typeKey}:`,
|
|
177
|
+
end: `${typeKey};`
|
|
178
|
+
})){
|
|
179
|
+
let reads = factReadsByCollection.get(collectionKey);
|
|
180
|
+
if (!reads) {
|
|
181
|
+
reads = new Map();
|
|
182
|
+
factReadsByCollection.set(collectionKey, reads);
|
|
183
|
+
}
|
|
184
|
+
reads.set(factKey, db.facts.getAsync(factKey));
|
|
185
|
+
}
|
|
186
|
+
const result = new Map();
|
|
187
|
+
for (const [collectionKey, reads] of factReadsByCollection){
|
|
188
|
+
const collection = await this.#assembleCollection(FactCollectionKey.fromString(collectionKey), reads);
|
|
189
|
+
result.set(collectionKey, collection);
|
|
190
|
+
}
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
async #loadCommittedCollection(db, collectionKey) {
|
|
194
|
+
// Kick off each fact read while iterating the index so a DB request is always pending. Draining the cursor and only
|
|
195
|
+
// then reading the facts one `await` at a time would let the IndexedDB transaction auto-commit at the boundary
|
|
196
|
+
// (IndexedDB auto-commits once control returns to the event loop with no pending request), throwing mid-read on the
|
|
197
|
+
// browser backend.
|
|
198
|
+
const factReads = new Map();
|
|
199
|
+
for await (const factKey of db.factsByCollection.getValuesAsync(collectionKey.toString())){
|
|
200
|
+
factReads.set(factKey, db.facts.getAsync(factKey));
|
|
201
|
+
}
|
|
202
|
+
if (factReads.size === 0) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
return this.#assembleCollection(collectionKey, factReads);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Assemble a collection's facts from a set of in-flight DB reads.
|
|
209
|
+
*/ async #assembleCollection(collectionKey, reads) {
|
|
210
|
+
const factKeys = [
|
|
211
|
+
...reads.keys()
|
|
212
|
+
];
|
|
213
|
+
const bufs = await allToCompletion([
|
|
214
|
+
...reads.values()
|
|
215
|
+
]);
|
|
216
|
+
// Await-free tail: deserialize. No DB ops from here on.
|
|
217
|
+
const facts = new Map();
|
|
218
|
+
for(let i = 0; i < factKeys.length; i++){
|
|
219
|
+
const factKey = factKeys[i];
|
|
220
|
+
const buf = bufs[i];
|
|
221
|
+
if (!buf) {
|
|
222
|
+
// Defensive: a #factsByCollection entry must always reference a live #facts entry. A missing one means the
|
|
223
|
+
// indexes are corrupt.
|
|
224
|
+
throw new Error(`Fact not found for factKey ${factKey}`);
|
|
225
|
+
}
|
|
226
|
+
const stored = StoredFact.fromBuffer(buf);
|
|
227
|
+
if (stored.factCollectionKey.toString() !== collectionKey.toString()) {
|
|
228
|
+
// Defensive: every read fact must belong to the collection being assembled. A mismatch means the indexes are
|
|
229
|
+
// corrupt.
|
|
230
|
+
throw new Error(`Fact ${factKey} does not belong to collection ${collectionKey}`);
|
|
231
|
+
}
|
|
232
|
+
facts.set(factKey, stored.toFact());
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
key: collectionKey,
|
|
236
|
+
facts
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Assembles the current view of a collection of collections together with their facts, combining the committed with
|
|
241
|
+
* staged data.
|
|
242
|
+
*
|
|
243
|
+
* When `typeKey` is given, staged records of other types are ignored, so the result holds only that type.
|
|
244
|
+
*/ #foldStagedOps(committed, changeSet, typeKey) {
|
|
245
|
+
const result = new Map();
|
|
246
|
+
// Copy to avoid mutating the contents of `committed`.
|
|
247
|
+
for (const [collectionKey, { key, facts }] of committed){
|
|
248
|
+
result.set(collectionKey, {
|
|
249
|
+
key,
|
|
250
|
+
facts: new Map(facts)
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
for (const op of changeSet){
|
|
254
|
+
switch(op.kind){
|
|
255
|
+
case 'recordFact':
|
|
256
|
+
this.#foldRecordFact(result, op, typeKey);
|
|
257
|
+
break;
|
|
258
|
+
case 'deleteFactCollection':
|
|
259
|
+
this.#foldDeleteFactCollection(result, op);
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
{
|
|
263
|
+
const _exhaustive = op;
|
|
264
|
+
throw new Error(`Unhandled FactStore staged op kind: ${JSON.stringify(_exhaustive)}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return result;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Folds a staged `recordFact` op into view.
|
|
272
|
+
*
|
|
273
|
+
* When `typeKey` is given, an op of another type is ignored, keeping the view limited to that type.
|
|
274
|
+
*/ #foldRecordFact(result, op, typeKey) {
|
|
275
|
+
const key = op.fact.factCollectionKey;
|
|
276
|
+
// Type filter doesn't match, nothing to do with this fact
|
|
277
|
+
if (typeKey !== undefined && key.factCollectionTypeKey().toString() !== typeKey) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const collectionKey = key.toString();
|
|
281
|
+
let collection = result.get(collectionKey);
|
|
282
|
+
// Collection didn't exist before this point, the created fact brings it into existence
|
|
283
|
+
if (!collection) {
|
|
284
|
+
collection = {
|
|
285
|
+
key,
|
|
286
|
+
facts: new Map()
|
|
287
|
+
};
|
|
288
|
+
result.set(collectionKey, collection);
|
|
289
|
+
}
|
|
290
|
+
const fKey = factKeyStrOf(op.fact);
|
|
291
|
+
if (!collection.facts.has(fKey)) {
|
|
292
|
+
collection.facts.set(fKey, op.fact.toFact());
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Folds a staged `deleteFactCollection` op into the view: the scope-qualified collection is removed outright.
|
|
297
|
+
*/ #foldDeleteFactCollection(result, op) {
|
|
298
|
+
result.delete(op.key.toString());
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Writes a fact to persistent storage. Idempotent: an identical fact (same scope-qualified key) is left untouched.
|
|
302
|
+
*/ async #commitFact(db, fact) {
|
|
303
|
+
const factKey = factKeyStrOf(fact);
|
|
304
|
+
if (await db.facts.hasAsync(factKey)) {
|
|
305
|
+
this.logger.debug(`Ignoring already recorded fact`, {
|
|
306
|
+
factKey
|
|
307
|
+
});
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
await db.facts.set(factKey, fact.toBuffer());
|
|
311
|
+
await db.factsByCollection.set(fact.factCollectionKey.toString(), factKey);
|
|
312
|
+
if (fact.originBlock !== undefined) {
|
|
313
|
+
await db.factsByBlock.set(fact.originBlock.blockNumber, factKey);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Deletes every fact under the (scope-qualified) collection key.
|
|
318
|
+
*
|
|
319
|
+
* Caller must wrap in a transaction.
|
|
320
|
+
*/ async #deleteCollection(db, collectionKey) {
|
|
321
|
+
// Snapshot the fact index before mutating so we never delete from the cursor we are iterating, kicking off each
|
|
322
|
+
// fact-body read during the scan so a DB request stays pending across the cursor-to-mutation boundary (a drained
|
|
323
|
+
// cursor with no read in flight would let the transaction auto-commit before the deletes).
|
|
324
|
+
const factReads = new Map();
|
|
325
|
+
for await (const factKey of db.factsByCollection.getValuesAsync(collectionKey)){
|
|
326
|
+
factReads.set(factKey, db.facts.getAsync(factKey));
|
|
327
|
+
}
|
|
328
|
+
await allToCompletion(Array.from(factReads, async ([factKey, read])=>{
|
|
329
|
+
const buf = await read;
|
|
330
|
+
if (!buf) {
|
|
331
|
+
// A #factsByCollection entry must always reference a live #facts entry, a missing one means the indexes are
|
|
332
|
+
// corrupt.
|
|
333
|
+
throw new Error(`Fact not found for factKey ${factKey}`);
|
|
334
|
+
}
|
|
335
|
+
await this.#deleteFact(db, factKey, StoredFact.fromBuffer(buf));
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Deletes a fact from the primary store and all its indexes (`factsByCollection`, plus `factsByBlock` if
|
|
340
|
+
* retractable).
|
|
341
|
+
*
|
|
342
|
+
* Caller must wrap in a transaction.
|
|
343
|
+
*/ async #deleteFact(db, factKey, fact) {
|
|
344
|
+
await db.facts.delete(factKey);
|
|
345
|
+
await db.factsByCollection.deleteValue(fact.factCollectionKey.toString(), factKey);
|
|
346
|
+
if (fact.originBlock !== undefined) {
|
|
347
|
+
await db.factsByBlock.deleteValue(fact.originBlock.blockNumber, factKey);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|