@aztec/pxe 0.0.1-commit.2448fdb → 0.0.1-commit.2606882
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 +40 -96
- 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 +5 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +21 -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 +4 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +20 -12
- 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 +3 -2
- 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 +3 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +12 -2
- 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 +34 -3
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -2
- 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 +3 -2
- 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 -114
- 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 +55 -57
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +343 -344
- 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_oracle.d.ts +27 -29
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +55 -47
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +59 -39
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +244 -149
- 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 -67
- package/dest/contract_sync/contract_sync_service.d.ts +4 -6
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +43 -24
- package/dest/contract_sync/helpers.d.ts +2 -3
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +12 -19
- package/dest/debug/pxe_debug_utils.d.ts +1 -6
- 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/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +11 -3
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +11 -3
- package/dest/entrypoints/pxe_creation_options.d.ts +7 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +2 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -0
- package/dest/entrypoints/server/utils.d.ts +3 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +11 -3
- package/dest/events/event_service.d.ts +13 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +30 -9
- 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 +6 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +112 -48
- package/dest/messages/message_context_service.d.ts +1 -1
- package/dest/messages/message_context_service.d.ts.map +1 -1
- package/dest/messages/message_context_service.js +28 -9
- package/dest/notes/note_service.d.ts +25 -3
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +80 -65
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.js +4 -4
- 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 +148 -52
- package/dest/private_kernel/private_kernel_oracle.d.ts +6 -6
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +12 -7
- package/dest/pxe.d.ts +54 -7
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +126 -84
- 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/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 +5 -24
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- 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/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 +46 -119
- 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 +22 -12
- package/src/config/index.ts +15 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +34 -11
- 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 +3 -2
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +35 -2
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -2
- 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 -204
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +406 -556
- 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_oracle.ts +74 -67
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +350 -304
- package/src/contract_function_simulator/proxied_contract_data_source.ts +40 -70
- package/src/contract_sync/contract_sync_service.ts +56 -43
- package/src/contract_sync/helpers.ts +11 -23
- package/src/debug/pxe_debug_utils.ts +0 -8
- package/src/entrypoints/client/bundle/utils.ts +8 -2
- package/src/entrypoints/client/lazy/utils.ts +8 -2
- package/src/entrypoints/pxe_creation_options.ts +7 -0
- package/src/entrypoints/server/index.ts +1 -0
- package/src/entrypoints/server/utils.ts +13 -3
- package/src/events/event_service.ts +54 -19
- 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 +137 -92
- package/src/messages/message_context_service.ts +42 -24
- package/src/notes/note_service.ts +115 -91
- package/src/oracle_version.ts +4 -4
- 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 +236 -73
- package/src/private_kernel/private_kernel_oracle.ts +21 -11
- package/src/pxe.ts +208 -85
- 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/contract_store/contract_store.ts +6 -29
- package/src/storage/metadata.ts +1 -1
- package/src/storage/open_pxe_stores.ts +49 -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/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 -47
- 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 -85
- 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/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -104
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -130
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
package/src/pxe.ts
CHANGED
|
@@ -6,7 +6,6 @@ import { SerialQueue } from '@aztec/foundation/queue';
|
|
|
6
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
7
7
|
import { KeyStore } from '@aztec/key-store';
|
|
8
8
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
9
|
-
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
10
9
|
import { type ProtocolContractsProvider, protocolContractNames } from '@aztec/protocol-contracts';
|
|
11
10
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
12
11
|
import {
|
|
@@ -18,7 +17,7 @@ import {
|
|
|
18
17
|
} from '@aztec/stdlib/abi';
|
|
19
18
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
20
19
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
21
|
-
import type
|
|
20
|
+
import { GENESIS_BLOCK_HEADER_HASH, type L2TipsProvider } from '@aztec/stdlib/block';
|
|
22
21
|
import {
|
|
23
22
|
CompleteAddress,
|
|
24
23
|
type ContractInstanceWithAddress,
|
|
@@ -67,6 +66,7 @@ import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
|
67
66
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
68
67
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
69
68
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
69
|
+
import type { ExecutionHooks } from './hooks/index.js';
|
|
70
70
|
import { JobCoordinator } from './job_coordinator/job_coordinator.js';
|
|
71
71
|
import { MessageContextService } from './messages/message_context_service.js';
|
|
72
72
|
import {
|
|
@@ -79,16 +79,26 @@ import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_stor
|
|
|
79
79
|
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
80
80
|
import { ContractStore } from './storage/contract_store/contract_store.js';
|
|
81
81
|
import { NoteStore } from './storage/note_store/note_store.js';
|
|
82
|
+
import { openPxeStores } from './storage/open_pxe_stores.js';
|
|
82
83
|
import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
|
|
83
84
|
import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
|
|
84
85
|
import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
|
|
85
86
|
import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
|
|
87
|
+
import { persistSenderTaggingIndexRangesForTx } from './tagging/index.js';
|
|
86
88
|
|
|
87
89
|
export type PackedPrivateEvent = InTx & {
|
|
88
90
|
packedEvent: Fr[];
|
|
89
91
|
eventSelector: EventSelector;
|
|
90
92
|
};
|
|
91
93
|
|
|
94
|
+
/** Options for PXE.proveTx. */
|
|
95
|
+
export type ProveTxOpts = {
|
|
96
|
+
/** Addresses whose private state and keys are accessible during private execution. */
|
|
97
|
+
scopes: AztecAddress[];
|
|
98
|
+
/** Sender address used to derive discovery tags for private messages (notes, events, logs) this tx emits. */
|
|
99
|
+
senderForTags?: AztecAddress;
|
|
100
|
+
};
|
|
101
|
+
|
|
92
102
|
/** Options for PXE.profileTx. */
|
|
93
103
|
export type ProfileTxOpts = {
|
|
94
104
|
/** The profiling mode to use. */
|
|
@@ -97,6 +107,8 @@ export type ProfileTxOpts = {
|
|
|
97
107
|
skipProofGeneration?: boolean;
|
|
98
108
|
/** Addresses whose private state and keys are accessible during private execution. */
|
|
99
109
|
scopes: AztecAddress[];
|
|
110
|
+
/** Sender address used to derive discovery tags for private messages (notes, events, logs) this tx emits. */
|
|
111
|
+
senderForTags?: AztecAddress;
|
|
100
112
|
};
|
|
101
113
|
|
|
102
114
|
/** Options for PXE.simulateTx. */
|
|
@@ -109,10 +121,16 @@ export type SimulateTxOpts = {
|
|
|
109
121
|
skipFeeEnforcement?: boolean;
|
|
110
122
|
/** If true, kernel logic is emulated in TS for simulation */
|
|
111
123
|
skipKernels?: boolean;
|
|
112
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* Pre-simulation overrides applied to the ephemeral fork and contract DB. Bundles publicStorage
|
|
126
|
+
* writes (no skipKernels required) and per-address (instance, artifact?) overrides used by both
|
|
127
|
+
* AVM-side public dispatch and PXE-side ACIR private dispatch (requires skipKernels: true).
|
|
128
|
+
*/
|
|
113
129
|
overrides?: SimulationOverrides;
|
|
114
130
|
/** Addresses whose private state and keys are accessible during private execution */
|
|
115
131
|
scopes: AztecAddress[];
|
|
132
|
+
/** Sender address used to derive discovery tags for private messages (notes, events, logs) this tx emits. */
|
|
133
|
+
senderForTags?: AztecAddress;
|
|
116
134
|
};
|
|
117
135
|
|
|
118
136
|
/** Options for PXE.executeUtility. */
|
|
@@ -123,6 +141,21 @@ export type ExecuteUtilityOpts = {
|
|
|
123
141
|
scopes: AztecAddress[];
|
|
124
142
|
};
|
|
125
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Supplies the set of "nice to have" contracts that every PXE preloads regardless of which wallet
|
|
146
|
+
* drives it. Today this is just the standard multi-call entrypoint: the SDK's self-paid account
|
|
147
|
+
* deploy flow ({@link DeployAccountMethod} with `from = NO_FROM`) routes its payload through it, so a
|
|
148
|
+
* PXE that did not register it would fail contract sync with an opaque "no contract instance" error.
|
|
149
|
+
*
|
|
150
|
+
* Returning a list keeps this extensible: a wallet may supply its own provider that preloads
|
|
151
|
+
* additional contracts. Injected the same way as {@link ProtocolContractsProvider} so the PXE never
|
|
152
|
+
* statically imports the bundled artifacts, keeping the bundle/lazy split intact.
|
|
153
|
+
*/
|
|
154
|
+
export type PreloadedContractsProvider = {
|
|
155
|
+
/** Returns the contract instances and artifacts the PXE should preload on startup. */
|
|
156
|
+
getPreloadedContracts: () => Promise<Array<{ instance: ContractInstanceWithAddress; artifact: ContractArtifact }>>;
|
|
157
|
+
};
|
|
158
|
+
|
|
126
159
|
/** Args for PXE.create. */
|
|
127
160
|
export type PXECreateArgs = {
|
|
128
161
|
/** The Aztec node to connect to. */
|
|
@@ -135,10 +168,14 @@ export type PXECreateArgs = {
|
|
|
135
168
|
simulator: CircuitSimulator;
|
|
136
169
|
/** Provider for protocol contract artifacts and instances. */
|
|
137
170
|
protocolContractsProvider: ProtocolContractsProvider;
|
|
171
|
+
/** Provider for the "nice to have" contracts the PXE preloads. */
|
|
172
|
+
preloadedContractsProvider: PreloadedContractsProvider;
|
|
138
173
|
/** PXE configuration options. */
|
|
139
174
|
config: PXEConfig;
|
|
140
175
|
/** Optional logger instance or string suffix for the logger name. */
|
|
141
176
|
loggerOrSuffix?: string | Logger;
|
|
177
|
+
/** Optional hooks to observe and influence contract execution. */
|
|
178
|
+
hooks?: ExecutionHooks;
|
|
142
179
|
};
|
|
143
180
|
|
|
144
181
|
/**
|
|
@@ -148,6 +185,7 @@ export type PXECreateArgs = {
|
|
|
148
185
|
export class PXE {
|
|
149
186
|
private constructor(
|
|
150
187
|
private node: AztecNode,
|
|
188
|
+
private db: AztecAsyncKVStore,
|
|
151
189
|
private blockStateSynchronizer: BlockSynchronizer,
|
|
152
190
|
private keyStore: KeyStore,
|
|
153
191
|
private contractStore: ContractStore,
|
|
@@ -164,12 +202,15 @@ export class PXE {
|
|
|
164
202
|
private l2TipsStore: L2TipsProvider,
|
|
165
203
|
private simulator: CircuitSimulator,
|
|
166
204
|
private proverEnabled: boolean,
|
|
205
|
+
private autoSync: boolean,
|
|
167
206
|
private proofCreator: PrivateKernelProver,
|
|
168
207
|
private protocolContractsProvider: ProtocolContractsProvider,
|
|
208
|
+
private preloadedContractsProvider: PreloadedContractsProvider,
|
|
169
209
|
private log: Logger,
|
|
170
210
|
private jobQueue: SerialQueue,
|
|
171
211
|
private jobCoordinator: JobCoordinator,
|
|
172
212
|
public debug: PXEDebugUtils,
|
|
213
|
+
private hooks: ExecutionHooks | undefined,
|
|
173
214
|
) {}
|
|
174
215
|
|
|
175
216
|
/**
|
|
@@ -185,8 +226,10 @@ export class PXE {
|
|
|
185
226
|
proofCreator,
|
|
186
227
|
simulator,
|
|
187
228
|
protocolContractsProvider,
|
|
229
|
+
preloadedContractsProvider,
|
|
188
230
|
config,
|
|
189
231
|
loggerOrSuffix,
|
|
232
|
+
hooks,
|
|
190
233
|
}: PXECreateArgs) {
|
|
191
234
|
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
192
235
|
const bindings: LoggerBindings | undefined =
|
|
@@ -199,18 +242,28 @@ export class PXE {
|
|
|
199
242
|
|
|
200
243
|
const info = await node.getNodeInfo();
|
|
201
244
|
|
|
245
|
+
// Source the genesis block hash from the node so PXE's L2BlockStream agrees with the node's
|
|
246
|
+
// archiver on the dynamic initial header hash. Without this the tip store would fall back to
|
|
247
|
+
// the static `GENESIS_BLOCK_HEADER_HASH` constant, which only matches deployments with the
|
|
248
|
+
// default empty genesis (timestamp 0, no prefilled public data) and diverges otherwise — the
|
|
249
|
+
// sync at block 0 would then get stuck in `areBlockHashesEqualAt` and abort. If the node does
|
|
250
|
+
// not return a genesis block (older node or test fixture) we fall back to the static constant.
|
|
251
|
+
const initialBlockHash = (await node.getBlock(BlockNumber.ZERO))?.hash ?? GENESIS_BLOCK_HEADER_HASH;
|
|
252
|
+
|
|
202
253
|
const proverEnabled = config.proverEnabled !== undefined ? config.proverEnabled : info.realProofs;
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
254
|
+
const {
|
|
255
|
+
addressStore,
|
|
256
|
+
privateEventStore,
|
|
257
|
+
contractStore,
|
|
258
|
+
noteStore,
|
|
259
|
+
anchorBlockStore,
|
|
260
|
+
senderTaggingStore,
|
|
261
|
+
senderAddressBookStore,
|
|
262
|
+
recipientTaggingStore,
|
|
263
|
+
capsuleStore,
|
|
264
|
+
keyStore,
|
|
265
|
+
l2TipsStore,
|
|
266
|
+
} = openPxeStores(store, initialBlockHash);
|
|
214
267
|
const contractSyncService = new ContractSyncService(
|
|
215
268
|
node,
|
|
216
269
|
contractStore,
|
|
@@ -225,7 +278,7 @@ export class PXE {
|
|
|
225
278
|
anchorBlockStore,
|
|
226
279
|
noteStore,
|
|
227
280
|
privateEventStore,
|
|
228
|
-
|
|
281
|
+
l2TipsStore,
|
|
229
282
|
contractSyncService,
|
|
230
283
|
config,
|
|
231
284
|
bindings,
|
|
@@ -247,6 +300,7 @@ export class PXE {
|
|
|
247
300
|
|
|
248
301
|
const pxe = new PXE(
|
|
249
302
|
node,
|
|
303
|
+
store,
|
|
250
304
|
synchronizer,
|
|
251
305
|
keyStore,
|
|
252
306
|
contractStore,
|
|
@@ -260,15 +314,18 @@ export class PXE {
|
|
|
260
314
|
privateEventStore,
|
|
261
315
|
contractSyncService,
|
|
262
316
|
messageContextService,
|
|
263
|
-
|
|
317
|
+
l2TipsStore,
|
|
264
318
|
simulator,
|
|
265
319
|
proverEnabled,
|
|
320
|
+
config.autoSync,
|
|
266
321
|
proofCreator,
|
|
267
322
|
protocolContractsProvider,
|
|
323
|
+
preloadedContractsProvider,
|
|
268
324
|
log,
|
|
269
325
|
jobQueue,
|
|
270
326
|
jobCoordinator,
|
|
271
327
|
debugUtils,
|
|
328
|
+
hooks,
|
|
272
329
|
);
|
|
273
330
|
|
|
274
331
|
debugUtils.setPXEHelpers(
|
|
@@ -279,7 +336,7 @@ export class PXE {
|
|
|
279
336
|
|
|
280
337
|
pxe.jobQueue.start();
|
|
281
338
|
|
|
282
|
-
await pxe.#registerProtocolContracts();
|
|
339
|
+
await Promise.all([pxe.#registerProtocolContracts(), pxe.#registerPreloadedContracts()]);
|
|
283
340
|
log.info(`Started PXE connected to chain ${info.l1ChainId} version ${info.rollupVersion}`);
|
|
284
341
|
return pxe;
|
|
285
342
|
}
|
|
@@ -304,6 +361,7 @@ export class PXE {
|
|
|
304
361
|
simulator: this.simulator,
|
|
305
362
|
contractSyncService: this.contractSyncService,
|
|
306
363
|
messageContextService: this.messageContextService,
|
|
364
|
+
hooks: this.hooks,
|
|
307
365
|
});
|
|
308
366
|
}
|
|
309
367
|
|
|
@@ -354,29 +412,48 @@ export class PXE {
|
|
|
354
412
|
}
|
|
355
413
|
|
|
356
414
|
async #registerProtocolContracts() {
|
|
357
|
-
const registered
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
415
|
+
const registered = Object.fromEntries(
|
|
416
|
+
await Promise.all(
|
|
417
|
+
protocolContractNames.map(async name => {
|
|
418
|
+
const { address, instance, artifact } =
|
|
419
|
+
await this.protocolContractsProvider.getProtocolContractArtifact(name);
|
|
420
|
+
await this.contractStore.addContractArtifact(artifact);
|
|
421
|
+
await this.contractStore.addContractInstance(instance);
|
|
422
|
+
return [name, address.toString()] as const;
|
|
423
|
+
}),
|
|
424
|
+
),
|
|
425
|
+
);
|
|
364
426
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
365
427
|
}
|
|
366
428
|
|
|
429
|
+
async #registerPreloadedContracts() {
|
|
430
|
+
const contracts = await this.preloadedContractsProvider.getPreloadedContracts();
|
|
431
|
+
await Promise.all(contracts.map(({ instance, artifact }) => this.registerContract({ instance, artifact })));
|
|
432
|
+
this.log.verbose(`Registered preloaded contracts in pxe`, {
|
|
433
|
+
contracts: contracts.map(({ instance }) => instance.address.toString()),
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
|
|
367
437
|
// Executes the entrypoint private function, as well as all nested private
|
|
368
438
|
// functions that might arise.
|
|
369
|
-
async #executePrivate(
|
|
370
|
-
contractFunctionSimulator
|
|
371
|
-
txRequest
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
439
|
+
async #executePrivate({
|
|
440
|
+
contractFunctionSimulator,
|
|
441
|
+
txRequest,
|
|
442
|
+
anchorBlockHeader,
|
|
443
|
+
scopes,
|
|
444
|
+
jobId,
|
|
445
|
+
senderForTags,
|
|
446
|
+
}: {
|
|
447
|
+
contractFunctionSimulator: ContractFunctionSimulator;
|
|
448
|
+
txRequest: TxExecutionRequest;
|
|
449
|
+
anchorBlockHeader: BlockHeader;
|
|
450
|
+
scopes: AztecAddress[];
|
|
451
|
+
jobId: string;
|
|
452
|
+
senderForTags?: AztecAddress;
|
|
453
|
+
}): Promise<PrivateExecutionResult> {
|
|
375
454
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
376
455
|
|
|
377
456
|
try {
|
|
378
|
-
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
379
|
-
|
|
380
457
|
await this.contractSyncService.ensureContractSynced(
|
|
381
458
|
contractAddress,
|
|
382
459
|
functionSelector,
|
|
@@ -393,6 +470,7 @@ export class PXE {
|
|
|
393
470
|
anchorBlockHeader,
|
|
394
471
|
scopes,
|
|
395
472
|
jobId,
|
|
473
|
+
senderForTags,
|
|
396
474
|
});
|
|
397
475
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
398
476
|
return result;
|
|
@@ -445,11 +523,11 @@ export class PXE {
|
|
|
445
523
|
* It can also be used for estimating gas in the future.
|
|
446
524
|
* @param tx - The transaction to be simulated.
|
|
447
525
|
*/
|
|
448
|
-
async #simulatePublicCalls(tx: Tx, skipFeeEnforcement: boolean) {
|
|
526
|
+
async #simulatePublicCalls(tx: Tx, skipFeeEnforcement: boolean, overrides?: SimulationOverrides) {
|
|
449
527
|
// Simulating public calls can throw if the TX fails in a phase that doesn't allow reverts (setup)
|
|
450
528
|
// Or return as reverted if it fails in a phase that allows reverts (app logic, teardown)
|
|
451
529
|
try {
|
|
452
|
-
const result = await this.node.simulatePublicCalls(tx, skipFeeEnforcement);
|
|
530
|
+
const result = await this.node.simulatePublicCalls(tx, skipFeeEnforcement, overrides);
|
|
453
531
|
if (result.revertReason) {
|
|
454
532
|
throw result.revertReason;
|
|
455
533
|
}
|
|
@@ -481,9 +559,9 @@ export class PXE {
|
|
|
481
559
|
txExecutionRequest: TxExecutionRequest,
|
|
482
560
|
proofCreator: PrivateKernelProver,
|
|
483
561
|
privateExecutionResult: PrivateExecutionResult,
|
|
562
|
+
anchorBlockHeader: BlockHeader,
|
|
484
563
|
config: PrivateKernelExecutionProverConfig,
|
|
485
564
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
486
|
-
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
487
565
|
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHeader);
|
|
488
566
|
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
489
567
|
kernelOracle,
|
|
@@ -495,8 +573,28 @@ export class PXE {
|
|
|
495
573
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
496
574
|
}
|
|
497
575
|
|
|
576
|
+
/**
|
|
577
|
+
* Syncs with the node only when `autoSync` is enabled.
|
|
578
|
+
* When `autoSync` is disabled, callers (typically a wallet) are
|
|
579
|
+
* responsible for invoking `pxe.sync()` at the right granularity.
|
|
580
|
+
*/
|
|
581
|
+
async #maybeSync(): Promise<void> {
|
|
582
|
+
if (this.autoSync) {
|
|
583
|
+
await this.blockStateSynchronizer.sync();
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
498
587
|
// Public API
|
|
499
588
|
|
|
589
|
+
/**
|
|
590
|
+
* Triggers a sync of PXE state with the node, regardless of the `autoSync` config flag. Use this to
|
|
591
|
+
* batch syncs across composite flows when `autoSync` is disabled (e.g. one sync per simulate+send
|
|
592
|
+
* instead of one per inner PXE call). Serialized through the job queue.
|
|
593
|
+
*/
|
|
594
|
+
public sync(): Promise<void> {
|
|
595
|
+
return this.#putInJobQueue(() => this.blockStateSynchronizer.sync());
|
|
596
|
+
}
|
|
597
|
+
|
|
500
598
|
/**
|
|
501
599
|
* Returns the block header up to which the PXE has synced.
|
|
502
600
|
* @returns The synced block header
|
|
@@ -538,7 +636,7 @@ export class PXE {
|
|
|
538
636
|
public async registerAccount(secretKey: Fr, partialAddress: PartialAddress): Promise<CompleteAddress> {
|
|
539
637
|
const accounts = await this.keyStore.getAccounts();
|
|
540
638
|
const accountCompleteAddress = await this.keyStore.addAccount(secretKey, partialAddress);
|
|
541
|
-
if (accounts.
|
|
639
|
+
if (accounts.some(a => a.equals(accountCompleteAddress.address))) {
|
|
542
640
|
this.log.info(`Account:\n "${accountCompleteAddress.address.toString()}"\n already registered.`);
|
|
543
641
|
return accountCompleteAddress;
|
|
544
642
|
} else {
|
|
@@ -568,7 +666,7 @@ export class PXE {
|
|
|
568
666
|
}
|
|
569
667
|
|
|
570
668
|
const accounts = await this.keyStore.getAccounts();
|
|
571
|
-
if (accounts.
|
|
669
|
+
if (accounts.some(a => a.equals(sender))) {
|
|
572
670
|
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
573
671
|
return sender;
|
|
574
672
|
}
|
|
@@ -663,7 +761,9 @@ export class PXE {
|
|
|
663
761
|
const publicFunctionSignatures = artifact.functions
|
|
664
762
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
665
763
|
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
666
|
-
|
|
764
|
+
if (publicFunctionSignatures.length > 0) {
|
|
765
|
+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
766
|
+
}
|
|
667
767
|
} else {
|
|
668
768
|
// Otherwise, make sure there is an artifact already registered for that class id
|
|
669
769
|
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
|
|
@@ -698,7 +798,7 @@ export class PXE {
|
|
|
698
798
|
throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
|
|
699
799
|
}
|
|
700
800
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
701
|
-
await this
|
|
801
|
+
await this.#maybeSync();
|
|
702
802
|
|
|
703
803
|
const header = await this.anchorBlockStore.getBlockHeader();
|
|
704
804
|
|
|
@@ -710,7 +810,9 @@ export class PXE {
|
|
|
710
810
|
const publicFunctionSignatures = artifact.functions
|
|
711
811
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
712
812
|
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
713
|
-
|
|
813
|
+
if (publicFunctionSignatures.length > 0) {
|
|
814
|
+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
815
|
+
}
|
|
714
816
|
|
|
715
817
|
currentInstance.currentContractClassId = contractClass.id;
|
|
716
818
|
await Promise.all([
|
|
@@ -739,7 +841,7 @@ export class PXE {
|
|
|
739
841
|
* @throws If contract code not found, or public simulation reverts.
|
|
740
842
|
* Also throws if simulatePublic is true and public simulation reverts.
|
|
741
843
|
*/
|
|
742
|
-
public proveTx(txRequest: TxExecutionRequest, scopes:
|
|
844
|
+
public proveTx(txRequest: TxExecutionRequest, { scopes, senderForTags }: ProveTxOpts): Promise<TxProvingResult> {
|
|
743
845
|
let privateExecutionResult: PrivateExecutionResult;
|
|
744
846
|
// We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
|
|
745
847
|
// computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
|
|
@@ -747,17 +849,25 @@ export class PXE {
|
|
|
747
849
|
const totalTimer = new Timer();
|
|
748
850
|
try {
|
|
749
851
|
const syncTimer = new Timer();
|
|
750
|
-
await this
|
|
852
|
+
await this.#maybeSync();
|
|
853
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
751
854
|
const syncTime = syncTimer.ms();
|
|
752
855
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
753
|
-
privateExecutionResult = await this.#executePrivate(
|
|
856
|
+
privateExecutionResult = await this.#executePrivate({
|
|
857
|
+
contractFunctionSimulator,
|
|
858
|
+
txRequest,
|
|
859
|
+
anchorBlockHeader,
|
|
860
|
+
scopes,
|
|
861
|
+
jobId,
|
|
862
|
+
senderForTags,
|
|
863
|
+
});
|
|
754
864
|
|
|
755
865
|
const {
|
|
756
866
|
publicInputs,
|
|
757
867
|
chonkProof,
|
|
758
868
|
executionSteps,
|
|
759
869
|
timings: { proving } = {},
|
|
760
|
-
} = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, {
|
|
870
|
+
} = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, anchorBlockHeader, {
|
|
761
871
|
simulate: false,
|
|
762
872
|
skipFeeEnforcement: false,
|
|
763
873
|
profileMode: 'none',
|
|
@@ -787,23 +897,20 @@ export class PXE {
|
|
|
787
897
|
nodeRPCCalls: contractFunctionSimulator?.getStats().nodeRPCCalls,
|
|
788
898
|
});
|
|
789
899
|
|
|
790
|
-
//
|
|
791
|
-
//
|
|
792
|
-
//
|
|
793
|
-
//
|
|
794
|
-
//
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
} else {
|
|
805
|
-
this.log.debug(`No tagging index ranges used in the tx`);
|
|
806
|
-
}
|
|
900
|
+
// We keep track of which tagging indices we've used in this tx so that we don't repeat them in future txs
|
|
901
|
+
// (which would link them) without having to rely on this tx being mined (and us seeing the indices being used
|
|
902
|
+
// onchain).
|
|
903
|
+
// Note that this must happen _after_ proving as it requires the proof's public inputs, from which the kernels
|
|
904
|
+
// may have removed some logs due to note-nullifier squashing - this may lead to range of tagging indices we've
|
|
905
|
+
// actually used to being reduced.
|
|
906
|
+
await persistSenderTaggingIndexRangesForTx(
|
|
907
|
+
this.senderTaggingStore,
|
|
908
|
+
privateExecutionResult.entrypoint.taggingIndexRanges,
|
|
909
|
+
publicInputs,
|
|
910
|
+
() => txProvingResult.getTxHash(),
|
|
911
|
+
jobId,
|
|
912
|
+
this.log,
|
|
913
|
+
);
|
|
807
914
|
|
|
808
915
|
return txProvingResult;
|
|
809
916
|
} catch (err: any) {
|
|
@@ -820,7 +927,7 @@ export class PXE {
|
|
|
820
927
|
*/
|
|
821
928
|
public profileTx(
|
|
822
929
|
txRequest: TxExecutionRequest,
|
|
823
|
-
{ profileMode, skipProofGeneration = true, scopes }: ProfileTxOpts,
|
|
930
|
+
{ profileMode, skipProofGeneration = true, scopes, senderForTags }: ProfileTxOpts,
|
|
824
931
|
): Promise<TxProfileResult> {
|
|
825
932
|
// We disable concurrent profiles for consistency with simulateTx.
|
|
826
933
|
return this.#putInJobQueue(async jobId => {
|
|
@@ -839,16 +946,25 @@ export class PXE {
|
|
|
839
946
|
txInfo,
|
|
840
947
|
);
|
|
841
948
|
const syncTimer = new Timer();
|
|
842
|
-
await this
|
|
949
|
+
await this.#maybeSync();
|
|
950
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
843
951
|
const syncTime = syncTimer.ms();
|
|
844
952
|
|
|
845
953
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
846
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
954
|
+
const privateExecutionResult = await this.#executePrivate({
|
|
955
|
+
contractFunctionSimulator,
|
|
956
|
+
txRequest,
|
|
957
|
+
anchorBlockHeader,
|
|
958
|
+
scopes,
|
|
959
|
+
jobId,
|
|
960
|
+
senderForTags,
|
|
961
|
+
});
|
|
847
962
|
|
|
848
963
|
const { executionSteps, timings: { proving } = {} } = await this.#prove(
|
|
849
964
|
txRequest,
|
|
850
965
|
this.proofCreator,
|
|
851
966
|
privateExecutionResult,
|
|
967
|
+
anchorBlockHeader,
|
|
852
968
|
{
|
|
853
969
|
simulate: skipProofGeneration,
|
|
854
970
|
skipFeeEnforcement: false,
|
|
@@ -916,6 +1032,7 @@ export class PXE {
|
|
|
916
1032
|
skipKernels = true,
|
|
917
1033
|
overrides,
|
|
918
1034
|
scopes,
|
|
1035
|
+
senderForTags,
|
|
919
1036
|
}: SimulateTxOpts,
|
|
920
1037
|
): Promise<TxSimulationResult> {
|
|
921
1038
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
@@ -937,27 +1054,26 @@ export class PXE {
|
|
|
937
1054
|
txInfo,
|
|
938
1055
|
);
|
|
939
1056
|
const syncTimer = new Timer();
|
|
940
|
-
await this
|
|
1057
|
+
await this.#maybeSync();
|
|
1058
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
941
1059
|
const syncTime = syncTimer.ms();
|
|
942
1060
|
|
|
943
|
-
|
|
944
|
-
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
945
|
-
|
|
946
|
-
if (hasOverriddenContracts && !skipKernels) {
|
|
1061
|
+
if (overrides?.contracts && Object.keys(overrides.contracts).length > 0 && !skipKernels) {
|
|
947
1062
|
throw new Error(
|
|
948
1063
|
'Simulating with overridden contracts is not compatible with kernel execution. Please set skipKernels to true when simulating with overridden contracts.',
|
|
949
1064
|
);
|
|
950
1065
|
}
|
|
951
1066
|
const contractFunctionSimulator = this.#getSimulatorForTx(overrides);
|
|
952
1067
|
|
|
953
|
-
if (hasOverriddenContracts) {
|
|
954
|
-
// Overridden contracts don't have a sync function, so calling sync on them would fail.
|
|
955
|
-
// We exclude them so the sync service skips them entirely.
|
|
956
|
-
this.contractSyncService.setExcludedFromSync(jobId, overriddenContracts);
|
|
957
|
-
}
|
|
958
|
-
|
|
959
1068
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
960
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
1069
|
+
const privateExecutionResult = await this.#executePrivate({
|
|
1070
|
+
contractFunctionSimulator,
|
|
1071
|
+
txRequest,
|
|
1072
|
+
anchorBlockHeader,
|
|
1073
|
+
scopes,
|
|
1074
|
+
jobId,
|
|
1075
|
+
senderForTags,
|
|
1076
|
+
});
|
|
961
1077
|
|
|
962
1078
|
let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
|
|
963
1079
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
@@ -970,11 +1086,17 @@ export class PXE {
|
|
|
970
1086
|
));
|
|
971
1087
|
} else {
|
|
972
1088
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
973
|
-
({ publicInputs, executionSteps } = await this.#prove(
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1089
|
+
({ publicInputs, executionSteps } = await this.#prove(
|
|
1090
|
+
txRequest,
|
|
1091
|
+
this.proofCreator,
|
|
1092
|
+
privateExecutionResult,
|
|
1093
|
+
anchorBlockHeader,
|
|
1094
|
+
{
|
|
1095
|
+
simulate: true,
|
|
1096
|
+
skipFeeEnforcement,
|
|
1097
|
+
profileMode: 'none',
|
|
1098
|
+
},
|
|
1099
|
+
));
|
|
978
1100
|
}
|
|
979
1101
|
|
|
980
1102
|
const privateSimulationResult = new PrivateSimulationResult(privateExecutionResult, publicInputs);
|
|
@@ -983,7 +1105,7 @@ export class PXE {
|
|
|
983
1105
|
let publicOutput: PublicSimulationOutput | undefined;
|
|
984
1106
|
if (simulatePublic && publicInputs.forPublic) {
|
|
985
1107
|
const publicSimulationTimer = new Timer();
|
|
986
|
-
publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement);
|
|
1108
|
+
publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement, overrides);
|
|
987
1109
|
publicSimulationTime = publicSimulationTimer.ms();
|
|
988
1110
|
if (publicOutput?.debugLogs?.length) {
|
|
989
1111
|
await displayDebugLogs(publicOutput.debugLogs, addr => this.contractStore.getDebugContractName(addr));
|
|
@@ -1069,7 +1191,7 @@ export class PXE {
|
|
|
1069
1191
|
try {
|
|
1070
1192
|
const totalTimer = new Timer();
|
|
1071
1193
|
const syncTimer = new Timer();
|
|
1072
|
-
await this
|
|
1194
|
+
await this.#maybeSync();
|
|
1073
1195
|
const syncTime = syncTimer.ms();
|
|
1074
1196
|
const functionTimer = new Timer();
|
|
1075
1197
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
@@ -1144,7 +1266,7 @@ export class PXE {
|
|
|
1144
1266
|
let anchorBlockNumber: BlockNumber;
|
|
1145
1267
|
|
|
1146
1268
|
await this.#putInJobQueue(async jobId => {
|
|
1147
|
-
await this
|
|
1269
|
+
await this.#maybeSync();
|
|
1148
1270
|
|
|
1149
1271
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1150
1272
|
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
@@ -1173,10 +1295,11 @@ export class PXE {
|
|
|
1173
1295
|
}
|
|
1174
1296
|
|
|
1175
1297
|
/**
|
|
1176
|
-
* Stops the PXE's job queue.
|
|
1298
|
+
* Stops the PXE's job queue and closes the backing store.
|
|
1177
1299
|
*/
|
|
1178
1300
|
public async stop(): Promise<void> {
|
|
1179
1301
|
await this.jobQueue.end();
|
|
1180
1302
|
await this.blockStateSynchronizer.stop();
|
|
1303
|
+
await this.db.close();
|
|
1181
1304
|
}
|
|
1182
1305
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"complete_addresses": [
|
|
3
|
+
{
|
|
4
|
+
"index": 0,
|
|
5
|
+
"value": "0b3683ee9df3ed6ed7027145bd6093f783b0bb4d8354501d906db7bb8cb58ea313ad6965d11a533a663d07507319f74ac3305325f6f72423c0b24aa1193268bb19e95c05f09cb86d1a6257572f9082ca15d4a02373c4d8c9cee23dc61a4c2a882f9017d51bca6616102d8a1d4dba89e4ce12881a2414576f01d2fec9492814a22a1b054e998835d166711839b515d434b1fbc207ad4fdb5b2b43d6ac6b400871019f5bb255e87523d43da83ebc9fa95169b653d4abef902e011e9eac620fc45b14a5d4bde495b8c3a9ba4aed0d4870526e46fdff22d341a2f689ac5a50d103560f124f07811eebfaaa6d31316a2cc5bf255fa118f720e8ff1f2fc0d4aa46d4960000000000000000000000000000000000000000000000000000000000000003"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"index": 1,
|
|
9
|
+
"value": "2cf4c6a79bcb041923c0cf1cfbb6c7407e082824e29588dbcf9cc6c1d6e8b01f17c2df1b7355bb4c4494aa4ec85d15ff8881cea1b34691f0cc558e8aef3f3f4c267e526a2e6e9adf6a026989be005bd50d1aea76d20816b9843bc95557696f9f16c3eb259ba3e3eb27b7fe3abc36e87923990bf5c265cb0d57790eda2a4432f105a5449624125d37f10cd4c68ffd57b0dc0cdaa916cb37840be1db9bf88e3c5f0e81754454e3b12035b13448a9fe3b980bf31a9808cb93e146628fb06fa1b46f14a5d4bde495b8c3a9ba4aed0d4870526e46fdff22d341a2f689ac5a50d103560f124f07811eebfaaa6d31316a2cc5bf255fa118f720e8ff1f2fc0d4aa46d4960000000000000000000000000000000000000000000000000000000000000007"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"complete_address_index": [
|
|
13
|
+
{
|
|
14
|
+
"key": "utf8:0x0b3683ee9df3ed6ed7027145bd6093f783b0bb4d8354501d906db7bb8cb58ea3",
|
|
15
|
+
"value": "num:0"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"key": "utf8:0x2cf4c6a79bcb041923c0cf1cfbb6c7407e082824e29588dbcf9cc6c1d6e8b01f",
|
|
19
|
+
"value": "num:1"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
{
|
|
2
|
+
"header": "000000000000000000000000000000000000000000000000000000000000000200000003000000000000000000000000000000000000000000000000000000000000000500000007000000000000000000000000000000000000000000000000000000000000000b0000000d00000000000000000000000000000000000000000000000000000000000000110000001300000000000000000000000000000000000000000000000000000000000000170000001d000000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000002500000000000000000000000000000000000000000000000000000000000000290000002b0000002f0000000000000035000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003d00000000000000000000000000000043000000000000000000000000000000470000000000000000000000000000000000000000000000000000000000000049000000000000000000000000000000000000000000000000000000000000004f"
|
|
3
|
+
}
|