@aztec/pxe 0.0.1-commit.b33fc05d0 → 0.0.1-commit.b3d3157a
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 +43 -99
- 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 +26 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +93 -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 +62 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -10
- package/dest/config/index.d.ts +7 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +12 -14
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +13 -5
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +47 -16
- 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 +2 -2
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -9
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -7
- package/dest/contract_function_simulator/index.d.ts +13 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +10 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +48 -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 +45 -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 +5 -5
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +6 -8
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +13 -3
- 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 +35 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
- 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 +5 -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 +6 -8
- package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +62 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +11 -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 +24 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +16 -102
- 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/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.d.ts +74 -45
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +405 -269
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +127 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +786 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +139 -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 +560 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +4 -2
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +33 -47
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +69 -65
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +108 -60
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +382 -157
- 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/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -64
- 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/contract_sync/contract_sync_service.d.ts +7 -8
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +87 -49
- package/dest/contract_sync/helpers.d.ts +2 -4
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +12 -14
- package/dest/debug/pxe_debug_utils.d.ts +3 -8
- 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 +1 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +0 -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 +13 -5
- package/dest/entrypoints/client/lazy/index.d.ts +1 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +0 -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 +13 -5
- package/dest/entrypoints/pxe_creation_options.d.ts +9 -1
- 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 +3 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -2
- 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 +13 -5
- package/dest/events/event_service.d.ts +15 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +44 -11
- 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 +42 -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 +4 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +1 -0
- package/dest/logs/log_service.d.ts +9 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +126 -72
- package/dest/messages/message_context_service.d.ts +3 -3
- package/dest/messages/message_context_service.d.ts.map +1 -1
- package/dest/messages/message_context_service.js +30 -11
- package/dest/notes/note_service.d.ts +27 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +80 -56
- 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.js +1 -1
- 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 +2 -3
- 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 +152 -59
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -10
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +24 -22
- package/dest/pxe.d.ts +58 -10
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +149 -93
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- 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 +591 -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 +50 -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 +36 -28
- 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 +1 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +9 -26
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +1 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +2 -2
- package/dest/storage/open_pxe_stores.d.ts +33 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +27 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +3 -0
- package/dest/storage/private_event_store/stored_private_event.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 +5 -5
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +3 -3
- package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +36 -37
- package/dest/tagging/index.d.ts +5 -4
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +4 -3
- 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 +56 -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 +163 -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 +4 -5
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +26 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +21 -0
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
- 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 +2 -2
- package/package.json +20 -17
- package/src/bin/check_oracle_version.ts +49 -122
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +121 -0
- package/src/block_synchronizer/block_stream_source.ts +81 -0
- package/src/block_synchronizer/block_synchronizer.ts +33 -11
- package/src/config/index.ts +14 -8
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +74 -20
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +1 -1
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -9
- package/src/contract_function_simulator/index.ts +50 -1
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +4 -6
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -6
- package/src/contract_function_simulator/noir-structs/option.ts +69 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +27 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +12 -175
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +498 -441
- package/src/contract_function_simulator/oracle/oracle_registry.ts +585 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +553 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +2 -2
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +91 -86
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +558 -265
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
- package/src/contract_logging.ts +18 -5
- package/src/contract_sync/contract_sync_service.ts +120 -83
- package/src/contract_sync/helpers.ts +13 -25
- package/src/debug/pxe_debug_utils.ts +3 -11
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +10 -5
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +10 -5
- package/src/entrypoints/pxe_creation_options.ts +14 -0
- package/src/entrypoints/server/index.ts +2 -2
- package/src/entrypoints/server/utils.ts +15 -6
- package/src/events/event_service.ts +69 -21
- 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 +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/logs/log_service.ts +158 -134
- package/src/messages/message_context_service.ts +43 -26
- package/src/notes/note_service.ts +119 -85
- 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 +1 -1
- package/src/private_kernel/hints/test_utils.ts +2 -9
- package/src/private_kernel/private_kernel_execution_prover.ts +240 -82
- package/src/private_kernel/private_kernel_oracle.ts +35 -25
- package/src/pxe.ts +256 -98
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
- 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__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +46 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +712 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +14 -35
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +2 -5
- package/src/storage/open_pxe_stores.ts +49 -0
- package/src/storage/private_event_store/private_event_store.ts +4 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
- package/src/storage/tagging_store/sender_tagging_store.ts +6 -6
- package/src/tagging/get_all_logs_by_tags.ts +78 -50
- package/src/tagging/index.ts +4 -3
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +240 -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 +41 -19
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +4 -5
- 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/noir-structs/message_tx_context.d.ts +0 -16
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +0 -1
- package/dest/contract_function_simulator/noir-structs/message_tx_context.js +0 -57
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +0 -9
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +0 -52
- 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/src/access_scopes.ts +0 -9
- package/src/contract_function_simulator/noir-structs/message_tx_context.ts +0 -55
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -77
- 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
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
MAX_NULLIFIERS_PER_TX,
|
|
18
18
|
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
19
19
|
MAX_PRIVATE_LOGS_PER_TX,
|
|
20
|
+
MAX_TX_LIFETIME,
|
|
20
21
|
PRIVATE_TX_L2_GAS_OVERHEAD,
|
|
21
22
|
PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
22
23
|
TX_DA_GAS_OVERHEAD,
|
|
@@ -41,7 +42,7 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
|
41
42
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
42
43
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
43
44
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
44
|
-
import type { BlockParameter } from '@aztec/stdlib/block';
|
|
45
|
+
import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
|
|
45
46
|
import { Gas } from '@aztec/stdlib/gas';
|
|
46
47
|
import {
|
|
47
48
|
computeNoteHashNonce,
|
|
@@ -75,10 +76,12 @@ import {
|
|
|
75
76
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
76
77
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
77
78
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
79
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
78
80
|
import {
|
|
79
81
|
BlockHeader,
|
|
80
82
|
CallContext,
|
|
81
83
|
HashedValues,
|
|
84
|
+
type OffchainEffect,
|
|
82
85
|
PrivateExecutionResult,
|
|
83
86
|
TxConstantData,
|
|
84
87
|
TxExecutionRequest,
|
|
@@ -87,10 +90,11 @@ import {
|
|
|
87
90
|
getFinalMinRevertibleSideEffectCounter,
|
|
88
91
|
} from '@aztec/stdlib/tx';
|
|
89
92
|
|
|
90
|
-
import type { AccessScopes } from '../access_scopes.js';
|
|
91
93
|
import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
|
|
94
|
+
import type { ExecutionHooks } from '../hooks/index.js';
|
|
92
95
|
import type { MessageContextService } from '../messages/message_context_service.js';
|
|
93
96
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
97
|
+
import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
|
|
94
98
|
import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
95
99
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
96
100
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
@@ -120,7 +124,7 @@ export type ContractSimulatorRunOpts = {
|
|
|
120
124
|
/** The address used as a tagging sender when emitting private logs. */
|
|
121
125
|
senderForTags?: AztecAddress;
|
|
122
126
|
/** The accounts whose notes we can access in this call. */
|
|
123
|
-
scopes:
|
|
127
|
+
scopes: AztecAddress[];
|
|
124
128
|
/** The job ID for staged writes. */
|
|
125
129
|
jobId: string;
|
|
126
130
|
};
|
|
@@ -132,6 +136,7 @@ export type ContractFunctionSimulatorArgs = {
|
|
|
132
136
|
keyStore: KeyStore;
|
|
133
137
|
addressStore: AddressStore;
|
|
134
138
|
aztecNode: AztecNode;
|
|
139
|
+
l2TipsStore: L2TipsProvider;
|
|
135
140
|
senderTaggingStore: SenderTaggingStore;
|
|
136
141
|
recipientTaggingStore: RecipientTaggingStore;
|
|
137
142
|
senderAddressBookStore: SenderAddressBookStore;
|
|
@@ -140,6 +145,7 @@ export type ContractFunctionSimulatorArgs = {
|
|
|
140
145
|
simulator: CircuitSimulator;
|
|
141
146
|
contractSyncService: ContractSyncService;
|
|
142
147
|
messageContextService: MessageContextService;
|
|
148
|
+
hooks?: ExecutionHooks;
|
|
143
149
|
};
|
|
144
150
|
|
|
145
151
|
/**
|
|
@@ -152,6 +158,7 @@ export class ContractFunctionSimulator {
|
|
|
152
158
|
private readonly keyStore: KeyStore;
|
|
153
159
|
private readonly addressStore: AddressStore;
|
|
154
160
|
private readonly aztecNode: AztecNode;
|
|
161
|
+
private readonly l2TipsStore: L2TipsProvider;
|
|
155
162
|
private readonly senderTaggingStore: SenderTaggingStore;
|
|
156
163
|
private readonly recipientTaggingStore: RecipientTaggingStore;
|
|
157
164
|
private readonly senderAddressBookStore: SenderAddressBookStore;
|
|
@@ -160,6 +167,7 @@ export class ContractFunctionSimulator {
|
|
|
160
167
|
private readonly simulator: CircuitSimulator;
|
|
161
168
|
private readonly contractSyncService: ContractSyncService;
|
|
162
169
|
private readonly messageContextService: MessageContextService;
|
|
170
|
+
private readonly hooks: ExecutionHooks | undefined;
|
|
163
171
|
|
|
164
172
|
constructor(args: ContractFunctionSimulatorArgs) {
|
|
165
173
|
this.contractStore = args.contractStore;
|
|
@@ -167,6 +175,7 @@ export class ContractFunctionSimulator {
|
|
|
167
175
|
this.keyStore = args.keyStore;
|
|
168
176
|
this.addressStore = args.addressStore;
|
|
169
177
|
this.aztecNode = args.aztecNode;
|
|
178
|
+
this.l2TipsStore = args.l2TipsStore;
|
|
170
179
|
this.senderTaggingStore = args.senderTaggingStore;
|
|
171
180
|
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
172
181
|
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
@@ -175,6 +184,7 @@ export class ContractFunctionSimulator {
|
|
|
175
184
|
this.simulator = args.simulator;
|
|
176
185
|
this.contractSyncService = args.contractSyncService;
|
|
177
186
|
this.messageContextService = args.messageContextService;
|
|
187
|
+
this.hooks = args.hooks;
|
|
178
188
|
this.log = createLogger('simulator');
|
|
179
189
|
}
|
|
180
190
|
|
|
@@ -203,7 +213,7 @@ export class ContractFunctionSimulator {
|
|
|
203
213
|
}
|
|
204
214
|
|
|
205
215
|
if (request.origin !== contractAddress) {
|
|
206
|
-
|
|
216
|
+
throw new Error(
|
|
207
217
|
`Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
|
|
208
218
|
);
|
|
209
219
|
}
|
|
@@ -243,7 +253,7 @@ export class ContractFunctionSimulator {
|
|
|
243
253
|
senderTaggingStore: this.senderTaggingStore,
|
|
244
254
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
245
255
|
senderAddressBookStore: this.senderAddressBookStore,
|
|
246
|
-
|
|
256
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
247
257
|
privateEventStore: this.privateEventStore,
|
|
248
258
|
messageContextService: this.messageContextService,
|
|
249
259
|
contractSyncService: this.contractSyncService,
|
|
@@ -253,6 +263,8 @@ export class ContractFunctionSimulator {
|
|
|
253
263
|
scopes,
|
|
254
264
|
senderForTags,
|
|
255
265
|
simulator: this.simulator,
|
|
266
|
+
l2TipsStore: this.l2TipsStore,
|
|
267
|
+
hooks: this.hooks,
|
|
256
268
|
});
|
|
257
269
|
|
|
258
270
|
const setupTime = simulatorSetupTimer.ms();
|
|
@@ -282,7 +294,7 @@ export class ContractFunctionSimulator {
|
|
|
282
294
|
);
|
|
283
295
|
const publicFunctionsCalldata = await Promise.all(
|
|
284
296
|
publicCallRequests.map(async r => {
|
|
285
|
-
const calldata = await privateExecutionOracle.
|
|
297
|
+
const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
|
|
286
298
|
return new HashedValues(calldata, r.calldataHash);
|
|
287
299
|
}),
|
|
288
300
|
);
|
|
@@ -303,7 +315,6 @@ export class ContractFunctionSimulator {
|
|
|
303
315
|
}
|
|
304
316
|
}
|
|
305
317
|
|
|
306
|
-
// docs:start:execute_utility_function
|
|
307
318
|
/**
|
|
308
319
|
* Runs a utility function.
|
|
309
320
|
* @param call - The function call to execute.
|
|
@@ -317,15 +328,19 @@ export class ContractFunctionSimulator {
|
|
|
317
328
|
call: FunctionCall,
|
|
318
329
|
authwits: AuthWitness[],
|
|
319
330
|
anchorBlockHeader: BlockHeader,
|
|
320
|
-
scopes:
|
|
331
|
+
scopes: AztecAddress[],
|
|
321
332
|
jobId: string,
|
|
322
|
-
): Promise<Fr[]> {
|
|
333
|
+
): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
|
|
323
334
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
324
335
|
|
|
325
336
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
326
337
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
327
338
|
}
|
|
328
339
|
|
|
340
|
+
const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
|
|
341
|
+
await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
|
|
342
|
+
};
|
|
343
|
+
|
|
329
344
|
const oracle = new UtilityExecutionOracle({
|
|
330
345
|
contractAddress: call.to,
|
|
331
346
|
authWitnesses: authwits,
|
|
@@ -338,11 +353,16 @@ export class ContractFunctionSimulator {
|
|
|
338
353
|
aztecNode: this.aztecNode,
|
|
339
354
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
340
355
|
senderAddressBookStore: this.senderAddressBookStore,
|
|
341
|
-
|
|
356
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
342
357
|
privateEventStore: this.privateEventStore,
|
|
343
358
|
messageContextService: this.messageContextService,
|
|
359
|
+
contractSyncService: this.contractSyncService,
|
|
360
|
+
l2TipsStore: this.l2TipsStore,
|
|
344
361
|
jobId,
|
|
345
362
|
scopes,
|
|
363
|
+
simulator: this.simulator,
|
|
364
|
+
hooks: this.hooks,
|
|
365
|
+
utilityExecutor,
|
|
346
366
|
});
|
|
347
367
|
|
|
348
368
|
try {
|
|
@@ -368,12 +388,14 @@ export class ContractFunctionSimulator {
|
|
|
368
388
|
});
|
|
369
389
|
|
|
370
390
|
this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
|
|
371
|
-
return
|
|
391
|
+
return {
|
|
392
|
+
result: witnessMapToFields(acirExecutionResult.returnWitness),
|
|
393
|
+
offchainEffects: oracle.getOffchainEffects(),
|
|
394
|
+
};
|
|
372
395
|
} catch (err) {
|
|
373
396
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
374
397
|
}
|
|
375
398
|
}
|
|
376
|
-
// docs:end:execute_utility_function
|
|
377
399
|
|
|
378
400
|
/**
|
|
379
401
|
* Returns the execution statistics collected during the simulator run.
|
|
@@ -438,14 +460,34 @@ export async function generateSimulatedProvingResult(
|
|
|
438
460
|
|
|
439
461
|
let publicTeardownCallRequest;
|
|
440
462
|
|
|
463
|
+
// We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
|
|
464
|
+
let expirationTimestamp =
|
|
465
|
+
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp +
|
|
466
|
+
BigInt(MAX_TX_LIFETIME);
|
|
467
|
+
|
|
468
|
+
let feePayer = AztecAddress.zero();
|
|
469
|
+
|
|
441
470
|
const executions = [privateExecutionResult.entrypoint];
|
|
442
471
|
|
|
443
472
|
while (executions.length !== 0) {
|
|
444
473
|
const execution = executions.shift()!;
|
|
445
474
|
executions.unshift(...execution!.nestedExecutionResults);
|
|
446
475
|
|
|
476
|
+
// Just like kernels we overwrite the default value if the call sets it.
|
|
477
|
+
const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
|
|
478
|
+
if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
|
|
479
|
+
expirationTimestamp = callExpirationTimestamp;
|
|
480
|
+
}
|
|
481
|
+
|
|
447
482
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
448
483
|
|
|
484
|
+
if (execution.publicInputs.isFeePayer) {
|
|
485
|
+
if (!feePayer.isZero()) {
|
|
486
|
+
throw new Error('Multiple fee payers found in private execution result');
|
|
487
|
+
}
|
|
488
|
+
feePayer = contractAddress;
|
|
489
|
+
}
|
|
490
|
+
|
|
449
491
|
scopedNoteHashes.push(
|
|
450
492
|
...execution.publicInputs.noteHashes
|
|
451
493
|
.getActiveItems()
|
|
@@ -666,8 +708,8 @@ export async function generateSimulatedProvingResult(
|
|
|
666
708
|
daGas: TX_DA_GAS_OVERHEAD,
|
|
667
709
|
}),
|
|
668
710
|
),
|
|
669
|
-
/*feePayer=*/
|
|
670
|
-
/*expirationTimestamp=*/
|
|
711
|
+
/*feePayer=*/ feePayer,
|
|
712
|
+
/*expirationTimestamp=*/ expirationTimestamp,
|
|
671
713
|
hasPublicCalls ? inputsForPublic : undefined,
|
|
672
714
|
!hasPublicCalls ? inputsForRollup : undefined,
|
|
673
715
|
);
|
|
@@ -722,7 +764,7 @@ function squashTransientSideEffects(
|
|
|
722
764
|
* at the tx's anchor block, mimicking the behavior of the kernels
|
|
723
765
|
*/
|
|
724
766
|
async function verifyReadRequests(
|
|
725
|
-
node: Pick<AztecNode, '
|
|
767
|
+
node: Pick<AztecNode, 'findLeavesIndexes'>,
|
|
726
768
|
anchorBlockHash: BlockParameter,
|
|
727
769
|
noteHashReadRequests: ScopedReadRequest[],
|
|
728
770
|
nullifierReadRequests: ScopedReadRequest[],
|
|
@@ -755,13 +797,25 @@ async function verifyReadRequests(
|
|
|
755
797
|
}
|
|
756
798
|
}
|
|
757
799
|
|
|
758
|
-
const [
|
|
759
|
-
|
|
760
|
-
|
|
800
|
+
const [noteHashResults, nullifierResults] = await Promise.all([
|
|
801
|
+
settledNoteHashReads.length > 0
|
|
802
|
+
? node.findLeavesIndexes(
|
|
803
|
+
anchorBlockHash,
|
|
804
|
+
MerkleTreeId.NOTE_HASH_TREE,
|
|
805
|
+
settledNoteHashReads.map(({ value }) => value),
|
|
806
|
+
)
|
|
807
|
+
: [],
|
|
808
|
+
settledNullifierReads.length > 0
|
|
809
|
+
? node.findLeavesIndexes(
|
|
810
|
+
anchorBlockHash,
|
|
811
|
+
MerkleTreeId.NULLIFIER_TREE,
|
|
812
|
+
settledNullifierReads.map(({ value }) => value),
|
|
813
|
+
)
|
|
814
|
+
: [],
|
|
761
815
|
]);
|
|
762
816
|
|
|
763
817
|
for (let i = 0; i < settledNoteHashReads.length; i++) {
|
|
764
|
-
if (!
|
|
818
|
+
if (!noteHashResults[i]) {
|
|
765
819
|
throw new Error(
|
|
766
820
|
`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`,
|
|
767
821
|
);
|
|
@@ -769,7 +823,7 @@ async function verifyReadRequests(
|
|
|
769
823
|
}
|
|
770
824
|
|
|
771
825
|
for (let i = 0; i < settledNullifierReads.length; i++) {
|
|
772
|
-
if (!
|
|
826
|
+
if (!nullifierResults[i]) {
|
|
773
827
|
throw new Error(
|
|
774
828
|
`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`,
|
|
775
829
|
);
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
|
|
3
|
+
/** In-memory store for ephemeral arrays scoped to a single contract call frame. */
|
|
4
|
+
export class EphemeralArrayService {
|
|
5
|
+
/**
|
|
6
|
+
* Maps a slot to the elements of the array stored at that slot. Each element is a serialized representation of
|
|
7
|
+
* the original type.
|
|
8
|
+
*/
|
|
9
|
+
#arrays: Map<string, Fr[][]> = new Map();
|
|
10
|
+
|
|
11
|
+
/** Returns all elements in the array, or an empty array if uninitialized. */
|
|
12
|
+
readArrayAt(slot: Fr): Fr[][] {
|
|
13
|
+
return this.#arrays.get(slot.toString()) ?? [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#setArray(slot: Fr, array: Fr[][]): void {
|
|
17
|
+
this.#arrays.set(slot.toString(), array);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Returns the number of elements in the array at the given slot. */
|
|
21
|
+
len(slot: Fr): number {
|
|
22
|
+
return this.readArrayAt(slot).length;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Appends an element to the array and returns the new length. */
|
|
26
|
+
push(slot: Fr, elements: Fr[]): number {
|
|
27
|
+
const array = this.readArrayAt(slot);
|
|
28
|
+
array.push(elements);
|
|
29
|
+
this.#setArray(slot, array);
|
|
30
|
+
return array.length;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Removes and returns the last element. Throws if empty. */
|
|
34
|
+
pop(slot: Fr): Fr[] {
|
|
35
|
+
const array = this.readArrayAt(slot);
|
|
36
|
+
if (array.length === 0) {
|
|
37
|
+
throw new Error(`Ephemeral array at slot ${slot} is empty`);
|
|
38
|
+
}
|
|
39
|
+
const element = array.pop()!;
|
|
40
|
+
this.#setArray(slot, array);
|
|
41
|
+
return element;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Returns the element at the given index. Throws if out of bounds. */
|
|
45
|
+
get(slot: Fr, index: number): Fr[] {
|
|
46
|
+
const array = this.readArrayAt(slot);
|
|
47
|
+
if (index < 0 || index >= array.length) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
`Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
return array[index];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Overwrites the element at the given index. Throws if out of bounds. */
|
|
56
|
+
set(slot: Fr, index: number, value: Fr[]): void {
|
|
57
|
+
const array = this.readArrayAt(slot);
|
|
58
|
+
if (index < 0 || index >= array.length) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
`Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
array[index] = value;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */
|
|
67
|
+
remove(slot: Fr, index: number): void {
|
|
68
|
+
const array = this.readArrayAt(slot);
|
|
69
|
+
if (index < 0 || index >= array.length) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
array.splice(index, 1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Removes all elements from the array. */
|
|
78
|
+
clear(slot: Fr): void {
|
|
79
|
+
this.#arrays.delete(slot.toString());
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Allocates a fresh, unused slot for a new ephemeral array. */
|
|
83
|
+
allocateSlot(): Fr {
|
|
84
|
+
let slot: Fr;
|
|
85
|
+
do {
|
|
86
|
+
slot = Fr.random();
|
|
87
|
+
} while (this.#arrays.has(slot.toString()));
|
|
88
|
+
return slot;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Creates a new ephemeral array pre-populated with the given elements and returns its slot. */
|
|
92
|
+
newArray(elements: Fr[][]): Fr {
|
|
93
|
+
const slot = this.allocateSlot();
|
|
94
|
+
this.#setArray(slot, elements);
|
|
95
|
+
return slot;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Copies `count` elements from the source array to the destination array (overwrites destination). */
|
|
99
|
+
copy(srcSlot: Fr, dstSlot: Fr, count: number): void {
|
|
100
|
+
const srcArray = this.readArrayAt(srcSlot);
|
|
101
|
+
if (count > srcArray.length) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Cannot copy ${count} elements from ephemeral array of length ${srcArray.length} at slot ${srcSlot}`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
// Deep copy the elements to avoid aliasing
|
|
107
|
+
const copied = srcArray.slice(0, count).map(el => [...el]);
|
|
108
|
+
this.#setArray(dstSlot, copied);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -2,7 +2,7 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
2
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
|
|
4
4
|
|
|
5
|
-
import type { NoteData } from './
|
|
5
|
+
import type { NoteData } from './noir-structs/note_data.js';
|
|
6
6
|
|
|
7
7
|
interface PendingNote {
|
|
8
8
|
note: NoteData;
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* A map that stores the tagging index range for a given extended directional app tagging secret.
|
|
5
|
-
* Note: The directional app tagging secret is unique for a (sender, recipient, contract) tuple while the direction
|
|
6
|
-
* of sender -> recipient matters.
|
|
7
|
-
*/
|
|
3
|
+
/** A map that stores the tagging index range for a given app tagging secret. */
|
|
8
4
|
export class ExecutionTaggingIndexCache {
|
|
9
5
|
private taggingIndexMap: Map<string, { lowestIndex: number; highestIndex: number }> = new Map();
|
|
10
6
|
|
|
11
|
-
public getLastUsedIndex(secret:
|
|
7
|
+
public getLastUsedIndex(secret: AppTaggingSecret): number | undefined {
|
|
12
8
|
return this.taggingIndexMap.get(secret.toString())?.highestIndex;
|
|
13
9
|
}
|
|
14
10
|
|
|
15
|
-
public setLastUsedIndex(secret:
|
|
11
|
+
public setLastUsedIndex(secret: AppTaggingSecret, index: number) {
|
|
16
12
|
const currentValue = this.taggingIndexMap.get(secret.toString());
|
|
17
13
|
if (currentValue !== undefined && currentValue.highestIndex !== index - 1) {
|
|
18
14
|
throw new Error(`Invalid tagging index update. Current value: ${currentValue.highestIndex}, new value: ${index}`);
|
|
@@ -29,7 +25,7 @@ export class ExecutionTaggingIndexCache {
|
|
|
29
25
|
*/
|
|
30
26
|
public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
|
|
31
27
|
return Array.from(this.taggingIndexMap.entries()).map(([secret, { lowestIndex, highestIndex }]) => ({
|
|
32
|
-
extendedSecret:
|
|
28
|
+
extendedSecret: AppTaggingSecret.fromString(secret),
|
|
33
29
|
lowestIndex,
|
|
34
30
|
highestIndex,
|
|
35
31
|
}));
|
|
@@ -1,8 +1,49 @@
|
|
|
1
|
+
export {
|
|
2
|
+
ORACLE_REGISTRY,
|
|
3
|
+
callHandler,
|
|
4
|
+
makeEntry,
|
|
5
|
+
type HandlersForPrefix,
|
|
6
|
+
type NamedValue,
|
|
7
|
+
type OracleRegistryEntry,
|
|
8
|
+
type ParamTypes,
|
|
9
|
+
type StripOraclePrefix,
|
|
10
|
+
} from './oracle/oracle_registry.js';
|
|
11
|
+
export {
|
|
12
|
+
ARRAY,
|
|
13
|
+
AZTEC_ADDRESS,
|
|
14
|
+
BIGINT,
|
|
15
|
+
BLOCK_NUMBER,
|
|
16
|
+
BOOL,
|
|
17
|
+
BOUNDED_VEC,
|
|
18
|
+
BUFFER,
|
|
19
|
+
BYTE,
|
|
20
|
+
DELIVERY_MODE,
|
|
21
|
+
EPHEMERAL_ARRAY,
|
|
22
|
+
EVENT_VALIDATION_REQUEST,
|
|
23
|
+
FIELD,
|
|
24
|
+
FUNCTION_SELECTOR,
|
|
25
|
+
LOG_RETRIEVAL_REQUEST,
|
|
26
|
+
LOG_RETRIEVAL_RESPONSE,
|
|
27
|
+
MEMBERSHIP_WITNESS,
|
|
28
|
+
MESSAGE_CONTEXT,
|
|
29
|
+
NOTE_VALIDATION_REQUEST,
|
|
30
|
+
OPTION,
|
|
31
|
+
PENDING_TAGGED_LOG,
|
|
32
|
+
POINT,
|
|
33
|
+
PROVIDED_SECRET,
|
|
34
|
+
STR,
|
|
35
|
+
U32,
|
|
36
|
+
type InputSlot,
|
|
37
|
+
type MaybePromise,
|
|
38
|
+
type OutputSlot,
|
|
39
|
+
type TypeMapping,
|
|
40
|
+
} from './oracle/oracle_type_mappings.js';
|
|
1
41
|
export { ExecutionNoteCache } from './execution_note_cache.js';
|
|
2
42
|
export { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
3
43
|
export { HashedValuesCache } from './hashed_values_cache.js';
|
|
4
44
|
export { pickNotes } from './pick_notes.js';
|
|
5
|
-
export type {
|
|
45
|
+
export type { IMiscOracle, IUtilityExecutionOracle, IPrivateExecutionOracle } from './oracle/interfaces.js';
|
|
46
|
+
export type { NoteData } from './noir-structs/note_data.js';
|
|
6
47
|
export { MessageLoadOracleInputs } from './oracle/message_load_oracle_inputs.js';
|
|
7
48
|
export { MessageContextService } from '../messages/message_context_service.js';
|
|
8
49
|
export { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
@@ -11,4 +52,12 @@ export { Oracle } from './oracle/oracle.js';
|
|
|
11
52
|
export { executePrivateFunction, extractPrivateCircuitPublicInputs } from './oracle/private_execution.js';
|
|
12
53
|
export { generateSimulatedProvingResult } from './contract_function_simulator.js';
|
|
13
54
|
export { packAsHintedNote } from './oracle/note_packing_utils.js';
|
|
55
|
+
export { BoundedVec } from './noir-structs/bounded_vec.js';
|
|
56
|
+
export { EphemeralArray } from './noir-structs/ephemeral_array.js';
|
|
57
|
+
export { Option } from './noir-structs/option.js';
|
|
14
58
|
export { UtilityContext } from './noir-structs/utility_context.js';
|
|
59
|
+
export { EventValidationRequest } from './noir-structs/event_validation_request.js';
|
|
60
|
+
export { LogRetrievalRequest } from './noir-structs/log_retrieval_request.js';
|
|
61
|
+
export { LogRetrievalResponse } from './noir-structs/log_retrieval_response.js';
|
|
62
|
+
export { NoteValidationRequest } from './noir-structs/note_validation_request.js';
|
|
63
|
+
export { ProvidedSecret } from './noir-structs/provided_secret.js';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript counterpart of Noir's `BoundedVec<T, MaxLen>`.
|
|
3
|
+
*
|
|
4
|
+
* Carries the actual `data` plus wire-format metadata (`maxLength`, `elementSize`) so the ACVM
|
|
5
|
+
* serializer can pad the storage slot to exactly `maxLength * elementSize` fields.
|
|
6
|
+
*/
|
|
7
|
+
export class BoundedVec<T> {
|
|
8
|
+
private constructor(
|
|
9
|
+
public readonly data: T[],
|
|
10
|
+
public readonly maxLength: number,
|
|
11
|
+
public readonly elementSize: number,
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Construct a BoundedVec with data.
|
|
16
|
+
*
|
|
17
|
+
* @param data - Actual elements. Length must be `<= maxLength`.
|
|
18
|
+
* @param maxLength - Maximum capacity declared at the Noir call site.
|
|
19
|
+
* The storage slot is padded to this many elements.
|
|
20
|
+
* @param elementSize - Number of Fr fields each element contributes when serialized.
|
|
21
|
+
* `1` for scalar elements (u8, Field) — this is the default.
|
|
22
|
+
* `> 1` for compound elements (e.g. a packed note that spans multiple fields).
|
|
23
|
+
*
|
|
24
|
+
* @example A bounded vec of bytes (elementSize defaults to 1):
|
|
25
|
+
* ```ts
|
|
26
|
+
* BoundedVec.from({ data: plaintext, maxLength: ciphertext.maxLength })
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @example A bounded vec of packed notes, each spanning `packedHintedNoteLength` fields:
|
|
30
|
+
* ```ts
|
|
31
|
+
* BoundedVec.from({ data: notes, maxLength: maxNotes, elementSize: packedHintedNoteLength })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
static from<T>({
|
|
35
|
+
data,
|
|
36
|
+
maxLength,
|
|
37
|
+
elementSize = 1,
|
|
38
|
+
}: {
|
|
39
|
+
data: T[];
|
|
40
|
+
maxLength: number;
|
|
41
|
+
elementSize?: number;
|
|
42
|
+
}): BoundedVec<T> {
|
|
43
|
+
return new BoundedVec<T>(data, maxLength, elementSize);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Construct an empty BoundedVec, typically used as a shape template for `Option.empty(...)`.
|
|
48
|
+
*
|
|
49
|
+
* @param maxLength - Maximum capacity declared at the Noir call site.
|
|
50
|
+
* @param elementSize - Number of Fr fields each element contributes when serialized (default 1).
|
|
51
|
+
*/
|
|
52
|
+
static empty<T>({ maxLength, elementSize = 1 }: { maxLength: number; elementSize?: number }): BoundedVec<T> {
|
|
53
|
+
return new BoundedVec<T>([], maxLength, elementSize);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { FieldReader } from '@aztec/foundation/serialize';
|
|
3
|
+
|
|
4
|
+
import type { EphemeralArrayService } from '../ephemeral_array_service.js';
|
|
5
|
+
import type { TypeMapping } from '../oracle/oracle_registry.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TypeScript counterpart of Noir's `EphemeralArray<T>`.
|
|
9
|
+
*
|
|
10
|
+
* An ephemeral array looks very different depending on whether it's being produced (as an oracle return value) or
|
|
11
|
+
* consumed (as an oracle parameter), so we use a discriminated state to model both without leaking those details to
|
|
12
|
+
* callers:
|
|
13
|
+
*
|
|
14
|
+
* - As a return value (`output` mode), what we have are the typed values the oracle just computed. The slot is just
|
|
15
|
+
* an implementation detail of how those values get handed back to ACVM, so we hold onto the values and the service
|
|
16
|
+
* they will eventually live in, and only materialize a slot when something actually asks for it.
|
|
17
|
+
*
|
|
18
|
+
* - As a parameter (`input` mode), what we have is a slot pointing at fields ACVM already wrote into the service,
|
|
19
|
+
* plus the TypeMapping that knows how to interpret those fields. We hold onto both so callers can later ask for
|
|
20
|
+
* the typed values without having to think about deserialization.
|
|
21
|
+
*
|
|
22
|
+
* In both modes the idea is the same: store everything we already know at construction time, so the rest of the
|
|
23
|
+
* code can work with typed values and never touch slots, services, or TypeMappings directly.
|
|
24
|
+
*/
|
|
25
|
+
export class EphemeralArray<T> {
|
|
26
|
+
private constructor(private readonly state: EphemeralArrayState<T>) {}
|
|
27
|
+
|
|
28
|
+
/** Create an output-mode array carrying typed values. The service is only used if/when the slot is materialized. */
|
|
29
|
+
static fromValues<T>(service: EphemeralArrayService, values: T[]): EphemeralArray<T> {
|
|
30
|
+
return new EphemeralArray({ kind: 'output', service, values });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Wrap an existing slot. Intended for the EPHEMERAL_ARRAY combinator during ACVM deserialization. */
|
|
34
|
+
static fromSlot<T>(slot: Fr, mapping: TypeMapping<T>): EphemeralArray<T> {
|
|
35
|
+
return new EphemeralArray({ kind: 'input', slot, mapping });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns the slot, materializing values into the service on first call for output-mode arrays.
|
|
40
|
+
* Intended for the EPHEMERAL_ARRAY combinator during ACVM serialization.
|
|
41
|
+
*/
|
|
42
|
+
materializeSlot(serializeItem: (v: T) => Fr[]): Fr {
|
|
43
|
+
if (this.state.kind === 'input') {
|
|
44
|
+
return this.state.slot;
|
|
45
|
+
}
|
|
46
|
+
if (this.state.cachedSlot === undefined) {
|
|
47
|
+
this.state.cachedSlot = this.state.service.newArray(this.state.values.map(serializeItem));
|
|
48
|
+
}
|
|
49
|
+
return this.state.cachedSlot;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Read all elements: returns stored values for output-mode arrays, deserializes from the service for input-mode. */
|
|
53
|
+
readAll(service: EphemeralArrayService): T[] {
|
|
54
|
+
if (this.state.kind === 'output') {
|
|
55
|
+
return this.state.values;
|
|
56
|
+
}
|
|
57
|
+
const mapping = this.state.mapping;
|
|
58
|
+
return service
|
|
59
|
+
.readArrayAt(this.state.slot)
|
|
60
|
+
.map(fields => mapping.deserialization!.fn([FieldReader.asReader(fields)]));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type EphemeralArrayState<T> =
|
|
65
|
+
| { kind: 'output'; service: EphemeralArrayService; values: T[]; cachedSlot?: Fr }
|
|
66
|
+
| { kind: 'input'; slot: Fr; mapping: TypeMapping<T> };
|
|
@@ -6,7 +6,7 @@ import { TxHash } from '@aztec/stdlib/tx';
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Intermediate struct used to perform batch event validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
|
|
9
|
-
* expects for values of this type to be stored in a `
|
|
9
|
+
* expects for values of this type to be stored in a `EphemeralArray`.
|
|
10
10
|
*/
|
|
11
11
|
export class EventValidationRequest {
|
|
12
12
|
constructor(
|
|
@@ -16,10 +16,9 @@ export class EventValidationRequest {
|
|
|
16
16
|
public serializedEvent: Fr[],
|
|
17
17
|
public eventCommitment: Fr,
|
|
18
18
|
public txHash: TxHash,
|
|
19
|
-
public recipient: AztecAddress,
|
|
20
19
|
) {}
|
|
21
20
|
|
|
22
|
-
static fromFields(fields: Fr[]
|
|
21
|
+
static fromFields(fields: Fr[] | FieldReader): EventValidationRequest {
|
|
23
22
|
const reader = FieldReader.asReader(fields);
|
|
24
23
|
|
|
25
24
|
const contractAddress = AztecAddress.fromField(reader.readField());
|
|
@@ -27,17 +26,17 @@ export class EventValidationRequest {
|
|
|
27
26
|
|
|
28
27
|
const randomness = reader.readField();
|
|
29
28
|
|
|
29
|
+
const maxEventSerializedLen = reader.readField().toNumber();
|
|
30
30
|
const eventStorage = reader.readFieldArray(maxEventSerializedLen);
|
|
31
31
|
const eventLen = reader.readField().toNumber();
|
|
32
32
|
const serializedEvent = eventStorage.slice(0, eventLen);
|
|
33
33
|
|
|
34
34
|
const eventCommitment = reader.readField();
|
|
35
35
|
const txHash = TxHash.fromField(reader.readField());
|
|
36
|
-
const recipient = AztecAddress.fromField(reader.readField());
|
|
37
36
|
|
|
38
37
|
if (reader.remainingFields() !== 0) {
|
|
39
38
|
throw new Error(
|
|
40
|
-
`Error converting array of fields to EventValidationRequest: expected ${reader.cursor} fields but received ${
|
|
39
|
+
`Error converting array of fields to EventValidationRequest: expected ${reader.cursor} fields but received ${reader.cursor + reader.remainingFields()} (maxEventSerializedLen=${maxEventSerializedLen}).`,
|
|
41
40
|
);
|
|
42
41
|
}
|
|
43
42
|
|
|
@@ -48,7 +47,6 @@ export class EventValidationRequest {
|
|
|
48
47
|
serializedEvent,
|
|
49
48
|
eventCommitment,
|
|
50
49
|
txHash,
|
|
51
|
-
recipient,
|
|
52
50
|
);
|
|
53
51
|
}
|
|
54
52
|
}
|