@aztec/pxe 0.0.1-commit.b9865e97 → 0.0.1-commit.be03c316
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 +8 -23
- package/dest/bin/index.d.ts +2 -2
- package/dest/bin/index.d.ts.map +1 -1
- package/dest/bin/index.js +1 -1
- package/dest/bin/oracle_version_helpers.d.ts +16 -8
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -1
- package/dest/bin/oracle_version_helpers.js +22 -69
- package/dest/block_synchronizer/block_stream_source.d.ts +5 -5
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -1
- package/dest/block_synchronizer/block_stream_source.js +4 -29
- package/dest/block_synchronizer/block_synchronizer.d.ts +18 -14
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +54 -18
- package/dest/config/index.d.ts +2 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -0
- package/dest/contract/contract_class_service.d.ts +31 -0
- package/dest/contract/contract_class_service.d.ts.map +1 -0
- package/dest/contract/contract_class_service.js +68 -0
- package/dest/contract/contract_sync_service.d.ts +48 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/{contract_sync → contract}/contract_sync_service.js +26 -45
- package/dest/contract/helpers.d.ts +7 -0
- package/dest/contract/helpers.d.ts.map +1 -0
- package/dest/contract/helpers.js +20 -0
- package/dest/contract/skip_sync_contracts.d.ts +11 -0
- package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
- package/dest/contract/skip_sync_contracts.js +18 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +19 -18
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +63 -32
- package/dest/contract_function_simulator/execution_note_cache.d.ts +3 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +8 -28
- package/dest/contract_function_simulator/index.d.ts +19 -10
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +6 -9
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +8 -27
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +8 -23
- 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/event_validation_request.js +1 -1
- 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 +11 -12
- 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 +6 -49
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +10 -8
- 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 +1 -60
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
- package/dest/contract_function_simulator/noir-structs/option.d.ts +9 -11
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/option.js +18 -13
- 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 +6 -9
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -24
- 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 +2 -3
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- 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/oracle_registry.d.ts +43 -31
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle_registry.js +259 -29
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +180 -45
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1024 -341
- 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 +2 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +21 -8
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +132 -22
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +77 -34
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +247 -106
- 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/debug/pxe_debug_utils.d.ts +2 -2
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.d.ts +2 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +1 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +17 -6
- package/dest/entrypoints/client/lazy/index.d.ts +2 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +1 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +17 -6
- 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 +9 -3
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +6 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -2
- 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 +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +16 -4
- package/dest/error_enriching.d.ts +5 -3
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +13 -11
- package/dest/hooks/execution_hooks.d.ts +31 -11
- package/dest/hooks/execution_hooks.d.ts.map +1 -1
- package/dest/hooks/execution_hooks.js +3 -3
- package/dest/hooks/index.d.ts +4 -3
- package/dest/hooks/index.d.ts.map +1 -1
- package/dest/hooks/index.js +1 -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 +8 -6
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +88 -28
- package/dest/messages/tx_resolver_service.d.ts +17 -0
- package/dest/messages/tx_resolver_service.d.ts.map +1 -0
- package/dest/messages/{message_context_service.js → tx_resolver_service.js} +13 -8
- package/dest/notes/note_service.d.ts +1 -1
- package/dest/notes/note_service.js +1 -1
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.js +5 -5
- package/dest/private_kernel/batch_planner.d.ts +1 -1
- package/dest/private_kernel/batch_planner.d.ts.map +1 -1
- package/dest/private_kernel/batch_planner.js +1 -1
- 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 +6 -2
- package/dest/private_kernel/hints/test_utils.js +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +61 -40
- package/dest/private_kernel/private_kernel_oracle.d.ts +4 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +17 -5
- package/dest/pxe.d.ts +114 -48
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +225 -139
- 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 +8 -6
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +1 -1
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -1
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +129 -49
- package/dest/storage/capsule_store/capsule_service.d.ts +1 -1
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_service.js +6 -9
- 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 +64 -75
- package/dest/storage/fact_store/fact_service.d.ts +22 -0
- package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_service.js +45 -0
- package/dest/storage/fact_store/fact_store.d.ts +95 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +408 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store_keys.js +50 -0
- package/dest/storage/fact_store/index.d.ts +6 -0
- package/dest/storage/fact_store/index.d.ts.map +1 -0
- package/dest/storage/fact_store/index.js +4 -0
- package/dest/storage/fact_store/origin_state.d.ts +59 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +60 -0
- package/dest/storage/fact_store/stored_fact.d.ts +32 -0
- package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
- package/dest/storage/fact_store/stored_fact.js +64 -0
- package/dest/storage/index.d.ts +3 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -1
- package/dest/storage/metadata.d.ts +2 -2
- package/dest/storage/metadata.d.ts.map +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +42 -33
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +197 -168
- 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 +5 -3
- package/dest/storage/open_pxe_stores.d.ts.map +1 -1
- package/dest/storage/open_pxe_stores.js +5 -3
- 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 +40 -43
- 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/sender_tagging_store.d.ts +19 -3
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +48 -11
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
- package/dest/tagging/constants.d.ts +3 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +28 -10
- package/dest/tagging/index.d.ts +2 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +26 -8
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +95 -20
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +1 -1
- 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 +6 -2
- 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 +17 -17
- package/src/bin/check_oracle_version.ts +8 -24
- package/src/bin/index.ts +1 -1
- package/src/bin/oracle_version_helpers.ts +23 -90
- package/src/block_synchronizer/block_stream_source.ts +6 -45
- package/src/block_synchronizer/block_synchronizer.ts +70 -29
- package/src/config/index.ts +1 -0
- package/src/contract/contract_class_service.ts +83 -0
- package/src/{contract_sync → contract}/contract_sync_service.ts +37 -50
- package/src/contract/helpers.ts +35 -0
- package/src/contract/skip_sync_contracts.ts +23 -0
- package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
- package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +96 -42
- package/src/contract_function_simulator/execution_note_cache.ts +7 -28
- package/src/contract_function_simulator/index.ts +48 -13
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +12 -24
- 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/event_validation_request.ts +1 -1
- 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 +20 -46
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +13 -60
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
- package/src/contract_function_simulator/noir-structs/option.ts +17 -11
- 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 +4 -26
- 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 +1 -2
- 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/oracle_registry.ts +172 -47
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +814 -315
- package/src/contract_function_simulator/oracle/private_execution.ts +2 -3
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +167 -30
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +399 -135
- package/src/contract_function_simulator/transient_array_service.ts +91 -0
- package/src/debug/pxe_debug_utils.ts +1 -1
- package/src/entrypoints/client/bundle/index.ts +1 -0
- package/src/entrypoints/client/bundle/utils.ts +24 -5
- package/src/entrypoints/client/lazy/index.ts +1 -0
- package/src/entrypoints/client/lazy/utils.ts +24 -5
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +8 -2
- package/src/entrypoints/server/index.ts +6 -2
- package/src/entrypoints/server/store.ts +47 -0
- package/src/entrypoints/server/utils.ts +31 -9
- package/src/error_enriching.ts +27 -11
- package/src/hooks/execution_hooks.ts +32 -12
- package/src/hooks/index.ts +8 -2
- 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 +100 -37
- package/src/messages/{message_context_service.ts → tx_resolver_service.ts} +16 -9
- package/src/notes/note_service.ts +1 -1
- package/src/oracle_version.ts +5 -5
- package/src/private_kernel/batch_planner.ts +0 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +11 -1
- package/src/private_kernel/hints/test_utils.ts +1 -1
- package/src/private_kernel/private_kernel_execution_prover.ts +112 -56
- package/src/private_kernel/private_kernel_oracle.ts +23 -4
- package/src/pxe.ts +328 -159
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -6
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +6 -6
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +1 -1
- package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +12 -12
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +9 -15
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +24 -4
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +11 -3
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +12 -4
- package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +29 -9
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +141 -50
- package/src/storage/capsule_store/capsule_service.ts +8 -13
- package/src/storage/contract_store/contract_store.ts +86 -93
- package/src/storage/fact_store/fact_service.ts +69 -0
- package/src/storage/fact_store/fact_store.ts +487 -0
- package/src/storage/fact_store/fact_store_keys.ts +75 -0
- package/src/storage/fact_store/index.ts +15 -0
- package/src/storage/fact_store/origin_state.ts +84 -0
- package/src/storage/fact_store/stored_fact.ts +80 -0
- package/src/storage/index.ts +2 -1
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +226 -187
- package/src/storage/note_store/stored_note.ts +5 -27
- package/src/storage/open_pxe_stores.ts +6 -3
- package/src/storage/private_event_store/private_event_store.ts +49 -55
- package/src/storage/store_identity.ts +72 -0
- package/src/storage/tagging_store/index.ts +1 -1
- package/src/storage/tagging_store/sender_tagging_store.ts +62 -15
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +30 -10
- package/src/tagging/index.ts +1 -1
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +148 -30
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +1 -1
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +6 -2
- package/src/tagging/testing/tag_query_test_utils.ts +11 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -89
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/oracle.js +0 -552
- 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 -51
- package/dest/contract_sync/contract_sync_service.d.ts +0 -42
- package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
- package/dest/contract_sync/helpers.d.ts +0 -27
- package/dest/contract_sync/helpers.d.ts.map +0 -1
- package/dest/contract_sync/helpers.js +0 -53
- package/dest/messages/message_context_service.d.ts +0 -17
- package/dest/messages/message_context_service.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
- package/src/contract_function_simulator/oracle/oracle.ts +0 -711
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -60
- package/src/contract_sync/helpers.ts +0 -86
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +0 -16
- package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
|
@@ -1,29 +1,32 @@
|
|
|
1
|
-
import { ARCHIVE_HEIGHT } from '@aztec/constants';
|
|
2
1
|
import { uniqueBy } from '@aztec/foundation/collection';
|
|
3
2
|
import { Aes128 } from '@aztec/foundation/crypto/aes128';
|
|
4
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
5
5
|
import { LogLevels, createLogger } from '@aztec/foundation/log';
|
|
6
|
-
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
7
6
|
import { ExecutionError, extractCallStack, resolveAssertionMessageFromError, toACVMWitness, witnessMapToFields } from '@aztec/simulator/client';
|
|
7
|
+
import { STANDARD_HANDSHAKE_REGISTRY_ADDRESS } from '@aztec/standard-contracts/handshake-registry/constants';
|
|
8
|
+
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
8
9
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
9
|
-
import {
|
|
10
|
-
import { AppTaggingSecret,
|
|
11
|
-
import {
|
|
10
|
+
import { computeAddressSecret, hashPublicKey } from '@aztec/stdlib/keys';
|
|
11
|
+
import { AppTaggingSecret, FlatPublicLogs, appSiloEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
12
|
+
import { getL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
12
13
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
13
|
-
import {
|
|
14
|
+
import { CallContext } from '@aztec/stdlib/tx';
|
|
14
15
|
import { createContractLogger, logContractMessage, stripAztecnrLogPrefix } from '../../contract_logging.js';
|
|
15
16
|
import { EventService } from '../../events/event_service.js';
|
|
16
17
|
import { LogService } from '../../logs/log_service.js';
|
|
17
18
|
import { NoteService } from '../../notes/note_service.js';
|
|
18
19
|
import { ORACLE_VERSION_MAJOR } from '../../oracle_version.js';
|
|
20
|
+
import { assertAllowedScope } from '../../storage/allowed_scopes.js';
|
|
21
|
+
import { FactCollectionKey, FactCollectionTypeKey, anchoredTipBlockNumbers } from '../../storage/fact_store/index.js';
|
|
22
|
+
import { AztecNodeReadCache } from '../aztec_node_read_cache.js';
|
|
19
23
|
import { EphemeralArrayService } from '../ephemeral_array_service.js';
|
|
20
24
|
import { BoundedVec } from '../noir-structs/bounded_vec.js';
|
|
21
25
|
import { EphemeralArray } from '../noir-structs/ephemeral_array.js';
|
|
26
|
+
import { emptyFactCollection, toNoirFactCollection } from '../noir-structs/fact_collection.js';
|
|
22
27
|
import { Option } from '../noir-structs/option.js';
|
|
23
|
-
import { UtilityContext } from '../noir-structs/utility_context.js';
|
|
24
28
|
import { pickNotes } from '../pick_notes.js';
|
|
25
|
-
import {
|
|
26
|
-
import { Oracle } from './oracle.js';
|
|
29
|
+
import { buildACIRCallback } from './acir_callback.js';
|
|
27
30
|
/**
|
|
28
31
|
* The oracle for an execution of utility contract functions.
|
|
29
32
|
*/ export class UtilityExecutionOracle {
|
|
@@ -33,22 +36,25 @@ import { Oracle } from './oracle.js';
|
|
|
33
36
|
aztecnrLogger;
|
|
34
37
|
offchainEffects = [];
|
|
35
38
|
ephemeralArrayService = new EphemeralArrayService();
|
|
39
|
+
transientArrayService;
|
|
40
|
+
aztecNodeReadCache;
|
|
36
41
|
// We store oracle version to be able to show a nice error message when an oracle handler is missing.
|
|
37
42
|
contractOracleVersion;
|
|
38
|
-
|
|
43
|
+
callContext;
|
|
39
44
|
authWitnesses;
|
|
40
45
|
capsules;
|
|
41
46
|
anchorBlockHeader;
|
|
42
|
-
|
|
47
|
+
anchoredContractData;
|
|
43
48
|
noteStore;
|
|
44
49
|
keyStore;
|
|
45
50
|
addressStore;
|
|
46
51
|
aztecNode;
|
|
47
52
|
recipientTaggingStore;
|
|
48
|
-
|
|
53
|
+
taggingSecretSourcesStore;
|
|
49
54
|
capsuleService;
|
|
55
|
+
factService;
|
|
50
56
|
privateEventStore;
|
|
51
|
-
|
|
57
|
+
txResolver;
|
|
52
58
|
contractSyncService;
|
|
53
59
|
l2TipsStore;
|
|
54
60
|
jobId;
|
|
@@ -58,20 +64,21 @@ import { Oracle } from './oracle.js';
|
|
|
58
64
|
hooks;
|
|
59
65
|
utilityExecutor;
|
|
60
66
|
constructor(args){
|
|
61
|
-
this.
|
|
67
|
+
this.callContext = args.callContext;
|
|
62
68
|
this.authWitnesses = args.authWitnesses;
|
|
63
69
|
this.capsules = args.capsules;
|
|
64
70
|
this.anchorBlockHeader = args.anchorBlockHeader;
|
|
65
|
-
this.
|
|
71
|
+
this.anchoredContractData = args.anchoredContractData;
|
|
66
72
|
this.noteStore = args.noteStore;
|
|
67
73
|
this.keyStore = args.keyStore;
|
|
68
74
|
this.addressStore = args.addressStore;
|
|
69
75
|
this.aztecNode = args.aztecNode;
|
|
70
76
|
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
71
|
-
this.
|
|
77
|
+
this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
|
|
72
78
|
this.capsuleService = args.capsuleService;
|
|
79
|
+
this.factService = args.factService;
|
|
73
80
|
this.privateEventStore = args.privateEventStore;
|
|
74
|
-
this.
|
|
81
|
+
this.txResolver = args.txResolver;
|
|
75
82
|
this.contractSyncService = args.contractSyncService;
|
|
76
83
|
this.l2TipsStore = args.l2TipsStore;
|
|
77
84
|
this.jobId = args.jobId;
|
|
@@ -80,6 +87,8 @@ import { Oracle } from './oracle.js';
|
|
|
80
87
|
this.simulator = args.simulator;
|
|
81
88
|
this.hooks = args.hooks;
|
|
82
89
|
this.utilityExecutor = args.utilityExecutor;
|
|
90
|
+
this.transientArrayService = args.transientArrayService;
|
|
91
|
+
this.aztecNodeReadCache = new AztecNodeReadCache(args.aztecNode);
|
|
83
92
|
}
|
|
84
93
|
assertCompatibleOracleVersion(major, minor) {
|
|
85
94
|
if (major !== ORACLE_VERSION_MAJOR) {
|
|
@@ -99,15 +108,20 @@ import { Oracle } from './oracle.js';
|
|
|
99
108
|
return Fr.random();
|
|
100
109
|
}
|
|
101
110
|
getUtilityContext() {
|
|
102
|
-
return
|
|
111
|
+
return {
|
|
112
|
+
blockHeader: this.anchorBlockHeader,
|
|
113
|
+
contractAddress: this.callContext.contractAddress,
|
|
114
|
+
msgSender: this.callContext.msgSender
|
|
115
|
+
};
|
|
103
116
|
}
|
|
104
117
|
/**
|
|
105
118
|
* Retrieve keys associated with a specific master public key and app address.
|
|
106
119
|
* @param pkMHash - The master public key hash.
|
|
120
|
+
* @param _keyIndex - Sent by the Noir oracle caller but unused here; kept to match the oracle signature.
|
|
107
121
|
* @returns A Promise that resolves to nullifier keys.
|
|
108
122
|
* @throws If the keys are not registered in the key store.
|
|
109
123
|
* @throws If scopes are defined and the account is not in the scopes.
|
|
110
|
-
*/ async getKeyValidationRequest(pkMHash) {
|
|
124
|
+
*/ async getKeyValidationRequest(pkMHash, _keyIndex) {
|
|
111
125
|
let hasAccess = false;
|
|
112
126
|
for(let i = 0; i < this.scopes.length && !hasAccess; i++){
|
|
113
127
|
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
@@ -146,8 +160,13 @@ import { Oracle } from './oracle.js';
|
|
|
146
160
|
// Note that we validate that the reference block hash is at or before the anchor block - we don't test the block
|
|
147
161
|
// hash at all. If the block hash did not exist by the reference block hash, then the node will not return the
|
|
148
162
|
// membership witness as there is none.
|
|
149
|
-
const witness = await this.#queryWithBlockHashNotAfterAnchor(referenceBlockHash, ()=>this.
|
|
150
|
-
return witness ? Option.some(witness) : Option.none(
|
|
163
|
+
const witness = await this.#queryWithBlockHashNotAfterAnchor(referenceBlockHash, ()=>this.aztecNodeReadCache.getBlockHashMembershipWitness(referenceBlockHash, blockHash));
|
|
164
|
+
return witness ? Option.some(witness) : Option.none();
|
|
165
|
+
}
|
|
166
|
+
/** Returns whether each block hash is present in the archive tree at the referenced block. */ async areBlockHashesInArchive(referenceBlockHash, blockHashes) {
|
|
167
|
+
const hashes = blockHashes.readAll(this.ephemeralArrayService);
|
|
168
|
+
const memberships = await this.#queryWithBlockHashNotAfterAnchor(referenceBlockHash, ()=>Promise.all(hashes.map((blockHash)=>this.aztecNodeReadCache.getBlockHashMembershipWitness(referenceBlockHash, blockHash).then(Boolean))));
|
|
169
|
+
return EphemeralArray.fromValues(this.ephemeralArrayService, memberships);
|
|
151
170
|
}
|
|
152
171
|
/**
|
|
153
172
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
@@ -182,7 +201,7 @@ import { Oracle } from './oracle.js';
|
|
|
182
201
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
183
202
|
* @returns - The witness
|
|
184
203
|
*/ async getPublicDataWitness(blockHash, leafSlot) {
|
|
185
|
-
const witness = await this.#queryWithBlockHashNotAfterAnchor(blockHash, ()=>this.
|
|
204
|
+
const witness = await this.#queryWithBlockHashNotAfterAnchor(blockHash, ()=>this.aztecNodeReadCache.getPublicDataWitness(blockHash, leafSlot));
|
|
186
205
|
if (!witness) {
|
|
187
206
|
throw new Error(`Public data witness not found for slot ${leafSlot} at block hash ${blockHash.toString()}.`);
|
|
188
207
|
}
|
|
@@ -214,10 +233,7 @@ import { Oracle } from './oracle.js';
|
|
|
214
233
|
*/ async getPublicKeysAndPartialAddress(account) {
|
|
215
234
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
216
235
|
if (!completeAddress) {
|
|
217
|
-
return Option.none(
|
|
218
|
-
publicKeys: PublicKeys.default(),
|
|
219
|
-
partialAddress: Fr.ZERO
|
|
220
|
-
});
|
|
236
|
+
return Option.none();
|
|
221
237
|
}
|
|
222
238
|
return Option.some({
|
|
223
239
|
publicKeys: completeAddress.publicKeys,
|
|
@@ -228,7 +244,7 @@ import { Oracle } from './oracle.js';
|
|
|
228
244
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
229
245
|
if (!completeAddress) {
|
|
230
246
|
throw new Error(`No public key registered for address ${account}.
|
|
231
|
-
Register it by calling
|
|
247
|
+
Register it by calling wallet.registerSender(...).\nSee docs for context: https://docs.aztec.network/errors/14`);
|
|
232
248
|
}
|
|
233
249
|
return completeAddress;
|
|
234
250
|
}
|
|
@@ -237,7 +253,7 @@ import { Oracle } from './oracle.js';
|
|
|
237
253
|
* @param address - Address.
|
|
238
254
|
* @returns A contract instance.
|
|
239
255
|
*/ async getContractInstance(address) {
|
|
240
|
-
const instance = await this.
|
|
256
|
+
const instance = await this.anchoredContractData.getContractInstance(address);
|
|
241
257
|
if (!instance) {
|
|
242
258
|
throw new Error(`No contract instance found for address ${address.toString()}`);
|
|
243
259
|
}
|
|
@@ -320,15 +336,17 @@ import { Oracle } from './oracle.js';
|
|
|
320
336
|
return leafIndex?.data !== undefined;
|
|
321
337
|
}
|
|
322
338
|
/**
|
|
323
|
-
* Returns the membership witness of an
|
|
324
|
-
* @param contractAddress - Address of a contract by which the message was emitted.
|
|
339
|
+
* Returns the membership witness of an L1 to L2 message.
|
|
325
340
|
* @param messageHash - Hash of the message.
|
|
326
|
-
* @param
|
|
327
|
-
*
|
|
341
|
+
* @param nullifier - When present, the unsiloed nullifier of the message and the address to silo it with. The witness
|
|
342
|
+
* is only returned if the siloed nullifier is absent from the nullifier tree, i.e. the message has not been consumed.
|
|
328
343
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
329
|
-
*/ async
|
|
330
|
-
const [messageIndex, siblingPath] = await
|
|
331
|
-
return
|
|
344
|
+
*/ async getL1ToL2MembershipWitnessV2(messageHash, nullifier) {
|
|
345
|
+
const [messageIndex, siblingPath] = await getL1ToL2MessageWitness(this.aztecNode, messageHash, nullifier.value, await this.anchorBlockHeader.hash());
|
|
346
|
+
return {
|
|
347
|
+
index: messageIndex,
|
|
348
|
+
siblingPath
|
|
349
|
+
};
|
|
332
350
|
}
|
|
333
351
|
/**
|
|
334
352
|
* Read the public storage data.
|
|
@@ -338,9 +356,8 @@ import { Oracle } from './oracle.js';
|
|
|
338
356
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
339
357
|
*/ getFromPublicStorage(blockHash, contractAddress, startStorageSlot, numberOfElements) {
|
|
340
358
|
return this.#queryWithBlockHashNotAfterAnchor(blockHash, async ()=>{
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
this.logger.debug(`Oracle storage read: slots=[${slots.map((slot)=>slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`);
|
|
359
|
+
const values = await this.aztecNodeReadCache.getPublicStorageRange(blockHash, contractAddress, startStorageSlot, numberOfElements);
|
|
360
|
+
this.logger.debug(`Oracle storage read: start=${startStorageSlot.toString()} count=${numberOfElements} ` + `address=${contractAddress.toString()} values=[${values.join(', ')}]`);
|
|
344
361
|
return values;
|
|
345
362
|
});
|
|
346
363
|
}
|
|
@@ -350,7 +367,7 @@ import { Oracle } from './oracle.js';
|
|
|
350
367
|
if (!this.contractLogger) {
|
|
351
368
|
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
352
369
|
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
353
|
-
this.contractLogger = await createContractLogger(this.contractAddress, (addr)=>this.
|
|
370
|
+
this.contractLogger = await createContractLogger(this.contractAddress, (addr)=>this.anchoredContractData.getDebugContractName(addr), 'user', {
|
|
354
371
|
instanceId: this.jobId
|
|
355
372
|
});
|
|
356
373
|
}
|
|
@@ -362,7 +379,7 @@ import { Oracle } from './oracle.js';
|
|
|
362
379
|
if (!this.aztecnrLogger) {
|
|
363
380
|
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
364
381
|
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
365
|
-
this.aztecnrLogger = await createContractLogger(this.contractAddress, (addr)=>this.
|
|
382
|
+
this.aztecnrLogger = await createContractLogger(this.contractAddress, (addr)=>this.anchoredContractData.getDebugContractName(addr), 'aztecnr', {
|
|
366
383
|
instanceId: this.jobId
|
|
367
384
|
});
|
|
368
385
|
}
|
|
@@ -376,14 +393,14 @@ import { Oracle } from './oracle.js';
|
|
|
376
393
|
const logger = kind == 'aztecnr' ? await this.#getAztecnrLogger() : await this.#getContractLogger();
|
|
377
394
|
logContractMessage(logger, LogLevels[level], strippedMessage, fields);
|
|
378
395
|
}
|
|
379
|
-
/** Fetches pending tagged logs into a freshly allocated ephemeral array and returns it. */ async
|
|
396
|
+
/** Fetches pending tagged logs into a freshly allocated ephemeral array and returns it. */ async getPendingTaggedLogsV2(scope, providedSecrets) {
|
|
380
397
|
const secrets = providedSecrets.readAll(this.ephemeralArrayService).map((ps)=>new AppTaggingSecret(ps.secret, this.contractAddress, ps.mode));
|
|
381
398
|
const logService = this.#createLogService();
|
|
382
399
|
const logs = await logService.fetchTaggedLogs(this.contractAddress, scope, secrets);
|
|
383
400
|
return EphemeralArray.fromValues(this.ephemeralArrayService, logs);
|
|
384
401
|
}
|
|
385
402
|
#createLogService() {
|
|
386
|
-
return new LogService(this.aztecNode, this.anchorBlockHeader, this.l2TipsStore, this.keyStore, this.recipientTaggingStore, this.
|
|
403
|
+
return new LogService(this.aztecNode, this.anchorBlockHeader, this.l2TipsStore, this.keyStore, this.recipientTaggingStore, this.taggingSecretSourcesStore, this.addressStore, this.scopes, this.jobId, this.logger.getBindings());
|
|
387
404
|
}
|
|
388
405
|
async validateAndStoreEnqueuedNotesAndEvents(noteValidationRequests, eventValidationRequests, scope) {
|
|
389
406
|
await this.#processValidationRequests(noteValidationRequests.readAll(this.ephemeralArrayService), eventValidationRequests.readAll(this.ephemeralArrayService), scope);
|
|
@@ -400,7 +417,7 @@ import { Oracle } from './oracle.js';
|
|
|
400
417
|
eventService.validateAndStoreEvents(eventValidationRequests, scope, txEffects)
|
|
401
418
|
]);
|
|
402
419
|
}
|
|
403
|
-
async
|
|
420
|
+
async getLogsByTagV2(requests) {
|
|
404
421
|
const logRetrievalRequests = requests.readAll(this.ephemeralArrayService);
|
|
405
422
|
const logService = this.#createLogService();
|
|
406
423
|
const logRetrievalResponses = await logService.fetchLogsByTag(this.contractAddress, logRetrievalRequests);
|
|
@@ -408,10 +425,10 @@ import { Oracle } from './oracle.js';
|
|
|
408
425
|
const innerArrays = logRetrievalResponses.map((responses)=>EphemeralArray.fromValues(this.ephemeralArrayService, responses));
|
|
409
426
|
return EphemeralArray.fromValues(this.ephemeralArrayService, innerArrays);
|
|
410
427
|
}
|
|
411
|
-
/**
|
|
428
|
+
/** Given an array of tx hashes, returns an aligned array of tx info if the tx is available. */ async getResolvedTxs(requests) {
|
|
412
429
|
const txHashes = requests.readAll(this.ephemeralArrayService);
|
|
413
|
-
const
|
|
414
|
-
const options =
|
|
430
|
+
const resolved = await this.txResolver.resolveTxs(txHashes, this.anchorBlockHeader.getBlockNumber());
|
|
431
|
+
const options = resolved.map((r)=>r ? Option.some(r) : Option.none());
|
|
415
432
|
return EphemeralArray.fromValues(this.ephemeralArrayService, options);
|
|
416
433
|
}
|
|
417
434
|
/**
|
|
@@ -421,42 +438,74 @@ import { Oracle } from './oracle.js';
|
|
|
421
438
|
if (txHash.hash.isZero()) {
|
|
422
439
|
throw new Error('Invalid tx hash passed into aztec_utl_getTxEffect oracle handler');
|
|
423
440
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
441
|
+
return await this.#getTxEffectOption(txHash);
|
|
442
|
+
}
|
|
443
|
+
/** Fetches transaction effects for all hashes, preserving request order. */ async getTxEffects(txHashes) {
|
|
444
|
+
const hashes = txHashes.readAll(this.ephemeralArrayService);
|
|
445
|
+
const invalidHash = hashes.find((txHash)=>txHash.hash.isZero());
|
|
446
|
+
if (invalidHash) {
|
|
447
|
+
throw new Error('Invalid tx hash passed into aztec_utl_getTxEffects oracle handler');
|
|
429
448
|
}
|
|
430
|
-
|
|
449
|
+
const uniqueTxHashes = uniqueBy(hashes, (h)=>h.toString());
|
|
450
|
+
const options = await Promise.all(uniqueTxHashes.map((txHash)=>this.#getTxEffectOption(txHash)));
|
|
451
|
+
const optionsByHash = new Map(uniqueTxHashes.map((txHash, i)=>[
|
|
452
|
+
txHash.toString(),
|
|
453
|
+
options[i]
|
|
454
|
+
]));
|
|
455
|
+
return EphemeralArray.fromValues(this.ephemeralArrayService, hashes.map((txHash)=>optionsByHash.get(txHash.toString())));
|
|
431
456
|
}
|
|
432
457
|
setCapsule(contractAddress, slot, capsule, scope) {
|
|
433
|
-
|
|
434
|
-
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
435
|
-
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
436
|
-
}
|
|
458
|
+
this.#assertOwnContract(contractAddress);
|
|
437
459
|
this.capsuleService.setCapsule(contractAddress, slot, capsule, this.jobId, scope);
|
|
438
460
|
}
|
|
439
461
|
async getCapsule(contractAddress, slot, tSize, scope) {
|
|
440
|
-
|
|
441
|
-
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
442
|
-
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
443
|
-
}
|
|
462
|
+
this.#assertOwnContract(contractAddress);
|
|
444
463
|
const values = await this.capsuleService.getCapsule(contractAddress, slot, this.jobId, scope, this.capsules);
|
|
445
|
-
return values ? Option.some(values) : Option.none(
|
|
464
|
+
return values ? Option.some(values) : Option.none({
|
|
465
|
+
length: tSize
|
|
466
|
+
});
|
|
446
467
|
}
|
|
447
468
|
deleteCapsule(contractAddress, slot, scope) {
|
|
448
|
-
|
|
449
|
-
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
450
|
-
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
451
|
-
}
|
|
469
|
+
this.#assertOwnContract(contractAddress);
|
|
452
470
|
this.capsuleService.deleteCapsule(contractAddress, slot, this.jobId, scope);
|
|
453
471
|
}
|
|
454
472
|
copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope) {
|
|
473
|
+
this.#assertOwnContract(contractAddress);
|
|
474
|
+
return this.capsuleService.copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, this.jobId, scope);
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Asserts the executing contract may only access its own slice of PXE DB.
|
|
478
|
+
*/ #assertOwnContract(contractAddress) {
|
|
455
479
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
456
|
-
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
457
480
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
458
481
|
}
|
|
459
|
-
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Records a fact into a collection. A `Some` origin block makes the fact retractable (pruned on reorg of that
|
|
485
|
+
* block), a `None` origin block makes it non-retractable, surviving reorgs.
|
|
486
|
+
*/ recordFact(contractAddress, scope, factCollectionTypeId, factCollectionId, factTypeId, payload, originBlock) {
|
|
487
|
+
this.#assertOwnContract(contractAddress);
|
|
488
|
+
return this.factService.recordFact(new FactCollectionKey(contractAddress, scope, factCollectionTypeId, factCollectionId), factTypeId, payload.readAll(this.ephemeralArrayService), originBlock.isSome() ? originBlock.value : undefined, this.jobId);
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Deletes a fact collection, removing all its facts. A no-op if no such collection exists.
|
|
492
|
+
*/ deleteFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId) {
|
|
493
|
+
this.#assertOwnContract(contractAddress);
|
|
494
|
+
return this.factService.deleteFactCollection(new FactCollectionKey(contractAddress, scope, factCollectionTypeId, factCollectionId), this.jobId);
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Returns a fact collection.
|
|
498
|
+
*/ async getFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId) {
|
|
499
|
+
this.#assertOwnContract(contractAddress);
|
|
500
|
+
const tips = anchoredTipBlockNumbers(await this.l2TipsStore.getL2Tips(), this.anchorBlockHeader.getBlockNumber());
|
|
501
|
+
const collection = await this.factService.getFactCollection(new FactCollectionKey(contractAddress, scope, factCollectionTypeId, factCollectionId), tips, this.jobId);
|
|
502
|
+
return collection ? Option.some(toNoirFactCollection(this.ephemeralArrayService, contractAddress, scope, factCollectionTypeId, factCollectionId, collection.facts)) : Option.none(emptyFactCollection(this.ephemeralArrayService));
|
|
503
|
+
}
|
|
504
|
+
/** Returns every fact collection of `factCollectionTypeId`. */ async getFactCollectionsByType(contractAddress, scope, factCollectionTypeId) {
|
|
505
|
+
this.#assertOwnContract(contractAddress);
|
|
506
|
+
const tips = anchoredTipBlockNumbers(await this.l2TipsStore.getL2Tips(), this.anchorBlockHeader.getBlockNumber());
|
|
507
|
+
const collections = await this.factService.getFactCollectionsByType(new FactCollectionTypeKey(contractAddress, scope, factCollectionTypeId), tips, this.jobId);
|
|
508
|
+
return EphemeralArray.fromValues(this.ephemeralArrayService, collections.map((collection)=>toNoirFactCollection(this.ephemeralArrayService, collection.key.contractAddress, collection.key.scope, collection.key.factCollectionTypeId, collection.key.factCollectionId, collection.facts)));
|
|
460
509
|
}
|
|
461
510
|
/**
|
|
462
511
|
* Clears cached sync state for a contract for a set of scopes, forcing re-sync on the next query so that newly
|
|
@@ -472,7 +521,7 @@ import { Oracle } from './oracle.js';
|
|
|
472
521
|
const capacity = ciphertext.maxLength;
|
|
473
522
|
try {
|
|
474
523
|
const aes128 = new Aes128();
|
|
475
|
-
const plaintext = await aes128.decryptBufferCBC(Buffer.from(ciphertext.data), iv, symKey);
|
|
524
|
+
const plaintext = await aes128.decryptBufferCBC(Buffer.from(ciphertext.data), Buffer.from(iv), Buffer.from(symKey));
|
|
476
525
|
return Option.some(BoundedVec.from({
|
|
477
526
|
data: [
|
|
478
527
|
...plaintext
|
|
@@ -480,9 +529,9 @@ import { Oracle } from './oracle.js';
|
|
|
480
529
|
maxLength: capacity
|
|
481
530
|
}));
|
|
482
531
|
} catch {
|
|
483
|
-
return Option.none(
|
|
532
|
+
return Option.none({
|
|
484
533
|
maxLength: capacity
|
|
485
|
-
})
|
|
534
|
+
});
|
|
486
535
|
}
|
|
487
536
|
}
|
|
488
537
|
/**
|
|
@@ -490,17 +539,29 @@ import { Oracle } from './oracle.js';
|
|
|
490
539
|
* @param address - The recipient address.
|
|
491
540
|
* @param ephPks - Ephemeral array containing the serialized Points.
|
|
492
541
|
* @param contractAddress - The contract address for app-siloing (validated against execution context).
|
|
493
|
-
* @returns A new ephemeral array containing the computed shared secrets
|
|
542
|
+
* @returns A new ephemeral array containing the computed shared secrets, or an empty array when the PXE does not
|
|
543
|
+
* hold the keys for `address`.
|
|
544
|
+
* @throws If `address` is not in the execution's allowed scopes.
|
|
494
545
|
*/ async getSharedSecrets(address, ephPks, contractAddress) {
|
|
495
546
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
496
547
|
throw new Error(`getSharedSecrets called with contract address ${contractAddress}, expected ${this.contractAddress}`);
|
|
497
548
|
}
|
|
498
|
-
|
|
549
|
+
assertAllowedScope(address, this.scopes);
|
|
550
|
+
// An address can be in scope without the PXE holding its keys (e.g. syncing a registered but non-owned account),
|
|
551
|
+
// in which case no secrets can be derived and we return an empty array rather than failing.
|
|
552
|
+
const recipientCompleteAddress = await this.addressStore.getCompleteAddress(address);
|
|
553
|
+
if (!recipientCompleteAddress) {
|
|
554
|
+
this.logger.warn(`Computing shared secrets for address ${address} whose keys are not held - returning no secrets`, {
|
|
555
|
+
address,
|
|
556
|
+
contractAddress: this.contractAddress
|
|
557
|
+
});
|
|
558
|
+
return EphemeralArray.fromValues(this.ephemeralArrayService, []);
|
|
559
|
+
}
|
|
499
560
|
const ivpkMHash = await hashPublicKey(recipientCompleteAddress.publicKeys.ivpkM);
|
|
500
561
|
const ivskM = await this.keyStore.getMasterSecretKey(ivpkMHash);
|
|
501
562
|
const addressSecret = await computeAddressSecret(await recipientCompleteAddress.getPreaddress(), ivskM);
|
|
502
563
|
const ephPkPoints = ephPks.readAll(this.ephemeralArrayService);
|
|
503
|
-
const secrets = await Promise.all(ephPkPoints.map((
|
|
564
|
+
const secrets = await Promise.all(ephPkPoints.map(({ x, y })=>appSiloEcdhSharedSecret(addressSecret, new Point(x, y), this.contractAddress)));
|
|
504
565
|
return EphemeralArray.fromValues(this.ephemeralArrayService, secrets);
|
|
505
566
|
}
|
|
506
567
|
pushEphemeral(slot, elements) {
|
|
@@ -524,6 +585,27 @@ import { Oracle } from './oracle.js';
|
|
|
524
585
|
clearEphemeral(slot) {
|
|
525
586
|
this.ephemeralArrayService.clear(slot);
|
|
526
587
|
}
|
|
588
|
+
pushTransient(slot, elements) {
|
|
589
|
+
return this.transientArrayService.push(this.contractAddress, slot, elements);
|
|
590
|
+
}
|
|
591
|
+
popTransient(slot) {
|
|
592
|
+
return this.transientArrayService.pop(this.contractAddress, slot);
|
|
593
|
+
}
|
|
594
|
+
getTransient(slot, index) {
|
|
595
|
+
return this.transientArrayService.get(this.contractAddress, slot, index);
|
|
596
|
+
}
|
|
597
|
+
setTransient(slot, index, elements) {
|
|
598
|
+
this.transientArrayService.set(this.contractAddress, slot, index, elements);
|
|
599
|
+
}
|
|
600
|
+
getTransientLen(slot) {
|
|
601
|
+
return this.transientArrayService.len(this.contractAddress, slot);
|
|
602
|
+
}
|
|
603
|
+
removeTransient(slot, index) {
|
|
604
|
+
this.transientArrayService.remove(this.contractAddress, slot, index);
|
|
605
|
+
}
|
|
606
|
+
clearTransient(slot) {
|
|
607
|
+
this.transientArrayService.clear(this.contractAddress, slot);
|
|
608
|
+
}
|
|
527
609
|
emitOffchainEffect(data) {
|
|
528
610
|
this.offchainEffects.push({
|
|
529
611
|
data,
|
|
@@ -532,48 +614,63 @@ import { Oracle } from './oracle.js';
|
|
|
532
614
|
return Promise.resolve();
|
|
533
615
|
}
|
|
534
616
|
/** Executes another utility function from within this one and returns its serialized return values. */ async callUtilityFunction(targetContractAddress, functionSelector, args) {
|
|
535
|
-
const targetArtifact = await this.
|
|
617
|
+
const targetArtifact = await this.anchoredContractData.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
|
|
618
|
+
if (!targetArtifact) {
|
|
619
|
+
throw new Error(`Cannot call ${targetContractAddress}:${functionSelector}: the contract is not registered. ` + `Register it via wallet.registerContract(...).`);
|
|
620
|
+
}
|
|
536
621
|
if (!targetContractAddress.equals(this.contractAddress)) {
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
callerClassId
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
const
|
|
557
|
-
|
|
622
|
+
// Standard handshake registry reads are authorized by default; every other cross-contract call needs the hook.
|
|
623
|
+
if (!await isStandardHandshakeRegistryUtilityRead(targetContractAddress, functionSelector)) {
|
|
624
|
+
const [callerClassId, targetClassId] = await Promise.all([
|
|
625
|
+
this.anchoredContractData.getCurrentClassId(this.contractAddress),
|
|
626
|
+
this.anchoredContractData.getCurrentClassId(targetContractAddress)
|
|
627
|
+
]);
|
|
628
|
+
if (!callerClassId || !targetClassId) {
|
|
629
|
+
throw new Error(`Cannot authorize utility call from ${this.contractAddress} to ${targetContractAddress}: ` + `${!callerClassId ? this.contractAddress : targetContractAddress} is not registered.`);
|
|
630
|
+
}
|
|
631
|
+
const request = {
|
|
632
|
+
caller: this.contractAddress,
|
|
633
|
+
callerClassId,
|
|
634
|
+
target: targetContractAddress,
|
|
635
|
+
targetClassId,
|
|
636
|
+
functionSelector,
|
|
637
|
+
functionName: targetArtifact.name,
|
|
638
|
+
args,
|
|
639
|
+
callerContext: this.callerContext
|
|
640
|
+
};
|
|
641
|
+
const response = this.hooks?.authorizeUtilityCall ? await this.hooks.authorizeUtilityCall(request) : {
|
|
642
|
+
authorized: false,
|
|
643
|
+
reason: 'No authorizeUtilityCall hook configured'
|
|
644
|
+
};
|
|
645
|
+
if (!response.authorized) {
|
|
646
|
+
const reason = response.reason ? `: ${response.reason}` : '';
|
|
647
|
+
throw new Error(`Cross-contract utility call denied${reason}. ${this.contractAddress} attempted to call ` + `${targetContractAddress}:${functionSelector} (${targetArtifact.name}). ` + `See https://docs.aztec.network/errors/11`);
|
|
648
|
+
}
|
|
558
649
|
}
|
|
559
650
|
await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
|
|
560
651
|
}
|
|
561
652
|
this.logger.debug(`Calling nested utility function ${targetContractAddress}:${functionSelector} from ${this.contractAddress}`);
|
|
562
653
|
const nestedOracle = new UtilityExecutionOracle({
|
|
563
|
-
|
|
654
|
+
callContext: CallContext.from({
|
|
655
|
+
msgSender: this.contractAddress,
|
|
656
|
+
contractAddress: targetContractAddress,
|
|
657
|
+
functionSelector,
|
|
658
|
+
isStaticCall: true
|
|
659
|
+
}),
|
|
564
660
|
authWitnesses: this.authWitnesses,
|
|
565
661
|
capsules: this.capsules,
|
|
566
662
|
anchorBlockHeader: this.anchorBlockHeader,
|
|
567
|
-
|
|
663
|
+
anchoredContractData: this.anchoredContractData,
|
|
568
664
|
noteStore: this.noteStore,
|
|
569
665
|
keyStore: this.keyStore,
|
|
570
666
|
addressStore: this.addressStore,
|
|
571
667
|
aztecNode: this.aztecNode,
|
|
572
668
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
573
|
-
|
|
669
|
+
taggingSecretSourcesStore: this.taggingSecretSourcesStore,
|
|
574
670
|
capsuleService: this.capsuleService,
|
|
671
|
+
factService: this.factService,
|
|
575
672
|
privateEventStore: this.privateEventStore,
|
|
576
|
-
|
|
673
|
+
txResolver: this.txResolver,
|
|
577
674
|
contractSyncService: this.contractSyncService,
|
|
578
675
|
l2TipsStore: this.l2TipsStore,
|
|
579
676
|
jobId: this.jobId,
|
|
@@ -581,11 +678,12 @@ import { Oracle } from './oracle.js';
|
|
|
581
678
|
simulator: this.simulator,
|
|
582
679
|
hooks: this.hooks,
|
|
583
680
|
utilityExecutor: this.utilityExecutor,
|
|
584
|
-
log: this.logger
|
|
681
|
+
log: this.logger,
|
|
682
|
+
// Shared across the whole execution tree: nested utility frames inherit the caller's transient-array store.
|
|
683
|
+
transientArrayService: this.transientArrayService
|
|
585
684
|
});
|
|
586
685
|
const initialWitness = toACVMWitness(0, args);
|
|
587
|
-
const
|
|
588
|
-
const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, targetArtifact, acvmCallback.toACIRCallback()).catch((err)=>{
|
|
686
|
+
const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, targetArtifact, buildACIRCallback(nestedOracle)).catch((err)=>{
|
|
589
687
|
err.message = resolveAssertionMessageFromError(err, targetArtifact);
|
|
590
688
|
throw new ExecutionError(err.message, {
|
|
591
689
|
contractAddress: targetContractAddress,
|
|
@@ -604,9 +702,7 @@ import { Oracle } from './oracle.js';
|
|
|
604
702
|
* once. Returns a map keyed by `TxHash.toString()`; hashes for which the node has no tx effect are omitted.
|
|
605
703
|
*/ async #fetchTxEffects(txHashes) {
|
|
606
704
|
const uniqueTxHashes = uniqueBy(txHashes, (h)=>h.toString());
|
|
607
|
-
const fetched = await Promise.all(uniqueTxHashes.map((h)=>this.
|
|
608
|
-
includeTxEffect: true
|
|
609
|
-
})));
|
|
705
|
+
const fetched = await Promise.all(uniqueTxHashes.map((h)=>this.aztecNodeReadCache.getTxReceiptWithEffect(h)));
|
|
610
706
|
return new Map(uniqueTxHashes.map((h, i)=>{
|
|
611
707
|
const receipt = fetched[i];
|
|
612
708
|
if (!receipt.isMined() || !receipt.txEffect) {
|
|
@@ -627,6 +723,25 @@ import { Oracle } from './oracle.js';
|
|
|
627
723
|
];
|
|
628
724
|
}).filter((entry)=>entry[1] !== undefined));
|
|
629
725
|
}
|
|
726
|
+
async #getTxEffectOption(txHash) {
|
|
727
|
+
const receipt = await this.aztecNodeReadCache.getTxReceiptWithEffect(txHash);
|
|
728
|
+
if (!receipt.isMined() || !receipt.txEffect || receipt.blockNumber > this.anchorBlockHeader.getBlockNumber()) {
|
|
729
|
+
return Option.none();
|
|
730
|
+
}
|
|
731
|
+
return Option.some(this.#toTxEffectData(receipt.txEffect));
|
|
732
|
+
}
|
|
733
|
+
#toTxEffectData(txEffect) {
|
|
734
|
+
return {
|
|
735
|
+
...txEffect,
|
|
736
|
+
revertCode: txEffect.revertCode.getCode(),
|
|
737
|
+
publicLogs: FlatPublicLogs.fromLogs(txEffect.publicLogs),
|
|
738
|
+
contractClassLogs: txEffect.contractClassLogs.map((log)=>({
|
|
739
|
+
contractAddress: log.contractAddress,
|
|
740
|
+
fields: log.fields.toFields(),
|
|
741
|
+
emittedLength: log.emittedLength
|
|
742
|
+
}))
|
|
743
|
+
};
|
|
744
|
+
}
|
|
630
745
|
/** Runs a query concurrently with a validation that the block hash is not ahead of the anchor block. */ async #queryWithBlockHashNotAfterAnchor(blockHash, query) {
|
|
631
746
|
// Most contracts query state at the "current" block, which is the anchor. Skip the validation when we can.
|
|
632
747
|
const anchorHash = await this.anchorBlockHeader.hash();
|
|
@@ -636,7 +751,7 @@ import { Oracle } from './oracle.js';
|
|
|
636
751
|
const [response] = await Promise.all([
|
|
637
752
|
query(),
|
|
638
753
|
(async ()=>{
|
|
639
|
-
const block = await this.
|
|
754
|
+
const block = await this.aztecNodeReadCache.getBlock(blockHash);
|
|
640
755
|
const header = block?.header;
|
|
641
756
|
if (!header) {
|
|
642
757
|
throw new Error(`Could not find block header for block hash ${blockHash}`);
|
|
@@ -651,4 +766,30 @@ import { Oracle } from './oracle.js';
|
|
|
651
766
|
/** The execution context of the current call. */ get callerContext() {
|
|
652
767
|
return 'utility';
|
|
653
768
|
}
|
|
769
|
+
/** The address of the contract whose function is being executed, from the call context. */ get contractAddress() {
|
|
770
|
+
return this.callContext.contractAddress;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
// Registry reads that any contract may issue without an `authorizeUtilityCall` hook. The constrained-delivery
|
|
774
|
+
// library calls these implicitly for the app, and they are safe to default-authorize: `get_app_siloed_secrets`
|
|
775
|
+
// siloes every returned secret to `msg_sender`, and `get_non_interactive_handshakes` only exposes ephemeral public
|
|
776
|
+
// keys, from which the shared secret cannot be derived without the recipient's secret keys.
|
|
777
|
+
const STANDARD_HANDSHAKE_REGISTRY_DEFAULT_AUTHORIZED_READ_SIGNATURES = [
|
|
778
|
+
'get_non_interactive_handshakes((Field),u32)',
|
|
779
|
+
'get_app_siloed_secrets((Field),(Field))'
|
|
780
|
+
];
|
|
781
|
+
async function doesSelectorHaveSignature(functionSelector, signature) {
|
|
782
|
+
return functionSelector.equals(await FunctionSelector.fromSignature(signature));
|
|
783
|
+
}
|
|
784
|
+
/**
|
|
785
|
+
* Whether a cross-contract utility call targets one of the standard handshake registry's read functions.
|
|
786
|
+
*
|
|
787
|
+
* These reads are authorized by PXE for every wallet, without consulting the `authorizeUtilityCall` hook, so that
|
|
788
|
+
* wallets don't need to know the handshake registry exists in order to deliver and discover messages through it.
|
|
789
|
+
*/ async function isStandardHandshakeRegistryUtilityRead(targetContractAddress, functionSelector) {
|
|
790
|
+
if (!targetContractAddress.equals(STANDARD_HANDSHAKE_REGISTRY_ADDRESS)) {
|
|
791
|
+
return false;
|
|
792
|
+
}
|
|
793
|
+
const matches = await Promise.all(STANDARD_HANDSHAKE_REGISTRY_DEFAULT_AUTHORIZED_READ_SIGNATURES.map((signature)=>doesSelectorHaveSignature(functionSelector, signature)));
|
|
794
|
+
return matches.some(Boolean);
|
|
654
795
|
}
|