@aztec/pxe 0.0.1-commit.3469e52 → 0.0.1-commit.59e663cd

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.
Files changed (127) hide show
  1. package/dest/bin/check_oracle_version.js +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +6 -4
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +53 -13
  5. package/dest/config/index.d.ts +3 -1
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +17 -0
  8. package/dest/contract_function_simulator/contract_function_simulator.d.ts +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  10. package/dest/contract_function_simulator/contract_function_simulator.js +1 -4
  11. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  12. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  13. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  14. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  15. package/dest/contract_function_simulator/oracle/interfaces.d.ts +13 -10
  16. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/oracle/oracle.d.ts +5 -3
  18. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/oracle/oracle.js +27 -17
  20. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
  21. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/oracle/private_execution.js +0 -37
  23. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +9 -1
  24. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +16 -5
  26. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +20 -12
  27. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +34 -36
  29. package/dest/contract_sync/index.d.ts +23 -0
  30. package/dest/contract_sync/index.d.ts.map +1 -0
  31. package/dest/contract_sync/index.js +54 -0
  32. package/dest/debug/pxe_debug_utils.d.ts +16 -6
  33. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  34. package/dest/debug/pxe_debug_utils.js +20 -10
  35. package/dest/entrypoints/server/index.d.ts +2 -1
  36. package/dest/entrypoints/server/index.d.ts.map +1 -1
  37. package/dest/entrypoints/server/index.js +1 -0
  38. package/dest/events/event_service.d.ts +2 -2
  39. package/dest/events/event_service.d.ts.map +1 -1
  40. package/dest/events/event_service.js +1 -1
  41. package/dest/logs/log_service.d.ts +1 -1
  42. package/dest/logs/log_service.d.ts.map +1 -1
  43. package/dest/logs/log_service.js +17 -11
  44. package/dest/notes/note_service.d.ts +4 -3
  45. package/dest/notes/note_service.d.ts.map +1 -1
  46. package/dest/notes/note_service.js +11 -10
  47. package/dest/oracle_version.d.ts +3 -3
  48. package/dest/oracle_version.d.ts.map +1 -1
  49. package/dest/oracle_version.js +4 -3
  50. package/dest/private_kernel/private_kernel_oracle.d.ts +3 -3
  51. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  52. package/dest/pxe.d.ts +1 -1
  53. package/dest/pxe.d.ts.map +1 -1
  54. package/dest/pxe.js +13 -11
  55. package/dest/storage/contract_store/contract_store.d.ts +1 -2
  56. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  57. package/dest/storage/contract_store/contract_store.js +0 -12
  58. package/dest/storage/note_store/note_store.d.ts +43 -55
  59. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  60. package/dest/storage/note_store/note_store.js +238 -252
  61. package/dest/storage/note_store/stored_note.d.ts +16 -0
  62. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  63. package/dest/storage/note_store/stored_note.js +43 -0
  64. package/dest/storage/private_event_store/private_event_store.d.ts +17 -4
  65. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  66. package/dest/storage/private_event_store/private_event_store.js +163 -135
  67. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  68. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  69. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  70. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  71. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  72. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  73. package/dest/tagging/index.d.ts +2 -1
  74. package/dest/tagging/index.d.ts.map +1 -1
  75. package/dest/tagging/index.js +1 -0
  76. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  77. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  78. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +2 -2
  79. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  80. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  81. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  82. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  83. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  84. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +2 -2
  85. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  86. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  87. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  88. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -2
  89. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  90. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +7 -4
  91. package/package.json +16 -16
  92. package/src/bin/check_oracle_version.ts +1 -0
  93. package/src/block_synchronizer/block_synchronizer.ts +55 -21
  94. package/src/config/index.ts +14 -0
  95. package/src/contract_function_simulator/contract_function_simulator.ts +1 -9
  96. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  97. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  98. package/src/contract_function_simulator/oracle/interfaces.ts +18 -9
  99. package/src/contract_function_simulator/oracle/oracle.ts +34 -21
  100. package/src/contract_function_simulator/oracle/private_execution.ts +1 -60
  101. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +32 -6
  102. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +53 -45
  103. package/src/contract_sync/index.ts +98 -0
  104. package/src/debug/pxe_debug_utils.ts +26 -11
  105. package/src/entrypoints/server/index.ts +1 -0
  106. package/src/events/event_service.ts +1 -1
  107. package/src/logs/log_service.ts +24 -8
  108. package/src/notes/note_service.ts +18 -15
  109. package/src/oracle_version.ts +4 -3
  110. package/src/private_kernel/private_kernel_oracle.ts +2 -2
  111. package/src/pxe.ts +35 -12
  112. package/src/storage/contract_store/contract_store.ts +0 -20
  113. package/src/storage/note_store/note_store.ts +279 -313
  114. package/src/storage/note_store/stored_note.ts +48 -0
  115. package/src/storage/private_event_store/private_event_store.ts +214 -175
  116. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  117. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  118. package/src/tagging/index.ts +1 -0
  119. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +11 -1
  120. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  121. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +3 -1
  122. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  123. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +12 -3
  124. package/dest/tree_membership/tree_membership_service.d.ts +0 -50
  125. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  126. package/dest/tree_membership/tree_membership_service.js +0 -75
  127. package/src/tree_membership/tree_membership_service.ts +0 -97
@@ -4,11 +4,12 @@ import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundatio
4
4
  import { siloNullifier } from '@aztec/stdlib/hash';
5
5
  import { computeAddressSecret } from '@aztec/stdlib/keys';
6
6
  import { deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
7
+ import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
8
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
7
9
  import { EventService } from '../../events/event_service.js';
8
10
  import { LogService } from '../../logs/log_service.js';
9
11
  import { NoteService } from '../../notes/note_service.js';
10
12
  import { ORACLE_VERSION } from '../../oracle_version.js';
11
- import { TreeMembershipService } from '../../tree_membership/tree_membership_service.js';
12
13
  import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
13
14
  import { LogRetrievalRequest } from '../noir-structs/log_retrieval_request.js';
14
15
  import { LogRetrievalResponse } from '../noir-structs/log_retrieval_response.js';
@@ -81,22 +82,28 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
81
82
  return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
82
83
  }
83
84
  /**
84
- * Fetches the index and sibling path of a leaf at a given block from a given tree.
85
+ * Fetches the index and sibling path of a leaf at a given block from the note hash tree.
85
86
  * @param blockHash - The block hash at which to get the membership witness.
86
- * @param treeId - Id of the tree to get the sibling path from.
87
87
  * @param leafValue - The leaf value
88
- * @returns The index and sibling path concatenated [index, sibling_path]
89
- */ utilityGetMembershipWitness(blockHash, treeId, leafValue) {
90
- const treeMembershipService = new TreeMembershipService(this.aztecNode);
91
- return treeMembershipService.getMembershipWitness(blockHash, treeId, leafValue);
88
+ * @returns The membership witness containing the leaf index and sibling path
89
+ */ utilityGetNoteHashMembershipWitness(blockHash, leafValue) {
90
+ return this.aztecNode.getNoteHashMembershipWitness(blockHash, leafValue);
91
+ }
92
+ /**
93
+ * Fetches the index and sibling path of a leaf at a given block from the archive tree.
94
+ * @param blockHash - The block hash at which to get the membership witness.
95
+ * @param leafValue - The leaf value
96
+ * @returns The membership witness containing the leaf index and sibling path
97
+ */ utilityGetArchiveMembershipWitness(blockHash, leafValue) {
98
+ return this.aztecNode.getArchiveMembershipWitness(blockHash, leafValue);
92
99
  }
93
100
  /**
94
101
  * Returns a nullifier membership witness for a given nullifier at a given block.
95
102
  * @param blockHash - The block hash at which to get the index.
96
103
  * @param nullifier - Nullifier we try to find witness for.
97
104
  * @returns The nullifier membership witness (if found).
98
- */ async utilityGetNullifierMembershipWitness(blockHash, nullifier) {
99
- return await this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
105
+ */ utilityGetNullifierMembershipWitness(blockHash, nullifier) {
106
+ return this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
100
107
  }
101
108
  /**
102
109
  * Returns a low nullifier membership witness for a given nullifier at a given block.
@@ -106,18 +113,16 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
106
113
  * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
107
114
  * list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
108
115
  * we are trying to prove non-inclusion for.
109
- */ async utilityGetLowNullifierMembershipWitness(blockHash, nullifier) {
110
- const treeMembershipService = new TreeMembershipService(this.aztecNode);
111
- return await treeMembershipService.getLowNullifierMembershipWitness(blockHash, nullifier);
116
+ */ utilityGetLowNullifierMembershipWitness(blockHash, nullifier) {
117
+ return this.aztecNode.getLowNullifierMembershipWitness(blockHash, nullifier);
112
118
  }
113
119
  /**
114
120
  * Returns a public data tree witness for a given leaf slot at a given block.
115
121
  * @param blockHash - The block hash at which to get the index.
116
122
  * @param leafSlot - The slot of the public data tree to get the witness for.
117
123
  * @returns - The witness
118
- */ async utilityGetPublicDataWitness(blockHash, leafSlot) {
119
- const treeMembershipService = new TreeMembershipService(this.aztecNode);
120
- return await treeMembershipService.getPublicDataWitness(blockHash, leafSlot);
124
+ */ utilityGetPublicDataWitness(blockHash, leafSlot) {
125
+ return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
121
126
  }
122
127
  /**
123
128
  * Fetches a block header of a given block.
@@ -191,7 +196,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
191
196
  * @param status - The status of notes to fetch.
192
197
  * @returns Array of note data.
193
198
  */ async utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
194
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
199
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore, this.jobId);
195
200
  const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
196
201
  return pickNotes(dbNotes, {
197
202
  selects: selectByIndexes.slice(0, numSelects).map((index, i)=>({
@@ -221,9 +226,10 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
221
226
  * @returns A boolean indicating whether the nullifier exists in the tree or not.
222
227
  */ async utilityCheckNullifierExists(innerNullifier) {
223
228
  const nullifier = await siloNullifier(this.contractAddress, innerNullifier);
224
- const treeMembershipService = new TreeMembershipService(this.aztecNode);
225
- const index = await treeMembershipService.getNullifierIndex(nullifier);
226
- return index !== undefined;
229
+ const [leafIndex] = await this.aztecNode.findLeavesIndexes('latest', MerkleTreeId.NULLIFIER_TREE, [
230
+ nullifier
231
+ ]);
232
+ return leafIndex?.data !== undefined;
227
233
  }
228
234
  /**
229
235
  * Fetches a message from the executionStore, given its key.
@@ -233,9 +239,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
233
239
  * @dev Contract address and secret are only used to compute the nullifier to get non-nullified messages
234
240
  * @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
235
241
  */ async utilityGetL1ToL2MembershipWitness(contractAddress, messageHash, secret) {
236
- const treeMembershipService = new TreeMembershipService(this.aztecNode);
237
- const [messageIndex, siblingPath] = await treeMembershipService.getL1ToL2MembershipWitness(contractAddress, messageHash, secret);
238
- // Assuming messageIndex is what you intended to use for the index in MessageLoadOracleInputs
242
+ const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(this.aztecNode, contractAddress, messageHash, secret);
239
243
  return new MessageLoadOracleInputs(messageIndex, siblingPath);
240
244
  }
241
245
  /**
@@ -245,15 +249,9 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
245
249
  * @param startStorageSlot - The starting storage slot.
246
250
  * @param numberOfElements - Number of elements to read from the starting storage slot.
247
251
  */ async utilityStorageRead(blockHash, contractAddress, startStorageSlot, numberOfElements) {
248
- const values = [];
249
- // TODO: why do we serialize these requests? This should probably a single call
250
- // Privacy considerations?
251
- for(let i = 0n; i < numberOfElements; i++){
252
- const storageSlot = new Fr(startStorageSlot.value + i);
253
- const value = await this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot);
254
- this.log.debug(`Oracle storage read: slot=${storageSlot.toString()} address-${contractAddress.toString()} value=${value}`);
255
- values.push(value);
256
- }
252
+ const slots = Array(numberOfElements).fill(0).map((_, i)=>new Fr(startStorageSlot.value + BigInt(i)));
253
+ const values = await Promise.all(slots.map((storageSlot)=>this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)));
254
+ this.log.debug(`Oracle storage read: slots=[${slots.map((slot)=>slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`);
257
255
  return values;
258
256
  }
259
257
  utilityDebugLog(level, message, fields) {
@@ -265,7 +263,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
265
263
  }
266
264
  async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot) {
267
265
  const logService = new LogService(this.aztecNode, this.anchorBlockStore, this.keyStore, this.capsuleStore, this.recipientTaggingStore, this.senderAddressBookStore, this.addressStore, this.jobId);
268
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
266
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore, this.jobId);
269
267
  // It is acceptable to run the following operations in parallel for several reasons:
270
268
  // 1. syncTaggedLogs does not write to the note store — it only stores the pending tagged logs in a capsule array,
271
269
  // which is then processed in Noir after this handler returns.
@@ -284,7 +282,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
284
282
  * @param contractAddress - The address of the contract that the logs are tagged for.
285
283
  * @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
286
284
  * @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
287
- */ async utilityValidateEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot) {
285
+ */ async utilityValidateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot) {
288
286
  // TODO(#10727): allow other contracts to store notes
289
287
  if (!this.contractAddress.equals(contractAddress)) {
290
288
  throw new Error(`Got a note validation request from ${contractAddress}, expected ${this.contractAddress}`);
@@ -293,10 +291,10 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
293
291
  // faster as we don't need to wait for the network round-trip.
294
292
  const noteValidationRequests = (await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)).map(NoteValidationRequest.fromFields);
295
293
  const eventValidationRequests = (await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)).map(EventValidationRequest.fromFields);
296
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
297
- const noteStorePromises = noteValidationRequests.map((request)=>noteService.storeNote(request.contractAddress, request.owner, request.storageSlot, request.randomness, request.noteNonce, request.content, request.noteHash, request.nullifier, request.txHash, request.recipient));
294
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore, this.jobId);
295
+ const noteStorePromises = noteValidationRequests.map((request)=>noteService.validateAndStoreNote(request.contractAddress, request.owner, request.storageSlot, request.randomness, request.noteNonce, request.content, request.noteHash, request.nullifier, request.txHash, request.recipient));
298
296
  const eventService = new EventService(this.anchorBlockStore, this.aztecNode, this.privateEventStore, this.jobId);
299
- const eventStorePromises = eventValidationRequests.map((request)=>eventService.storeEvent(request.contractAddress, request.eventTypeId, request.randomness, request.serializedEvent, request.eventCommitment, request.txHash, request.recipient));
297
+ const eventStorePromises = eventValidationRequests.map((request)=>eventService.validateAndStoreEvent(request.contractAddress, request.eventTypeId, request.randomness, request.serializedEvent, request.eventCommitment, request.txHash, request.recipient));
300
298
  await Promise.all([
301
299
  ...noteStorePromises,
302
300
  ...eventStorePromises
@@ -0,0 +1,23 @@
1
+ import type { FunctionCall, FunctionSelector } from '@aztec/stdlib/abi';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { ContractInstance } from '@aztec/stdlib/contract';
4
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
5
+ import type { BlockHeader } from '@aztec/stdlib/tx';
6
+ import type { ContractStore } from '../storage/contract_store/contract_store.js';
7
+ /**
8
+ * Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
9
+ * from the instance is used.
10
+ * @param contractAddress - The address of the contract to read the class id for.
11
+ * @param instance - The instance of the contract.
12
+ * @param aztecNode - The Aztec node to query for storage.
13
+ * @param header - The header of the block at which to load the DelayedPublicMutable storing the class id.
14
+ * @returns The current class id.
15
+ */
16
+ export declare function readCurrentClassId(contractAddress: AztecAddress, instance: ContractInstance, aztecNode: AztecNode, header: BlockHeader): Promise<import("@aztec/foundation/schemas").Fr>;
17
+ export declare function syncState(contractAddress: AztecAddress, contractStore: ContractStore, functionToInvokeAfterSync: FunctionSelector | null, utilityExecutor: (privateSyncCall: FunctionCall) => Promise<any>): Promise<any>;
18
+ /**
19
+ * Ensures the contract's private state is synchronized and that the PXE holds the current class artifact for
20
+ * the contract.
21
+ */
22
+ export declare function ensureContractSynced(contractAddress: AztecAddress, functionToInvokeAfterSync: FunctionSelector | null, utilityExecutor: (call: FunctionCall) => Promise<any>, aztecNode: AztecNode, contractStore: ContractStore, header: BlockHeader): Promise<void>;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9zeW5jL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFakY7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBc0Isa0JBQWtCLENBQ3RDLGVBQWUsRUFBRSxZQUFZLEVBQzdCLFFBQVEsRUFBRSxnQkFBZ0IsRUFDMUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsTUFBTSxFQUFFLFdBQVcsbURBYXBCO0FBRUQsd0JBQXNCLFNBQVMsQ0FDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsYUFBYSxFQUFFLGFBQWEsRUFDNUIseUJBQXlCLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSSxFQUNsRCxlQUFlLEVBQUUsQ0FBQyxlQUFlLEVBQUUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBYWpFO0FBMEJEOzs7R0FHRztBQUNILHdCQUFzQixvQkFBb0IsQ0FDeEMsZUFBZSxFQUFFLFlBQVksRUFDN0IseUJBQXlCLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSSxFQUNsRCxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFDckQsU0FBUyxFQUFFLFNBQVMsRUFDcEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsTUFBTSxFQUFFLFdBQVcsR0FDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUtmIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract_sync/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAEjF;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,mDAapB;AAED,wBAAsB,SAAS,CAC7B,eAAe,EAAE,YAAY,EAC7B,aAAa,EAAE,aAAa,EAC5B,yBAAyB,EAAE,gBAAgB,GAAG,IAAI,EAClD,eAAe,EAAE,CAAC,eAAe,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,gBAajE;AA0BD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,YAAY,EAC7B,yBAAyB,EAAE,gBAAgB,GAAG,IAAI,EAClD,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,EACrD,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAKf"}
@@ -0,0 +1,54 @@
1
+ import { ProtocolContractAddress, isProtocolContract } from '@aztec/protocol-contracts';
2
+ import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '@aztec/stdlib/delayed-public-mutable';
3
+ /**
4
+ * Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
5
+ * from the instance is used.
6
+ * @param contractAddress - The address of the contract to read the class id for.
7
+ * @param instance - The instance of the contract.
8
+ * @param aztecNode - The Aztec node to query for storage.
9
+ * @param header - The header of the block at which to load the DelayedPublicMutable storing the class id.
10
+ * @returns The current class id.
11
+ */ export async function readCurrentClassId(contractAddress, instance, aztecNode, header) {
12
+ const blockHash = await header.hash();
13
+ const timestamp = header.globalVariables.timestamp;
14
+ const { delayedPublicMutableSlot } = await DelayedPublicMutableValuesWithHash.getContractUpdateSlots(contractAddress);
15
+ const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(delayedPublicMutableSlot, (slot)=>aztecNode.getPublicStorageAt(blockHash, ProtocolContractAddress.ContractInstanceRegistry, slot));
16
+ let currentClassId = delayedPublicMutableValues.svc.getCurrentAt(timestamp)[0];
17
+ if (currentClassId.isZero()) {
18
+ currentClassId = instance.originalContractClassId;
19
+ }
20
+ return currentClassId;
21
+ }
22
+ export async function syncState(contractAddress, contractStore, functionToInvokeAfterSync, utilityExecutor) {
23
+ // Protocol contracts don't have private state to sync
24
+ if (!isProtocolContract(contractAddress)) {
25
+ const syncStateFunctionCall = await contractStore.getFunctionCall('sync_state', [], contractAddress);
26
+ if (functionToInvokeAfterSync && functionToInvokeAfterSync.equals(syncStateFunctionCall.selector)) {
27
+ throw new Error('Forbidden `sync_state` invocation. `sync_state` can only be invoked by PXE, manual execution can lead to inconsistencies.');
28
+ }
29
+ return utilityExecutor(syncStateFunctionCall);
30
+ }
31
+ }
32
+ /**
33
+ * Verify that the current class id of a contract obtained from AztecNode is the same as the one in contract data
34
+ * provider (i.e. PXE's own storage).
35
+ * @param header - The header of the block at which to verify the current class id.
36
+ */ async function verifyCurrentClassId(contractAddress, aztecNode, contractStore, header) {
37
+ const instance = await contractStore.getContractInstance(contractAddress);
38
+ if (!instance) {
39
+ throw new Error(`No contract instance found for address ${contractAddress.toString()}`);
40
+ }
41
+ const currentClassId = await readCurrentClassId(contractAddress, instance, aztecNode, header);
42
+ if (!instance.currentContractClassId.equals(currentClassId)) {
43
+ throw new Error(`Contract ${contractAddress} is outdated, current class id is ${currentClassId}, local class id is ${instance.currentContractClassId}`);
44
+ }
45
+ }
46
+ /**
47
+ * Ensures the contract's private state is synchronized and that the PXE holds the current class artifact for
48
+ * the contract.
49
+ */ export async function ensureContractSynced(contractAddress, functionToInvokeAfterSync, utilityExecutor, aztecNode, contractStore, header) {
50
+ await Promise.all([
51
+ syncState(contractAddress, contractStore, functionToInvokeAfterSync, utilityExecutor),
52
+ verifyCurrentClassId(contractAddress, aztecNode, contractStore, header)
53
+ ]);
54
+ }
@@ -1,6 +1,9 @@
1
1
  import type { NoteDao, NotesFilter } from '@aztec/stdlib/note';
2
+ import type { BlockHeader } from '@aztec/stdlib/tx';
3
+ import type { BlockSynchronizer } from '../block_synchronizer/block_synchronizer.js';
2
4
  import type { PXE } from '../pxe.js';
3
5
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
6
+ import type { AnchorBlockStore } from '../storage/index.js';
4
7
  import type { NoteStore } from '../storage/note_store/note_store.js';
5
8
  /**
6
9
  * Methods provided by this class might help debugging but must not be used in production.
@@ -10,11 +13,11 @@ export declare class PXEDebugUtils {
10
13
  #private;
11
14
  private contractStore;
12
15
  private noteStore;
13
- constructor(contractStore: ContractStore, noteStore: NoteStore);
14
- /**
15
- * Not injected through constructor since they're are co-dependant.
16
- */
17
- setPXE(pxe: PXE): void;
16
+ private blockStateSynchronizer;
17
+ private anchorBlockStore;
18
+ constructor(contractStore: ContractStore, noteStore: NoteStore, blockStateSynchronizer: BlockSynchronizer, anchorBlockStore: AnchorBlockStore);
19
+ /** Not injected through constructor since they're are co-dependant */
20
+ setPXE(pxe: PXE, putJobInQueue: <T>(job: (jobId: string) => Promise<T>) => Promise<T>): void;
18
21
  /**
19
22
  * A debugging utility to get notes based on the provided filter.
20
23
  *
@@ -27,5 +30,12 @@ export declare class PXEDebugUtils {
27
30
  * @returns The requested notes.
28
31
  */
29
32
  getNotes(filter: NotesFilter): Promise<NoteDao[]>;
33
+ /** Returns the block header up to which the PXE has synced. */
34
+ getSyncedBlockHeader(): Promise<BlockHeader>;
35
+ /**
36
+ * Triggers a sync of the PXE with the node.
37
+ * Blocks until the sync is complete.
38
+ */
39
+ sync(): Promise<void>;
30
40
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlX2RlYnVnX3V0aWxzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVidWcvcHhlX2RlYnVnX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFckU7OztHQUdHO0FBQ0gscUJBQWEsYUFBYTs7SUFJdEIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLFNBQVM7SUFGbkIsWUFDVSxhQUFhLEVBQUUsYUFBYSxFQUM1QixTQUFTLEVBQUUsU0FBUyxFQUMxQjtJQUVKOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBRXJCO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNVLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQVU3RDtDQUNGIn0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlX2RlYnVnX3V0aWxzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVidWcvcHhlX2RlYnVnX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJFOzs7R0FHRztBQUNILHFCQUFhLGFBQWE7O0lBS3RCLE9BQU8sQ0FBQyxhQUFhO0lBQ3JCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxzQkFBc0I7SUFDOUIsT0FBTyxDQUFDLGdCQUFnQjtJQUoxQixZQUNVLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLHNCQUFzQixFQUFFLGlCQUFpQixFQUN6QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDeEM7SUFFSixzRUFBc0U7SUFDL0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFHM0Y7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ1UsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBTTdEO0lBRUQsK0RBQStEO0lBQ3hELG9CQUFvQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFbEQ7SUFFRDs7O09BR0c7SUFDSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUzQjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"pxe_debug_utils.d.ts","sourceRoot":"","sources":["../../src/debug/pxe_debug_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE;;;GAGG;AACH,qBAAa,aAAa;;IAItB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IAFnB,YACU,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EAC1B;IAEJ;;OAEG;IACI,MAAM,CAAC,GAAG,EAAE,GAAG,QAErB;IAED;;;;;;;;;;OAUG;IACU,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAU7D;CACF"}
1
+ {"version":3,"file":"pxe_debug_utils.d.ts","sourceRoot":"","sources":["../../src/debug/pxe_debug_utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE;;;GAGG;AACH,qBAAa,aAAa;;IAKtB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,gBAAgB;IAJ1B,YACU,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,sBAAsB,EAAE,iBAAiB,EACzC,gBAAgB,EAAE,gBAAgB,EACxC;IAEJ,sEAAsE;IAC/D,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,QAG3F;IAED;;;;;;;;;;OAUG;IACU,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAM7D;IAED,+DAA+D;IACxD,oBAAoB,IAAI,OAAO,CAAC,WAAW,CAAC,CAElD;IAED;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
@@ -1,19 +1,23 @@
1
+ import { randomBytes } from '@aztec/foundation/crypto/random';
1
2
  /**
2
3
  * Methods provided by this class might help debugging but must not be used in production.
3
4
  * No backwards compatibility or API stability should be expected. Use at your own risk.
4
5
  */ export class PXEDebugUtils {
5
6
  contractStore;
6
7
  noteStore;
8
+ blockStateSynchronizer;
9
+ anchorBlockStore;
7
10
  #pxe;
8
- constructor(contractStore, noteStore){
11
+ #putJobInQueue;
12
+ constructor(contractStore, noteStore, blockStateSynchronizer, anchorBlockStore){
9
13
  this.contractStore = contractStore;
10
14
  this.noteStore = noteStore;
11
- this.#pxe = undefined;
15
+ this.blockStateSynchronizer = blockStateSynchronizer;
16
+ this.anchorBlockStore = anchorBlockStore;
12
17
  }
13
- /**
14
- * Not injected through constructor since they're are co-dependant.
15
- */ setPXE(pxe) {
18
+ /** Not injected through constructor since they're are co-dependant */ setPXE(pxe, putJobInQueue) {
16
19
  this.#pxe = pxe;
20
+ this.#putJobInQueue = putJobInQueue;
17
21
  }
18
22
  /**
19
23
  * A debugging utility to get notes based on the provided filter.
@@ -26,12 +30,18 @@
26
30
  * @param filter - The filter to apply to the notes.
27
31
  * @returns The requested notes.
28
32
  */ async getNotes(filter) {
29
- if (!this.#pxe) {
30
- throw new Error('Cannot getNotes because no PXE is set');
31
- }
32
33
  // We need to manually trigger private state sync to have a guarantee that all the notes are available.
33
- const call = await this.contractStore.getFunctionCall('sync_private_state', [], filter.contractAddress);
34
+ const call = await this.contractStore.getFunctionCall('sync_state', [], filter.contractAddress);
34
35
  await this.#pxe.simulateUtility(call);
35
- return this.noteStore.getNotes(filter);
36
+ return this.noteStore.getNotes(filter, randomBytes(8).toString('hex'));
37
+ }
38
+ /** Returns the block header up to which the PXE has synced. */ getSyncedBlockHeader() {
39
+ return this.anchorBlockStore.getBlockHeader();
40
+ }
41
+ /**
42
+ * Triggers a sync of the PXE with the node.
43
+ * Blocks until the sync is complete.
44
+ */ sync() {
45
+ return this.#putJobInQueue(()=>this.blockStateSynchronizer.sync());
36
46
  }
37
47
  }
@@ -7,4 +7,5 @@ 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
9
  export { JobCoordinator } from '../../job_coordinator/job_coordinator.js';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRyeXBvaW50cy9zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQyJ9
10
+ export { syncState } from '../../contract_sync/index.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRyeXBvaW50cy9zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC"}
@@ -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 { JobCoordinator } from '../../job_coordinator/job_coordinator.js';
9
+ export { syncState } from '../../contract_sync/index.js';
@@ -11,6 +11,6 @@ export declare class EventService {
11
11
  private readonly privateEventStore;
12
12
  private readonly jobId;
13
13
  constructor(anchorBlockStore: AnchorBlockStore, aztecNode: AztecNode, privateEventStore: PrivateEventStore, jobId: string);
14
- storeEvent(contractAddress: AztecAddress, selector: EventSelector, randomness: Fr, content: Fr[], eventCommitment: Fr, txHash: TxHash, scope: AztecAddress): Promise<void>;
14
+ validateAndStoreEvent(contractAddress: AztecAddress, selector: EventSelector, randomness: Fr, content: Fr[], eventCommitment: Fr, txHash: TxHash, scope: AztecAddress): Promise<void>;
15
15
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfc2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9ldmVudF9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWhFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRTFGLHFCQUFhLFlBQVk7SUFFckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7SUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCO0lBQ2xDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQUp4QixZQUNtQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsU0FBUyxFQUFFLFNBQVMsRUFDcEIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLEtBQUssRUFBRSxNQUFNLEVBQzVCO0lBRVMsVUFBVSxDQUNyQixlQUFlLEVBQUUsWUFBWSxFQUM3QixRQUFRLEVBQUUsYUFBYSxFQUN2QixVQUFVLEVBQUUsRUFBRSxFQUNkLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFDYixlQUFlLEVBQUUsRUFBRSxFQUNuQixNQUFNLEVBQUUsTUFBTSxFQUNkLEtBQUssRUFBRSxZQUFZLEdBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E2Q2Y7Q0FDRiJ9
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfc2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9ldmVudF9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWhFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRTFGLHFCQUFhLFlBQVk7SUFFckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7SUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCO0lBQ2xDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQUp4QixZQUNtQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsU0FBUyxFQUFFLFNBQVMsRUFDcEIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLEtBQUssRUFBRSxNQUFNLEVBQzVCO0lBRVMscUJBQXFCLENBQ2hDLGVBQWUsRUFBRSxZQUFZLEVBQzdCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLFVBQVUsRUFBRSxFQUFFLEVBQ2QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUNiLGVBQWUsRUFBRSxFQUFFLEVBQ25CLE1BQU0sRUFBRSxNQUFNLEVBQ2QsS0FBSyxFQUFFLFlBQVksR0FDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTZDZjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"event_service.d.ts","sourceRoot":"","sources":["../../src/events/event_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAE1F,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,YACmB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,MAAM,EAC5B;IAES,UAAU,CACrB,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,EAAE,EAAE,EACb,eAAe,EAAE,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CA6Cf;CACF"}
1
+ {"version":3,"file":"event_service.d.ts","sourceRoot":"","sources":["../../src/events/event_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAE1F,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,YACmB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,MAAM,EAC5B;IAES,qBAAqB,CAChC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,EAAE,EAAE,EACb,eAAe,EAAE,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CA6Cf;CACF"}
@@ -10,7 +10,7 @@ export class EventService {
10
10
  this.privateEventStore = privateEventStore;
11
11
  this.jobId = jobId;
12
12
  }
13
- async storeEvent(contractAddress, selector, randomness, content, eventCommitment, txHash, scope) {
13
+ async validateAndStoreEvent(contractAddress, selector, randomness, content, eventCommitment, txHash, scope) {
14
14
  // While using 'latest' block number would be fine for private events since they cannot be accessed from Aztec.nr
15
15
  // (and thus we're less concerned about being ahead of the synced block), we use the synced block number to
16
16
  // maintain consistent behavior in the PXE. Additionally, events should never be ahead of the synced block here
@@ -24,4 +24,4 @@ export declare class LogService {
24
24
  bulkRetrieveLogs(logRetrievalRequests: LogRetrievalRequest[]): Promise<(LogRetrievalResponse | null)[]>;
25
25
  syncTaggedLogs(contractAddress: AztecAddress, pendingTaggedLogArrayBaseSlot: Fr, scopes?: AztecAddress[]): Promise<void>;
26
26
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dzL2xvZ19zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBR3BHLHFCQUFhLFVBQVU7O0lBSW5CLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtJQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCO0lBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCO0lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFWeEIsT0FBTyxDQUFDLEdBQUcsQ0FBK0I7SUFFMUMsWUFDbUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFlBQVksRUFBRSxZQUFZLEVBQzFCLHFCQUFxQixFQUFFLHFCQUFxQixFQUM1QyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsWUFBWSxFQUFFLFlBQVksRUFDMUIsS0FBSyxFQUFFLE1BQU0sRUFDNUI7SUFFUyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FpQm5IO0lBZ0RZLGNBQWMsQ0FDekIsZUFBZSxFQUFFLFlBQVksRUFDN0IsNkJBQTZCLEVBQUUsRUFBRSxFQUNqQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsaUJBd0N4QjtDQWdFRiJ9
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dzL2xvZ19zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBT3BHLHFCQUFhLFVBQVU7O0lBSW5CLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtJQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCO0lBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCO0lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFWeEIsT0FBTyxDQUFDLEdBQUcsQ0FBK0I7SUFFMUMsWUFDbUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFlBQVksRUFBRSxZQUFZLEVBQzFCLHFCQUFxQixFQUFFLHFCQUFxQixFQUM1QyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsWUFBWSxFQUFFLFlBQVksRUFDMUIsS0FBSyxFQUFFLE1BQU0sRUFDNUI7SUFFUyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FpQm5IO0lBeURZLGNBQWMsQ0FDekIsZUFBZSxFQUFFLFlBQVksRUFDN0IsNkJBQTZCLEVBQUUsRUFBRSxFQUNqQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsaUJBMkN4QjtDQWdFRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"log_service.d.ts","sourceRoot":"","sources":["../../src/logs/log_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sEAAsE,CAAC;AAChH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uEAAuE,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAGpG,qBAAa,UAAU;;IAInB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,GAAG,CAA+B;IAE1C,YACmB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EAC5B;IAES,gBAAgB,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,CAiBnH;IAgDY,cAAc,CACzB,eAAe,EAAE,YAAY,EAC7B,6BAA6B,EAAE,EAAE,EACjC,MAAM,CAAC,EAAE,YAAY,EAAE,iBAwCxB;CAgEF"}
1
+ {"version":3,"file":"log_service.d.ts","sourceRoot":"","sources":["../../src/logs/log_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sEAAsE,CAAC;AAChH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uEAAuE,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAOpG,qBAAa,UAAU;;IAInB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,GAAG,CAA+B;IAE1C,YACmB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EAC5B;IAES,gBAAgB,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,CAiBnH;IAyDY,cAAc,CACzB,eAAe,EAAE,YAAY,EAC7B,6BAA6B,EAAE,EAAE,EACjC,MAAM,CAAC,EAAE,YAAY,EAAE,iBA2CxB;CAgEF"}
@@ -2,7 +2,7 @@ import { createLogger } from '@aztec/foundation/log';
2
2
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
3
3
  import { DirectionalAppTaggingSecret, PendingTaggedLog, SiloedTag } from '@aztec/stdlib/logs';
4
4
  import { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
5
- import { loadPrivateLogsForSenderRecipientPair } from '../tagging/index.js';
5
+ import { getAllPrivateLogsByTags, getAllPublicLogsByTagsFromContract, loadPrivateLogsForSenderRecipientPair } from '../tagging/index.js';
6
6
  export class LogService {
7
7
  aztecNode;
8
8
  anchorBlockStore;
@@ -37,11 +37,13 @@ export class LogService {
37
37
  }));
38
38
  }
39
39
  async #getPublicLogByTag(tag, contractAddress) {
40
- const logs = await this.aztecNode.getPublicLogsByTagsFromContract(contractAddress, [
40
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
41
+ const anchorBlockHash = await anchorBlockHeader.hash();
42
+ const allLogsPerTag = await getAllPublicLogsByTagsFromContract(this.aztecNode, contractAddress, [
41
43
  tag
42
- ]);
43
- const logsForTag = logs[0];
44
- if (logsForTag.length == 0) {
44
+ ], anchorBlockHash);
45
+ const logsForTag = allLogsPerTag[0];
46
+ if (logsForTag.length === 0) {
45
47
  return null;
46
48
  } else if (logsForTag.length > 1) {
47
49
  // TODO(#11627): handle this case
@@ -51,11 +53,13 @@ export class LogService {
51
53
  return new LogRetrievalResponse(scopedLog.logData.slice(1), scopedLog.txHash, scopedLog.noteHashes, scopedLog.firstNullifier);
52
54
  }
53
55
  async #getPrivateLogByTag(siloedTag) {
54
- const logs = await this.aztecNode.getPrivateLogsByTags([
56
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
57
+ const anchorBlockHash = await anchorBlockHeader.hash();
58
+ const allLogsPerTag = await getAllPrivateLogsByTags(this.aztecNode, [
55
59
  siloedTag
56
- ]);
57
- const logsForTag = logs[0];
58
- if (logsForTag.length == 0) {
60
+ ], anchorBlockHash);
61
+ const logsForTag = allLogsPerTag[0];
62
+ if (logsForTag.length === 0) {
59
63
  return null;
60
64
  } else if (logsForTag.length > 1) {
61
65
  // TODO(#11627): handle this case
@@ -69,7 +73,9 @@ export class LogService {
69
73
  contract: contractAddress
70
74
  });
71
75
  // We only load logs from block up to and including the anchor block number
72
- const anchorBlockNumber = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
76
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
77
+ const anchorBlockNumber = anchorBlockHeader.getBlockNumber();
78
+ const anchorBlockHash = await anchorBlockHeader.hash();
73
79
  // Determine recipients: use scopes if provided, otherwise get all accounts
74
80
  const recipients = scopes && scopes.length > 0 ? scopes : await this.keyStore.getAccounts();
75
81
  // For each recipient, fetch secrets, load logs, and store them.
@@ -78,7 +84,7 @@ export class LogService {
78
84
  // Get all secrets for this recipient (one per sender)
79
85
  const secrets = await this.#getSecretsForSenders(contractAddress, recipient);
80
86
  // Load logs for all sender-recipient pairs in parallel
81
- const logArrays = await Promise.all(secrets.map((secret)=>loadPrivateLogsForSenderRecipientPair(secret, contractAddress, this.aztecNode, this.recipientTaggingStore, anchorBlockNumber, this.jobId)));
87
+ const logArrays = await Promise.all(secrets.map((secret)=>loadPrivateLogsForSenderRecipientPair(secret, contractAddress, this.aztecNode, this.recipientTaggingStore, anchorBlockNumber, anchorBlockHash, this.jobId)));
82
88
  // Flatten all logs from all secrets
83
89
  const allLogs = logArrays.flat();
84
90
  // Store the logs for this recipient
@@ -9,7 +9,8 @@ export declare class NoteService {
9
9
  private readonly noteStore;
10
10
  private readonly aztecNode;
11
11
  private readonly anchorBlockStore;
12
- constructor(noteStore: NoteStore, aztecNode: AztecNode, anchorBlockStore: AnchorBlockStore);
12
+ private readonly jobId;
13
+ constructor(noteStore: NoteStore, aztecNode: AztecNode, anchorBlockStore: AnchorBlockStore, jobId: string);
13
14
  /**
14
15
  * Retrieves a set of notes stored in the database for a given contract address and storage slot.
15
16
  * The query result is paginated using 'limit' and 'offset' values.
@@ -43,6 +44,6 @@ export declare class NoteService {
43
44
  * @param contractAddress - The contract whose notes should be checked and nullified.
44
45
  */
45
46
  syncNoteNullifiers(contractAddress: AztecAddress): Promise<void>;
46
- storeNote(contractAddress: AztecAddress, owner: AztecAddress, storageSlot: Fr, randomness: Fr, noteNonce: Fr, content: Fr[], noteHash: Fr, nullifier: Fr, txHash: TxHash, recipient: AztecAddress): Promise<void>;
47
+ validateAndStoreNote(contractAddress: AztecAddress, owner: AztecAddress, storageSlot: Fr, randomness: Fr, noteNonce: Fr, content: Fr[], noteHash: Fr, nullifier: Fr, txHash: TxHash, recipient: AztecAddress): Promise<void>;
47
48
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZV9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90ZXMvbm90ZV9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUloRSxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFXLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFckUscUJBQWEsV0FBVztJQUVwQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO0lBSG5DLFlBQ21CLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNqRDtJQUVKOzs7Ozs7OztPQVFHO0lBQ1UsUUFBUSxDQUNuQixlQUFlLEVBQUUsWUFBWSxFQUM3QixLQUFLLEVBQUUsWUFBWSxHQUFHLFNBQVMsRUFDL0IsV0FBVyxFQUFFLEVBQUUsRUFDZixNQUFNLEVBQUUsVUFBVSxFQUNsQixNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUU7Ozs7Ozs7Ozs7U0FzQnhCO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDVSxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FzQzVFO0lBRVksU0FBUyxDQUNwQixlQUFlLEVBQUUsWUFBWSxFQUM3QixLQUFLLEVBQUUsWUFBWSxFQUNuQixXQUFXLEVBQUUsRUFBRSxFQUNmLFVBQVUsRUFBRSxFQUFFLEVBQ2QsU0FBUyxFQUFFLEVBQUUsRUFDYixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQ2IsUUFBUSxFQUFFLEVBQUUsRUFDWixTQUFTLEVBQUUsRUFBRSxFQUNiLE1BQU0sRUFBRSxNQUFNLEVBQ2QsU0FBUyxFQUFFLFlBQVksR0FDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXVFZjtDQUNGIn0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZV9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90ZXMvbm90ZV9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFXLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFckUscUJBQWEsV0FBVztJQUVwQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO0lBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQUp4QixZQUNtQixTQUFTLEVBQUUsU0FBUyxFQUNwQixTQUFTLEVBQUUsU0FBUyxFQUNwQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsS0FBSyxFQUFFLE1BQU0sRUFDNUI7SUFFSjs7Ozs7Ozs7T0FRRztJQUNVLFFBQVEsQ0FDbkIsZUFBZSxFQUFFLFlBQVksRUFDN0IsS0FBSyxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQy9CLFdBQVcsRUFBRSxFQUFFLEVBQ2YsTUFBTSxFQUFFLFVBQVUsRUFDbEIsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFOzs7Ozs7Ozs7O1NBeUJ4QjtJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ1Usa0JBQWtCLENBQUMsZUFBZSxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBc0M1RTtJQUVZLG9CQUFvQixDQUMvQixlQUFlLEVBQUUsWUFBWSxFQUM3QixLQUFLLEVBQUUsWUFBWSxFQUNuQixXQUFXLEVBQUUsRUFBRSxFQUNmLFVBQVUsRUFBRSxFQUFFLEVBQ2QsU0FBUyxFQUFFLEVBQUUsRUFDYixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQ2IsUUFBUSxFQUFFLEVBQUUsRUFDWixTQUFTLEVBQUUsRUFBRSxFQUNiLE1BQU0sRUFBRSxNQUFNLEVBQ2QsU0FBUyxFQUFFLFlBQVksR0FDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXVFZjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"note_service.d.ts","sourceRoot":"","sources":["../../src/notes/note_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAHnC,YACmB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EACjD;IAEJ;;;;;;;;OAQG;IACU,QAAQ,CACnB,eAAe,EAAE,YAAY,EAC7B,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,YAAY,EAAE;;;;;;;;;;SAsBxB;IAED;;;;;;;;;;;OAWG;IACU,kBAAkB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC5E;IAEY,SAAS,CACpB,eAAe,EAAE,YAAY,EAC7B,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,EAAE,EACf,UAAU,EAAE,EAAE,EACd,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,EAAE,EAAE,EACb,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,EAAE,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC,CAuEf;CACF"}
1
+ {"version":3,"file":"note_service.d.ts","sourceRoot":"","sources":["../../src/notes/note_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,YACmB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,MAAM,EAC5B;IAEJ;;;;;;;;OAQG;IACU,QAAQ,CACnB,eAAe,EAAE,YAAY,EAC7B,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,YAAY,EAAE;;;;;;;;;;SAyBxB;IAED;;;;;;;;;;;OAWG;IACU,kBAAkB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC5E;IAEY,oBAAoB,CAC/B,eAAe,EAAE,YAAY,EAC7B,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,EAAE,EACf,UAAU,EAAE,EAAE,EACd,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,EAAE,EAAE,EACb,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,EAAE,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC,CAuEf;CACF"}
@@ -1,4 +1,3 @@
1
- import { L2BlockHash } from '@aztec/stdlib/block';
2
1
  import { computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
3
2
  import { MAX_RPC_LEN } from '@aztec/stdlib/interfaces/client';
4
3
  import { Note, NoteDao } from '@aztec/stdlib/note';
@@ -7,10 +6,12 @@ export class NoteService {
7
6
  noteStore;
8
7
  aztecNode;
9
8
  anchorBlockStore;
10
- constructor(noteStore, aztecNode, anchorBlockStore){
9
+ jobId;
10
+ constructor(noteStore, aztecNode, anchorBlockStore, jobId){
11
11
  this.noteStore = noteStore;
12
12
  this.aztecNode = aztecNode;
13
13
  this.anchorBlockStore = anchorBlockStore;
14
+ this.jobId = jobId;
14
15
  }
15
16
  /**
16
17
  * Retrieves a set of notes stored in the database for a given contract address and storage slot.
@@ -27,7 +28,7 @@ export class NoteService {
27
28
  storageSlot,
28
29
  status,
29
30
  scopes
30
- });
31
+ }, this.jobId);
31
32
  return noteDaos.map(({ contractAddress, owner, storageSlot, randomness, noteNonce, note, noteHash, siloedNullifier })=>({
32
33
  contractAddress,
33
34
  owner,
@@ -52,10 +53,10 @@ export class NoteService {
52
53
  *
53
54
  * @param contractAddress - The contract whose notes should be checked and nullified.
54
55
  */ async syncNoteNullifiers(contractAddress) {
55
- const anchorBlockHash = L2BlockHash.fromField(await (await this.anchorBlockStore.getBlockHeader()).hash());
56
+ const anchorBlockHash = await (await this.anchorBlockStore.getBlockHeader()).hash();
56
57
  const contractNotes = await this.noteStore.getNotes({
57
58
  contractAddress
58
- });
59
+ }, this.jobId);
59
60
  if (contractNotes.length === 0) {
60
61
  return;
61
62
  }
@@ -83,9 +84,9 @@ export class NoteService {
83
84
  };
84
85
  }
85
86
  }).filter((nullifier)=>nullifier !== undefined);
86
- await this.noteStore.applyNullifiers(foundNullifiers);
87
+ await this.noteStore.applyNullifiers(foundNullifiers, this.jobId);
87
88
  }
88
- async storeNote(contractAddress, owner, storageSlot, randomness, noteNonce, content, noteHash, nullifier, txHash, recipient) {
89
+ async validateAndStoreNote(contractAddress, owner, storageSlot, randomness, noteNonce, content, noteHash, nullifier, txHash, recipient) {
89
90
  // We are going to store the new note in the NoteStore, which will let us later return it via `getNotes`.
90
91
  // There's two things we need to check before we do this however:
91
92
  // - we must make sure the note does actually exist in the note hash tree
@@ -106,7 +107,7 @@ export class NoteService {
106
107
  // logs up to the synced block making this only an additional safety check.
107
108
  const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
108
109
  const anchorBlockNumber = anchorBlockHeader.getBlockNumber();
109
- const anchorBlockHash = L2BlockHash.fromField(await anchorBlockHeader.hash());
110
+ const anchorBlockHash = await anchorBlockHeader.hash();
110
111
  // By computing siloed and unique note hashes ourselves we prevent contracts from interfering with the note storage
111
112
  // of other contracts, which would constitute a security breach.
112
113
  const uniqueNoteHash = await computeUniqueNoteHash(noteNonce, await siloNoteHash(contractAddress, noteHash));
@@ -132,7 +133,7 @@ export class NoteService {
132
133
  // The note was found by `recipient`, so we use that as the scope when storing the note.
133
134
  await this.noteStore.addNotes([
134
135
  noteDao
135
- ], recipient);
136
+ ], recipient, this.jobId);
136
137
  if (nullifierIndex !== undefined) {
137
138
  // We found nullifier index which implies that the note has already been nullified.
138
139
  const { data: _, ...blockHashAndNum } = nullifierIndex;
@@ -141,7 +142,7 @@ export class NoteService {
141
142
  data: siloedNullifier,
142
143
  ...blockHashAndNum
143
144
  }
144
- ]);
145
+ ], this.jobId);
145
146
  }
146
147
  }
147
148
  }