@aztec/pxe 0.0.1-commit.c7c42ec → 0.0.1-commit.f295ac2
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/block_synchronizer/block_synchronizer.d.ts +6 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +21 -13
- 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 -16
- 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/noir-structs/event_validation_request.d.ts +3 -2
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -2
- 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 +9 -8
- 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 +4 -4
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +5 -5
- package/dest/contract_function_simulator/oracle/oracle.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +20 -19
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +5 -9
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +11 -10
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +8 -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 +10 -35
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +14 -12
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +54 -52
- 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 +10 -1
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +10 -1
- 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 +2 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +11 -7
- 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 +74 -0
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
- package/dest/job_coordinator/job_coordinator.js +93 -0
- package/dest/logs/log_service.d.ts +3 -2
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +5 -3
- package/dest/notes/note_service.d.ts +3 -3
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +23 -28
- package/dest/oracle_version.d.ts +2 -2
- package/dest/oracle_version.js +2 -2
- 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 +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +4 -5
- 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 +65 -87
- 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/contract_store/contract_store.d.ts +2 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +12 -0
- package/dest/storage/note_store/note_store.d.ts +6 -5
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +89 -94
- package/dest/storage/private_event_store/private_event_store.d.ts +33 -6
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +139 -32
- 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/index.d.ts +2 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -10
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +2 -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 +7 -7
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +2 -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 +2 -2
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -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 +4 -2
- package/dest/tree_membership/tree_membership_service.d.ts +9 -11
- package/dest/tree_membership/tree_membership_service.d.ts.map +1 -1
- package/dest/tree_membership/tree_membership_service.js +25 -34
- package/package.json +18 -18
- package/src/block_synchronizer/block_synchronizer.ts +30 -12
- 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 +42 -16
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +4 -0
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +8 -7
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +6 -6
- package/src/contract_function_simulator/oracle/oracle.ts +24 -22
- package/src/contract_function_simulator/oracle/private_execution.ts +10 -19
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +13 -38
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +56 -50
- package/src/entrypoints/client/bundle/utils.ts +7 -1
- package/src/entrypoints/client/lazy/utils.ts +7 -2
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +1 -0
- package/src/entrypoints/server/utils.ts +11 -15
- 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 +149 -0
- package/src/logs/log_service.ts +3 -1
- package/src/notes/note_service.ts +23 -29
- package/src/oracle_version.ts +2 -2
- 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 +3 -5
- package/src/private_kernel/private_kernel_oracle.ts +116 -36
- package/src/pxe.ts +98 -116
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/contract_store/contract_store.ts +20 -0
- package/src/storage/note_store/note_store.ts +98 -95
- package/src/storage/private_event_store/private_event_store.ts +199 -37
- 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/index.ts +1 -11
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +10 -6
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +8 -7
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +6 -2
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +4 -1
- package/src/tree_membership/tree_membership_service.ts +27 -42
- 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/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
|
@@ -6,6 +6,7 @@ import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundatio
|
|
|
6
6
|
import type { KeyStore } from '@aztec/key-store';
|
|
7
7
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
8
8
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
|
+
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
9
10
|
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
10
11
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
11
12
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
@@ -20,7 +21,6 @@ import { EventService } from '../../events/event_service.js';
|
|
|
20
21
|
import { LogService } from '../../logs/log_service.js';
|
|
21
22
|
import { NoteService } from '../../notes/note_service.js';
|
|
22
23
|
import { ORACLE_VERSION } from '../../oracle_version.js';
|
|
23
|
-
import { PublicStorageService } from '../../public_storage/public_storage_service.js';
|
|
24
24
|
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
25
25
|
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
26
26
|
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
@@ -64,6 +64,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
64
64
|
protected readonly senderAddressBookStore: SenderAddressBookStore,
|
|
65
65
|
protected readonly capsuleStore: CapsuleStore,
|
|
66
66
|
protected readonly privateEventStore: PrivateEventStore,
|
|
67
|
+
protected readonly jobId: string,
|
|
67
68
|
protected log = createLogger('simulator:client_view_context'),
|
|
68
69
|
protected readonly scopes?: AztecAddress[],
|
|
69
70
|
) {}
|
|
@@ -79,13 +80,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
public utilityGetUtilityContext(): UtilityContext {
|
|
82
|
-
return UtilityContext.
|
|
83
|
-
blockNumber: this.anchorBlockHeader.globalVariables.blockNumber,
|
|
84
|
-
timestamp: this.anchorBlockHeader.globalVariables.timestamp,
|
|
85
|
-
contractAddress: this.contractAddress,
|
|
86
|
-
version: this.anchorBlockHeader.globalVariables.version,
|
|
87
|
-
chainId: this.anchorBlockHeader.globalVariables.chainId,
|
|
88
|
-
});
|
|
83
|
+
return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
|
|
89
84
|
}
|
|
90
85
|
|
|
91
86
|
/**
|
|
@@ -100,32 +95,32 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
100
95
|
|
|
101
96
|
/**
|
|
102
97
|
* Fetches the index and sibling path of a leaf at a given block from a given tree.
|
|
103
|
-
* @param
|
|
98
|
+
* @param blockHash - The block hash at which to get the membership witness.
|
|
104
99
|
* @param treeId - Id of the tree to get the sibling path from.
|
|
105
100
|
* @param leafValue - The leaf value
|
|
106
101
|
* @returns The index and sibling path concatenated [index, sibling_path]
|
|
107
102
|
*/
|
|
108
|
-
public utilityGetMembershipWitness(
|
|
109
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode
|
|
110
|
-
return treeMembershipService.getMembershipWitness(
|
|
103
|
+
public utilityGetMembershipWitness(blockHash: L2BlockHash, treeId: MerkleTreeId, leafValue: Fr): Promise<Fr[]> {
|
|
104
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode);
|
|
105
|
+
return treeMembershipService.getMembershipWitness(blockHash, treeId, leafValue);
|
|
111
106
|
}
|
|
112
107
|
|
|
113
108
|
/**
|
|
114
109
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
115
|
-
* @param
|
|
110
|
+
* @param blockHash - The block hash at which to get the index.
|
|
116
111
|
* @param nullifier - Nullifier we try to find witness for.
|
|
117
112
|
* @returns The nullifier membership witness (if found).
|
|
118
113
|
*/
|
|
119
114
|
public async utilityGetNullifierMembershipWitness(
|
|
120
|
-
|
|
115
|
+
blockHash: L2BlockHash,
|
|
121
116
|
nullifier: Fr,
|
|
122
117
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
123
|
-
return await this.aztecNode.getNullifierMembershipWitness(
|
|
118
|
+
return await this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
|
|
124
119
|
}
|
|
125
120
|
|
|
126
121
|
/**
|
|
127
122
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
128
|
-
* @param
|
|
123
|
+
* @param blockHash - The block hash at which to get the index.
|
|
129
124
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
130
125
|
* @returns The low nullifier membership witness (if found).
|
|
131
126
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
@@ -133,25 +128,25 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
133
128
|
* we are trying to prove non-inclusion for.
|
|
134
129
|
*/
|
|
135
130
|
public async utilityGetLowNullifierMembershipWitness(
|
|
136
|
-
|
|
131
|
+
blockHash: L2BlockHash,
|
|
137
132
|
nullifier: Fr,
|
|
138
133
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
139
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode
|
|
140
|
-
return await treeMembershipService.getLowNullifierMembershipWitness(
|
|
134
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode);
|
|
135
|
+
return await treeMembershipService.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
141
136
|
}
|
|
142
137
|
|
|
143
138
|
/**
|
|
144
139
|
* Returns a public data tree witness for a given leaf slot at a given block.
|
|
145
|
-
* @param
|
|
140
|
+
* @param blockHash - The block hash at which to get the index.
|
|
146
141
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
147
142
|
* @returns - The witness
|
|
148
143
|
*/
|
|
149
144
|
public async utilityGetPublicDataWitness(
|
|
150
|
-
|
|
145
|
+
blockHash: L2BlockHash,
|
|
151
146
|
leafSlot: Fr,
|
|
152
147
|
): Promise<PublicDataWitness | undefined> {
|
|
153
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode
|
|
154
|
-
return await treeMembershipService.getPublicDataWitness(
|
|
148
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode);
|
|
149
|
+
return await treeMembershipService.getPublicDataWitness(blockHash, leafSlot);
|
|
155
150
|
}
|
|
156
151
|
|
|
157
152
|
/**
|
|
@@ -166,7 +161,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
166
161
|
}
|
|
167
162
|
|
|
168
163
|
const block = await this.aztecNode.getBlock(blockNumber);
|
|
169
|
-
return block?.
|
|
164
|
+
return block?.header;
|
|
170
165
|
}
|
|
171
166
|
|
|
172
167
|
/**
|
|
@@ -281,7 +276,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
281
276
|
*/
|
|
282
277
|
public async utilityCheckNullifierExists(innerNullifier: Fr) {
|
|
283
278
|
const nullifier = await siloNullifier(this.contractAddress, innerNullifier!);
|
|
284
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode
|
|
279
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode);
|
|
285
280
|
const index = await treeMembershipService.getNullifierIndex(nullifier);
|
|
286
281
|
return index !== undefined;
|
|
287
282
|
}
|
|
@@ -295,7 +290,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
295
290
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
296
291
|
*/
|
|
297
292
|
public async utilityGetL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
298
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode
|
|
293
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode);
|
|
299
294
|
const [messageIndex, siblingPath] = await treeMembershipService.getL1ToL2MembershipWitness(
|
|
300
295
|
contractAddress,
|
|
301
296
|
messageHash,
|
|
@@ -308,25 +303,24 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
308
303
|
|
|
309
304
|
/**
|
|
310
305
|
* Read the public storage data.
|
|
306
|
+
* @param blockHash - The block hash to read storage at.
|
|
311
307
|
* @param contractAddress - The address to read storage from.
|
|
312
308
|
* @param startStorageSlot - The starting storage slot.
|
|
313
|
-
* @param blockNumber - The block number to read storage at.
|
|
314
309
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
315
310
|
*/
|
|
316
311
|
public async utilityStorageRead(
|
|
312
|
+
blockHash: L2BlockHash,
|
|
317
313
|
contractAddress: AztecAddress,
|
|
318
314
|
startStorageSlot: Fr,
|
|
319
|
-
blockNumber: BlockNumber,
|
|
320
315
|
numberOfElements: number,
|
|
321
316
|
) {
|
|
322
317
|
const values = [];
|
|
323
|
-
const publicStorageService = new PublicStorageService(this.anchorBlockStore, this.aztecNode);
|
|
324
318
|
|
|
325
319
|
// TODO: why do we serialize these requests? This should probably a single call
|
|
326
320
|
// Privacy considerations?
|
|
327
321
|
for (let i = 0n; i < numberOfElements; i++) {
|
|
328
322
|
const storageSlot = new Fr(startStorageSlot.value + i);
|
|
329
|
-
const value = await
|
|
323
|
+
const value = await this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot);
|
|
330
324
|
|
|
331
325
|
this.log.debug(
|
|
332
326
|
`Oracle storage read: slot=${storageSlot.toString()} address-${contractAddress.toString()} value=${value}`,
|
|
@@ -353,12 +347,19 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
353
347
|
this.recipientTaggingStore,
|
|
354
348
|
this.senderAddressBookStore,
|
|
355
349
|
this.addressStore,
|
|
350
|
+
this.jobId,
|
|
356
351
|
);
|
|
357
352
|
|
|
358
|
-
await logService.syncTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
359
|
-
|
|
360
353
|
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
361
|
-
|
|
354
|
+
|
|
355
|
+
// It is acceptable to run the following operations in parallel for several reasons:
|
|
356
|
+
// 1. syncTaggedLogs does not write to the note store — it only stores the pending tagged logs in a capsule array,
|
|
357
|
+
// which is then processed in Noir after this handler returns.
|
|
358
|
+
// 2. Even if syncTaggedLogs did write to the note store, it would not cause inconsistent state.
|
|
359
|
+
await Promise.all([
|
|
360
|
+
logService.syncTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes),
|
|
361
|
+
noteService.syncNoteNullifiers(this.contractAddress),
|
|
362
|
+
]);
|
|
362
363
|
}
|
|
363
364
|
|
|
364
365
|
/**
|
|
@@ -376,7 +377,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
376
377
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
377
378
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
378
379
|
) {
|
|
379
|
-
// TODO(#10727): allow other contracts to
|
|
380
|
+
// TODO(#10727): allow other contracts to store notes
|
|
380
381
|
if (!this.contractAddress.equals(contractAddress)) {
|
|
381
382
|
throw new Error(`Got a note validation request from ${contractAddress}, expected ${this.contractAddress}`);
|
|
382
383
|
}
|
|
@@ -384,16 +385,16 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
384
385
|
// We read all note and event validation requests and process them all concurrently. This makes the process much
|
|
385
386
|
// faster as we don't need to wait for the network round-trip.
|
|
386
387
|
const noteValidationRequests = (
|
|
387
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot)
|
|
388
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)
|
|
388
389
|
).map(NoteValidationRequest.fromFields);
|
|
389
390
|
|
|
390
391
|
const eventValidationRequests = (
|
|
391
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot)
|
|
392
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
392
393
|
).map(EventValidationRequest.fromFields);
|
|
393
394
|
|
|
394
395
|
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
395
|
-
const
|
|
396
|
-
noteService.
|
|
396
|
+
const noteStorePromises = noteValidationRequests.map(request =>
|
|
397
|
+
noteService.storeNote(
|
|
397
398
|
request.contractAddress,
|
|
398
399
|
request.owner,
|
|
399
400
|
request.storageSlot,
|
|
@@ -407,11 +408,12 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
407
408
|
),
|
|
408
409
|
);
|
|
409
410
|
|
|
410
|
-
const eventService = new EventService(this.anchorBlockStore, this.aztecNode, this.privateEventStore);
|
|
411
|
-
const
|
|
412
|
-
eventService.
|
|
411
|
+
const eventService = new EventService(this.anchorBlockStore, this.aztecNode, this.privateEventStore, this.jobId);
|
|
412
|
+
const eventStorePromises = eventValidationRequests.map(request =>
|
|
413
|
+
eventService.storeEvent(
|
|
413
414
|
request.contractAddress,
|
|
414
415
|
request.eventTypeId,
|
|
416
|
+
request.randomness,
|
|
415
417
|
request.serializedEvent,
|
|
416
418
|
request.eventCommitment,
|
|
417
419
|
request.txHash,
|
|
@@ -419,11 +421,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
419
421
|
),
|
|
420
422
|
);
|
|
421
423
|
|
|
422
|
-
await Promise.all([...
|
|
424
|
+
await Promise.all([...noteStorePromises, ...eventStorePromises]);
|
|
423
425
|
|
|
424
426
|
// Requests are cleared once we're done.
|
|
425
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, []);
|
|
426
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, []);
|
|
427
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
428
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
427
429
|
}
|
|
428
430
|
|
|
429
431
|
public async utilityBulkRetrieveLogs(
|
|
@@ -439,7 +441,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
439
441
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
440
442
|
// don't need to wait for the network round-trip.
|
|
441
443
|
const logRetrievalRequests = (
|
|
442
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot)
|
|
444
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, this.jobId)
|
|
443
445
|
).map(LogRetrievalRequest.fromFields);
|
|
444
446
|
|
|
445
447
|
const logService = new LogService(
|
|
@@ -450,18 +452,20 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
450
452
|
this.recipientTaggingStore,
|
|
451
453
|
this.senderAddressBookStore,
|
|
452
454
|
this.addressStore,
|
|
455
|
+
this.jobId,
|
|
453
456
|
);
|
|
454
457
|
|
|
455
458
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
456
459
|
|
|
457
460
|
// Requests are cleared once we're done.
|
|
458
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, []);
|
|
461
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, [], this.jobId);
|
|
459
462
|
|
|
460
463
|
// The responses are stored as Option<LogRetrievalResponse> in a second CapsuleArray.
|
|
461
464
|
await this.capsuleStore.setCapsuleArray(
|
|
462
465
|
contractAddress,
|
|
463
466
|
logRetrievalResponsesArrayBaseSlot,
|
|
464
467
|
maybeLogRetrievalResponses.map(LogRetrievalResponse.toSerializedOption),
|
|
468
|
+
this.jobId,
|
|
465
469
|
);
|
|
466
470
|
}
|
|
467
471
|
|
|
@@ -470,7 +474,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
470
474
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
471
475
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
472
476
|
}
|
|
473
|
-
|
|
477
|
+
this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule, this.jobId);
|
|
478
|
+
return Promise.resolve();
|
|
474
479
|
}
|
|
475
480
|
|
|
476
481
|
public async utilityLoadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
@@ -481,7 +486,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
481
486
|
return (
|
|
482
487
|
// TODO(#12425): On the following line, the pertinent capsule gets overshadowed by the transient one. Tackle this.
|
|
483
488
|
this.capsules.find(c => c.contractAddress.equals(contractAddress) && c.storageSlot.equals(slot))?.data ??
|
|
484
|
-
(await this.capsuleStore.loadCapsule(this.contractAddress, slot))
|
|
489
|
+
(await this.capsuleStore.loadCapsule(this.contractAddress, slot, this.jobId))
|
|
485
490
|
);
|
|
486
491
|
}
|
|
487
492
|
|
|
@@ -490,7 +495,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
490
495
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
491
496
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
492
497
|
}
|
|
493
|
-
|
|
498
|
+
this.capsuleStore.deleteCapsule(this.contractAddress, slot, this.jobId);
|
|
499
|
+
return Promise.resolve();
|
|
494
500
|
}
|
|
495
501
|
|
|
496
502
|
public utilityCopyCapsule(
|
|
@@ -503,7 +509,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
503
509
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
504
510
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
505
511
|
}
|
|
506
|
-
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries);
|
|
512
|
+
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries, this.jobId);
|
|
507
513
|
}
|
|
508
514
|
|
|
509
515
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
1
2
|
import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -49,7 +50,12 @@ export async function createPXE(
|
|
|
49
50
|
? loggers.prover
|
|
50
51
|
: createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
let prover;
|
|
54
|
+
if (options.proverOrOptions instanceof BBPrivateKernelProver) {
|
|
55
|
+
prover = options.proverOrOptions;
|
|
56
|
+
} else {
|
|
57
|
+
prover = new BBBundlePrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
58
|
+
}
|
|
53
59
|
const protocolContractsProvider = new BundledProtocolContractsProvider();
|
|
54
60
|
|
|
55
61
|
const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
1
2
|
import { BBLazyPrivateKernelProver } from '@aztec/bb-prover/client/lazy';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -48,8 +49,12 @@ export async function createPXE(
|
|
|
48
49
|
? loggers.prover
|
|
49
50
|
: createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
let prover;
|
|
53
|
+
if (options.proverOrOptions instanceof BBPrivateKernelProver) {
|
|
54
|
+
prover = options.proverOrOptions;
|
|
55
|
+
} else {
|
|
56
|
+
prover = new BBLazyPrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
57
|
+
}
|
|
53
58
|
const protocolContractsProvider = new LazyProtocolContractsProvider();
|
|
54
59
|
|
|
55
60
|
const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BBPrivateKernelProverOptions } from '@aztec/bb-prover/client';
|
|
1
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
2
3
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
4
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
@@ -6,7 +7,7 @@ import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
|
6
7
|
export type PXECreationOptions = {
|
|
7
8
|
loggers?: { store?: Logger; pxe?: Logger; prover?: Logger };
|
|
8
9
|
useLogSuffix?: boolean | string;
|
|
9
|
-
|
|
10
|
+
proverOrOptions?: PrivateKernelProver | BBPrivateKernelProverOptions;
|
|
10
11
|
store?: AztecAsyncKVStore;
|
|
11
12
|
simulator?: CircuitSimulator;
|
|
12
13
|
};
|
|
@@ -6,3 +6,4 @@ export * from './utils.js';
|
|
|
6
6
|
export { NoteService } from '../../notes/note_service.js';
|
|
7
7
|
export { ORACLE_VERSION } from '../../oracle_version.js';
|
|
8
8
|
export { type PXECreationOptions } from '../pxe_creation_options.js';
|
|
9
|
+
export { JobCoordinator } from '../../job_coordinator/job_coordinator.js';
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
1
2
|
import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
|
-
import {
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
6
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
5
|
-
import {
|
|
6
|
-
type CircuitSimulator,
|
|
7
|
-
MemoryCircuitRecorder,
|
|
8
|
-
SimulatorRecorderWrapper,
|
|
9
|
-
WASMSimulator,
|
|
10
|
-
} from '@aztec/simulator/client';
|
|
7
|
+
import { MemoryCircuitRecorder, SimulatorRecorderWrapper, WASMSimulator } from '@aztec/simulator/client';
|
|
11
8
|
import { FileCircuitRecorder } from '@aztec/simulator/testing';
|
|
12
9
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
13
10
|
|
|
@@ -46,9 +43,6 @@ export async function createPXE(
|
|
|
46
43
|
};
|
|
47
44
|
|
|
48
45
|
if (!options.store) {
|
|
49
|
-
// TODO once https://github.com/AztecProtocol/aztec-packages/issues/13656 is fixed, we can remove this and always
|
|
50
|
-
// import the lmdb-v2 version
|
|
51
|
-
const { createStore } = await import('@aztec/kv-store/lmdb-v2');
|
|
52
46
|
const storeLogger = loggers.store
|
|
53
47
|
? loggers.store
|
|
54
48
|
: createLogger('pxe:data:lmdb' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -58,7 +52,13 @@ export async function createPXE(
|
|
|
58
52
|
? loggers.prover
|
|
59
53
|
: createLogger('pxe:bb:native' + (logSuffix ? `:${logSuffix}` : ''));
|
|
60
54
|
|
|
61
|
-
|
|
55
|
+
let prover;
|
|
56
|
+
if (options.proverOrOptions instanceof BBPrivateKernelProver) {
|
|
57
|
+
prover = options.proverOrOptions;
|
|
58
|
+
} else {
|
|
59
|
+
prover = new BBBundlePrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
62
|
const protocolContractsProvider = new BundledProtocolContractsProvider();
|
|
63
63
|
|
|
64
64
|
const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -73,7 +73,3 @@ export async function createPXE(
|
|
|
73
73
|
);
|
|
74
74
|
return pxe;
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
function createProver(simulator: CircuitSimulator, logger?: Logger) {
|
|
78
|
-
return new BBBundlePrivateKernelProver(simulator, logger);
|
|
79
|
-
}
|
|
@@ -3,7 +3,6 @@ import type { EventSelector } from '@aztec/stdlib/abi';
|
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
5
5
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
6
|
-
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
7
6
|
import type { TxHash } from '@aztec/stdlib/tx';
|
|
8
7
|
|
|
9
8
|
import { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
@@ -14,11 +13,13 @@ export class EventService {
|
|
|
14
13
|
private readonly anchorBlockStore: AnchorBlockStore,
|
|
15
14
|
private readonly aztecNode: AztecNode,
|
|
16
15
|
private readonly privateEventStore: PrivateEventStore,
|
|
16
|
+
private readonly jobId: string,
|
|
17
17
|
) {}
|
|
18
18
|
|
|
19
|
-
public async
|
|
19
|
+
public async storeEvent(
|
|
20
20
|
contractAddress: AztecAddress,
|
|
21
21
|
selector: EventSelector,
|
|
22
|
+
randomness: Fr,
|
|
22
23
|
content: Fr[],
|
|
23
24
|
eventCommitment: Fr,
|
|
24
25
|
txHash: TxHash,
|
|
@@ -28,50 +29,45 @@ export class EventService {
|
|
|
28
29
|
// (and thus we're less concerned about being ahead of the synced block), we use the synced block number to
|
|
29
30
|
// maintain consistent behavior in the PXE. Additionally, events should never be ahead of the synced block here
|
|
30
31
|
// since `fetchTaggedLogs` only processes logs up to the synced block.
|
|
31
|
-
const [
|
|
32
|
+
const [anchorBlockHeader, siloedEventCommitment, txEffect] = await Promise.all([
|
|
32
33
|
this.anchorBlockStore.getBlockHeader(),
|
|
33
34
|
siloNullifier(contractAddress, eventCommitment),
|
|
34
35
|
this.aztecNode.getTxEffect(txHash),
|
|
35
36
|
]);
|
|
36
37
|
|
|
37
|
-
const
|
|
38
|
+
const anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
38
39
|
|
|
39
40
|
if (!txEffect) {
|
|
40
41
|
throw new Error(`Could not find tx effect for tx hash ${txHash}`);
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
if (txEffect.l2BlockNumber >
|
|
44
|
-
throw new Error(`Could not find tx effect for tx hash ${txHash} as of block number ${
|
|
44
|
+
if (txEffect.l2BlockNumber > anchorBlockNumber) {
|
|
45
|
+
throw new Error(`Could not find tx effect for tx hash ${txHash} as of block number ${anchorBlockNumber}`);
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
// Find the index of the event commitment in the nullifiers array to determine event ordering within the tx
|
|
49
|
+
const eventIndexInTx = txEffect.data.nullifiers.findIndex(n => n.equals(siloedEventCommitment));
|
|
50
|
+
if (eventIndexInTx === -1) {
|
|
49
51
|
throw new Error(
|
|
50
52
|
`Event commitment ${eventCommitment} (siloed as ${siloedEventCommitment}) is not present in tx ${txHash}`,
|
|
51
53
|
);
|
|
52
54
|
}
|
|
53
55
|
|
|
54
|
-
const [nullifierIndex] = await this.aztecNode.findLeavesIndexes(syncedBlockNumber, MerkleTreeId.NULLIFIER_TREE, [
|
|
55
|
-
siloedEventCommitment,
|
|
56
|
-
]);
|
|
57
|
-
|
|
58
|
-
if (nullifierIndex === undefined) {
|
|
59
|
-
throw new Error(
|
|
60
|
-
`Event commitment ${eventCommitment} (siloed as ${siloedEventCommitment}) is not present on the nullifier tree at block ${syncedBlockNumber} (from tx ${txHash})`,
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
56
|
return this.privateEventStore.storePrivateEventLog(
|
|
65
57
|
selector,
|
|
58
|
+
randomness,
|
|
66
59
|
content,
|
|
67
|
-
|
|
60
|
+
siloedEventCommitment,
|
|
68
61
|
{
|
|
69
62
|
contractAddress,
|
|
70
63
|
scope,
|
|
71
64
|
txHash,
|
|
72
|
-
l2BlockNumber:
|
|
73
|
-
l2BlockHash:
|
|
65
|
+
l2BlockNumber: txEffect.l2BlockNumber,
|
|
66
|
+
l2BlockHash: txEffect.l2BlockHash,
|
|
67
|
+
txIndexInBlock: txEffect.txIndexInBlock,
|
|
68
|
+
eventIndexInTx,
|
|
74
69
|
},
|
|
70
|
+
this.jobId,
|
|
75
71
|
);
|
|
76
72
|
}
|
|
77
73
|
}
|
|
@@ -2,13 +2,12 @@ import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
|
2
2
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
|
|
5
|
-
import { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
6
5
|
import type { PrivateEventStoreFilter } from '../storage/private_event_store/private_event_store.js';
|
|
7
6
|
|
|
8
7
|
export class PrivateEventFilterValidator {
|
|
9
|
-
constructor(private
|
|
8
|
+
constructor(private lastBlock: BlockNumber) {}
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
validate(filter: PrivateEventFilter): PrivateEventStoreFilter {
|
|
12
11
|
let { fromBlock, toBlock } = filter;
|
|
13
12
|
|
|
14
13
|
// Block range filters in Aztec Node are defined as closed-open intervals [fromBlock, toBlock), so
|
|
@@ -16,9 +15,8 @@ export class PrivateEventFilterValidator {
|
|
|
16
15
|
// We then default to [INITIAL_L2_BLOCK_NUM, latestKnownBlock + 1), ie: by default return events from
|
|
17
16
|
// the first block to the latest known block.
|
|
18
17
|
if (!fromBlock || !toBlock) {
|
|
19
|
-
const lastKnownBlock = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
|
|
20
18
|
fromBlock = fromBlock ?? BlockNumber(INITIAL_L2_BLOCK_NUM);
|
|
21
|
-
toBlock = toBlock ?? BlockNumber(
|
|
19
|
+
toBlock = toBlock ?? BlockNumber(this.lastBlock + 1);
|
|
22
20
|
}
|
|
23
21
|
|
|
24
22
|
if (filter.scopes.length === 0) {
|