@aztec/pxe 0.0.1-commit.2d9cb6034 → 0.0.1-commit.2e20a94

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 (104) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/config/index.d.ts +1 -1
  3. package/dest/config/index.d.ts.map +1 -1
  4. package/dest/config/index.js +7 -14
  5. package/dest/contract_function_simulator/contract_function_simulator.d.ts +4 -1
  6. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  7. package/dest/contract_function_simulator/contract_function_simulator.js +5 -1
  8. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  9. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  10. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  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/log_retrieval_request.d.ts +1 -1
  14. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  15. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
  16. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  17. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  18. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  19. package/dest/contract_function_simulator/oracle/interfaces.d.ts +13 -2
  20. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  21. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +1 -1
  22. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +10 -1
  24. package/dest/contract_function_simulator/oracle/oracle.d.ts +13 -2
  25. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/oracle/oracle.js +98 -3
  27. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +1 -1
  28. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +3 -2
  30. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +26 -10
  31. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  32. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +97 -24
  33. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  34. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/pick_notes.js +9 -2
  36. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  37. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  38. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  39. package/dest/contract_sync/contract_sync_service.d.ts +1 -1
  40. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  41. package/dest/contract_sync/contract_sync_service.js +35 -23
  42. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  43. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  44. package/dest/entrypoints/client/bundle/utils.js +2 -2
  45. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  46. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  47. package/dest/entrypoints/client/lazy/utils.js +2 -2
  48. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  49. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  50. package/dest/entrypoints/pxe_creation_options.js +3 -1
  51. package/dest/entrypoints/server/index.d.ts +2 -2
  52. package/dest/entrypoints/server/index.d.ts.map +1 -1
  53. package/dest/entrypoints/server/index.js +1 -1
  54. package/dest/entrypoints/server/utils.d.ts +2 -2
  55. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  56. package/dest/entrypoints/server/utils.js +2 -2
  57. package/dest/events/private_event_filter_validator.d.ts +3 -2
  58. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  59. package/dest/events/private_event_filter_validator.js +15 -0
  60. package/dest/logs/log_service.d.ts +6 -6
  61. package/dest/logs/log_service.d.ts.map +1 -1
  62. package/dest/logs/log_service.js +8 -20
  63. package/dest/oracle_version.d.ts +4 -3
  64. package/dest/oracle_version.d.ts.map +1 -1
  65. package/dest/oracle_version.js +20 -10
  66. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  67. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  68. package/dest/private_kernel/private_kernel_execution_prover.js +4 -7
  69. package/dest/pxe.d.ts +2 -1
  70. package/dest/pxe.d.ts.map +1 -1
  71. package/dest/pxe.js +8 -2
  72. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  73. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +2 -2
  74. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  75. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +1 -15
  76. package/package.json +16 -16
  77. package/src/bin/check_oracle_version.ts +4 -4
  78. package/src/config/index.ts +2 -8
  79. package/src/contract_function_simulator/contract_function_simulator.ts +6 -1
  80. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  81. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  82. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  83. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
  84. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  85. package/src/contract_function_simulator/oracle/interfaces.ts +20 -1
  86. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +7 -1
  87. package/src/contract_function_simulator/oracle/oracle.ts +143 -3
  88. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +2 -1
  89. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +160 -51
  90. package/src/contract_function_simulator/pick_notes.ts +9 -2
  91. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  92. package/src/contract_sync/contract_sync_service.ts +57 -51
  93. package/src/entrypoints/client/bundle/utils.ts +2 -3
  94. package/src/entrypoints/client/lazy/utils.ts +2 -3
  95. package/src/entrypoints/pxe_creation_options.ts +7 -0
  96. package/src/entrypoints/server/index.ts +1 -1
  97. package/src/entrypoints/server/utils.ts +2 -3
  98. package/src/events/private_event_filter_validator.ts +21 -1
  99. package/src/logs/log_service.ts +14 -50
  100. package/src/oracle_version.ts +20 -10
  101. package/src/private_kernel/private_kernel_execution_prover.ts +4 -9
  102. package/src/pxe.ts +10 -0
  103. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  104. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +2 -14
@@ -1,11 +1,14 @@
1
1
  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
+ import { createLogger } from '@aztec/foundation/log';
4
5
 
5
6
  import type { PrivateEventStoreFilter } from '../storage/private_event_store/private_event_store.js';
6
7
 
7
8
  export class PrivateEventFilterValidator {
8
- constructor(private lastBlock: BlockNumber) {}
9
+ private readonly log = createLogger('pxe:private_event_filter_validator');
10
+
11
+ constructor(private readonly lastBlock: BlockNumber) {}
9
12
 
10
13
  validate(filter: PrivateEventFilter): PrivateEventStoreFilter {
11
14
  let { fromBlock, toBlock } = filter;
@@ -35,6 +38,23 @@ export class PrivateEventFilterValidator {
35
38
  throw new Error('toBlock must be strictly greater than fromBlock');
36
39
  }
37
40
 
41
+ // Cap the requested range to the synced block range. Without this, callers that pass a large
42
+ // toBlock (e.g. Number.MAX_SAFE_INTEGER as a "give me everything" idiom) would silently receive
43
+ // only the events that happen to be synced and believe they have complete coverage.
44
+ // We warn + cap rather than throw so callers don't need to query the last synced block before
45
+ // every request (which would also be unreliable, as the block can advance between the two calls).
46
+ const syncedUpperBound = BlockNumber(this.lastBlock + 1);
47
+ if (fromBlock >= syncedUpperBound) {
48
+ this.log.warn(
49
+ `Requested fromBlock ${fromBlock} is past last synced block ${this.lastBlock}; no events will be returned until PXE syncs further.`,
50
+ );
51
+ } else if (toBlock > syncedUpperBound) {
52
+ this.log.warn(
53
+ `Requested toBlock ${toBlock} exceeds last synced block ${this.lastBlock}; capping to ${syncedUpperBound}. Retry once PXE is further synced for complete coverage.`,
54
+ );
55
+ toBlock = syncedUpperBound;
56
+ }
57
+
38
58
  return {
39
59
  contractAddress: filter.contractAddress,
40
60
  scopes: filter.scopes,
@@ -1,21 +1,14 @@
1
- import type { Fr } from '@aztec/foundation/curves/bn254';
2
1
  import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
2
  import type { KeyStore } from '@aztec/key-store';
4
3
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import type { L2TipsProvider } from '@aztec/stdlib/block';
5
5
  import type { AztecNode } from '@aztec/stdlib/interfaces/server';
6
- import {
7
- ExtendedDirectionalAppTaggingSecret,
8
- PendingTaggedLog,
9
- SiloedTag,
10
- Tag,
11
- TxScopedL2Log,
12
- } from '@aztec/stdlib/logs';
6
+ import { ExtendedDirectionalAppTaggingSecret, PendingTaggedLog, SiloedTag, Tag } from '@aztec/stdlib/logs';
13
7
  import type { BlockHeader } from '@aztec/stdlib/tx';
14
8
 
15
9
  import type { LogRetrievalRequest } from '../contract_function_simulator/noir-structs/log_retrieval_request.js';
16
10
  import { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
17
11
  import { AddressStore } from '../storage/address_store/address_store.js';
18
- import type { CapsuleService } from '../storage/capsule_store/capsule_service.js';
19
12
  import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
20
13
  import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
21
14
  import {
@@ -30,8 +23,8 @@ export class LogService {
30
23
  constructor(
31
24
  private readonly aztecNode: AztecNode,
32
25
  private readonly anchorBlockHeader: BlockHeader,
26
+ private readonly l2TipsStore: L2TipsProvider,
33
27
  private readonly keyStore: KeyStore,
34
- private readonly capsuleService: CapsuleService,
35
28
  private readonly recipientTaggingStore: RecipientTaggingStore,
36
29
  private readonly senderAddressBookStore: SenderAddressBookStore,
37
30
  private readonly addressStore: AddressStore,
@@ -120,17 +113,15 @@ export class LogService {
120
113
  );
121
114
  }
122
115
 
123
- public async fetchTaggedLogs(
124
- contractAddress: AztecAddress,
125
- pendingTaggedLogArrayBaseSlot: Fr,
126
- recipient: AztecAddress,
127
- ) {
116
+ public async fetchTaggedLogs(contractAddress: AztecAddress, recipient: AztecAddress): Promise<PendingTaggedLog[]> {
128
117
  this.log.verbose(`Fetching tagged logs for ${contractAddress.toString()}`);
129
118
 
130
119
  // We only load logs from block up to and including the anchor block number
131
120
  const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
132
121
  const anchorBlockHash = await this.anchorBlockHeader.hash();
133
122
 
123
+ const l2Tips = await this.l2TipsStore.getL2Tips();
124
+ const currentTimestamp = this.anchorBlockHeader.globalVariables.timestamp;
134
125
  // Get all secrets for this recipient (one per sender)
135
126
  const secrets = await this.#getSecretsForSenders(contractAddress, recipient);
136
127
 
@@ -143,17 +134,19 @@ export class LogService {
143
134
  this.recipientTaggingStore,
144
135
  anchorBlockNumber,
145
136
  anchorBlockHash,
137
+ currentTimestamp,
138
+ l2Tips.finalized.block.number,
146
139
  this.jobId,
147
140
  ),
148
141
  ),
149
142
  );
150
143
 
151
- // Flatten all logs from all secrets
152
- const allLogs = logArrays.flat();
153
-
154
- if (allLogs.length > 0) {
155
- await this.#storePendingTaggedLogs(contractAddress, pendingTaggedLogArrayBaseSlot, recipient, allLogs);
156
- }
144
+ return logArrays
145
+ .flat()
146
+ .map(
147
+ scopedLog =>
148
+ new PendingTaggedLog(scopedLog.logData, scopedLog.txHash, scopedLog.noteHashes, scopedLog.firstNullifier),
149
+ );
157
150
  }
158
151
 
159
152
  async #getSecretsForSenders(
@@ -187,7 +180,6 @@ export class LogService {
187
180
 
188
181
  if (!secret) {
189
182
  // Note that all senders originate from either the SenderAddressBookStore or the KeyStore.
190
- // TODO(F-512): make sure we actually prevent registering invalid senders.
191
183
  throw new Error(
192
184
  `Failed to compute a tagging secret for sender ${sender} - this implies this is an invalid address, which should not happen as they have been previously registered in PXE.`,
193
185
  );
@@ -197,32 +189,4 @@ export class LogService {
197
189
  }),
198
190
  );
199
191
  }
200
-
201
- #storePendingTaggedLogs(
202
- contractAddress: AztecAddress,
203
- capsuleArrayBaseSlot: Fr,
204
- recipient: AztecAddress,
205
- privateLogs: TxScopedL2Log[],
206
- ) {
207
- // Build all pending tagged logs from the scoped logs
208
- const pendingTaggedLogs = privateLogs.map(scopedLog => {
209
- const pendingTaggedLog = new PendingTaggedLog(
210
- scopedLog.logData,
211
- scopedLog.txHash,
212
- scopedLog.noteHashes,
213
- scopedLog.firstNullifier,
214
- );
215
-
216
- return pendingTaggedLog.toFields();
217
- });
218
-
219
- // TODO: This looks like it could belong more at the oracle interface level
220
- return this.capsuleService.appendToCapsuleArray(
221
- contractAddress,
222
- capsuleArrayBaseSlot,
223
- pendingTaggedLogs,
224
- this.jobId,
225
- recipient,
226
- );
227
- }
228
192
  }
@@ -1,12 +1,22 @@
1
- /// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need
2
- /// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible
3
- /// versions of Aztec.nr and PXE. The Noir counterpart is in `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
1
+ /// The oracle version constants are used to check that the oracle interface is in sync between PXE and Aztec.nr.
2
+ /// We version the oracle interface as `major.minor` where:
3
+ /// - `major` = backward-breaking changes (must match exactly between PXE and Aztec.nr)
4
+ /// - `minor` = oracle additions (non-breaking; PXE minor >= contract minor)
4
5
  ///
5
- /// @dev Whenever a contract function or Noir test is run, the `aztec_utl_assertCompatibleOracleVersion` oracle is called
6
- /// and if the oracle version is incompatible an error is thrown.
7
- export const ORACLE_VERSION = 22;
6
+ /// The Noir counterparts are in `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
7
+ ///
8
+ /// @dev Whenever a contract function or Noir test is run, the `aztec_utl_assertCompatibleOracleVersion` oracle is called.
9
+ /// If the major version is incompatible, an error is thrown immediately. The minor version is recorded by the PXE and
10
+ /// used to provide helpful error messages if a contract calls an oracle that doesn't exist. We don't throw immediately
11
+ /// if AZTEC_NR_MINOR > PXE_MINOR because if a contract is updated to use a newer Aztec.nr dependency without actually
12
+ /// using any of the new oracles then there is no reason to throw.
13
+ export const ORACLE_VERSION_MAJOR = 22;
14
+ export const ORACLE_VERSION_MINOR = 1;
8
15
 
9
- /// This hash is computed as by hashing the Oracle interface and it is used to detect when the Oracle interface changes,
10
- /// which in turn implies that you need to update the ORACLE_VERSION constant in this file and in
11
- /// `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
12
- export const ORACLE_INTERFACE_HASH = '83f1de1a9741a34916fd58cf12b857d0bac90f74bf00751b20304301a3f5c8eb';
16
+ /// This hash is computed from the Oracle interface and is used to detect when that interface changes. When it does,
17
+ /// you need to either:
18
+ /// - increment `ORACLE_VERSION_MAJOR` and reset `ORACLE_VERSION_MINOR` to zero if the change is breaking, or
19
+ /// - increment only `ORACLE_VERSION_MINOR` if the change is additive (a new oracle was added).
20
+ ///
21
+ /// These constants must be kept in sync between this file and `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
22
+ export const ORACLE_INTERFACE_HASH = 'efafa0db2cc1f94e26d794d0079c8f71115261df0c3d0fa8cb5b64f17a12db92';
@@ -33,6 +33,7 @@ import {
33
33
  } from '@aztec/stdlib/tx';
34
34
  import { VerificationKeyAsFields, VerificationKeyData, VkData } from '@aztec/stdlib/vks';
35
35
 
36
+ import { computeTxExpirationTimestamp } from './hints/compute_tx_expiration_timestamp.js';
36
37
  import { PrivateKernelResetPrivateInputsBuilder } from './hints/private_kernel_reset_private_inputs_builder.js';
37
38
  import type { PrivateKernelOracle } from './private_kernel_oracle.js';
38
39
 
@@ -267,15 +268,9 @@ export class PrivateKernelExecutionProver {
267
268
  // TODO: Enable padding once we better understand the final amounts to pad to.
268
269
  const paddedSideEffectAmounts = PaddedSideEffectAmounts.empty();
269
270
 
270
- // Use the aggregated expirationTimestamp set throughout the tx execution.
271
- // TODO: Call `computeTxExpirationTimestamp` to round the value down and reduce precision, improving privacy.
272
- const expirationTimestampUpperBound = previousKernelData.publicInputs.expirationTimestamp;
273
- const anchorBlockTimestamp = previousKernelData.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp;
274
- if (expirationTimestampUpperBound <= anchorBlockTimestamp) {
275
- throw new Error(
276
- `Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${expirationTimestampUpperBound}.`,
277
- );
278
- }
271
+ // Round the aggregated expirationTimestamp down to reduce precision and avoid leaking which private
272
+ // functions were called via their exact expiration offsets.
273
+ const expirationTimestampUpperBound = computeTxExpirationTimestamp(previousKernelData.publicInputs);
279
274
 
280
275
  const privateInputs = new PrivateKernelTailCircuitPrivateInputs(
281
276
  previousKernelData,
package/src/pxe.ts CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  } from '@aztec/stdlib/abi';
19
19
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
20
20
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
21
+ import type { L2TipsProvider } from '@aztec/stdlib/block';
21
22
  import {
22
23
  CompleteAddress,
23
24
  type ContractInstanceWithAddress,
@@ -161,6 +162,7 @@ export class PXE {
161
162
  private privateEventStore: PrivateEventStore,
162
163
  private contractSyncService: ContractSyncService,
163
164
  private messageContextService: MessageContextService,
165
+ private l2TipsStore: L2TipsProvider,
164
166
  private simulator: CircuitSimulator,
165
167
  private proverEnabled: boolean,
166
168
  private proofCreator: PrivateKernelProver,
@@ -260,6 +262,7 @@ export class PXE {
260
262
  privateEventStore,
261
263
  contractSyncService,
262
264
  messageContextService,
265
+ tipsStore,
263
266
  simulator,
264
267
  proverEnabled,
265
268
  proofCreator,
@@ -294,6 +297,7 @@ export class PXE {
294
297
  keyStore: this.keyStore,
295
298
  addressStore: this.addressStore,
296
299
  aztecNode: BenchmarkedNodeFactory.create(this.node),
300
+ l2TipsStore: this.l2TipsStore,
297
301
  senderTaggingStore: this.senderTaggingStore,
298
302
  recipientTaggingStore: this.recipientTaggingStore,
299
303
  senderAddressBookStore: this.senderAddressBookStore,
@@ -560,6 +564,12 @@ export class PXE {
560
564
  * TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
561
565
  */
562
566
  public async registerSender(sender: AztecAddress): Promise<AztecAddress> {
567
+ if (!(await sender.isValid())) {
568
+ throw new Error(
569
+ `Address ${sender} is not valid: it does not correspond to a point on the Grumpkin curve. Cannot register it as a sender.`,
570
+ );
571
+ }
572
+
563
573
  const accounts = await this.keyStore.getAccounts();
564
574
  if (accounts.includes(sender)) {
565
575
  this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
@@ -49,7 +49,7 @@ export class StoredPrivateEvent {
49
49
  const msgContentLength = reader.readNumber();
50
50
  const msgContent = reader.readArray(msgContentLength, Fr);
51
51
  const l2BlockNumber = reader.readNumber();
52
- const l2BlockHash = new BlockHash(Fr.fromBuffer(reader));
52
+ const l2BlockHash = BlockHash.fromBuffer(reader);
53
53
  const txHash = TxHash.fromBuffer(reader);
54
54
  const txIndexInBlock = reader.readNumber();
55
55
  const eventIndexInTx = reader.readNumber();
@@ -21,6 +21,8 @@ export async function loadPrivateLogsForSenderRecipientPair(
21
21
  taggingStore: RecipientTaggingStore,
22
22
  anchorBlockNumber: BlockNumber,
23
23
  anchorBlockHash: BlockHash,
24
+ currentTimestamp: bigint,
25
+ finalizedBlockNumber: BlockNumber,
24
26
  jobId: string,
25
27
  ): Promise<TxScopedL2Log[]> {
26
28
  // # Explanation of how the algorithm works
@@ -61,20 +63,6 @@ export async function loadPrivateLogsForSenderRecipientPair(
61
63
  // the highest finalized index. If that index was already used, they will throw an error. For this reason we
62
64
  // don't have to look further than `highestFinalizedIndex + WINDOW_LEN`.
63
65
 
64
- let finalizedBlockNumber: number, currentTimestamp: bigint;
65
- {
66
- const [l2Tips, latestBlockHeader] = await Promise.all([aztecNode.getL2Tips(), aztecNode.getBlockHeader('latest')]);
67
-
68
- if (!latestBlockHeader) {
69
- throw new Error('Node failed to return latest block header when syncing logs');
70
- }
71
-
72
- [finalizedBlockNumber, currentTimestamp] = [
73
- l2Tips.finalized.block.number,
74
- latestBlockHeader.globalVariables.timestamp,
75
- ];
76
- }
77
-
78
66
  let start: number, end: number;
79
67
  {
80
68
  const currentHighestAgedIndex = await taggingStore.getHighestAgedIndex(secret, jobId);