@aztec/pxe 0.0.1-commit.86469d5 → 0.0.1-commit.8655d4a
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.d.ts +12 -2
- package/dest/bin/check_oracle_version.d.ts.map +1 -1
- package/dest/bin/check_oracle_version.js +31 -25
- 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/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 +9 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +37 -11
- package/dest/config/index.d.ts +8 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +13 -15
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +66 -29
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +216 -75
- 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_tagging_index_cache.d.ts +7 -11
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
- package/dest/contract_function_simulator/index.d.ts +4 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +3 -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/event_validation_request.d.ts +4 -6
- 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 +8 -9
- 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 +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
- 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 -10
- 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/oracle/interfaces.d.ts +67 -51
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- 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 +471 -275
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +147 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +1199 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +68 -93
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +150 -108
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +138 -73
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +433 -154
- 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 +27 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +38 -0
- package/dest/contract_sync/contract_sync_service.d.ts +42 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +135 -0
- package/dest/contract_sync/helpers.d.ts +27 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +16 -24
- package/dest/debug/pxe_debug_utils.d.ts +14 -15
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -21
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -5
- package/dest/entrypoints/client/lazy/index.d.ts +3 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +2 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +21 -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 +5 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -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 +21 -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 -8
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +126 -81
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +38 -0
- package/dest/notes/note_service.d.ts +27 -5
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +83 -58
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/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/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- 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 +130 -69
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +202 -0
- package/dest/private_kernel/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 +166 -65
- package/dest/private_kernel/private_kernel_oracle.d.ts +15 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +31 -25
- package/dest/pxe.d.ts +120 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +231 -134
- 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 +42 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +146 -87
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +3 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +6 -4
- 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 +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
- 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 +45 -32
- package/dest/tagging/index.d.ts +6 -5
- 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/recipient_sync/utils/find_highest_indexes.js +2 -2
- 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 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +30 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
- 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 +41 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
- 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 +37 -25
- package/package.json +29 -17
- package/src/bin/check_oracle_version.ts +41 -31
- package/src/bin/index.ts +1 -0
- package/src/block_synchronizer/block_stream_source.ts +81 -0
- package/src/block_synchronizer/block_synchronizer.ts +39 -11
- package/src/config/index.ts +15 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +391 -136
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +3 -0
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +5 -10
- package/src/contract_function_simulator/noir-structs/option.ts +69 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +85 -72
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +563 -482
- package/src/contract_function_simulator/oracle/oracle_registry.ts +904 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +184 -205
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +623 -229
- 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 +52 -0
- package/src/contract_sync/contract_sync_service.ts +189 -0
- package/src/contract_sync/{index.ts → helpers.ts} +17 -50
- package/src/debug/pxe_debug_utils.ts +47 -25
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +19 -6
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +19 -6
- package/src/entrypoints/pxe_creation_options.ts +14 -0
- package/src/entrypoints/server/index.ts +4 -2
- package/src/entrypoints/server/utils.ts +22 -13
- 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 +157 -145
- package/src/messages/message_context_service.ts +45 -0
- package/src/notes/note_service.ts +120 -85
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +169 -0
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +165 -118
- package/src/private_kernel/hints/test_utils.ts +318 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +254 -89
- package/src/private_kernel/private_kernel_oracle.ts +42 -32
- package/src/pxe.ts +413 -184
- 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 +182 -104
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +9 -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 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
- package/src/tagging/get_all_logs_by_tags.ts +87 -35
- package/src/tagging/index.ts +5 -4
- 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 +4 -4
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -27
- package/dest/contract_sync/index.d.ts +0 -24
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
- 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 -15
- 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 -32
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
|
@@ -4,52 +4,63 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
5
|
import { toACVMWitness } from '@aztec/simulator/client';
|
|
6
6
|
import { FunctionSelector, countArgumentsSize } from '@aztec/stdlib/abi';
|
|
7
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
8
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
8
9
|
import { PrivateContextInputs } from '@aztec/stdlib/kernel';
|
|
9
|
-
import {
|
|
10
|
-
import { Tag } from '@aztec/stdlib/logs';
|
|
10
|
+
import { AppTaggingSecret, AppTaggingSecretKind, Tag } from '@aztec/stdlib/logs';
|
|
11
11
|
import { Note } from '@aztec/stdlib/note';
|
|
12
12
|
import { CallContext, CountedContractClassLog, NoteAndSlot } from '@aztec/stdlib/tx';
|
|
13
|
-
import { ensureContractSynced } from '../../contract_sync/index.js';
|
|
14
13
|
import { NoteService } from '../../notes/note_service.js';
|
|
15
14
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
15
|
+
import { BoundedVec } from '../noir-structs/bounded_vec.js';
|
|
16
|
+
import { Option } from '../noir-structs/option.js';
|
|
16
17
|
import { pickNotes } from '../pick_notes.js';
|
|
17
18
|
import { executePrivateFunction } from './private_execution.js';
|
|
18
19
|
import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
19
20
|
/**
|
|
20
21
|
* The execution oracle for the private part of a transaction.
|
|
21
22
|
*/ export class PrivateExecutionOracle extends UtilityExecutionOracle {
|
|
23
|
+
isPrivate = true;
|
|
24
|
+
/**
|
|
25
|
+
* New notes created during this execution.
|
|
26
|
+
* It's possible that a note in this list has been nullified (in the same or other executions) and doesn't exist in
|
|
27
|
+
* the ExecutionNoteCache and the final proof data. But we still include those notes in the execution result because
|
|
28
|
+
* their commitments are still in the public inputs of this execution.
|
|
29
|
+
* This information is only for references (currently used for tests), and is not used for any sort of constrains.
|
|
30
|
+
* Users can also use this to get a clearer idea of what's happened during a simulation.
|
|
31
|
+
*/ newNotes = [];
|
|
32
|
+
noteHashNullifierCounterMap = new Map();
|
|
33
|
+
contractClassLogs = [];
|
|
34
|
+
nestedExecutionResults = [];
|
|
22
35
|
argsHash;
|
|
23
36
|
txContext;
|
|
24
37
|
callContext;
|
|
25
|
-
anchorBlockHeader;
|
|
26
|
-
utilityExecutor;
|
|
27
38
|
executionCache;
|
|
28
39
|
noteCache;
|
|
29
40
|
taggingIndexCache;
|
|
30
41
|
senderTaggingStore;
|
|
31
42
|
totalPublicCalldataCount;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
initialSideEffectCounter;
|
|
44
|
+
/** Sender for tags passed in at oracle construction time. Returned by `getSenderForTags`. */ defaultSenderForTags;
|
|
45
|
+
constructor(args){
|
|
46
|
+
super({
|
|
47
|
+
...args,
|
|
48
|
+
contractAddress: args.callContext.contractAddress,
|
|
49
|
+
log: args.log ?? createLogger('simulator:client_execution_context')
|
|
50
|
+
});
|
|
51
|
+
this.argsHash = args.argsHash;
|
|
52
|
+
this.txContext = args.txContext;
|
|
53
|
+
this.callContext = args.callContext;
|
|
54
|
+
this.executionCache = args.executionCache;
|
|
55
|
+
this.noteCache = args.noteCache;
|
|
56
|
+
this.taggingIndexCache = args.taggingIndexCache;
|
|
57
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
58
|
+
this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
|
|
59
|
+
this.initialSideEffectCounter = args.sideEffectCounter ?? 0;
|
|
60
|
+
this.defaultSenderForTags = args.senderForTags;
|
|
50
61
|
}
|
|
51
62
|
getPrivateContextInputs() {
|
|
52
|
-
return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.
|
|
63
|
+
return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.initialSideEffectCounter);
|
|
53
64
|
}
|
|
54
65
|
// We still need this function until we can get user-defined ordering of structs for fn arguments
|
|
55
66
|
// TODO When that is sorted out on noir side, we can use instead the utilities in serialize.ts
|
|
@@ -87,14 +98,9 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
87
98
|
return this.contractClassLogs;
|
|
88
99
|
}
|
|
89
100
|
/**
|
|
90
|
-
*
|
|
91
|
-
*/
|
|
92
|
-
return this.
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns the pre-tags that were used in this execution (and that need to be stored in the db).
|
|
96
|
-
*/ getUsedPreTags() {
|
|
97
|
-
return this.taggingIndexCache.getUsedPreTags();
|
|
101
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
102
|
+
*/ getUsedTaggingIndexRanges() {
|
|
103
|
+
return this.taggingIndexCache.getUsedTaggingIndexRanges();
|
|
98
104
|
}
|
|
99
105
|
/**
|
|
100
106
|
* Return the nested execution results during this execution.
|
|
@@ -108,44 +114,61 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
108
114
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
109
115
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
110
116
|
*
|
|
111
|
-
*
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return Promise.resolve(this.senderForTags);
|
|
117
|
+
* Returns the wallet-supplied default sender for tags, or `None` if no default was provided.
|
|
118
|
+
*/ getSenderForTags() {
|
|
119
|
+
return Promise.resolve(this.defaultSenderForTags ? Option.some(this.defaultSenderForTags) : Option.none(AztecAddress.ZERO));
|
|
115
120
|
}
|
|
116
121
|
/**
|
|
117
|
-
*
|
|
122
|
+
* Returns the next app tag for a given sender and recipient pair (unconstrained delivery).
|
|
118
123
|
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
124
|
+
* The simulator computes the directional tagging secret (derived via ECDH from `(sender, recipient, contract)`),
|
|
125
|
+
* as well as the full siloed tag, and hands the opaque value back to the caller.
|
|
122
126
|
*
|
|
123
|
-
* Account contracts typically set this value before calling other contracts. The value persists
|
|
124
|
-
* through nested calls, meaning all calls down the stack will use the same 'senderForTags'
|
|
125
|
-
* value (unless it is replaced by another call to this setter).
|
|
126
|
-
*/ privateSetSenderForTags(senderForTags) {
|
|
127
|
-
this.senderForTags = senderForTags;
|
|
128
|
-
return Promise.resolve();
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Returns the next app tag for a given sender and recipient pair.
|
|
132
127
|
* @param sender - The address sending the log
|
|
133
128
|
* @param recipient - The address receiving the log
|
|
134
129
|
* @returns An app tag to be used in a log.
|
|
135
|
-
*/ async
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
130
|
+
*/ async getNextAppTagAsSender(sender, recipient) {
|
|
131
|
+
const extendedSecret = await this.#calculateAppTaggingSecret(this.contractAddress, sender, recipient);
|
|
132
|
+
if (!extendedSecret) {
|
|
133
|
+
// We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
|
|
134
|
+
// king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
|
|
135
|
+
// log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
|
|
136
|
+
this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
|
|
137
|
+
contractAddress: this.contractAddress
|
|
138
|
+
});
|
|
139
|
+
return Tag.random();
|
|
140
|
+
}
|
|
141
|
+
const index = await this.#reserveNextIndexForSecret(extendedSecret);
|
|
142
|
+
this.logger.debug(`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`);
|
|
140
143
|
return Tag.compute({
|
|
141
|
-
|
|
144
|
+
extendedSecret,
|
|
142
145
|
index
|
|
143
146
|
});
|
|
144
147
|
}
|
|
145
|
-
|
|
146
|
-
|
|
148
|
+
/**
|
|
149
|
+
* Returns the next sender-side index for a constrained-delivery app-siloed shared secret.
|
|
150
|
+
*
|
|
151
|
+
* Unlike the unconstrained variant, the simulator does not compute the secret: it was supplied by the calling contract
|
|
152
|
+
* (which retrieved it from an onchain handshake registry). The simulator only acts as a per-secret index counter.
|
|
153
|
+
* The caller computes the onchain tag itself.
|
|
154
|
+
*
|
|
155
|
+
* @param appSiloedSecret - The app-siloed shared secret retrieved from the handshake registry by the caller.
|
|
156
|
+
* @returns The next index to use for this secret.
|
|
157
|
+
*/ async getNextConstrainedTaggingIndex(appSiloedSecret) {
|
|
158
|
+
const secret = new AppTaggingSecret(appSiloedSecret, this.contractAddress, AppTaggingSecretKind.CONSTRAINED);
|
|
159
|
+
const index = await this.#reserveNextIndexForSecret(secret);
|
|
160
|
+
this.logger.debug(`Incrementing tagging index for constrained-delivery secret in contract ${this.contractAddress} to ${index}`);
|
|
161
|
+
return index;
|
|
162
|
+
}
|
|
163
|
+
/** Resolves the next index for a given tagging secret, syncing from chain if it is missing from the in-tx cache. */ async #reserveNextIndexForSecret(secret) {
|
|
164
|
+
const index = await this.#getIndexToUseForSecret(secret);
|
|
165
|
+
this.taggingIndexCache.setLastUsedIndex(secret, index);
|
|
166
|
+
return index;
|
|
167
|
+
}
|
|
168
|
+
async #calculateAppTaggingSecret(contractAddress, sender, recipient) {
|
|
169
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
147
170
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
148
|
-
return
|
|
171
|
+
return AppTaggingSecret.computeUnconstrained(senderCompleteAddress, senderIvsk, recipient, contractAddress, recipient);
|
|
149
172
|
}
|
|
150
173
|
async #getIndexToUseForSecret(secret) {
|
|
151
174
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
@@ -156,7 +179,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
156
179
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
157
180
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
158
181
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
159
|
-
await syncSenderTaggingIndexes(secret, this.
|
|
182
|
+
await syncSenderTaggingIndexes(secret, this.aztecNode, this.senderTaggingStore, await this.anchorBlockHeader.hash(), this.jobId);
|
|
160
183
|
const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
|
|
161
184
|
// If lastUsedIndex is undefined, we've never used this secret, so start from 0
|
|
162
185
|
// Otherwise, the next index to use is one past the last used index
|
|
@@ -167,29 +190,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
167
190
|
* Store values in the execution cache.
|
|
168
191
|
* @param values - Values to store.
|
|
169
192
|
* @returns The hash of the values.
|
|
170
|
-
*/
|
|
193
|
+
*/ setHashPreimage(values, hash) {
|
|
171
194
|
return this.executionCache.store(values, hash);
|
|
172
195
|
}
|
|
173
196
|
/**
|
|
174
197
|
* Gets values from the execution cache.
|
|
175
198
|
* @param hash - Hash of the values.
|
|
176
199
|
* @returns The values.
|
|
177
|
-
*/
|
|
200
|
+
*/ getHashPreimage(hash) {
|
|
178
201
|
const preimage = this.executionCache.getPreimage(hash);
|
|
179
202
|
if (!preimage) {
|
|
180
203
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
181
204
|
}
|
|
182
205
|
return Promise.resolve(preimage);
|
|
183
206
|
}
|
|
184
|
-
async
|
|
207
|
+
async doesNullifierExist(innerNullifier) {
|
|
185
208
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
186
209
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
187
210
|
// in the current transaction.
|
|
188
|
-
this.
|
|
211
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
189
212
|
contractAddress: this.contractAddress
|
|
190
213
|
});
|
|
191
214
|
const nullifier = (await siloNullifier(this.contractAddress, innerNullifier)).toBigInt();
|
|
192
|
-
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.
|
|
215
|
+
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.doesNullifierExist(innerNullifier);
|
|
193
216
|
}
|
|
194
217
|
/**
|
|
195
218
|
* Gets some notes for a storage slot.
|
|
@@ -211,12 +234,12 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
211
234
|
* @param offset - The starting index for pagination.
|
|
212
235
|
* @param status - The status of notes to fetch.
|
|
213
236
|
* @returns Array of note data.
|
|
214
|
-
*/ async
|
|
237
|
+
*/ async getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status, maxNotes, packedHintedNoteLength) {
|
|
215
238
|
// Nullified pending notes are already removed from the list.
|
|
216
|
-
const pendingNotes = this.noteCache.getNotes(this.callContext.contractAddress, owner, storageSlot);
|
|
239
|
+
const pendingNotes = this.noteCache.getNotes(this.callContext.contractAddress, owner.value, storageSlot);
|
|
217
240
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
218
241
|
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
219
|
-
const dbNotes = await noteService.getNotes(this.callContext.contractAddress, owner, storageSlot, status, this.scopes);
|
|
242
|
+
const dbNotes = await noteService.getNotes(this.callContext.contractAddress, owner.value, storageSlot, status, this.scopes);
|
|
220
243
|
const dbNotesFiltered = dbNotes.filter((n)=>!pendingNullifiers.has(n.siloedNullifier.value));
|
|
221
244
|
const notes = pickNotes([
|
|
222
245
|
...dbNotesFiltered,
|
|
@@ -242,8 +265,12 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
242
265
|
limit,
|
|
243
266
|
offset
|
|
244
267
|
});
|
|
245
|
-
this.
|
|
246
|
-
return
|
|
268
|
+
this.logger.debug(`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes.map((n)=>`${n.noteNonce.toString()}:[${n.note.items.map((i)=>i.toString()).join(',')}]`).join(', ')}`);
|
|
269
|
+
return BoundedVec.from({
|
|
270
|
+
data: notes,
|
|
271
|
+
maxLength: maxNotes,
|
|
272
|
+
elementSize: packedHintedNoteLength
|
|
273
|
+
});
|
|
247
274
|
}
|
|
248
275
|
/**
|
|
249
276
|
* Keep track of the new note created during execution.
|
|
@@ -255,8 +282,8 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
255
282
|
* @param noteItems - The items to be included in a Note.
|
|
256
283
|
* @param noteHash - A hash of the new note.
|
|
257
284
|
* @returns
|
|
258
|
-
*/
|
|
259
|
-
this.
|
|
285
|
+
*/ notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, noteItems, noteHash, counter) {
|
|
286
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
260
287
|
contractAddress: this.callContext.contractAddress,
|
|
261
288
|
storageSlot,
|
|
262
289
|
randomness,
|
|
@@ -287,7 +314,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
287
314
|
* within the current transaction/execution.
|
|
288
315
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
289
316
|
* @param noteHash - A hash of the new note.
|
|
290
|
-
*/ async
|
|
317
|
+
*/ async notifyNullifiedNote(innerNullifier, noteHash, counter) {
|
|
291
318
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(this.callContext.contractAddress, innerNullifier, noteHash);
|
|
292
319
|
if (nullifiedNoteHashCounter !== undefined) {
|
|
293
320
|
this.noteHashNullifierCounterMap.set(nullifiedNoteHashCounter, counter);
|
|
@@ -298,19 +325,19 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
298
325
|
* within the current transaction/execution.
|
|
299
326
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
300
327
|
* @param noteHash - A hash of the new note.
|
|
301
|
-
*/
|
|
302
|
-
this.
|
|
328
|
+
*/ notifyCreatedNullifier(innerNullifier) {
|
|
329
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, {
|
|
303
330
|
contractAddress: this.contractAddress
|
|
304
331
|
});
|
|
305
332
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
306
333
|
}
|
|
307
334
|
/**
|
|
308
|
-
* Check if a nullifier has been emitted in the same transaction, i.e. if
|
|
335
|
+
* Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
|
|
309
336
|
* called for this inner nullifier from the contract with the specified address.
|
|
310
337
|
* @param innerNullifier - The inner nullifier to check.
|
|
311
338
|
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
312
339
|
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
313
|
-
*/ async
|
|
340
|
+
*/ async isNullifierPending(innerNullifier, contractAddress) {
|
|
314
341
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
315
342
|
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
316
343
|
return Promise.resolve(isNullifierPending);
|
|
@@ -321,10 +348,10 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
321
348
|
* keep the preimage in ts for later.
|
|
322
349
|
* @param log - The contract class log to be emitted.
|
|
323
350
|
* @param counter - The contract class log's counter.
|
|
324
|
-
*/
|
|
351
|
+
*/ notifyCreatedContractClassLog(log, counter) {
|
|
325
352
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
326
353
|
const text = log.toBuffer().toString('hex');
|
|
327
|
-
this.
|
|
354
|
+
this.logger.verbose(`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`);
|
|
328
355
|
}
|
|
329
356
|
#checkValidStaticCall(childExecutionResult) {
|
|
330
357
|
if (childExecutionResult.publicInputs.noteHashes.claimedLength > 0 || childExecutionResult.publicInputs.nullifiers.claimedLength > 0 || childExecutionResult.publicInputs.l2ToL1Msgs.claimedLength > 0 || childExecutionResult.publicInputs.privateLogs.claimedLength > 0 || childExecutionResult.publicInputs.contractClassLogsHashes.claimedLength > 0) {
|
|
@@ -339,22 +366,56 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
339
366
|
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
340
367
|
* @param isStaticCall - Whether the call is a static call.
|
|
341
368
|
* @returns The execution result.
|
|
342
|
-
*/ async
|
|
369
|
+
*/ async callPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall) {
|
|
343
370
|
if (!this.simulator) {
|
|
344
371
|
// In practice it is only when creating inline private contexts in a Noir test using TXE that we create an
|
|
345
372
|
// instance of this class without a simulator.
|
|
346
373
|
throw new Error('No simulator provided, cannot perform a nested private call');
|
|
347
374
|
}
|
|
348
375
|
const simulatorSetupTimer = new Timer();
|
|
349
|
-
this.
|
|
376
|
+
this.logger.debug(`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`);
|
|
350
377
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
351
|
-
await ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.
|
|
378
|
+
await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
|
|
352
379
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
|
|
353
380
|
const derivedTxContext = this.txContext.clone();
|
|
354
381
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
355
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
382
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
383
|
+
argsHash,
|
|
384
|
+
txContext: derivedTxContext,
|
|
385
|
+
callContext: derivedCallContext,
|
|
386
|
+
anchorBlockHeader: this.anchorBlockHeader,
|
|
387
|
+
utilityExecutor: this.utilityExecutor,
|
|
388
|
+
authWitnesses: this.authWitnesses,
|
|
389
|
+
capsules: this.capsules,
|
|
390
|
+
executionCache: this.executionCache,
|
|
391
|
+
noteCache: this.noteCache,
|
|
392
|
+
taggingIndexCache: this.taggingIndexCache,
|
|
393
|
+
contractStore: this.contractStore,
|
|
394
|
+
noteStore: this.noteStore,
|
|
395
|
+
keyStore: this.keyStore,
|
|
396
|
+
addressStore: this.addressStore,
|
|
397
|
+
aztecNode: this.aztecNode,
|
|
398
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
399
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
400
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
401
|
+
capsuleService: this.capsuleService,
|
|
402
|
+
privateEventStore: this.privateEventStore,
|
|
403
|
+
messageContextService: this.messageContextService,
|
|
404
|
+
contractSyncService: this.contractSyncService,
|
|
405
|
+
jobId: this.jobId,
|
|
406
|
+
totalPublicCalldataCount: this.totalPublicCalldataCount,
|
|
407
|
+
sideEffectCounter,
|
|
408
|
+
log: this.logger,
|
|
409
|
+
scopes: this.scopes,
|
|
410
|
+
senderForTags: this.defaultSenderForTags,
|
|
411
|
+
simulator: this.simulator,
|
|
412
|
+
hooks: this.hooks,
|
|
413
|
+
l2TipsStore: this.l2TipsStore
|
|
414
|
+
});
|
|
356
415
|
const setupTime = simulatorSetupTimer.ms();
|
|
357
416
|
const childExecutionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, targetArtifact, targetContractAddress, functionSelector);
|
|
417
|
+
// Propagate the nested call's calldata count so the parent sees its increments on subsequent enqueues.
|
|
418
|
+
this.totalPublicCalldataCount = privateExecutionOracle.getTotalPublicCalldataCount();
|
|
358
419
|
if (isStaticCall) {
|
|
359
420
|
this.#checkValidStaticCall(childExecutionResult);
|
|
360
421
|
}
|
|
@@ -369,7 +430,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
369
430
|
returnsHash: publicInputs.returnsHash
|
|
370
431
|
};
|
|
371
432
|
}
|
|
372
|
-
|
|
433
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */ assertValidPublicCalldata(calldataHash) {
|
|
373
434
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
374
435
|
if (!calldata) {
|
|
375
436
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -378,31 +439,15 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
378
439
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
379
440
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
380
441
|
}
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Verify relevant information when a public function is enqueued.
|
|
384
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
385
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
386
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
387
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
388
|
-
*/ privateNotifyEnqueuedPublicFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
389
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
390
442
|
return Promise.resolve();
|
|
391
443
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
395
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
396
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
397
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
398
|
-
*/ privateNotifySetPublicTeardownFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
399
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
400
|
-
return Promise.resolve();
|
|
444
|
+
getTotalPublicCalldataCount() {
|
|
445
|
+
return this.totalPublicCalldataCount;
|
|
401
446
|
}
|
|
402
|
-
|
|
447
|
+
notifyRevertiblePhaseStart(minRevertibleSideEffectCounter) {
|
|
403
448
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
404
449
|
}
|
|
405
|
-
|
|
450
|
+
isExecutionInRevertiblePhase(sideEffectCounter) {
|
|
406
451
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
407
452
|
}
|
|
408
453
|
/**
|
|
@@ -417,10 +462,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
417
462
|
getDebugFunctionName() {
|
|
418
463
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
419
464
|
}
|
|
420
|
-
|
|
421
|
-
this.
|
|
422
|
-
data
|
|
423
|
-
});
|
|
424
|
-
return Promise.resolve();
|
|
465
|
+
get callerContext() {
|
|
466
|
+
return this.callContext.isStaticCall ? 'private view' : 'private';
|
|
425
467
|
}
|
|
426
468
|
}
|