@aztec/pxe 0.0.1-commit.f504929 → 0.0.1-commit.f5a9928
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +41 -112
- package/dest/bin/index.d.ts +2 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +1 -0
- package/dest/bin/oracle_version_helpers.d.ts +34 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +46 -0
- package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
- package/dest/block_synchronizer/block_stream_source.js +37 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +22 -16
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +71 -28
- package/dest/config/index.d.ts +9 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +14 -15
- package/dest/config/package_info.js +1 -1
- 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 +48 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/contract/contract_sync_service.js +119 -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 +30 -25
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +114 -66
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -10
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +10 -29
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
- package/dest/contract_function_simulator/index.d.ts +26 -5
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +11 -3
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -10
- package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
- package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +12 -24
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -63
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +8 -12
- package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +67 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
- package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
- package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/index.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -98
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +139 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +274 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1243 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +7 -6
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +56 -71
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +200 -99
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +183 -76
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +662 -156
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
- package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/transient_array_service.js +62 -0
- package/dest/contract_logging.d.ts +9 -4
- package/dest/contract_logging.d.ts.map +1 -1
- package/dest/contract_logging.js +21 -6
- package/dest/debug/pxe_debug_utils.d.ts +4 -9
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +0 -6
- package/dest/entrypoints/client/bundle/index.d.ts +2 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -8
- package/dest/entrypoints/client/lazy/index.d.ts +2 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +21 -8
- 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 +16 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +7 -4
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +5 -3
- package/dest/entrypoints/server/store.d.ts +18 -0
- package/dest/entrypoints/server/store.d.ts.map +1 -0
- package/dest/entrypoints/server/store.js +28 -0
- package/dest/entrypoints/server/utils.d.ts +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +22 -8
- package/dest/error_enriching.d.ts +5 -3
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +15 -12
- package/dest/events/event_service.d.ts +21 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +51 -17
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/hooks/authorize_utility_call.d.ts +41 -0
- package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
- package/dest/hooks/authorize_utility_call.js +4 -0
- package/dest/hooks/execution_hooks.d.ts +62 -0
- package/dest/hooks/execution_hooks.d.ts.map +1 -0
- package/dest/hooks/execution_hooks.js +9 -0
- package/dest/hooks/index.d.ts +5 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +2 -0
- package/dest/hooks/resolve_custom_request.d.ts +23 -0
- package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
- package/dest/hooks/resolve_custom_request.js +3 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
- package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
- package/dest/logs/log_service.d.ts +21 -11
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +181 -82
- 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 +20 -0
- package/dest/node/benchmarked_node.d.ts.map +1 -0
- package/dest/node/benchmarked_node.js +94 -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/note_service.d.ts +34 -7
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +82 -57
- package/dest/notes_filter.d.ts +2 -3
- package/dest/notes_filter.d.ts.map +1 -1
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/batch_planner.d.ts +47 -0
- package/dest/private_kernel/batch_planner.d.ts.map +1 -0
- package/dest/private_kernel/batch_planner.js +104 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +10 -5
- package/dest/private_kernel/hints/test_utils.d.ts +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
- package/dest/private_kernel/hints/test_utils.js +3 -4
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +160 -85
- package/dest/private_kernel/private_kernel_oracle.d.ts +12 -10
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +40 -26
- package/dest/pxe.d.ts +169 -54
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +378 -213
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +2 -1
- 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 +9 -6
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +47 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +37 -29
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +27 -24
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +72 -99
- package/dest/storage/contract_store/private_functions_tree.d.ts +1 -1
- package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -1
- package/dest/storage/contract_store/private_functions_tree.js +2 -1
- package/dest/storage/fact_store/fact_service.d.ts +22 -0
- package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_service.js +45 -0
- package/dest/storage/fact_store/fact_store.d.ts +95 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +411 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store_keys.js +50 -0
- package/dest/storage/fact_store/index.d.ts +6 -0
- package/dest/storage/fact_store/index.d.ts.map +1 -0
- package/dest/storage/fact_store/index.js +4 -0
- package/dest/storage/fact_store/origin_state.d.ts +59 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +60 -0
- package/dest/storage/fact_store/stored_fact.d.ts +32 -0
- package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
- package/dest/storage/fact_store/stored_fact.js +64 -0
- package/dest/storage/index.d.ts +3 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -1
- package/dest/storage/metadata.d.ts +2 -2
- package/dest/storage/metadata.d.ts.map +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +42 -33
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +202 -172
- package/dest/storage/note_store/stored_note.d.ts +3 -8
- package/dest/storage/note_store/stored_note.d.ts.map +1 -1
- package/dest/storage/note_store/stored_note.js +4 -20
- 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 +13 -16
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +48 -45
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/store_identity.d.ts +35 -0
- package/dest/storage/store_identity.d.ts.map +1 -0
- package/dest/storage/store_identity.js +44 -0
- package/dest/storage/tagging_store/index.d.ts +2 -2
- package/dest/storage/tagging_store/index.d.ts.map +1 -1
- package/dest/storage/tagging_store/index.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +63 -31
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +210 -129
- 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 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +38 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts +55 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +55 -36
- package/dest/tagging/index.d.ts +8 -7
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +6 -5
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +74 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +235 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +8 -6
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +25 -19
- 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 +17 -6
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +46 -31
- 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/package.json +20 -17
- package/src/bin/check_oracle_version.ts +46 -135
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +54 -0
- package/src/block_synchronizer/block_stream_source.ts +42 -0
- package/src/block_synchronizer/block_synchronizer.ts +86 -40
- package/src/config/index.ts +16 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract/contract_class_service.ts +45 -0
- package/src/contract/contract_sync_service.ts +179 -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 +178 -82
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +10 -30
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +89 -4
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
- package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
- package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
- package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
- package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -11
- package/src/contract_function_simulator/noir-structs/option.ts +75 -0
- package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
- package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
- package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
- package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
- package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
- package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
- package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
- package/src/contract_function_simulator/oracle/index.ts +1 -15
- package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
- package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle_registry.ts +710 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1052 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +249 -132
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +978 -249
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/transient_array_service.ts +91 -0
- package/src/contract_logging.ts +18 -5
- package/src/debug/pxe_debug_utils.ts +4 -12
- package/src/entrypoints/client/bundle/index.ts +1 -1
- package/src/entrypoints/client/bundle/utils.ts +26 -8
- package/src/entrypoints/client/lazy/index.ts +1 -1
- package/src/entrypoints/client/lazy/utils.ts +26 -8
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +21 -1
- package/src/entrypoints/server/index.ts +7 -3
- package/src/entrypoints/server/store.ts +47 -0
- package/src/entrypoints/server/utils.ts +39 -14
- package/src/error_enriching.ts +30 -13
- package/src/events/event_service.ts +85 -26
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/hooks/authorize_utility_call.ts +44 -0
- package/src/hooks/execution_hooks.ts +68 -0
- package/src/hooks/index.ts +13 -0
- package/src/hooks/resolve_custom_request.ts +24 -0
- package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
- package/src/logs/log_service.ts +228 -147
- package/src/messages/tx_resolver_service.ts +81 -0
- package/src/node/benchmarked_node.ts +140 -0
- package/src/node/caching_aztec_node.ts +407 -0
- package/src/notes/note_service.ts +127 -86
- package/src/notes_filter.ts +1 -3
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +169 -0
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +15 -4
- package/src/private_kernel/hints/test_utils.ts +3 -10
- package/src/private_kernel/private_kernel_execution_prover.ts +246 -117
- package/src/private_kernel/private_kernel_oracle.ts +58 -29
- package/src/pxe.ts +595 -245
- package/src/storage/address_store/address_store.ts +2 -1
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +85 -0
- package/src/storage/capsule_store/capsule_store.ts +45 -27
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +98 -125
- package/src/storage/contract_store/private_functions_tree.ts +2 -1
- package/src/storage/fact_store/fact_service.ts +69 -0
- package/src/storage/fact_store/fact_store.ts +488 -0
- package/src/storage/fact_store/fact_store_keys.ts +75 -0
- package/src/storage/fact_store/index.ts +15 -0
- package/src/storage/fact_store/origin_state.ts +84 -0
- package/src/storage/fact_store/stored_fact.ts +80 -0
- package/src/storage/index.ts +2 -1
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +233 -194
- package/src/storage/note_store/stored_note.ts +5 -27
- package/src/storage/open_pxe_stores.ts +52 -0
- package/src/storage/private_event_store/private_event_store.ts +55 -56
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/store_identity.ts +72 -0
- package/src/storage/tagging_store/index.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
- package/src/storage/tagging_store/sender_tagging_store.ts +278 -158
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +42 -10
- package/src/tagging/get_all_logs_by_tags.ts +115 -50
- package/src/tagging/index.ts +12 -6
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +356 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +32 -22
- 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 +55 -39
- 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/dest/access_scopes.d.ts +0 -9
- package/dest/access_scopes.d.ts.map +0 -1
- package/dest/access_scopes.js +0 -6
- package/dest/contract_function_simulator/benchmarked_node.d.ts +0 -9
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/benchmarked_node.js +0 -77
- package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/oracle.js +0 -411
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
- package/dest/contract_sync/contract_sync_service.d.ts +0 -43
- package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
- package/dest/contract_sync/contract_sync_service.js +0 -97
- package/dest/contract_sync/helpers.d.ts +0 -29
- package/dest/contract_sync/helpers.d.ts.map +0 -1
- package/dest/contract_sync/helpers.js +0 -55
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +0 -11
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +0 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +0 -29
- package/src/access_scopes.ts +0 -9
- package/src/contract_function_simulator/benchmarked_node.ts +0 -103
- package/src/contract_function_simulator/oracle/oracle.ts +0 -665
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
- package/src/contract_sync/contract_sync_service.ts +0 -152
- package/src/contract_sync/helpers.ts +0 -98
- package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +0 -36
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import type { BlockHash } from '@aztec/stdlib/block';
|
|
4
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
5
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
6
|
+
/** Resolves transaction hashes into their on-chain context (note hashes, nullifiers, and mined position). */
|
|
7
|
+
export declare class TxResolverService {
|
|
8
|
+
private readonly aztecNode;
|
|
9
|
+
constructor(aztecNode: AztecNode);
|
|
10
|
+
/**
|
|
11
|
+
* Resolves a list of tx hashes into their on-chain context.
|
|
12
|
+
*
|
|
13
|
+
* For each tx hash, looks up the corresponding tx effect and extracts its note hashes and nullifiers, and the
|
|
14
|
+
* position it was mined at. Returns `null` for tx hashes that are zero, not yet available, or in blocks beyond the
|
|
15
|
+
* anchor block.
|
|
16
|
+
*/
|
|
17
|
+
resolveTxs(txHashes: Fr[], anchorBlockNumber: number): Promise<(TxOnchainContext | null)[]>;
|
|
18
|
+
}
|
|
19
|
+
/** The onchain context of a tx: the position it was mined at, and the effects it produced. */
|
|
20
|
+
export type TxOnchainContext = {
|
|
21
|
+
txHash: TxHash;
|
|
22
|
+
noteHashes: Fr[];
|
|
23
|
+
nullifiers: Fr[];
|
|
24
|
+
blockNumber: BlockNumber;
|
|
25
|
+
blockHash: BlockHash;
|
|
26
|
+
txIndexInBlock: number;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcmVzb2x2ZXJfc2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2VzL3R4X3Jlc29sdmVyX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBd0IsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEUsNkdBQTZHO0FBQzdHLHFCQUFhLGlCQUFpQjtJQUNoQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFBdEMsWUFBNkIsU0FBUyxFQUFFLFNBQVMsRUFBSTtJQUVyRDs7Ozs7O09BTUc7SUFDRyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBa0RoRztDQUNGO0FBRUQsOEZBQThGO0FBQzlGLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRztJQUM3QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pCLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqQixXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckIsY0FBYyxFQUFFLE1BQU0sQ0FBQztDQUN4QixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_resolver_service.d.ts","sourceRoot":"","sources":["../../src/messages/tx_resolver_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAwB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEhE,6GAA6G;AAC7G,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,EAAE,SAAS,EAAI;IAErD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAkDhG;CACF;AAED,8FAA8F;AAC9F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,EAAE,EAAE,CAAC;IACjB,UAAU,EAAE,EAAE,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { uniqueBy } from '@aztec/foundation/collection';
|
|
2
|
+
import { allToCompletion } from '@aztec/foundation/promise';
|
|
3
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
4
|
+
/** Resolves transaction hashes into their on-chain context (note hashes, nullifiers, and mined position). */ export class TxResolverService {
|
|
5
|
+
aztecNode;
|
|
6
|
+
constructor(aztecNode){
|
|
7
|
+
this.aztecNode = aztecNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolves a list of tx hashes into their on-chain context.
|
|
11
|
+
*
|
|
12
|
+
* For each tx hash, looks up the corresponding tx effect and extracts its note hashes and nullifiers, and the
|
|
13
|
+
* position it was mined at. Returns `null` for tx hashes that are zero, not yet available, or in blocks beyond the
|
|
14
|
+
* anchor block.
|
|
15
|
+
*/ async resolveTxs(txHashes, anchorBlockNumber) {
|
|
16
|
+
const nonZeroTxHashes = txHashes.filter((h)=>!h.isZero()).map((h)=>TxHash.fromField(h));
|
|
17
|
+
const uniqueTxHashes = uniqueBy(nonZeroTxHashes, (h)=>h.toString());
|
|
18
|
+
const fetched = await allToCompletion(uniqueTxHashes.map((h)=>this.aztecNode.getTxReceipt(h, {
|
|
19
|
+
includeTxEffect: true
|
|
20
|
+
})));
|
|
21
|
+
const txEffects = new Map(uniqueTxHashes.map((h, i)=>{
|
|
22
|
+
const receipt = fetched[i];
|
|
23
|
+
if (!receipt.isMined() || !receipt.txEffect) {
|
|
24
|
+
return [
|
|
25
|
+
h.toString(),
|
|
26
|
+
undefined
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
return [
|
|
30
|
+
h.toString(),
|
|
31
|
+
{
|
|
32
|
+
data: receipt.txEffect,
|
|
33
|
+
l2BlockNumber: receipt.blockNumber,
|
|
34
|
+
l2BlockHash: receipt.blockHash,
|
|
35
|
+
txIndexInBlock: receipt.txIndexInBlock,
|
|
36
|
+
slotNumber: receipt.slotNumber
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
}).filter((entry)=>entry[1] !== undefined));
|
|
40
|
+
return txHashes.map((txHashField)=>{
|
|
41
|
+
const txHash = TxHash.fromField(txHashField);
|
|
42
|
+
const txEffect = txEffects.get(txHash.toString());
|
|
43
|
+
if (!txEffect || txEffect.l2BlockNumber > anchorBlockNumber) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
// Every tx has at least one nullifier (the first nullifier derived from the tx hash). Hitting this condition
|
|
47
|
+
// would mean a buggy node, but since consumers rely on nullifiers[0], the defensive check does no harm.
|
|
48
|
+
const data = txEffect.data;
|
|
49
|
+
if (data.nullifiers.length === 0) {
|
|
50
|
+
throw new Error(`Tx effect for ${txHash} has no nullifiers`);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
txHash: data.txHash,
|
|
54
|
+
noteHashes: data.noteHashes,
|
|
55
|
+
nullifiers: data.nullifiers,
|
|
56
|
+
blockNumber: txEffect.l2BlockNumber,
|
|
57
|
+
blockHash: txEffect.l2BlockHash,
|
|
58
|
+
txIndexInBlock: txEffect.txIndexInBlock
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
2
|
+
import type { NodeStats } from '@aztec/stdlib/tx';
|
|
3
|
+
export interface Recording {
|
|
4
|
+
/** Closes the recording and returns what it saw. Reads served after this are not recorded. */
|
|
5
|
+
stop(): NodeStats;
|
|
6
|
+
}
|
|
7
|
+
/** An {@link AztecNode} wrapper that can report the reads it serves. */
|
|
8
|
+
export interface BenchmarkedAztecNode extends AztecNode {
|
|
9
|
+
/**
|
|
10
|
+
* Opens a recording of the reads this wrapper serves, until {@link Recording.stop}. Recordings are independent, so
|
|
11
|
+
* several may run at once: one measuring a whole run sees the same reads as one measuring a single operation.
|
|
12
|
+
*
|
|
13
|
+
* Nothing is measured while none is open, which is what keeps a long-lived wrapper from accumulating a run's worth
|
|
14
|
+
* of timings nobody asked for.
|
|
15
|
+
*/
|
|
16
|
+
startRecording(): Recording;
|
|
17
|
+
}
|
|
18
|
+
/** Wraps `node` so that the reads it answers can be recorded. */
|
|
19
|
+
export declare function withRecording(node: AztecNode): BenchmarkedAztecNode;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrZWRfbm9kZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vZGUvYmVuY2htYXJrZWRfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCbEQsTUFBTSxXQUFXLFNBQVM7SUFDeEIsOEZBQThGO0lBQzlGLElBQUksSUFBSSxTQUFTLENBQUM7Q0FDbkI7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxXQUFXLG9CQUFxQixTQUFRLFNBQVM7SUFDckQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxJQUFJLFNBQVMsQ0FBQztDQUM3QjtBQUVELGlFQUFpRTtBQUNqRSx3QkFBZ0IsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEdBQUcsb0JBQW9CLENBNEZuRSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarked_node.d.ts","sourceRoot":"","sources":["../../src/node/benchmarked_node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAiBlD,MAAM,WAAW,SAAS;IACxB,8FAA8F;IAC9F,IAAI,IAAI,SAAS,CAAC;CACnB;AAED,wEAAwE;AACxE,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD;;;;;;OAMG;IACH,cAAc,IAAI,SAAS,CAAC;CAC7B;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,oBAAoB,CA4FnE"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
2
|
+
/** Wraps `node` so that the reads it answers can be recorded. */ export function withRecording(node) {
|
|
3
|
+
// The stats of every recording currently open
|
|
4
|
+
const open = new Set();
|
|
5
|
+
// Round trip tracking
|
|
6
|
+
let inFlightCount = 0;
|
|
7
|
+
let currentRoundTripTimer = null;
|
|
8
|
+
let currentRoundTripMethods = [];
|
|
9
|
+
return new Proxy(node, {
|
|
10
|
+
get (target, prop) {
|
|
11
|
+
if (prop === 'startRecording') {
|
|
12
|
+
return ()=>{
|
|
13
|
+
const stats = {
|
|
14
|
+
perMethod: {},
|
|
15
|
+
roundTrips: {
|
|
16
|
+
roundTrips: 0,
|
|
17
|
+
totalBlockingTime: 0,
|
|
18
|
+
roundTripDurations: [],
|
|
19
|
+
roundTripMethods: []
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
open.add(stats);
|
|
23
|
+
return {
|
|
24
|
+
stop: ()=>{
|
|
25
|
+
open.delete(stats);
|
|
26
|
+
return stats;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const value = Reflect.get(target, prop);
|
|
32
|
+
if (typeof value !== 'function' || typeof prop !== 'string') {
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
return (...args)=>{
|
|
36
|
+
// With no recording open there is nobody to report to, so the read is left untimed.
|
|
37
|
+
if (open.size === 0) {
|
|
38
|
+
return value.apply(target, args);
|
|
39
|
+
}
|
|
40
|
+
// Start of a new round trip batch?
|
|
41
|
+
if (inFlightCount === 0) {
|
|
42
|
+
currentRoundTripTimer = new Timer();
|
|
43
|
+
currentRoundTripMethods = [];
|
|
44
|
+
}
|
|
45
|
+
inFlightCount++;
|
|
46
|
+
currentRoundTripMethods.push(prop);
|
|
47
|
+
const callTimer = new Timer();
|
|
48
|
+
const result = value.apply(target, args);
|
|
49
|
+
// Handle completion - called when the call finishes (after Promise resolves)
|
|
50
|
+
const handleCompletion = ()=>{
|
|
51
|
+
const callTime = callTimer.ms();
|
|
52
|
+
for (const stats of open){
|
|
53
|
+
timesFor(stats, prop).push(callTime);
|
|
54
|
+
}
|
|
55
|
+
inFlightCount--;
|
|
56
|
+
// End of round trip batch - all concurrent calls completed
|
|
57
|
+
if (inFlightCount === 0 && currentRoundTripTimer) {
|
|
58
|
+
const roundTripTime = currentRoundTripTimer.ms();
|
|
59
|
+
for (const { roundTrips } of open){
|
|
60
|
+
roundTrips.roundTrips++;
|
|
61
|
+
roundTrips.totalBlockingTime += roundTripTime;
|
|
62
|
+
roundTrips.roundTripDurations.push(roundTripTime);
|
|
63
|
+
roundTrips.roundTripMethods.push(currentRoundTripMethods);
|
|
64
|
+
}
|
|
65
|
+
currentRoundTripTimer = null;
|
|
66
|
+
currentRoundTripMethods = [];
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
// If the result is a Promise, chain the completion handler
|
|
70
|
+
if (isThenable(result)) {
|
|
71
|
+
return result.then((resolved)=>{
|
|
72
|
+
handleCompletion();
|
|
73
|
+
return resolved;
|
|
74
|
+
}, (error)=>{
|
|
75
|
+
handleCompletion();
|
|
76
|
+
throw error;
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
// Synchronous method - handle completion immediately
|
|
80
|
+
handleCompletion();
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/** The times `stats` holds for `method`, added on first use. */ function timesFor(stats, method) {
|
|
88
|
+
return (stats.perMethod[method] ??= {
|
|
89
|
+
times: []
|
|
90
|
+
}).times;
|
|
91
|
+
}
|
|
92
|
+
/** Whether completion can be chained onto `value` with `.then`, which a promise from any implementation allows. */ function isThenable(value) {
|
|
93
|
+
return typeof value === 'object' && value !== null && 'then' in value && typeof value.then === 'function';
|
|
94
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
2
|
+
import { type BenchmarkedAztecNode } from './benchmarked_node.js';
|
|
3
|
+
/**
|
|
4
|
+
* An {@link AztecNode} wrapper that serves repeated reads from a cache it owns.
|
|
5
|
+
*/
|
|
6
|
+
export interface CachingAztecNode extends BenchmarkedAztecNode {
|
|
7
|
+
/** Clears the read cache. The owner calls this periodically to bound memory. Cached entries never go stale. */
|
|
8
|
+
wipeCache(): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Wraps `node`, serving repeated reads from a cache the wrapper owns. Consumers share cached reads by sharing the
|
|
12
|
+
* wrapper.
|
|
13
|
+
*
|
|
14
|
+
* Only hash-pinned reads are cached. A block hash names immutable content, so the same call can never correctly answer
|
|
15
|
+
* differently, and even an `undefined` witness or leaf index is kept as a non-membership fact. That makes the wrapper
|
|
16
|
+
* safe for any consumer, whatever its anchor block. Uncached methods, and reads that name a block any other way (see
|
|
17
|
+
* {@link hashReferenceOf}), pass straight through. A few entries below opt out even when hash-pinned, where the answer
|
|
18
|
+
* can still change, and the tag queries opt in only once the request also stops short of blocks yet to be produced
|
|
19
|
+
* (see {@link hasImmutableAnswer}).
|
|
20
|
+
*
|
|
21
|
+
* Wiping (see {@link CachingAztecNode.wipeCache}) bounds memory. Correctness does not depend on it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withCache(node: AztecNode): CachingAztecNode;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZ19henRlY19ub2RlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9jYWNoaW5nX2F6dGVjX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFZakUsT0FBTyxFQUFFLEtBQUssb0JBQW9CLEVBQWlCLE1BQU0sdUJBQXVCLENBQUM7QUFFakY7O0dBRUc7QUFDSCxNQUFNLFdBQVcsZ0JBQWlCLFNBQVEsb0JBQW9CO0lBQzVELCtHQUErRztJQUMvRyxTQUFTLElBQUksSUFBSSxDQUFDO0NBQ25CO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsd0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxHQUFHLGdCQUFnQixDQXdKM0QifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caching_aztec_node.d.ts","sourceRoot":"","sources":["../../src/node/caching_aztec_node.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAYjE,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,uBAAuB,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D,+GAA+G;IAC/G,SAAS,IAAI,IAAI,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAwJ3D"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { allToCompletion } from '@aztec/foundation/promise';
|
|
2
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
3
|
+
import { withRecording } from './benchmarked_node.js';
|
|
4
|
+
/**
|
|
5
|
+
* Wraps `node`, serving repeated reads from a cache the wrapper owns. Consumers share cached reads by sharing the
|
|
6
|
+
* wrapper.
|
|
7
|
+
*
|
|
8
|
+
* Only hash-pinned reads are cached. A block hash names immutable content, so the same call can never correctly answer
|
|
9
|
+
* differently, and even an `undefined` witness or leaf index is kept as a non-membership fact. That makes the wrapper
|
|
10
|
+
* safe for any consumer, whatever its anchor block. Uncached methods, and reads that name a block any other way (see
|
|
11
|
+
* {@link hashReferenceOf}), pass straight through. A few entries below opt out even when hash-pinned, where the answer
|
|
12
|
+
* can still change, and the tag queries opt in only once the request also stops short of blocks yet to be produced
|
|
13
|
+
* (see {@link hasImmutableAnswer}).
|
|
14
|
+
*
|
|
15
|
+
* Wiping (see {@link CachingAztecNode.wipeCache}) bounds memory. Correctness does not depend on it.
|
|
16
|
+
*/ export function withCache(node) {
|
|
17
|
+
const cache = new AztecNodeCache();
|
|
18
|
+
// The recording wrapper sits below the cache, so a recording sees only the reads the node answered: a read served
|
|
19
|
+
// from the cache appears nowhere in it. Every read below goes to `source` rather than to `node`, and
|
|
20
|
+
// `startRecording` passes through this wrapper untouched.
|
|
21
|
+
const source = withRecording(node);
|
|
22
|
+
/** Runs `read` through `cache` when `block` pins a chain position by hash. Everything else goes to the node. */ const readCachedIfBlockIsHashPinned = (block, key, read, options)=>{
|
|
23
|
+
const blockHash = hashReferenceOf(block);
|
|
24
|
+
return blockHash === undefined ? read() : cache.fetch(key(blockHash.toString()), read, options);
|
|
25
|
+
};
|
|
26
|
+
const cachedReads = {
|
|
27
|
+
getBlock: (block, options)=>{
|
|
28
|
+
if (options?.includeL1PublishInfo || options?.includeAttestations) {
|
|
29
|
+
// These payloads keep changing after a block is fixed (its L1 publication status, its incoming committee
|
|
30
|
+
// attestations), so a repeat can correctly differ; read straight from the node.
|
|
31
|
+
return source.getBlock(block, options);
|
|
32
|
+
}
|
|
33
|
+
return readCachedIfBlockIsHashPinned(block, (blockHash)=>`block:${blockHash}:${keyPart(options)}`, ()=>source.getBlock(block, options), {
|
|
34
|
+
// PXE only asks for pinned blocks it has already observed, so an undefined answer means the node has not
|
|
35
|
+
// served the block yet, not that it never will.
|
|
36
|
+
shouldCache: (response)=>response !== undefined
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
getContract: (address, referenceBlock)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`contract:${blockHash}:${address.toString()}`, ()=>source.getContract(address, referenceBlock)),
|
|
40
|
+
getBlockHashMembershipWitness: (referenceBlock, blockHash)=>readCachedIfBlockIsHashPinned(referenceBlock, (referenceHash)=>`block-hash-membership-witness:${referenceHash}:${blockHash.toString()}`, ()=>source.getBlockHashMembershipWitness(referenceBlock, blockHash)),
|
|
41
|
+
getPublicDataWitness: (referenceBlock, leafSlot)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`public-data-witness:${blockHash}:${leafSlot.toString()}`, ()=>source.getPublicDataWitness(referenceBlock, leafSlot)),
|
|
42
|
+
getNoteHashMembershipWitness: (referenceBlock, noteHash)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`note-hash-membership-witness:${blockHash}:${noteHash.toString()}`, ()=>source.getNoteHashMembershipWitness(referenceBlock, noteHash)),
|
|
43
|
+
getNullifierMembershipWitness: (referenceBlock, nullifier)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`nullifier-membership-witness:${blockHash}:${nullifier.toString()}`, ()=>source.getNullifierMembershipWitness(referenceBlock, nullifier)),
|
|
44
|
+
getLowNullifierMembershipWitness: (referenceBlock, nullifier)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`low-nullifier-membership-witness:${blockHash}:${nullifier.toString()}`, ()=>source.getLowNullifierMembershipWitness(referenceBlock, nullifier)),
|
|
45
|
+
getL1ToL2MessageMembershipWitness: (referenceBlock, l1ToL2Message)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`l1-to-l2-message-membership-witness:${blockHash}:${l1ToL2Message.toString()}`, ()=>source.getL1ToL2MessageMembershipWitness(referenceBlock, l1ToL2Message)),
|
|
46
|
+
getPublicStorageAt: (referenceBlock, contractAddress, storageSlot)=>readCachedIfBlockIsHashPinned(referenceBlock, (blockHash)=>`public-storage:${blockHash}:${contractAddress.toString()}:${storageSlot.toString()}`, ()=>source.getPublicStorageAt(referenceBlock, contractAddress, storageSlot)),
|
|
47
|
+
findLeavesIndexes: (referenceBlock, treeId, leafValues)=>{
|
|
48
|
+
// Cached per leaf: only leaves without a cached result are fetched, in a single batched node call. The per-leaf
|
|
49
|
+
// keys don't fit single-key readCachedIfBlockIsHashPinned, so the hash gate is inline.
|
|
50
|
+
const referenceHash = hashReferenceOf(referenceBlock);
|
|
51
|
+
if (referenceHash === undefined) {
|
|
52
|
+
return source.findLeavesIndexes(referenceBlock, treeId, leafValues);
|
|
53
|
+
}
|
|
54
|
+
return readBatchedPerKey(cache, leafValues.map((leaf)=>`leaf-index:${referenceHash.toString()}:${treeId}:${leaf.toString()}`), (missing)=>source.findLeavesIndexes(referenceBlock, treeId, missing.map((i)=>leafValues[i])), {
|
|
55
|
+
method: 'findLeavesIndexes',
|
|
56
|
+
requested: 'leaves'
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
getPrivateLogsByTags: (query)=>{
|
|
60
|
+
if (!hasImmutableAnswer(query)) {
|
|
61
|
+
return source.getPrivateLogsByTags(query);
|
|
62
|
+
}
|
|
63
|
+
const keyPrefix = `private-logs:${privateLogsQueryKey(query)}`;
|
|
64
|
+
return readBatchedPerKey(cache, query.tags.map((tag)=>`${keyPrefix}:${tagQueryKey(tag)}`), (missing)=>source.getPrivateLogsByTags({
|
|
65
|
+
...query,
|
|
66
|
+
tags: missing.map((i)=>query.tags[i])
|
|
67
|
+
}), {
|
|
68
|
+
method: 'getPrivateLogsByTags',
|
|
69
|
+
requested: 'tags'
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
getPublicLogsByTags: (query)=>{
|
|
73
|
+
if (!hasImmutableAnswer(query)) {
|
|
74
|
+
return source.getPublicLogsByTags(query);
|
|
75
|
+
}
|
|
76
|
+
const keyPrefix = `public-logs:${publicLogsQueryKey(query)}`;
|
|
77
|
+
return readBatchedPerKey(cache, query.tags.map((tag)=>`${keyPrefix}:${tagQueryKey(tag)}`), (missing)=>source.getPublicLogsByTags({
|
|
78
|
+
...query,
|
|
79
|
+
tags: missing.map((i)=>query.tags[i])
|
|
80
|
+
}), {
|
|
81
|
+
method: 'getPublicLogsByTags',
|
|
82
|
+
requested: 'tags'
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return new Proxy(source, {
|
|
87
|
+
get (target, prop) {
|
|
88
|
+
if (prop === 'wipeCache') {
|
|
89
|
+
return ()=>cache.wipe();
|
|
90
|
+
}
|
|
91
|
+
if (Object.hasOwn(cachedReads, prop)) {
|
|
92
|
+
return cachedReads[prop];
|
|
93
|
+
}
|
|
94
|
+
const value = Reflect.get(target, prop);
|
|
95
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Store of node read promises keyed by method and arguments.
|
|
101
|
+
*
|
|
102
|
+
* Holds no node reference of its own: it only memoizes promises handed to it by the {@link withCache} wrapper that
|
|
103
|
+
* owns it. Rejected promises are evicted so callers can retry. A settled value is kept unless the caller's
|
|
104
|
+
* `shouldCache` turns it away.
|
|
105
|
+
*/ class AztecNodeCache {
|
|
106
|
+
cache = new Map();
|
|
107
|
+
/**
|
|
108
|
+
* Returns the cached promise for `key`, or runs `read` and caches the in-flight promise.
|
|
109
|
+
*
|
|
110
|
+
* `shouldCache` runs once the promise settles and answers whether its value is kept. Every settled value is kept by
|
|
111
|
+
* default. Callers waiting on a value that is then turned away still share the one in-flight read, so declining to
|
|
112
|
+
* keep a value costs nothing on concurrent reads.
|
|
113
|
+
*/ fetch(key, read, { shouldCache } = {}) {
|
|
114
|
+
return this.#get(key) ?? this.#set(key, read(), shouldCache);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The cached promise for each of `keys`, `undefined` where there is none. For callers that batch their own misses
|
|
118
|
+
* rather than reading one key.
|
|
119
|
+
*/ peekAll(keys) {
|
|
120
|
+
return keys.map((key)=>this.#get(key));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Clears the store.
|
|
124
|
+
*/ wipe() {
|
|
125
|
+
this.cache.clear();
|
|
126
|
+
}
|
|
127
|
+
#get(key) {
|
|
128
|
+
return this.cache.get(key);
|
|
129
|
+
}
|
|
130
|
+
#set(key, promise, shouldCache) {
|
|
131
|
+
const evict = ()=>{
|
|
132
|
+
if (this.cache.get(key) === promise) {
|
|
133
|
+
this.cache.delete(key);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
// A rejected read is evicted so callers can retry; a `shouldCache` that throws is treated the same way. The
|
|
137
|
+
// trailing catch keeps a throwing predicate from surfacing as an unhandled rejection on this detached promise.
|
|
138
|
+
promise.then((value)=>{
|
|
139
|
+
if (shouldCache && !shouldCache(value)) {
|
|
140
|
+
evict();
|
|
141
|
+
}
|
|
142
|
+
}, evict).catch(evict);
|
|
143
|
+
this.cache.set(key, promise);
|
|
144
|
+
return promise;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The block hash `block` pins to (a `BlockHash` or `{ hash }` reference), or `undefined` for every other way of naming
|
|
149
|
+
* a block.
|
|
150
|
+
*
|
|
151
|
+
* A number or a tag names a moving chain position, as does naming no block at all: a reorg can put a different block
|
|
152
|
+
* at the same number, and tags follow the growing chain. An `{ archive }` root is different, since it commits to every
|
|
153
|
+
* block hash up to its own block and so pins content as tightly as a hash. It stays uncached because no PXE read uses
|
|
154
|
+
* one: keeping an `undefined` answer as a non-membership fact is only sound because PXE pins blocks it has already
|
|
155
|
+
* seen, and that holds for the references PXE actually builds.
|
|
156
|
+
*/ function hashReferenceOf(block) {
|
|
157
|
+
if (block instanceof BlockHash) {
|
|
158
|
+
return block;
|
|
159
|
+
}
|
|
160
|
+
if (typeof block === 'object' && block !== null && 'hash' in block) {
|
|
161
|
+
return block.hash;
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Answers one result per entry of `keys`, taking whatever the cache already holds and fetching the rest in a single
|
|
167
|
+
* batched call. Each fetched result is cached under its own key, so a later call that overlaps this one fetches only
|
|
168
|
+
* the entries it has not seen, and a key repeated within `keys` is asked of the node once.
|
|
169
|
+
*
|
|
170
|
+
* `fetchMissing` receives the indexes still missing, in order, and must answer one result per requested index.
|
|
171
|
+
* `shortResponse` names the method and what it requests, for the error raised when it does not.
|
|
172
|
+
*/ function readBatchedPerKey(cache, keys, fetchMissing, shortResponse) {
|
|
173
|
+
const cached = cache.peekAll(keys);
|
|
174
|
+
// One request per missing key rather than per missing position, so a key repeated in `keys` seeds a single entry
|
|
175
|
+
// that every position carrying it then reads.
|
|
176
|
+
const requestIndexByKey = new Map();
|
|
177
|
+
cached.forEach((result, index)=>{
|
|
178
|
+
if (result === undefined && !requestIndexByKey.has(keys[index])) {
|
|
179
|
+
requestIndexByKey.set(keys[index], index);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
const fetchedByKey = new Map();
|
|
183
|
+
if (requestIndexByKey.size > 0) {
|
|
184
|
+
const requestedIndexes = [
|
|
185
|
+
...requestIndexByKey.values()
|
|
186
|
+
];
|
|
187
|
+
const batch = fetchMissing(requestedIndexes).then((fetched)=>{
|
|
188
|
+
if (fetched.length !== requestedIndexes.length) {
|
|
189
|
+
// Each entry is filled from the batch response by position. If the node returned fewer results than we asked
|
|
190
|
+
// for, the positions past the end would read undefined, which the cache keeps as a genuine answer, so a
|
|
191
|
+
// truncated response would be cached as fact. Rejecting the whole batch evicts those entries instead, so a
|
|
192
|
+
// retry re-fetches every one of them.
|
|
193
|
+
throw new Error(`${shortResponse.method} returned ${fetched.length} results for ${requestedIndexes.length} requested ` + `${shortResponse.requested}`);
|
|
194
|
+
}
|
|
195
|
+
return fetched;
|
|
196
|
+
});
|
|
197
|
+
[
|
|
198
|
+
...requestIndexByKey.keys()
|
|
199
|
+
].forEach((key, batchIndex)=>{
|
|
200
|
+
fetchedByKey.set(key, cache.fetch(key, ()=>batch.then((fetched)=>fetched[batchIndex])));
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// Every position is answered: a cache hit, or the entry its key's request seeded just above.
|
|
204
|
+
return allToCompletion(keys.map((key, index)=>cached[index] ?? fetchedByKey.get(key)));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Whether a tag query's answer can no longer change, and so can be cached.
|
|
208
|
+
*
|
|
209
|
+
* Two things would let it change, and the query has to rule out both. `referenceBlock` names the chain the answer
|
|
210
|
+
* belongs to, so the call fails once that block is gone rather than answering from a chain that reorged. `toBlock`
|
|
211
|
+
* stops the query below the tip, so blocks yet to be produced cannot add logs to the answer. Where the query starts
|
|
212
|
+
* does not matter: an open lower end reaches only blocks that are already behind it, which no longer move. PXE's tag
|
|
213
|
+
* queries get both from the `getAll*LogsByTags` helpers, which take them from the anchor block the query is pinned to.
|
|
214
|
+
*/ function hasImmutableAnswer(query) {
|
|
215
|
+
return query.referenceBlock !== undefined && query.toBlock !== undefined;
|
|
216
|
+
}
|
|
217
|
+
/** Cache-key segment for the parts of a private tag query that every tag in it shares. */ function privateLogsQueryKey(query) {
|
|
218
|
+
const parts = {
|
|
219
|
+
...sharedQueryKeyParts(query)
|
|
220
|
+
};
|
|
221
|
+
return Object.values(parts).map(keyPart).join(':');
|
|
222
|
+
}
|
|
223
|
+
/** Cache-key segment for the parts of a public tag query that every tag in it shares. */ function publicLogsQueryKey(query) {
|
|
224
|
+
const parts = {
|
|
225
|
+
...sharedQueryKeyParts(query),
|
|
226
|
+
contractAddress: query.contractAddress
|
|
227
|
+
};
|
|
228
|
+
return Object.values(parts).map(keyPart).join(':');
|
|
229
|
+
}
|
|
230
|
+
/** The key parts {@link PrivateLogsQuery} and {@link PublicLogsQuery} have in common. */ function sharedQueryKeyParts(query) {
|
|
231
|
+
return {
|
|
232
|
+
referenceBlock: query.referenceBlock,
|
|
233
|
+
fromBlock: query.fromBlock,
|
|
234
|
+
toBlock: query.toBlock,
|
|
235
|
+
txHash: query.txHash,
|
|
236
|
+
includeEffects: query.includeEffects,
|
|
237
|
+
limitPerTag: query.limitPerTag
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Cache-key segment for one tag entry, covering the pagination cursor as well as the tag: each page of a tag's stream
|
|
242
|
+
* is a read of its own, and a repeated query asks for the same pages in the same order.
|
|
243
|
+
*/ function tagQueryKey(entry) {
|
|
244
|
+
return 'tag' in entry ? `${keyPart(entry.tag)}@${keyPart(entry.afterLog)}` : keyPart(entry);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Renders a call argument as a stable cache-key segment, via its own `toString` when it has one, else as JSON.
|
|
248
|
+
*
|
|
249
|
+
* Example: the options object `{ includeTransactions: true }` renders as `'{"includeTransactions":true}'`, and an
|
|
250
|
+
* absent optional argument as `'undefined'`.
|
|
251
|
+
*/ function keyPart(value) {
|
|
252
|
+
if ([
|
|
253
|
+
'string',
|
|
254
|
+
'number',
|
|
255
|
+
'bigint',
|
|
256
|
+
'boolean'
|
|
257
|
+
].includes(typeof value)) {
|
|
258
|
+
return String(value);
|
|
259
|
+
}
|
|
260
|
+
if (value && typeof value === 'object') {
|
|
261
|
+
const toString = value.toString;
|
|
262
|
+
if (toString && toString !== Object.prototype.toString) {
|
|
263
|
+
return toString.call(value);
|
|
264
|
+
}
|
|
265
|
+
return JSON.stringify(value, (_key, nested)=>typeof nested === 'bigint' ? nested.toString() : nested);
|
|
266
|
+
}
|
|
267
|
+
return String(value);
|
|
268
|
+
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
+
import { type InBlock } from '@aztec/stdlib/block';
|
|
3
4
|
import { type AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
4
5
|
import { Note, NoteStatus } from '@aztec/stdlib/note';
|
|
5
|
-
import type { BlockHeader
|
|
6
|
-
import type {
|
|
6
|
+
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
7
|
+
import type { NoteValidationRequest } from '../contract_function_simulator/noir-structs/note_validation_request.js';
|
|
7
8
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
8
9
|
export declare class NoteService {
|
|
10
|
+
#private;
|
|
9
11
|
private readonly noteStore;
|
|
10
12
|
private readonly aztecNode;
|
|
11
13
|
private readonly anchorBlockHeader;
|
|
@@ -18,9 +20,9 @@ export declare class NoteService {
|
|
|
18
20
|
*
|
|
19
21
|
* @param owner - The owner of the notes. If undefined, returns notes for all known owners.
|
|
20
22
|
* @param status - The status of notes to fetch.
|
|
21
|
-
* @param scopes - The accounts whose notes we can access in this call.
|
|
23
|
+
* @param scopes - The accounts whose notes we can access in this call. An empty list matches no notes.
|
|
22
24
|
*/
|
|
23
|
-
getNotes(contractAddress: AztecAddress, owner: AztecAddress | undefined, storageSlot: Fr, status: NoteStatus, scopes:
|
|
25
|
+
getNotes(contractAddress: AztecAddress, owner: AztecAddress | undefined, storageSlot: Fr, status: NoteStatus, scopes: AztecAddress[]): Promise<{
|
|
24
26
|
contractAddress: AztecAddress;
|
|
25
27
|
owner: AztecAddress;
|
|
26
28
|
storageSlot: Fr;
|
|
@@ -43,7 +45,32 @@ export declare class NoteService {
|
|
|
43
45
|
*
|
|
44
46
|
* @param contractAddress - The contract whose notes should be checked and nullified.
|
|
45
47
|
*/
|
|
46
|
-
syncNoteNullifiers(contractAddress: AztecAddress, scopes:
|
|
47
|
-
|
|
48
|
+
syncNoteNullifiers(contractAddress: AztecAddress, scopes: AztecAddress[]): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Validates and stores a batch of notes against the pre-fetched onchain context of their txs.
|
|
51
|
+
*
|
|
52
|
+
* For each request we must verify that:
|
|
53
|
+
* - the note actually exists in the corresponding tx effect (and thus in the note hash tree), and
|
|
54
|
+
* - the note has not already been nullified.
|
|
55
|
+
*
|
|
56
|
+
* Failing to do either would result in circuits getting either non-existent notes and failing to produce inclusion
|
|
57
|
+
* proofs for them, or getting nullified notes and producing duplicate nullifiers, both of which are catastrophic
|
|
58
|
+
* failure modes.
|
|
59
|
+
*
|
|
60
|
+
* Note that adding a note and removing it is *not* equivalent to never adding it in the first place. A nullifier
|
|
61
|
+
* emitted in a block that comes after note creation might result in the note being de-nullified by a chain reorg,
|
|
62
|
+
* so we must store both the note hash and nullifier block information.
|
|
63
|
+
*
|
|
64
|
+
* @param requests - The notes to validate and store.
|
|
65
|
+
* @param scope - The scope under which the notes are being stored.
|
|
66
|
+
* @param validationTxData - The onchain context of each request's tx, keyed by `TxHash.toString()`. Must contain
|
|
67
|
+
* entries for every request's txHash; missing entries are treated as a node bug and cause an error.
|
|
68
|
+
*/
|
|
69
|
+
validateAndStoreNotes(requests: NoteValidationRequest[], scope: AztecAddress, validationTxData: ReadonlyMap<string, NoteValidationTxData>): Promise<void>;
|
|
48
70
|
}
|
|
49
|
-
|
|
71
|
+
/** The onchain context of the tx a note validation request points at: where it was mined and its note hashes. */
|
|
72
|
+
export type NoteValidationTxData = InBlock & {
|
|
73
|
+
noteHashes: Fr[];
|
|
74
|
+
txIndexInBlock: number;
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZV9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90ZXMvbm90ZV9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQStCLEtBQUssT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEYsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLElBQUksRUFBVyxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3BILE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJFLHFCQUFhLFdBQVc7O0lBRXBCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7SUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0lBSnhCLFlBQ21CLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsS0FBSyxFQUFFLE1BQU0sRUFDNUI7SUFFSjs7Ozs7Ozs7T0FRRztJQUNVLFFBQVEsQ0FDbkIsZUFBZSxFQUFFLFlBQVksRUFDN0IsS0FBSyxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQy9CLFdBQVcsRUFBRSxFQUFFLEVBQ2YsTUFBTSxFQUFFLFVBQVUsRUFDbEIsTUFBTSxFQUFFLFlBQVksRUFBRTs7Ozs7Ozs7OztTQXlCdkI7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNVLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FxQnBHO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDVSxxQkFBcUIsQ0FDaEMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLEVBQ2pDLEtBQUssRUFBRSxZQUFZLEVBQ25CLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsR0FDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWtHZjtDQVVGO0FBRUQsaUhBQWlIO0FBQ2pILE1BQU0sTUFBTSxvQkFBb0IsR0FBRyxPQUFPLEdBQUc7SUFDM0MsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxNQUFNLENBQUM7Q0FDeEIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"note_service.d.ts","sourceRoot":"","sources":["../../src/notes/note_service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"note_service.d.ts","sourceRoot":"","sources":["../../src/notes/note_service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wEAAwE,CAAC;AACpH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,qBAAa,WAAW;;IAEpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,YACmB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,WAAW,EAC9B,KAAK,EAAE,MAAM,EAC5B;IAEJ;;;;;;;;OAQG;IACU,QAAQ,CACnB,eAAe,EAAE,YAAY,EAC7B,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,YAAY,EAAE;;;;;;;;;;SAyBvB;IAED;;;;;;;;;;;OAWG;IACU,kBAAkB,CAAC,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpG;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACU,qBAAqB,CAChC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC,CAkGf;CAUF;AAED,iHAAiH;AACjH,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG;IAC3C,UAAU,EAAE,EAAE,EAAE,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
|