@aztec/pxe 0.0.1-commit.c7c42ec → 0.0.1-commit.c80b6263
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 +68 -20
- 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/config/package_info.js +1 -1
- 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 -9
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +33 -19
- 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 +4 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +6 -3
- 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 +15 -11
- 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 +10 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +43 -32
- 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 +1 -37
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +16 -18
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +24 -38
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +27 -17
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +72 -72
- package/dest/contract_sync/index.d.ts +23 -0
- package/dest/contract_sync/index.d.ts.map +1 -0
- package/dest/contract_sync/index.js +54 -0
- package/dest/debug/pxe_debug_utils.d.ts +16 -6
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +20 -10
- 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 +20 -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 +21 -7
- package/dest/entrypoints/pxe_creation_options.d.ts +5 -3
- 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 +30 -15
- package/dest/events/event_service.d.ts +4 -3
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +17 -19
- 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 +75 -0
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
- package/dest/job_coordinator/job_coordinator.js +94 -0
- package/dest/logs/log_service.d.ts +4 -2
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +22 -14
- package/dest/notes/note_service.d.ts +5 -4
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +30 -34
- 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} +13 -7
- 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 +6 -7
- package/dest/private_kernel/private_kernel_oracle.d.ts +24 -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 +75 -93
- 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 +132 -23
- package/dest/storage/note_store/note_store.d.ts +45 -56
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +244 -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 +47 -7
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +203 -68
- 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 +69 -12
- 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 +110 -28
- package/dest/tagging/constants.d.ts +2 -0
- package/dest/tagging/constants.d.ts.map +1 -0
- package/dest/tagging/constants.js +10 -0
- 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 +3 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +2 -10
- 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 +8 -8
- 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 +8 -8
- 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 +18 -18
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +87 -32
- package/src/config/index.ts +14 -0
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +39 -21
- 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 +5 -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 +20 -10
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +56 -41
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -69
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +43 -42
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +92 -76
- package/src/contract_sync/index.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +26 -11
- package/src/entrypoints/client/bundle/utils.ts +12 -15
- package/src/entrypoints/client/lazy/utils.ts +13 -16
- package/src/entrypoints/pxe_creation_options.ts +4 -2
- package/src/entrypoints/server/index.ts +2 -0
- package/src/entrypoints/server/utils.ts +26 -34
- package/src/events/event_service.ts +17 -21
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +150 -0
- package/src/logs/log_service.ts +33 -12
- package/src/notes/note_service.ts +37 -40
- 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} +33 -22
- package/src/private_kernel/private_kernel_execution_prover.ts +9 -8
- package/src/private_kernel/private_kernel_oracle.ts +116 -36
- package/src/pxe.ts +136 -122
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/note_store/note_store.ts +286 -317
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +277 -76
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +89 -13
- package/src/storage/tagging_store/sender_tagging_store.ts +129 -28
- package/src/tagging/constants.ts +10 -0
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +2 -11
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +21 -7
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +10 -7
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -13
- 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 -86
- 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 -133
- 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,20 +53,22 @@ 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';
|
|
62
|
+
import { ensureContractSynced, readCurrentClassId } from './contract_sync/index.js';
|
|
63
63
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
64
64
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
65
65
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
66
|
+
import { JobCoordinator } from './job_coordinator/job_coordinator.js';
|
|
66
67
|
import {
|
|
67
68
|
PrivateKernelExecutionProver,
|
|
68
69
|
type PrivateKernelExecutionProverConfig,
|
|
69
70
|
} from './private_kernel/private_kernel_execution_prover.js';
|
|
70
|
-
import {
|
|
71
|
+
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
71
72
|
import { AddressStore } from './storage/address_store/address_store.js';
|
|
72
73
|
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
73
74
|
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
@@ -107,6 +108,7 @@ export class PXE {
|
|
|
107
108
|
private protocolContractsProvider: ProtocolContractsProvider,
|
|
108
109
|
private log: Logger,
|
|
109
110
|
private jobQueue: SerialQueue,
|
|
111
|
+
private jobCoordinator: JobCoordinator,
|
|
110
112
|
public debug: PXEDebugUtils,
|
|
111
113
|
) {}
|
|
112
114
|
|
|
@@ -126,6 +128,10 @@ export class PXE {
|
|
|
126
128
|
config: PXEConfig,
|
|
127
129
|
loggerOrSuffix?: string | Logger,
|
|
128
130
|
) {
|
|
131
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
132
|
+
const bindings: LoggerBindings | undefined =
|
|
133
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
134
|
+
|
|
129
135
|
const log =
|
|
130
136
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
131
137
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
@@ -135,7 +141,7 @@ export class PXE {
|
|
|
135
141
|
const addressStore = new AddressStore(store);
|
|
136
142
|
const privateEventStore = new PrivateEventStore(store);
|
|
137
143
|
const contractStore = new ContractStore(store);
|
|
138
|
-
const noteStore =
|
|
144
|
+
const noteStore = new NoteStore(store);
|
|
139
145
|
const anchorBlockStore = new AnchorBlockStore(store);
|
|
140
146
|
const senderTaggingStore = new SenderTaggingStore(store);
|
|
141
147
|
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
@@ -143,9 +149,27 @@ export class PXE {
|
|
|
143
149
|
const capsuleStore = new CapsuleStore(store);
|
|
144
150
|
const keyStore = new KeyStore(store);
|
|
145
151
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
146
|
-
const synchronizer = new BlockSynchronizer(
|
|
152
|
+
const synchronizer = new BlockSynchronizer(
|
|
153
|
+
node,
|
|
154
|
+
store,
|
|
155
|
+
anchorBlockStore,
|
|
156
|
+
noteStore,
|
|
157
|
+
privateEventStore,
|
|
158
|
+
tipsStore,
|
|
159
|
+
config,
|
|
160
|
+
bindings,
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
164
|
+
jobCoordinator.registerStores([
|
|
165
|
+
capsuleStore,
|
|
166
|
+
senderTaggingStore,
|
|
167
|
+
recipientTaggingStore,
|
|
168
|
+
privateEventStore,
|
|
169
|
+
noteStore,
|
|
170
|
+
]);
|
|
147
171
|
|
|
148
|
-
const debugUtils = new PXEDebugUtils(contractStore, noteStore);
|
|
172
|
+
const debugUtils = new PXEDebugUtils(contractStore, noteStore, synchronizer, anchorBlockStore);
|
|
149
173
|
|
|
150
174
|
const jobQueue = new SerialQueue();
|
|
151
175
|
|
|
@@ -168,10 +192,11 @@ export class PXE {
|
|
|
168
192
|
protocolContractsProvider,
|
|
169
193
|
log,
|
|
170
194
|
jobQueue,
|
|
195
|
+
jobCoordinator,
|
|
171
196
|
debugUtils,
|
|
172
197
|
);
|
|
173
198
|
|
|
174
|
-
debugUtils.setPXE(pxe);
|
|
199
|
+
debugUtils.setPXE(pxe, pxe.#putInJobQueue.bind(pxe));
|
|
175
200
|
|
|
176
201
|
pxe.jobQueue.start();
|
|
177
202
|
|
|
@@ -191,7 +216,7 @@ export class PXE {
|
|
|
191
216
|
this.noteStore,
|
|
192
217
|
this.keyStore,
|
|
193
218
|
this.addressStore,
|
|
194
|
-
this.node,
|
|
219
|
+
BenchmarkedNodeFactory.create(this.node),
|
|
195
220
|
this.anchorBlockStore,
|
|
196
221
|
this.senderTaggingStore,
|
|
197
222
|
this.recipientTaggingStore,
|
|
@@ -222,7 +247,7 @@ export class PXE {
|
|
|
222
247
|
*
|
|
223
248
|
* Useful for tasks that cannot run concurrently, such as contract function simulation.
|
|
224
249
|
*/
|
|
225
|
-
#putInJobQueue<T>(fn: () => Promise<T>): Promise<T> {
|
|
250
|
+
#putInJobQueue<T>(fn: (jobId: string) => Promise<T>): Promise<T> {
|
|
226
251
|
// TODO(#12636): relax the conditions under which we forbid concurrency.
|
|
227
252
|
if (this.jobQueue.length() != 0) {
|
|
228
253
|
this.log.warn(
|
|
@@ -230,7 +255,22 @@ export class PXE {
|
|
|
230
255
|
);
|
|
231
256
|
}
|
|
232
257
|
|
|
233
|
-
return this.jobQueue.put(
|
|
258
|
+
return this.jobQueue.put(async () => {
|
|
259
|
+
const jobId = this.jobCoordinator.beginJob();
|
|
260
|
+
this.log.verbose(`Beginning job ${jobId}`);
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
const result = await fn(jobId);
|
|
264
|
+
this.log.verbose(`Committing job ${jobId}`);
|
|
265
|
+
|
|
266
|
+
await this.jobCoordinator.commitJob(jobId);
|
|
267
|
+
return result;
|
|
268
|
+
} catch (err) {
|
|
269
|
+
this.log.verbose(`Aborting job ${jobId}`);
|
|
270
|
+
await this.jobCoordinator.abortJob(jobId);
|
|
271
|
+
throw err;
|
|
272
|
+
}
|
|
273
|
+
});
|
|
234
274
|
}
|
|
235
275
|
|
|
236
276
|
async #registerProtocolContracts() {
|
|
@@ -245,31 +285,28 @@ export class PXE {
|
|
|
245
285
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
246
286
|
}
|
|
247
287
|
|
|
248
|
-
async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
|
|
249
|
-
return !!(await this.node.getContractClass(id));
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
async #isContractPublished(address: AztecAddress): Promise<boolean> {
|
|
253
|
-
return !!(await this.node.getContract(address));
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
async #isContractInitialized(address: AztecAddress): Promise<boolean> {
|
|
257
|
-
const initNullifier = await siloNullifier(address, address.toField());
|
|
258
|
-
return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
|
|
259
|
-
}
|
|
260
|
-
|
|
261
288
|
// Executes the entrypoint private function, as well as all nested private
|
|
262
289
|
// functions that might arise.
|
|
263
290
|
async #executePrivate(
|
|
264
291
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
265
292
|
txRequest: TxExecutionRequest,
|
|
266
|
-
scopes
|
|
293
|
+
scopes: AztecAddress[] | undefined,
|
|
294
|
+
jobId: string,
|
|
267
295
|
): Promise<PrivateExecutionResult> {
|
|
268
296
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
269
297
|
|
|
270
298
|
try {
|
|
271
299
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
272
300
|
|
|
301
|
+
await ensureContractSynced(
|
|
302
|
+
contractAddress,
|
|
303
|
+
functionSelector,
|
|
304
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
305
|
+
this.node,
|
|
306
|
+
this.contractStore,
|
|
307
|
+
anchorBlockHeader,
|
|
308
|
+
);
|
|
309
|
+
|
|
273
310
|
const result = await contractFunctionSimulator.run(
|
|
274
311
|
txRequest,
|
|
275
312
|
contractAddress,
|
|
@@ -280,6 +317,7 @@ export class PXE {
|
|
|
280
317
|
// contract entrypoint
|
|
281
318
|
undefined, // senderForTags
|
|
282
319
|
scopes,
|
|
320
|
+
jobId,
|
|
283
321
|
);
|
|
284
322
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
285
323
|
return result;
|
|
@@ -298,17 +336,19 @@ export class PXE {
|
|
|
298
336
|
* @param authWitnesses - Authentication witnesses required for the function call.
|
|
299
337
|
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
300
338
|
* accounts if not specified.
|
|
339
|
+
* @param jobId - The job ID for staged writes.
|
|
301
340
|
* @returns The simulation result containing the outputs of the utility function.
|
|
302
341
|
*/
|
|
303
342
|
async #simulateUtility(
|
|
304
343
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
305
344
|
call: FunctionCall,
|
|
306
|
-
authWitnesses
|
|
307
|
-
scopes
|
|
345
|
+
authWitnesses: AuthWitness[] | undefined,
|
|
346
|
+
scopes: AztecAddress[] | undefined,
|
|
347
|
+
jobId: string,
|
|
308
348
|
) {
|
|
309
349
|
try {
|
|
310
350
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
311
|
-
return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes);
|
|
351
|
+
return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes, jobId);
|
|
312
352
|
} catch (err) {
|
|
313
353
|
if (err instanceof SimulationError) {
|
|
314
354
|
await enrichSimulationError(err, this.contractStore, this.log);
|
|
@@ -361,14 +401,15 @@ export class PXE {
|
|
|
361
401
|
privateExecutionResult: PrivateExecutionResult,
|
|
362
402
|
config: PrivateKernelExecutionProverConfig,
|
|
363
403
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
364
|
-
const
|
|
365
|
-
const
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
404
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
405
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
406
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
407
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
408
|
+
kernelOracle,
|
|
409
|
+
proofCreator,
|
|
410
|
+
!this.proverEnabled,
|
|
411
|
+
this.log.getBindings(),
|
|
370
412
|
);
|
|
371
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
372
413
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
373
414
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
374
415
|
}
|
|
@@ -380,66 +421,12 @@ export class PXE {
|
|
|
380
421
|
}
|
|
381
422
|
|
|
382
423
|
/**
|
|
383
|
-
* Returns the contract
|
|
384
|
-
*
|
|
385
|
-
* @
|
|
386
|
-
* @param id - Identifier of the class.
|
|
387
|
-
* @param includeArtifact - Identifier of the class.
|
|
388
|
-
* @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
|
|
389
|
-
* for `includeArtifact`
|
|
390
|
-
* TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
|
|
391
|
-
* should the pxe query the node for contract public info, and merge it with its own definitions?
|
|
392
|
-
* TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
|
|
393
|
-
* during a public deployment. We probably want a nicer and more general API for this, but it'll have to
|
|
394
|
-
* do for the time being.
|
|
424
|
+
* Returns the contract artifact for a given contract class id, if it's registered in the PXE.
|
|
425
|
+
* @param id - Identifier of the contract class.
|
|
426
|
+
* @returns The contract artifact if found, undefined otherwise.
|
|
395
427
|
*/
|
|
396
|
-
public async
|
|
397
|
-
id
|
|
398
|
-
includeArtifact: boolean = false,
|
|
399
|
-
): Promise<{
|
|
400
|
-
contractClass: ContractClassWithId | undefined;
|
|
401
|
-
isContractClassPubliclyRegistered: boolean;
|
|
402
|
-
artifact: ContractArtifact | undefined;
|
|
403
|
-
}> {
|
|
404
|
-
const artifact = await this.contractStore.getContractArtifact(id);
|
|
405
|
-
if (!artifact) {
|
|
406
|
-
this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
return {
|
|
410
|
-
contractClass: artifact && (await getContractClassFromArtifact(artifact)),
|
|
411
|
-
isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
|
|
412
|
-
artifact: includeArtifact ? artifact : undefined,
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Returns the contract metadata given an address.
|
|
418
|
-
* The metadata consists of its contract instance, which includes the contract class identifier,
|
|
419
|
-
* initialization hash, deployment salt, and public keys hash; whether the contract instance has been initialized;
|
|
420
|
-
* and whether the contract instance with the given address has been publicly deployed.
|
|
421
|
-
* @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
|
|
422
|
-
* This query is not dependent on the PXE.
|
|
423
|
-
* @param address - The address that the contract instance resides at.
|
|
424
|
-
* @returns - It returns the contract metadata
|
|
425
|
-
* TODO(@spalladino): Should we return the public keys in plain as well here?
|
|
426
|
-
*/
|
|
427
|
-
public async getContractMetadata(address: AztecAddress): Promise<{
|
|
428
|
-
contractInstance: ContractInstanceWithAddress | undefined;
|
|
429
|
-
isContractInitialized: boolean;
|
|
430
|
-
isContractPublished: boolean;
|
|
431
|
-
}> {
|
|
432
|
-
let instance;
|
|
433
|
-
try {
|
|
434
|
-
instance = await this.contractStore.getContractInstance(address);
|
|
435
|
-
} catch {
|
|
436
|
-
this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
|
|
437
|
-
}
|
|
438
|
-
return {
|
|
439
|
-
contractInstance: instance,
|
|
440
|
-
isContractInitialized: await this.#isContractInitialized(address),
|
|
441
|
-
isContractPublished: await this.#isContractPublished(address),
|
|
442
|
-
};
|
|
428
|
+
public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
|
|
429
|
+
return await this.contractStore.getContractArtifact(id);
|
|
443
430
|
}
|
|
444
431
|
|
|
445
432
|
/**
|
|
@@ -464,7 +451,6 @@ export class PXE {
|
|
|
464
451
|
}
|
|
465
452
|
|
|
466
453
|
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
467
|
-
await this.noteStore.addScope(accountCompleteAddress.address);
|
|
468
454
|
return accountCompleteAddress;
|
|
469
455
|
}
|
|
470
456
|
|
|
@@ -612,13 +598,7 @@ export class PXE {
|
|
|
612
598
|
|
|
613
599
|
const header = await this.anchorBlockStore.getBlockHeader();
|
|
614
600
|
|
|
615
|
-
const currentClassId = await readCurrentClassId(
|
|
616
|
-
contractAddress,
|
|
617
|
-
currentInstance,
|
|
618
|
-
this.node,
|
|
619
|
-
header.globalVariables.blockNumber,
|
|
620
|
-
header.globalVariables.timestamp,
|
|
621
|
-
);
|
|
601
|
+
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
622
602
|
if (!contractClass.id.equals(currentClassId)) {
|
|
623
603
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
624
604
|
}
|
|
@@ -657,14 +637,14 @@ export class PXE {
|
|
|
657
637
|
let privateExecutionResult: PrivateExecutionResult;
|
|
658
638
|
// We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
|
|
659
639
|
// computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
|
|
660
|
-
return this.#putInJobQueue(async
|
|
640
|
+
return this.#putInJobQueue(async jobId => {
|
|
661
641
|
const totalTimer = new Timer();
|
|
662
642
|
try {
|
|
663
643
|
const syncTimer = new Timer();
|
|
664
644
|
await this.blockStateSynchronizer.sync();
|
|
665
645
|
const syncTime = syncTimer.ms();
|
|
666
646
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
667
|
-
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
|
|
647
|
+
privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, undefined, jobId);
|
|
668
648
|
|
|
669
649
|
const {
|
|
670
650
|
publicInputs,
|
|
@@ -711,7 +691,7 @@ export class PXE {
|
|
|
711
691
|
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
712
692
|
const txHash = (await txProvingResult.toTx()).txHash;
|
|
713
693
|
|
|
714
|
-
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash);
|
|
694
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
715
695
|
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
716
696
|
preTagsUsedInTheTx,
|
|
717
697
|
});
|
|
@@ -741,7 +721,7 @@ export class PXE {
|
|
|
741
721
|
skipProofGeneration: boolean = true,
|
|
742
722
|
): Promise<TxProfileResult> {
|
|
743
723
|
// We disable concurrent profiles for consistency with simulateTx.
|
|
744
|
-
return this.#putInJobQueue(async
|
|
724
|
+
return this.#putInJobQueue(async jobId => {
|
|
745
725
|
const totalTimer = new Timer();
|
|
746
726
|
try {
|
|
747
727
|
const txInfo = {
|
|
@@ -761,7 +741,12 @@ export class PXE {
|
|
|
761
741
|
const syncTime = syncTimer.ms();
|
|
762
742
|
|
|
763
743
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
764
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
744
|
+
const privateExecutionResult = await this.#executePrivate(
|
|
745
|
+
contractFunctionSimulator,
|
|
746
|
+
txRequest,
|
|
747
|
+
undefined,
|
|
748
|
+
jobId,
|
|
749
|
+
);
|
|
765
750
|
|
|
766
751
|
const { executionSteps, timings: { proving } = {} } = await this.#prove(
|
|
767
752
|
txRequest,
|
|
@@ -841,7 +826,7 @@ export class PXE {
|
|
|
841
826
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
842
827
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
843
828
|
// delete the same read value, or reading values that another simulation is currently modifying).
|
|
844
|
-
return this.#putInJobQueue(async
|
|
829
|
+
return this.#putInJobQueue(async jobId => {
|
|
845
830
|
try {
|
|
846
831
|
const totalTimer = new Timer();
|
|
847
832
|
const txInfo = {
|
|
@@ -867,20 +852,14 @@ export class PXE {
|
|
|
867
852
|
const skipKernels = overrides?.contracts !== undefined && Object.keys(overrides.contracts ?? {}).length > 0;
|
|
868
853
|
|
|
869
854
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
870
|
-
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes);
|
|
855
|
+
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
871
856
|
|
|
872
857
|
let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
|
|
873
858
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
874
859
|
|
|
875
860
|
if (skipKernels) {
|
|
876
|
-
// According to the protocol rules, the nonce generator for the note hashes
|
|
877
|
-
// can either be the first nullifier in the tx or the protocol nullifier if there are none.
|
|
878
|
-
const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
|
|
879
|
-
? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
|
|
880
|
-
: privateExecutionResult.firstNullifier;
|
|
881
861
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
|
|
882
862
|
privateExecutionResult,
|
|
883
|
-
nonceGenerator,
|
|
884
863
|
this.contractStore,
|
|
885
864
|
));
|
|
886
865
|
} else {
|
|
@@ -982,7 +961,7 @@ export class PXE {
|
|
|
982
961
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
983
962
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
984
963
|
// delete the same read value, or reading values that another simulation is currently modifying).
|
|
985
|
-
return this.#putInJobQueue(async
|
|
964
|
+
return this.#putInJobQueue(async jobId => {
|
|
986
965
|
try {
|
|
987
966
|
const totalTimer = new Timer();
|
|
988
967
|
const syncTimer = new Timer();
|
|
@@ -990,7 +969,24 @@ export class PXE {
|
|
|
990
969
|
const syncTime = syncTimer.ms();
|
|
991
970
|
const functionTimer = new Timer();
|
|
992
971
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
993
|
-
|
|
972
|
+
|
|
973
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
974
|
+
await ensureContractSynced(
|
|
975
|
+
call.to,
|
|
976
|
+
call.selector,
|
|
977
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
978
|
+
this.node,
|
|
979
|
+
this.contractStore,
|
|
980
|
+
anchorBlockHeader,
|
|
981
|
+
);
|
|
982
|
+
|
|
983
|
+
const executionResult = await this.#simulateUtility(
|
|
984
|
+
contractFunctionSimulator,
|
|
985
|
+
call,
|
|
986
|
+
authwits ?? [],
|
|
987
|
+
scopes,
|
|
988
|
+
jobId,
|
|
989
|
+
);
|
|
994
990
|
const functionTime = functionTimer.ms();
|
|
995
991
|
|
|
996
992
|
const totalTime = totalTimer.ms();
|
|
@@ -1035,11 +1031,29 @@ export class PXE {
|
|
|
1035
1031
|
eventSelector: EventSelector,
|
|
1036
1032
|
filter: PrivateEventFilter,
|
|
1037
1033
|
): Promise<PackedPrivateEvent[]> {
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
await this
|
|
1034
|
+
let anchorBlockNumber: BlockNumber;
|
|
1035
|
+
|
|
1036
|
+
await this.#putInJobQueue(async jobId => {
|
|
1037
|
+
await this.blockStateSynchronizer.sync();
|
|
1038
|
+
|
|
1039
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1040
|
+
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
1041
|
+
|
|
1042
|
+
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1043
|
+
|
|
1044
|
+
await ensureContractSynced(
|
|
1045
|
+
filter.contractAddress,
|
|
1046
|
+
null,
|
|
1047
|
+
async privateSyncCall =>
|
|
1048
|
+
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1049
|
+
this.node,
|
|
1050
|
+
this.contractStore,
|
|
1051
|
+
anchorBlockHeader,
|
|
1052
|
+
);
|
|
1053
|
+
});
|
|
1041
1054
|
|
|
1042
|
-
|
|
1055
|
+
// anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
|
|
1056
|
+
const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
|
|
1043
1057
|
|
|
1044
1058
|
this.log.debug(
|
|
1045
1059
|
`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
|