@aztec/pxe 0.0.1-commit.7d4e6cd → 0.0.1-commit.87a0206
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 +36 -26
- 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 +88 -84
- 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 +22 -9
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -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 +19 -37
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +67 -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 +27 -30
- 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 +285 -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 +39 -30
- 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 +112 -91
- 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 +60 -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 +111 -118
- 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 +26 -35
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +321 -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,
|
|
@@ -34,6 +33,7 @@ import type {
|
|
|
34
33
|
PrivateKernelTailCircuitPublicInputs,
|
|
35
34
|
} from '@aztec/stdlib/kernel';
|
|
36
35
|
import {
|
|
36
|
+
BlockHeader,
|
|
37
37
|
type ContractOverrides,
|
|
38
38
|
type InTx,
|
|
39
39
|
PrivateExecutionResult,
|
|
@@ -54,13 +54,14 @@ import { inspect } from 'util';
|
|
|
54
54
|
|
|
55
55
|
import { BlockSynchronizer } from './block_synchronizer/index.js';
|
|
56
56
|
import type { PXEConfig } from './config/index.js';
|
|
57
|
+
import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
|
|
57
58
|
import {
|
|
58
59
|
ContractFunctionSimulator,
|
|
59
60
|
generateSimulatedProvingResult,
|
|
60
61
|
} from './contract_function_simulator/contract_function_simulator.js';
|
|
61
|
-
import { readCurrentClassId } from './contract_function_simulator/oracle/private_execution.js';
|
|
62
62
|
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
63
|
-
import {
|
|
63
|
+
import { ContractSyncService } from './contract_sync/contract_sync_service.js';
|
|
64
|
+
import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
64
65
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
65
66
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
66
67
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
@@ -69,7 +70,7 @@ import {
|
|
|
69
70
|
PrivateKernelExecutionProver,
|
|
70
71
|
type PrivateKernelExecutionProverConfig,
|
|
71
72
|
} from './private_kernel/private_kernel_execution_prover.js';
|
|
72
|
-
import {
|
|
73
|
+
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
73
74
|
import { AddressStore } from './storage/address_store/address_store.js';
|
|
74
75
|
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
75
76
|
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
@@ -103,6 +104,7 @@ export class PXE {
|
|
|
103
104
|
private recipientTaggingStore: RecipientTaggingStore,
|
|
104
105
|
private addressStore: AddressStore,
|
|
105
106
|
private privateEventStore: PrivateEventStore,
|
|
107
|
+
private contractSyncService: ContractSyncService,
|
|
106
108
|
private simulator: CircuitSimulator,
|
|
107
109
|
private proverEnabled: boolean,
|
|
108
110
|
private proofCreator: PrivateKernelProver,
|
|
@@ -129,6 +131,10 @@ export class PXE {
|
|
|
129
131
|
config: PXEConfig,
|
|
130
132
|
loggerOrSuffix?: string | Logger,
|
|
131
133
|
) {
|
|
134
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
135
|
+
const bindings: LoggerBindings | undefined =
|
|
136
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
137
|
+
|
|
132
138
|
const log =
|
|
133
139
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
134
140
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
@@ -138,7 +144,7 @@ export class PXE {
|
|
|
138
144
|
const addressStore = new AddressStore(store);
|
|
139
145
|
const privateEventStore = new PrivateEventStore(store);
|
|
140
146
|
const contractStore = new ContractStore(store);
|
|
141
|
-
const noteStore =
|
|
147
|
+
const noteStore = new NoteStore(store);
|
|
142
148
|
const anchorBlockStore = new AnchorBlockStore(store);
|
|
143
149
|
const senderTaggingStore = new SenderTaggingStore(store);
|
|
144
150
|
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
@@ -146,19 +152,35 @@ export class PXE {
|
|
|
146
152
|
const capsuleStore = new CapsuleStore(store);
|
|
147
153
|
const keyStore = new KeyStore(store);
|
|
148
154
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
155
|
+
const contractSyncService = new ContractSyncService(
|
|
156
|
+
node,
|
|
157
|
+
contractStore,
|
|
158
|
+
noteStore,
|
|
159
|
+
createLogger('pxe:contract_sync', bindings),
|
|
160
|
+
);
|
|
149
161
|
const synchronizer = new BlockSynchronizer(
|
|
150
162
|
node,
|
|
163
|
+
store,
|
|
151
164
|
anchorBlockStore,
|
|
152
165
|
noteStore,
|
|
153
166
|
privateEventStore,
|
|
154
167
|
tipsStore,
|
|
168
|
+
contractSyncService,
|
|
155
169
|
config,
|
|
156
|
-
|
|
170
|
+
bindings,
|
|
157
171
|
);
|
|
158
172
|
|
|
159
|
-
const jobCoordinator = new JobCoordinator(store);
|
|
173
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
174
|
+
jobCoordinator.registerStores([
|
|
175
|
+
capsuleStore,
|
|
176
|
+
senderTaggingStore,
|
|
177
|
+
recipientTaggingStore,
|
|
178
|
+
privateEventStore,
|
|
179
|
+
noteStore,
|
|
180
|
+
contractSyncService,
|
|
181
|
+
]);
|
|
160
182
|
|
|
161
|
-
const debugUtils = new PXEDebugUtils(
|
|
183
|
+
const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
|
|
162
184
|
|
|
163
185
|
const jobQueue = new SerialQueue();
|
|
164
186
|
|
|
@@ -175,6 +197,7 @@ export class PXE {
|
|
|
175
197
|
recipientTaggingStore,
|
|
176
198
|
addressStore,
|
|
177
199
|
privateEventStore,
|
|
200
|
+
contractSyncService,
|
|
178
201
|
simulator,
|
|
179
202
|
proverEnabled,
|
|
180
203
|
proofCreator,
|
|
@@ -185,7 +208,11 @@ export class PXE {
|
|
|
185
208
|
debugUtils,
|
|
186
209
|
);
|
|
187
210
|
|
|
188
|
-
debugUtils.
|
|
211
|
+
debugUtils.setPXEHelpers(
|
|
212
|
+
pxe.#putInJobQueue.bind(pxe),
|
|
213
|
+
pxe.#getSimulatorForTx.bind(pxe),
|
|
214
|
+
pxe.#simulateUtility.bind(pxe),
|
|
215
|
+
);
|
|
189
216
|
|
|
190
217
|
pxe.jobQueue.start();
|
|
191
218
|
|
|
@@ -205,14 +232,14 @@ export class PXE {
|
|
|
205
232
|
this.noteStore,
|
|
206
233
|
this.keyStore,
|
|
207
234
|
this.addressStore,
|
|
208
|
-
|
|
209
|
-
this.anchorBlockStore,
|
|
235
|
+
BenchmarkedNodeFactory.create(this.node),
|
|
210
236
|
this.senderTaggingStore,
|
|
211
237
|
this.recipientTaggingStore,
|
|
212
238
|
this.senderAddressBookStore,
|
|
213
239
|
this.capsuleStore,
|
|
214
240
|
this.privateEventStore,
|
|
215
241
|
this.simulator,
|
|
242
|
+
this.contractSyncService,
|
|
216
243
|
);
|
|
217
244
|
}
|
|
218
245
|
|
|
@@ -274,19 +301,6 @@ export class PXE {
|
|
|
274
301
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
275
302
|
}
|
|
276
303
|
|
|
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
304
|
// Executes the entrypoint private function, as well as all nested private
|
|
291
305
|
// functions that might arise.
|
|
292
306
|
async #executePrivate(
|
|
@@ -300,6 +314,14 @@ export class PXE {
|
|
|
300
314
|
try {
|
|
301
315
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
302
316
|
|
|
317
|
+
await this.contractSyncService.ensureContractSynced(
|
|
318
|
+
contractAddress,
|
|
319
|
+
functionSelector,
|
|
320
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
321
|
+
anchorBlockHeader,
|
|
322
|
+
jobId,
|
|
323
|
+
);
|
|
324
|
+
|
|
303
325
|
const result = await contractFunctionSimulator.run(
|
|
304
326
|
txRequest,
|
|
305
327
|
contractAddress,
|
|
@@ -394,85 +416,45 @@ export class PXE {
|
|
|
394
416
|
privateExecutionResult: PrivateExecutionResult,
|
|
395
417
|
config: PrivateKernelExecutionProverConfig,
|
|
396
418
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
397
|
-
const
|
|
398
|
-
const
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
419
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
420
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
421
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
422
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
423
|
+
kernelOracle,
|
|
424
|
+
proofCreator,
|
|
425
|
+
!this.proverEnabled,
|
|
426
|
+
this.log.getBindings(),
|
|
403
427
|
);
|
|
404
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
405
428
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
406
429
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
407
430
|
}
|
|
408
431
|
|
|
409
432
|
// Public API
|
|
410
433
|
|
|
411
|
-
|
|
412
|
-
|
|
434
|
+
/**
|
|
435
|
+
* Returns the block header up to which the PXE has synced.
|
|
436
|
+
* @returns The synced block header
|
|
437
|
+
*/
|
|
438
|
+
public getSyncedBlockHeader(): Promise<BlockHeader> {
|
|
439
|
+
return this.anchorBlockStore.getBlockHeader();
|
|
413
440
|
}
|
|
414
441
|
|
|
415
442
|
/**
|
|
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.
|
|
443
|
+
* Returns the contract instance for a given address, if it's registered in the PXE.
|
|
444
|
+
* @param address - The contract address.
|
|
445
|
+
* @returns The contract instance if found, undefined otherwise.
|
|
428
446
|
*/
|
|
429
|
-
public
|
|
430
|
-
|
|
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
|
+
public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
|
|
448
|
+
return this.contractStore.getContractInstance(address);
|
|
447
449
|
}
|
|
448
450
|
|
|
449
451
|
/**
|
|
450
|
-
* Returns the contract
|
|
451
|
-
*
|
|
452
|
-
*
|
|
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?
|
|
452
|
+
* Returns the contract artifact for a given contract class id, if it's registered in the PXE.
|
|
453
|
+
* @param id - Identifier of the contract class.
|
|
454
|
+
* @returns The contract artifact if found, undefined otherwise.
|
|
459
455
|
*/
|
|
460
|
-
public async
|
|
461
|
-
|
|
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
|
-
};
|
|
456
|
+
public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
|
|
457
|
+
return await this.contractStore.getContractArtifact(id);
|
|
476
458
|
}
|
|
477
459
|
|
|
478
460
|
/**
|
|
@@ -497,7 +479,6 @@ export class PXE {
|
|
|
497
479
|
}
|
|
498
480
|
|
|
499
481
|
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
500
|
-
await this.noteStore.addScope(accountCompleteAddress.address);
|
|
501
482
|
return accountCompleteAddress;
|
|
502
483
|
}
|
|
503
484
|
|
|
@@ -645,13 +626,7 @@ export class PXE {
|
|
|
645
626
|
|
|
646
627
|
const header = await this.anchorBlockStore.getBlockHeader();
|
|
647
628
|
|
|
648
|
-
const currentClassId = await readCurrentClassId(
|
|
649
|
-
contractAddress,
|
|
650
|
-
currentInstance,
|
|
651
|
-
this.node,
|
|
652
|
-
header.globalVariables.blockNumber,
|
|
653
|
-
header.globalVariables.timestamp,
|
|
654
|
-
);
|
|
629
|
+
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
655
630
|
if (!contractClass.id.equals(currentClassId)) {
|
|
656
631
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
657
632
|
}
|
|
@@ -744,7 +719,7 @@ export class PXE {
|
|
|
744
719
|
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
745
720
|
const txHash = (await txProvingResult.toTx()).txHash;
|
|
746
721
|
|
|
747
|
-
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash);
|
|
722
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
748
723
|
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
749
724
|
preTagsUsedInTheTx,
|
|
750
725
|
});
|
|
@@ -902,7 +877,14 @@ export class PXE {
|
|
|
902
877
|
// Temporary: in case there are overrides, we have to skip the kernels or validations
|
|
903
878
|
// will fail. Consider handing control to the user/wallet on whether they want to run them
|
|
904
879
|
// or not.
|
|
905
|
-
const
|
|
880
|
+
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
881
|
+
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
882
|
+
const skipKernels = hasOverriddenContracts;
|
|
883
|
+
|
|
884
|
+
// Set overridden contracts on the sync service so it knows to skip syncing them
|
|
885
|
+
if (hasOverriddenContracts) {
|
|
886
|
+
this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
|
|
887
|
+
}
|
|
906
888
|
|
|
907
889
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
908
890
|
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
@@ -911,15 +893,9 @@ export class PXE {
|
|
|
911
893
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
912
894
|
|
|
913
895
|
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
896
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
|
|
920
897
|
privateExecutionResult,
|
|
921
|
-
|
|
922
|
-
this.contractStore,
|
|
898
|
+
(addr, sel) => this.contractStore.getDebugFunctionName(addr, sel),
|
|
923
899
|
));
|
|
924
900
|
} else {
|
|
925
901
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
@@ -1029,8 +1005,13 @@ export class PXE {
|
|
|
1029
1005
|
const functionTimer = new Timer();
|
|
1030
1006
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1031
1007
|
|
|
1032
|
-
await this.
|
|
1033
|
-
|
|
1008
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1009
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1010
|
+
call.to,
|
|
1011
|
+
call.selector,
|
|
1012
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1013
|
+
anchorBlockHeader,
|
|
1014
|
+
jobId,
|
|
1034
1015
|
);
|
|
1035
1016
|
|
|
1036
1017
|
const executionResult = await this.#simulateUtility(
|
|
@@ -1080,26 +1061,38 @@ export class PXE {
|
|
|
1080
1061
|
* Defaults to the latest known block to PXE + 1.
|
|
1081
1062
|
* @returns - The packed events with block and tx metadata.
|
|
1082
1063
|
*/
|
|
1083
|
-
public getPrivateEvents(
|
|
1084
|
-
|
|
1064
|
+
public async getPrivateEvents(
|
|
1065
|
+
eventSelector: EventSelector,
|
|
1066
|
+
filter: PrivateEventFilter,
|
|
1067
|
+
): Promise<PackedPrivateEvent[]> {
|
|
1068
|
+
let anchorBlockNumber: BlockNumber;
|
|
1069
|
+
|
|
1070
|
+
await this.#putInJobQueue(async jobId => {
|
|
1085
1071
|
await this.blockStateSynchronizer.sync();
|
|
1072
|
+
|
|
1073
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1074
|
+
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
1075
|
+
|
|
1086
1076
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1087
1077
|
|
|
1088
|
-
await this.
|
|
1078
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1089
1079
|
filter.contractAddress,
|
|
1090
1080
|
null,
|
|
1091
1081
|
async privateSyncCall =>
|
|
1092
1082
|
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1083
|
+
anchorBlockHeader,
|
|
1084
|
+
jobId,
|
|
1093
1085
|
);
|
|
1086
|
+
});
|
|
1094
1087
|
|
|
1095
|
-
|
|
1088
|
+
// anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
|
|
1089
|
+
const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
|
|
1096
1090
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1091
|
+
this.log.debug(
|
|
1092
|
+
`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
|
|
1093
|
+
);
|
|
1100
1094
|
|
|
1101
|
-
|
|
1102
|
-
});
|
|
1095
|
+
return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
|
|
1103
1096
|
}
|
|
1104
1097
|
|
|
1105
1098
|
/**
|
|
@@ -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
|
}
|