@aztec/pxe 0.0.1-commit.6d3c34e → 0.0.1-commit.6d63667d
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 +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +11 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +72 -21
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +8 -10
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +35 -25
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +16 -12
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +11 -9
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +64 -41
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +13 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +23 -11
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +37 -24
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +84 -83
- package/dest/contract_sync/contract_sync_service.d.ts +41 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +82 -0
- package/dest/contract_sync/helpers.d.ts +28 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -9
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +31 -17
- 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 +12 -6
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +13 -7
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +3 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +19 -8
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +7 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +23 -20
- package/dest/notes/note_service.d.ts +7 -7
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +31 -36
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/hints/index.d.ts +2 -2
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +12 -6
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -28
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +90 -2
- package/dest/pxe.d.ts +8 -36
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +57 -86
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- package/dest/storage/contract_store/contract_store.d.ts +1 -2
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +22 -25
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +51 -52
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +282 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +15 -8
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -9
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +46 -0
- package/dest/tagging/index.d.ts +2 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +6 -6
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +7 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- 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 +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -2
- 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 +10 -5
- package/package.json +27 -18
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +91 -33
- package/src/config/index.ts +14 -0
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +37 -28
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +21 -11
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +76 -44
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +37 -13
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +106 -90
- package/src/contract_sync/contract_sync_service.ts +129 -0
- package/src/contract_sync/helpers.ts +93 -0
- package/src/debug/pxe_debug_utils.ts +65 -17
- package/src/entrypoints/client/bundle/utils.ts +7 -14
- package/src/entrypoints/client/lazy/utils.ts +8 -14
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +2 -0
- package/src/entrypoints/server/utils.ts +15 -19
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +34 -16
- package/src/notes/note_service.ts +38 -43
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +32 -20
- package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +98 -119
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/contract_store/contract_store.ts +22 -31
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +317 -318
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +1 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +16 -5
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +16 -4
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
package/src/pxe.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
4
5
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
5
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
7
|
import { KeyStore } from '@aztec/key-store';
|
|
@@ -19,14 +20,12 @@ import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
|
19
20
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
20
21
|
import {
|
|
21
22
|
CompleteAddress,
|
|
22
|
-
type ContractClassWithId,
|
|
23
23
|
type ContractInstanceWithAddress,
|
|
24
24
|
type PartialAddress,
|
|
25
25
|
computeContractAddressFromInstance,
|
|
26
26
|
getContractClassFromArtifact,
|
|
27
27
|
} from '@aztec/stdlib/contract';
|
|
28
28
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
29
|
-
import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
|
|
30
29
|
import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
31
30
|
import type {
|
|
32
31
|
PrivateExecutionStep,
|
|
@@ -54,13 +53,14 @@ import { inspect } from 'util';
|
|
|
54
53
|
|
|
55
54
|
import { BlockSynchronizer } from './block_synchronizer/index.js';
|
|
56
55
|
import type { PXEConfig } from './config/index.js';
|
|
56
|
+
import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
|
|
57
57
|
import {
|
|
58
58
|
ContractFunctionSimulator,
|
|
59
59
|
generateSimulatedProvingResult,
|
|
60
60
|
} from './contract_function_simulator/contract_function_simulator.js';
|
|
61
|
-
import { readCurrentClassId } from './contract_function_simulator/oracle/private_execution.js';
|
|
62
61
|
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
63
|
-
import {
|
|
62
|
+
import { ContractSyncService } from './contract_sync/contract_sync_service.js';
|
|
63
|
+
import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
64
64
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
65
65
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
66
66
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
PrivateKernelExecutionProver,
|
|
70
70
|
type PrivateKernelExecutionProverConfig,
|
|
71
71
|
} from './private_kernel/private_kernel_execution_prover.js';
|
|
72
|
-
import {
|
|
72
|
+
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
73
73
|
import { AddressStore } from './storage/address_store/address_store.js';
|
|
74
74
|
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
75
75
|
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
@@ -103,6 +103,7 @@ export class PXE {
|
|
|
103
103
|
private recipientTaggingStore: RecipientTaggingStore,
|
|
104
104
|
private addressStore: AddressStore,
|
|
105
105
|
private privateEventStore: PrivateEventStore,
|
|
106
|
+
private contractSyncService: ContractSyncService,
|
|
106
107
|
private simulator: CircuitSimulator,
|
|
107
108
|
private proverEnabled: boolean,
|
|
108
109
|
private proofCreator: PrivateKernelProver,
|
|
@@ -129,6 +130,10 @@ export class PXE {
|
|
|
129
130
|
config: PXEConfig,
|
|
130
131
|
loggerOrSuffix?: string | Logger,
|
|
131
132
|
) {
|
|
133
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
134
|
+
const bindings: LoggerBindings | undefined =
|
|
135
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
136
|
+
|
|
132
137
|
const log =
|
|
133
138
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
134
139
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
@@ -138,7 +143,7 @@ export class PXE {
|
|
|
138
143
|
const addressStore = new AddressStore(store);
|
|
139
144
|
const privateEventStore = new PrivateEventStore(store);
|
|
140
145
|
const contractStore = new ContractStore(store);
|
|
141
|
-
const noteStore =
|
|
146
|
+
const noteStore = new NoteStore(store);
|
|
142
147
|
const anchorBlockStore = new AnchorBlockStore(store);
|
|
143
148
|
const senderTaggingStore = new SenderTaggingStore(store);
|
|
144
149
|
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
@@ -146,19 +151,35 @@ export class PXE {
|
|
|
146
151
|
const capsuleStore = new CapsuleStore(store);
|
|
147
152
|
const keyStore = new KeyStore(store);
|
|
148
153
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
154
|
+
const contractSyncService = new ContractSyncService(
|
|
155
|
+
node,
|
|
156
|
+
contractStore,
|
|
157
|
+
noteStore,
|
|
158
|
+
createLogger('pxe:contract_sync', bindings),
|
|
159
|
+
);
|
|
149
160
|
const synchronizer = new BlockSynchronizer(
|
|
150
161
|
node,
|
|
162
|
+
store,
|
|
151
163
|
anchorBlockStore,
|
|
152
164
|
noteStore,
|
|
153
165
|
privateEventStore,
|
|
154
166
|
tipsStore,
|
|
167
|
+
contractSyncService,
|
|
155
168
|
config,
|
|
156
|
-
|
|
169
|
+
bindings,
|
|
157
170
|
);
|
|
158
171
|
|
|
159
|
-
const jobCoordinator = new JobCoordinator(store);
|
|
172
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
173
|
+
jobCoordinator.registerStores([
|
|
174
|
+
capsuleStore,
|
|
175
|
+
senderTaggingStore,
|
|
176
|
+
recipientTaggingStore,
|
|
177
|
+
privateEventStore,
|
|
178
|
+
noteStore,
|
|
179
|
+
contractSyncService,
|
|
180
|
+
]);
|
|
160
181
|
|
|
161
|
-
const debugUtils = new PXEDebugUtils(
|
|
182
|
+
const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
|
|
162
183
|
|
|
163
184
|
const jobQueue = new SerialQueue();
|
|
164
185
|
|
|
@@ -175,6 +196,7 @@ export class PXE {
|
|
|
175
196
|
recipientTaggingStore,
|
|
176
197
|
addressStore,
|
|
177
198
|
privateEventStore,
|
|
199
|
+
contractSyncService,
|
|
178
200
|
simulator,
|
|
179
201
|
proverEnabled,
|
|
180
202
|
proofCreator,
|
|
@@ -185,7 +207,11 @@ export class PXE {
|
|
|
185
207
|
debugUtils,
|
|
186
208
|
);
|
|
187
209
|
|
|
188
|
-
debugUtils.
|
|
210
|
+
debugUtils.setPXEHelpers(
|
|
211
|
+
pxe.#putInJobQueue.bind(pxe),
|
|
212
|
+
pxe.#getSimulatorForTx.bind(pxe),
|
|
213
|
+
pxe.#simulateUtility.bind(pxe),
|
|
214
|
+
);
|
|
189
215
|
|
|
190
216
|
pxe.jobQueue.start();
|
|
191
217
|
|
|
@@ -205,14 +231,14 @@ export class PXE {
|
|
|
205
231
|
this.noteStore,
|
|
206
232
|
this.keyStore,
|
|
207
233
|
this.addressStore,
|
|
208
|
-
|
|
209
|
-
this.anchorBlockStore,
|
|
234
|
+
BenchmarkedNodeFactory.create(this.node),
|
|
210
235
|
this.senderTaggingStore,
|
|
211
236
|
this.recipientTaggingStore,
|
|
212
237
|
this.senderAddressBookStore,
|
|
213
238
|
this.capsuleStore,
|
|
214
239
|
this.privateEventStore,
|
|
215
240
|
this.simulator,
|
|
241
|
+
this.contractSyncService,
|
|
216
242
|
);
|
|
217
243
|
}
|
|
218
244
|
|
|
@@ -274,19 +300,6 @@ export class PXE {
|
|
|
274
300
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
275
301
|
}
|
|
276
302
|
|
|
277
|
-
async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
|
|
278
|
-
return !!(await this.node.getContractClass(id));
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
async #isContractPublished(address: AztecAddress): Promise<boolean> {
|
|
282
|
-
return !!(await this.node.getContract(address));
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
async #isContractInitialized(address: AztecAddress): Promise<boolean> {
|
|
286
|
-
const initNullifier = await siloNullifier(address, address.toField());
|
|
287
|
-
return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
|
|
288
|
-
}
|
|
289
|
-
|
|
290
303
|
// Executes the entrypoint private function, as well as all nested private
|
|
291
304
|
// functions that might arise.
|
|
292
305
|
async #executePrivate(
|
|
@@ -300,6 +313,14 @@ export class PXE {
|
|
|
300
313
|
try {
|
|
301
314
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
302
315
|
|
|
316
|
+
await this.contractSyncService.ensureContractSynced(
|
|
317
|
+
contractAddress,
|
|
318
|
+
functionSelector,
|
|
319
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
320
|
+
anchorBlockHeader,
|
|
321
|
+
jobId,
|
|
322
|
+
);
|
|
323
|
+
|
|
303
324
|
const result = await contractFunctionSimulator.run(
|
|
304
325
|
txRequest,
|
|
305
326
|
contractAddress,
|
|
@@ -394,14 +415,15 @@ export class PXE {
|
|
|
394
415
|
privateExecutionResult: PrivateExecutionResult,
|
|
395
416
|
config: PrivateKernelExecutionProverConfig,
|
|
396
417
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
397
|
-
const
|
|
398
|
-
const
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
418
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
419
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
420
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
421
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
422
|
+
kernelOracle,
|
|
423
|
+
proofCreator,
|
|
424
|
+
!this.proverEnabled,
|
|
425
|
+
this.log.getBindings(),
|
|
403
426
|
);
|
|
404
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
405
427
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
406
428
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
407
429
|
}
|
|
@@ -413,66 +435,12 @@ export class PXE {
|
|
|
413
435
|
}
|
|
414
436
|
|
|
415
437
|
/**
|
|
416
|
-
* Returns the contract
|
|
417
|
-
*
|
|
418
|
-
* @
|
|
419
|
-
* @param id - Identifier of the class.
|
|
420
|
-
* @param includeArtifact - Identifier of the class.
|
|
421
|
-
* @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
|
|
422
|
-
* for `includeArtifact`
|
|
423
|
-
* TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
|
|
424
|
-
* should the pxe query the node for contract public info, and merge it with its own definitions?
|
|
425
|
-
* TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
|
|
426
|
-
* during a public deployment. We probably want a nicer and more general API for this, but it'll have to
|
|
427
|
-
* do for the time being.
|
|
438
|
+
* Returns the contract artifact for a given contract class id, if it's registered in the PXE.
|
|
439
|
+
* @param id - Identifier of the contract class.
|
|
440
|
+
* @returns The contract artifact if found, undefined otherwise.
|
|
428
441
|
*/
|
|
429
|
-
public async
|
|
430
|
-
id
|
|
431
|
-
includeArtifact: boolean = false,
|
|
432
|
-
): Promise<{
|
|
433
|
-
contractClass: ContractClassWithId | undefined;
|
|
434
|
-
isContractClassPubliclyRegistered: boolean;
|
|
435
|
-
artifact: ContractArtifact | undefined;
|
|
436
|
-
}> {
|
|
437
|
-
const artifact = await this.contractStore.getContractArtifact(id);
|
|
438
|
-
if (!artifact) {
|
|
439
|
-
this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
return {
|
|
443
|
-
contractClass: artifact && (await getContractClassFromArtifact(artifact)),
|
|
444
|
-
isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
|
|
445
|
-
artifact: includeArtifact ? artifact : undefined,
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
/**
|
|
450
|
-
* Returns the contract metadata given an address.
|
|
451
|
-
* The metadata consists of its contract instance, which includes the contract class identifier,
|
|
452
|
-
* initialization hash, deployment salt, and public keys hash; whether the contract instance has been initialized;
|
|
453
|
-
* and whether the contract instance with the given address has been publicly deployed.
|
|
454
|
-
* @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
|
|
455
|
-
* This query is not dependent on the PXE.
|
|
456
|
-
* @param address - The address that the contract instance resides at.
|
|
457
|
-
* @returns - It returns the contract metadata
|
|
458
|
-
* TODO(@spalladino): Should we return the public keys in plain as well here?
|
|
459
|
-
*/
|
|
460
|
-
public async getContractMetadata(address: AztecAddress): Promise<{
|
|
461
|
-
contractInstance: ContractInstanceWithAddress | undefined;
|
|
462
|
-
isContractInitialized: boolean;
|
|
463
|
-
isContractPublished: boolean;
|
|
464
|
-
}> {
|
|
465
|
-
let instance;
|
|
466
|
-
try {
|
|
467
|
-
instance = await this.contractStore.getContractInstance(address);
|
|
468
|
-
} catch {
|
|
469
|
-
this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
|
|
470
|
-
}
|
|
471
|
-
return {
|
|
472
|
-
contractInstance: instance,
|
|
473
|
-
isContractInitialized: await this.#isContractInitialized(address),
|
|
474
|
-
isContractPublished: await this.#isContractPublished(address),
|
|
475
|
-
};
|
|
442
|
+
public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
|
|
443
|
+
return await this.contractStore.getContractArtifact(id);
|
|
476
444
|
}
|
|
477
445
|
|
|
478
446
|
/**
|
|
@@ -497,7 +465,6 @@ export class PXE {
|
|
|
497
465
|
}
|
|
498
466
|
|
|
499
467
|
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
500
|
-
await this.noteStore.addScope(accountCompleteAddress.address);
|
|
501
468
|
return accountCompleteAddress;
|
|
502
469
|
}
|
|
503
470
|
|
|
@@ -645,13 +612,7 @@ export class PXE {
|
|
|
645
612
|
|
|
646
613
|
const header = await this.anchorBlockStore.getBlockHeader();
|
|
647
614
|
|
|
648
|
-
const currentClassId = await readCurrentClassId(
|
|
649
|
-
contractAddress,
|
|
650
|
-
currentInstance,
|
|
651
|
-
this.node,
|
|
652
|
-
header.globalVariables.blockNumber,
|
|
653
|
-
header.globalVariables.timestamp,
|
|
654
|
-
);
|
|
615
|
+
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
655
616
|
if (!contractClass.id.equals(currentClassId)) {
|
|
656
617
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
657
618
|
}
|
|
@@ -744,7 +705,7 @@ export class PXE {
|
|
|
744
705
|
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
745
706
|
const txHash = (await txProvingResult.toTx()).txHash;
|
|
746
707
|
|
|
747
|
-
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash);
|
|
708
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
748
709
|
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
749
710
|
preTagsUsedInTheTx,
|
|
750
711
|
});
|
|
@@ -902,7 +863,14 @@ export class PXE {
|
|
|
902
863
|
// Temporary: in case there are overrides, we have to skip the kernels or validations
|
|
903
864
|
// will fail. Consider handing control to the user/wallet on whether they want to run them
|
|
904
865
|
// or not.
|
|
905
|
-
const
|
|
866
|
+
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
867
|
+
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
868
|
+
const skipKernels = hasOverriddenContracts;
|
|
869
|
+
|
|
870
|
+
// Set overridden contracts on the sync service so it knows to skip syncing them
|
|
871
|
+
if (hasOverriddenContracts) {
|
|
872
|
+
this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
|
|
873
|
+
}
|
|
906
874
|
|
|
907
875
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
908
876
|
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
@@ -911,14 +879,8 @@ export class PXE {
|
|
|
911
879
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
912
880
|
|
|
913
881
|
if (skipKernels) {
|
|
914
|
-
// According to the protocol rules, the nonce generator for the note hashes
|
|
915
|
-
// can either be the first nullifier in the tx or the protocol nullifier if there are none.
|
|
916
|
-
const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
|
|
917
|
-
? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
|
|
918
|
-
: privateExecutionResult.firstNullifier;
|
|
919
882
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
|
|
920
883
|
privateExecutionResult,
|
|
921
|
-
nonceGenerator,
|
|
922
884
|
this.contractStore,
|
|
923
885
|
));
|
|
924
886
|
} else {
|
|
@@ -1029,8 +991,13 @@ export class PXE {
|
|
|
1029
991
|
const functionTimer = new Timer();
|
|
1030
992
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1031
993
|
|
|
1032
|
-
await this.
|
|
1033
|
-
|
|
994
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
995
|
+
await this.contractSyncService.ensureContractSynced(
|
|
996
|
+
call.to,
|
|
997
|
+
call.selector,
|
|
998
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
999
|
+
anchorBlockHeader,
|
|
1000
|
+
jobId,
|
|
1034
1001
|
);
|
|
1035
1002
|
|
|
1036
1003
|
const executionResult = await this.#simulateUtility(
|
|
@@ -1080,26 +1047,38 @@ export class PXE {
|
|
|
1080
1047
|
* Defaults to the latest known block to PXE + 1.
|
|
1081
1048
|
* @returns - The packed events with block and tx metadata.
|
|
1082
1049
|
*/
|
|
1083
|
-
public getPrivateEvents(
|
|
1084
|
-
|
|
1050
|
+
public async getPrivateEvents(
|
|
1051
|
+
eventSelector: EventSelector,
|
|
1052
|
+
filter: PrivateEventFilter,
|
|
1053
|
+
): Promise<PackedPrivateEvent[]> {
|
|
1054
|
+
let anchorBlockNumber: BlockNumber;
|
|
1055
|
+
|
|
1056
|
+
await this.#putInJobQueue(async jobId => {
|
|
1085
1057
|
await this.blockStateSynchronizer.sync();
|
|
1058
|
+
|
|
1059
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1060
|
+
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
1061
|
+
|
|
1086
1062
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1087
1063
|
|
|
1088
|
-
await this.
|
|
1064
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1089
1065
|
filter.contractAddress,
|
|
1090
1066
|
null,
|
|
1091
1067
|
async privateSyncCall =>
|
|
1092
1068
|
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1069
|
+
anchorBlockHeader,
|
|
1070
|
+
jobId,
|
|
1093
1071
|
);
|
|
1072
|
+
});
|
|
1094
1073
|
|
|
1095
|
-
|
|
1074
|
+
// anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
|
|
1075
|
+
const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
|
|
1096
1076
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1077
|
+
this.log.debug(
|
|
1078
|
+
`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
|
|
1079
|
+
);
|
|
1100
1080
|
|
|
1101
|
-
|
|
1102
|
-
});
|
|
1081
|
+
return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
|
|
1103
1082
|
}
|
|
1104
1083
|
|
|
1105
1084
|
/**
|
|
@@ -43,23 +43,23 @@ export class AddressStore {
|
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
async #getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
47
|
-
const index = await this.#completeAddressIndex.getAsync(address.toString());
|
|
48
|
-
if (index === undefined) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const value = await this.#completeAddresses.atAsync(index);
|
|
53
|
-
return value ? await CompleteAddress.fromBuffer(value) : undefined;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
46
|
getCompleteAddress(account: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
57
|
-
return this.#
|
|
47
|
+
return this.#store.transactionAsync(async () => {
|
|
48
|
+
const index = await this.#completeAddressIndex.getAsync(account.toString());
|
|
49
|
+
if (index === undefined) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const value = await this.#completeAddresses.atAsync(index);
|
|
54
|
+
return value ? await CompleteAddress.fromBuffer(value) : undefined;
|
|
55
|
+
});
|
|
58
56
|
}
|
|
59
57
|
|
|
60
|
-
|
|
61
|
-
return
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
getCompleteAddresses(): Promise<CompleteAddress[]> {
|
|
59
|
+
return this.#store.transactionAsync(async () => {
|
|
60
|
+
return await Promise.all(
|
|
61
|
+
(await toArray(this.#completeAddresses.valuesAsync())).map(v => CompleteAddress.fromBuffer(v)),
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -10,6 +10,14 @@ export class AnchorBlockStore {
|
|
|
10
10
|
this.#synchronizedHeader = this.#store.openSingleton('header');
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Sets the currently synchronized block
|
|
15
|
+
*
|
|
16
|
+
* Important: this method is only called from BlockSynchronizer, and since we need it to run atomically with other
|
|
17
|
+
* stores in the case of a reorg, it MUST NOT be wrapped in a `transactionAsync` call. Doing so would result in a
|
|
18
|
+
* deadlock when the backend is IndexedDB, because `transactionAsync` is not designed to support reentrancy.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
13
21
|
async setHeader(header: BlockHeader): Promise<void> {
|
|
14
22
|
await this.#synchronizedHeader.set(header.toBuffer());
|
|
15
23
|
}
|