@aztec/aztec-node 4.0.0-nightly.20260118 → 4.0.0-nightly.20260120

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.
@@ -12,7 +12,7 @@ import { type P2P, type P2PClientDeps } from '@aztec/p2p';
12
12
  import { SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
13
13
  import { EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
14
14
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
- import { type BlockParameter, type DataInBlock, L2Block, L2BlockNew, type L2BlockSource, type PublishedL2Block } from '@aztec/stdlib/block';
15
+ import { type BlockParameter, type CheckpointedL2Block, type DataInBlock, L2BlockNew, type L2BlockSource } from '@aztec/stdlib/block';
16
16
  import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
17
17
  import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress, NodeInfo, ProtocolContractAddresses } from '@aztec/stdlib/contract';
18
18
  import { GasFees } from '@aztec/stdlib/gas';
@@ -98,35 +98,35 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
98
98
  isReady(): Promise<boolean>;
99
99
  getNodeInfo(): Promise<NodeInfo>;
100
100
  /**
101
- * Get a block specified by its number.
102
- * @param number - The block number being requested.
101
+ * Get a block specified by its block number, block hash, or 'latest'.
102
+ * @param block - The block parameter (block number, block hash, or 'latest').
103
103
  * @returns The requested block.
104
104
  */
105
- getBlock(number: BlockParameter): Promise<L2Block | undefined>;
105
+ getBlock(block: BlockParameter): Promise<L2BlockNew | undefined>;
106
106
  /**
107
107
  * Get a block specified by its hash.
108
108
  * @param blockHash - The block hash being requested.
109
109
  * @returns The requested block.
110
110
  */
111
- getBlockByHash(blockHash: Fr): Promise<L2Block | undefined>;
111
+ getBlockByHash(blockHash: Fr): Promise<L2BlockNew | undefined>;
112
112
  private buildInitialBlock;
113
113
  /**
114
114
  * Get a block specified by its archive root.
115
115
  * @param archive - The archive root being requested.
116
116
  * @returns The requested block.
117
117
  */
118
- getBlockByArchive(archive: Fr): Promise<L2Block | undefined>;
118
+ getBlockByArchive(archive: Fr): Promise<L2BlockNew | undefined>;
119
119
  /**
120
120
  * Method to request blocks. Will attempt to return all requested blocks but will return only those available.
121
121
  * @param from - The start of the range of blocks to return.
122
122
  * @param limit - The maximum number of blocks to obtain.
123
123
  * @returns The blocks requested.
124
124
  */
125
- getBlocks(from: BlockNumber, limit: number): Promise<L2Block[]>;
126
- getPublishedBlocks(from: BlockNumber, limit: number): Promise<PublishedL2Block[]>;
125
+ getBlocks(from: BlockNumber, limit: number): Promise<L2BlockNew[]>;
126
+ getPublishedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
127
127
  getPublishedCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
128
128
  getL2BlocksNew(from: BlockNumber, limit: number): Promise<L2BlockNew[]>;
129
- getCheckpointedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<import("@aztec/stdlib/block").CheckpointedL2Block[]>;
129
+ getCheckpointedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]>;
130
130
  /**
131
131
  * Method to fetch the current min L2 fees.
132
132
  * @returns The current min L2 fees.
@@ -206,38 +206,12 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
206
206
  * @returns - The txs if it exists.
207
207
  */
208
208
  getTxsByHash(txHashes: TxHash[]): Promise<Tx[]>;
209
- /**
210
- * Find the indexes of the given leaves in the given tree along with a block metadata pointing to the block in which
211
- * the leaves were inserted.
212
- * @param blockNumber - The block number at which to get the data or 'latest' for latest data.
213
- * @param treeId - The tree to search in.
214
- * @param leafValues - The values to search for.
215
- * @returns The indices of leaves and the block metadata of a block in which the leaves were inserted.
216
- */
217
- findLeavesIndexes(blockNumber: BlockParameter, treeId: MerkleTreeId, leafValues: Fr[]): Promise<(DataInBlock<bigint> | undefined)[]>;
218
- /**
219
- * Returns a sibling path for the given index in the nullifier tree.
220
- * @param blockNumber - The block number at which to get the data.
221
- * @param leafIndex - The index of the leaf for which the sibling path is required.
222
- * @returns The sibling path for the leaf index.
223
- */
224
- getNullifierSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>>;
225
- /**
226
- * Returns a sibling path for the given index in the data tree.
227
- * @param blockNumber - The block number at which to get the data.
228
- * @param leafIndex - The index of the leaf for which the sibling path is required.
229
- * @returns The sibling path for the leaf index.
230
- */
231
- getNoteHashSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>>;
232
- getArchiveMembershipWitness(blockNumber: BlockParameter, archive: Fr): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
233
- getNoteHashMembershipWitness(blockNumber: BlockParameter, noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
234
- /**
235
- * Returns the index and a sibling path for a leaf in the committed l1 to l2 data tree.
236
- * @param blockNumber - The block number at which to get the data.
237
- * @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
238
- * @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
239
- */
240
- getL1ToL2MessageMembershipWitness(blockNumber: BlockParameter, l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
209
+ findLeavesIndexes(block: BlockParameter, treeId: MerkleTreeId, leafValues: Fr[]): Promise<(DataInBlock<bigint> | undefined)[]>;
210
+ getNullifierSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>>;
211
+ getNoteHashSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>>;
212
+ getArchiveMembershipWitness(block: BlockParameter, archive: Fr): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
213
+ getNoteHashMembershipWitness(block: BlockParameter, noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
214
+ getL1ToL2MessageMembershipWitness(block: BlockParameter, l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
241
215
  getL1ToL2MessageBlock(l1ToL2Message: Fr): Promise<BlockNumber | undefined>;
242
216
  /**
243
217
  * Returns whether an L1 to L2 message is synced by archiver and if it's ready to be included in a block.
@@ -251,30 +225,12 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
251
225
  * @returns The L2 to L1 messages (empty array if the epoch is not found).
252
226
  */
253
227
  getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]>;
254
- /**
255
- * Returns a sibling path for a leaf in the committed blocks tree.
256
- * @param blockNumber - The block number at which to get the data.
257
- * @param leafIndex - Index of the leaf in the tree.
258
- * @returns The sibling path.
259
- */
260
- getArchiveSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>>;
261
- /**
262
- * Returns a sibling path for a leaf in the committed public data tree.
263
- * @param blockNumber - The block number at which to get the data.
264
- * @param leafIndex - Index of the leaf in the tree.
265
- * @returns The sibling path.
266
- */
267
- getPublicDataSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>>;
268
- /**
269
- * Returns a nullifier membership witness for a given nullifier at a given block.
270
- * @param blockNumber - The block number at which to get the index.
271
- * @param nullifier - Nullifier we try to find witness for.
272
- * @returns The nullifier membership witness (if found).
273
- */
274
- getNullifierMembershipWitness(blockNumber: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
228
+ getArchiveSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>>;
229
+ getPublicDataSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>>;
230
+ getNullifierMembershipWitness(block: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
275
231
  /**
276
232
  * Returns a low nullifier membership witness for a given nullifier at a given block.
277
- * @param blockNumber - The block number at which to get the index.
233
+ * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
278
234
  * @param nullifier - Nullifier we try to find the low nullifier witness for.
279
235
  * @returns The low nullifier membership witness (if found).
280
236
  * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
@@ -286,31 +242,10 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
286
242
  * index of the nullifier itself when it already exists in the tree.
287
243
  * TODO: This is a confusing behavior and we should eventually address that.
288
244
  */
289
- getLowNullifierMembershipWitness(blockNumber: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
290
- getPublicDataWitness(blockNumber: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
291
- /**
292
- * Gets the storage value at the given contract storage slot.
293
- *
294
- * @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
295
- * Aztec's version of `eth_getStorageAt`.
296
- *
297
- * @param contract - Address of the contract to query.
298
- * @param slot - Slot to query.
299
- * @param blockNumber - The block number at which to get the data or 'latest'.
300
- * @returns Storage value at the given contract slot.
301
- */
302
- getPublicStorageAt(blockNumber: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
303
- /**
304
- * Returns the currently committed block header, or the initial header if no blocks have been produced.
305
- * @returns The current committed block header.
306
- */
307
- getBlockHeader(blockNumber?: BlockParameter): Promise<BlockHeader | undefined>;
308
- /**
309
- * Get a block header specified by its hash.
310
- * @param blockHash - The block hash being requested.
311
- * @returns The requested block header.
312
- */
313
- getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
245
+ getLowNullifierMembershipWitness(block: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
246
+ getPublicDataWitness(block: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
247
+ getPublicStorageAt(block: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
248
+ getBlockHeader(block?: BlockParameter): Promise<BlockHeader | undefined>;
314
249
  /**
315
250
  * Get a block header specified by its archive root.
316
251
  * @param archive - The archive root being requested.
@@ -339,4 +274,4 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
339
274
  getSlashPayloads(): Promise<SlashPayloadRound[]>;
340
275
  getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
341
276
  }
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUNMLGNBQWMsRUFFZCxLQUFLLHdCQUF3QixFQUM3QixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHVCQUF1QixFQUM3QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxLQUFLLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3pFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLGFBQWEsRUFBb0QsTUFBTSxZQUFZLENBQUM7QUFFNUcsT0FBTyxFQUF1QyxlQUFlLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhILE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsS0FBSyxzQkFBc0IsRUFHNUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxF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
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLHdCQUF3QixFQUM3QixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHVCQUF1QixFQUM3QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxLQUFLLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3pFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLGFBQWEsRUFBb0QsTUFBTSxZQUFZLENBQUM7QUFFNUcsT0FBTyxFQUF5QixlQUFlLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsS0FBSyxzQkFBc0IsRUFHNUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxF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
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
@@ -374,7 +374,6 @@ var _dec, _initProto;
374
374
  import { createArchiver } from '@aztec/archiver';
375
375
  import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
376
376
  import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
377
- import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
378
377
  import { EpochCache } from '@aztec/epoch-cache';
379
378
  import { createEthereumChain } from '@aztec/ethereum/chain';
380
379
  import { getPublicClient } from '@aztec/ethereum/client';
@@ -393,12 +392,12 @@ import { trySnapshotSync, uploadSnapshot } from '@aztec/node-lib/actions';
393
392
  import { createForwarderL1TxUtilsFromEthSigner, createL1TxUtilsWithBlobsFromEthSigner } from '@aztec/node-lib/factories';
394
393
  import { createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
395
394
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
396
- import { BlockBuilder, GlobalVariableBuilder, SequencerClient } from '@aztec/sequencer-client';
395
+ import { GlobalVariableBuilder, SequencerClient } from '@aztec/sequencer-client';
397
396
  import { PublicProcessorFactory } from '@aztec/simulator/server';
398
397
  import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
399
398
  import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm';
400
399
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
401
- import { L2Block, L2BlockHash, L2BlockHeader } from '@aztec/stdlib/block';
400
+ import { L2BlockHash, L2BlockNew } from '@aztec/stdlib/block';
402
401
  import { GasFees } from '@aztec/stdlib/gas';
403
402
  import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
404
403
  import { AztecNodeAdminConfigSchema } from '@aztec/stdlib/interfaces/client';
@@ -578,18 +577,12 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
578
577
  const p2pClient = await createP2PClient(P2PClientType.Full, config, archiver, proofVerifier, worldStateSynchronizer, epochCache, packageVersion, dateProvider, telemetry, deps.p2pClientDeps);
579
578
  // We should really not be modifying the config object
580
579
  config.txPublicSetupAllowList = config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
581
- // Create BlockBuilder for EpochPruneWatcher (slasher functionality)
582
- const blockBuilder = new BlockBuilder({
583
- ...config,
584
- l1GenesisTime,
585
- slotDuration: Number(slotDuration)
586
- }, worldStateSynchronizer, archiver, dateProvider, telemetry);
587
580
  // Create FullNodeCheckpointsBuilder for validator and non-validator block proposal handling
588
581
  const validatorCheckpointsBuilder = new FullNodeCheckpointsBuilder({
589
582
  ...config,
590
583
  l1GenesisTime,
591
584
  slotDuration: Number(slotDuration)
592
- }, archiver, dateProvider, telemetry);
585
+ }, worldStateSynchronizer, archiver, dateProvider, telemetry);
593
586
  // We'll accumulate sentinel watchers here
594
587
  const watchers = [];
595
588
  // Create validator client if required
@@ -639,7 +632,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
639
632
  }
640
633
  let epochPruneWatcher;
641
634
  if (config.slashPrunePenalty > 0n || config.slashDataWithholdingPenalty > 0n) {
642
- epochPruneWatcher = new EpochPruneWatcher(archiver, archiver, epochCache, p2pClient.getTxProvider(), blockBuilder, config);
635
+ epochPruneWatcher = new EpochPruneWatcher(archiver, archiver, epochCache, p2pClient.getTxProvider(), validatorCheckpointsBuilder, config);
643
636
  watchers.push(epochPruneWatcher);
644
637
  }
645
638
  // We assume we want to slash for invalid attestations unless all max penalties are set to 0
@@ -685,7 +678,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
685
678
  ...config,
686
679
  l1GenesisTime,
687
680
  slotDuration: Number(slotDuration)
688
- }, archiver, dateProvider, telemetry);
681
+ }, worldStateSynchronizer, archiver, dateProvider, telemetry);
689
682
  sequencer = await SequencerClient.new(config, {
690
683
  ...deps,
691
684
  epochCache,
@@ -770,15 +763,18 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
770
763
  return nodeInfo;
771
764
  }
772
765
  /**
773
- * Get a block specified by its number.
774
- * @param number - The block number being requested.
766
+ * Get a block specified by its block number, block hash, or 'latest'.
767
+ * @param block - The block parameter (block number, block hash, or 'latest').
775
768
  * @returns The requested block.
776
- */ async getBlock(number) {
777
- const blockNumber = number === 'latest' ? await this.getBlockNumber() : number;
769
+ */ async getBlock(block) {
770
+ if (block instanceof L2BlockHash) {
771
+ return this.getBlockByHash(Fr.fromBuffer(block.toBuffer()));
772
+ }
773
+ const blockNumber = block === 'latest' ? await this.getBlockNumber() : block;
778
774
  if (blockNumber === BlockNumber.ZERO) {
779
775
  return this.buildInitialBlock();
780
776
  }
781
- return await this.blockSource.getBlock(blockNumber);
777
+ return await this.blockSource.getL2BlockNew(blockNumber);
782
778
  }
783
779
  /**
784
780
  * Get a block specified by its hash.
@@ -786,32 +782,21 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
786
782
  * @returns The requested block.
787
783
  */ async getBlockByHash(blockHash) {
788
784
  const initialBlockHash = await this.#getInitialHeaderHash();
789
- if (blockHash.equals(initialBlockHash)) {
785
+ if (blockHash.equals(Fr.fromBuffer(initialBlockHash.toBuffer()))) {
790
786
  return this.buildInitialBlock();
791
787
  }
792
- const publishedBlock = await this.blockSource.getPublishedBlockByHash(blockHash);
793
- return publishedBlock?.block;
788
+ return await this.blockSource.getL2BlockNewByHash(blockHash);
794
789
  }
795
790
  buildInitialBlock() {
796
791
  const initialHeader = this.worldStateSynchronizer.getCommitted().getInitialHeader();
797
- // TODO: (pw/mbps) Clean this up when we move completely to the new types.
798
- // return L2BlockNew.empty(initialHeader);
799
- const oldBlockHeader = L2BlockHeader.empty();
800
- oldBlockHeader.state.l1ToL2MessageTree.root = initialHeader.state.l1ToL2MessageTree.root;
801
- oldBlockHeader.state.partial.noteHashTree.root = initialHeader.state.partial.noteHashTree.root;
802
- oldBlockHeader.state.partial.nullifierTree.root = initialHeader.state.partial.nullifierTree.root;
803
- oldBlockHeader.state.partial.nullifierTree.nextAvailableLeafIndex = initialHeader.state.partial.nullifierTree.nextAvailableLeafIndex;
804
- oldBlockHeader.state.partial.publicDataTree.root = initialHeader.state.partial.publicDataTree.root;
805
- oldBlockHeader.state.partial.publicDataTree.nextAvailableLeafIndex = initialHeader.state.partial.publicDataTree.nextAvailableLeafIndex;
806
- return L2Block.empty(oldBlockHeader);
792
+ return L2BlockNew.empty(initialHeader);
807
793
  }
808
794
  /**
809
795
  * Get a block specified by its archive root.
810
796
  * @param archive - The archive root being requested.
811
797
  * @returns The requested block.
812
798
  */ async getBlockByArchive(archive) {
813
- const publishedBlock = await this.blockSource.getPublishedBlockByArchive(archive);
814
- return publishedBlock?.block;
799
+ return await this.blockSource.getL2BlockNewByArchive(archive);
815
800
  }
816
801
  /**
817
802
  * Method to request blocks. Will attempt to return all requested blocks but will return only those available.
@@ -819,7 +804,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
819
804
  * @param limit - The maximum number of blocks to obtain.
820
805
  * @returns The blocks requested.
821
806
  */ async getBlocks(from, limit) {
822
- return await this.blockSource.getBlocks(from, limit) ?? [];
807
+ return await this.blockSource.getL2BlocksNew(from, limit) ?? [];
823
808
  }
824
809
  async getPublishedBlocks(from, limit) {
825
810
  return await this.blockSource.getPublishedBlocks(from, limit) ?? [];
@@ -989,15 +974,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
989
974
  */ async getTxsByHash(txHashes) {
990
975
  return compactArray(await Promise.all(txHashes.map((txHash)=>this.getTxByHash(txHash))));
991
976
  }
992
- /**
993
- * Find the indexes of the given leaves in the given tree along with a block metadata pointing to the block in which
994
- * the leaves were inserted.
995
- * @param blockNumber - The block number at which to get the data or 'latest' for latest data.
996
- * @param treeId - The tree to search in.
997
- * @param leafValues - The values to search for.
998
- * @returns The indices of leaves and the block metadata of a block in which the leaves were inserted.
999
- */ async findLeavesIndexes(blockNumber, treeId, leafValues) {
1000
- const committedDb = await this.#getWorldState(blockNumber);
977
+ async findLeavesIndexes(block, treeId, leafValues) {
978
+ const committedDb = await this.#getWorldState(block);
1001
979
  const maybeIndices = await committedDb.findLeafIndices(treeId, leafValues.map((x)=>x.toBuffer()));
1002
980
  // We filter out undefined values
1003
981
  const indices = maybeIndices.filter((x)=>x !== undefined);
@@ -1045,45 +1023,30 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1045
1023
  };
1046
1024
  });
1047
1025
  }
1048
- /**
1049
- * Returns a sibling path for the given index in the nullifier tree.
1050
- * @param blockNumber - The block number at which to get the data.
1051
- * @param leafIndex - The index of the leaf for which the sibling path is required.
1052
- * @returns The sibling path for the leaf index.
1053
- */ async getNullifierSiblingPath(blockNumber, leafIndex) {
1054
- const committedDb = await this.#getWorldState(blockNumber);
1026
+ async getNullifierSiblingPath(block, leafIndex) {
1027
+ const committedDb = await this.#getWorldState(block);
1055
1028
  return committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, leafIndex);
1056
1029
  }
1057
- /**
1058
- * Returns a sibling path for the given index in the data tree.
1059
- * @param blockNumber - The block number at which to get the data.
1060
- * @param leafIndex - The index of the leaf for which the sibling path is required.
1061
- * @returns The sibling path for the leaf index.
1062
- */ async getNoteHashSiblingPath(blockNumber, leafIndex) {
1063
- const committedDb = await this.#getWorldState(blockNumber);
1030
+ async getNoteHashSiblingPath(block, leafIndex) {
1031
+ const committedDb = await this.#getWorldState(block);
1064
1032
  return committedDb.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
1065
1033
  }
1066
- async getArchiveMembershipWitness(blockNumber, archive) {
1067
- const committedDb = await this.#getWorldState(blockNumber);
1034
+ async getArchiveMembershipWitness(block, archive) {
1035
+ const committedDb = await this.#getWorldState(block);
1068
1036
  const [pathAndIndex] = await committedDb.findSiblingPaths(MerkleTreeId.ARCHIVE, [
1069
1037
  archive
1070
1038
  ]);
1071
1039
  return pathAndIndex === undefined ? undefined : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
1072
1040
  }
1073
- async getNoteHashMembershipWitness(blockNumber, noteHash) {
1074
- const committedDb = await this.#getWorldState(blockNumber);
1041
+ async getNoteHashMembershipWitness(block, noteHash) {
1042
+ const committedDb = await this.#getWorldState(block);
1075
1043
  const [pathAndIndex] = await committedDb.findSiblingPaths(MerkleTreeId.NOTE_HASH_TREE, [
1076
1044
  noteHash
1077
1045
  ]);
1078
1046
  return pathAndIndex === undefined ? undefined : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
1079
1047
  }
1080
- /**
1081
- * Returns the index and a sibling path for a leaf in the committed l1 to l2 data tree.
1082
- * @param blockNumber - The block number at which to get the data.
1083
- * @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
1084
- * @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
1085
- */ async getL1ToL2MessageMembershipWitness(blockNumber, l1ToL2Message) {
1086
- const db = await this.#getWorldState(blockNumber);
1048
+ async getL1ToL2MessageMembershipWitness(block, l1ToL2Message) {
1049
+ const db = await this.#getWorldState(block);
1087
1050
  const [witness] = await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [
1088
1051
  l1ToL2Message
1089
1052
  ]);
@@ -1129,31 +1092,16 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1129
1092
  }
1130
1093
  return blocksInCheckpoints.map((blocks)=>blocks.map((block)=>block.body.txEffects.map((txEffect)=>txEffect.l2ToL1Msgs)));
1131
1094
  }
1132
- /**
1133
- * Returns a sibling path for a leaf in the committed blocks tree.
1134
- * @param blockNumber - The block number at which to get the data.
1135
- * @param leafIndex - Index of the leaf in the tree.
1136
- * @returns The sibling path.
1137
- */ async getArchiveSiblingPath(blockNumber, leafIndex) {
1138
- const committedDb = await this.#getWorldState(blockNumber);
1095
+ async getArchiveSiblingPath(block, leafIndex) {
1096
+ const committedDb = await this.#getWorldState(block);
1139
1097
  return committedDb.getSiblingPath(MerkleTreeId.ARCHIVE, leafIndex);
1140
1098
  }
1141
- /**
1142
- * Returns a sibling path for a leaf in the committed public data tree.
1143
- * @param blockNumber - The block number at which to get the data.
1144
- * @param leafIndex - Index of the leaf in the tree.
1145
- * @returns The sibling path.
1146
- */ async getPublicDataSiblingPath(blockNumber, leafIndex) {
1147
- const committedDb = await this.#getWorldState(blockNumber);
1099
+ async getPublicDataSiblingPath(block, leafIndex) {
1100
+ const committedDb = await this.#getWorldState(block);
1148
1101
  return committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, leafIndex);
1149
1102
  }
1150
- /**
1151
- * Returns a nullifier membership witness for a given nullifier at a given block.
1152
- * @param blockNumber - The block number at which to get the index.
1153
- * @param nullifier - Nullifier we try to find witness for.
1154
- * @returns The nullifier membership witness (if found).
1155
- */ async getNullifierMembershipWitness(blockNumber, nullifier) {
1156
- const db = await this.#getWorldState(blockNumber);
1103
+ async getNullifierMembershipWitness(block, nullifier) {
1104
+ const db = await this.#getWorldState(block);
1157
1105
  const [witness] = await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE, [
1158
1106
  nullifier.toBuffer()
1159
1107
  ]);
@@ -1169,7 +1117,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1169
1117
  }
1170
1118
  /**
1171
1119
  * Returns a low nullifier membership witness for a given nullifier at a given block.
1172
- * @param blockNumber - The block number at which to get the index.
1120
+ * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
1173
1121
  * @param nullifier - Nullifier we try to find the low nullifier witness for.
1174
1122
  * @returns The low nullifier membership witness (if found).
1175
1123
  * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
@@ -1180,8 +1128,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1180
1128
  * the nullifier already exists in the tree. This is because the `getPreviousValueIndex` function returns the
1181
1129
  * index of the nullifier itself when it already exists in the tree.
1182
1130
  * TODO: This is a confusing behavior and we should eventually address that.
1183
- */ async getLowNullifierMembershipWitness(blockNumber, nullifier) {
1184
- const committedDb = await this.#getWorldState(blockNumber);
1131
+ */ async getLowNullifierMembershipWitness(block, nullifier) {
1132
+ const committedDb = await this.#getWorldState(block);
1185
1133
  const findResult = await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
1186
1134
  if (!findResult) {
1187
1135
  return undefined;
@@ -1194,8 +1142,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1194
1142
  const siblingPath = await committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, BigInt(index));
1195
1143
  return new NullifierMembershipWitness(BigInt(index), preimageData, siblingPath);
1196
1144
  }
1197
- async getPublicDataWitness(blockNumber, leafSlot) {
1198
- const committedDb = await this.#getWorldState(blockNumber);
1145
+ async getPublicDataWitness(block, leafSlot) {
1146
+ const committedDb = await this.#getWorldState(block);
1199
1147
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
1200
1148
  if (!lowLeafResult) {
1201
1149
  return undefined;
@@ -1205,18 +1153,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1205
1153
  return new PublicDataWitness(lowLeafResult.index, preimage, path);
1206
1154
  }
1207
1155
  }
1208
- /**
1209
- * Gets the storage value at the given contract storage slot.
1210
- *
1211
- * @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
1212
- * Aztec's version of `eth_getStorageAt`.
1213
- *
1214
- * @param contract - Address of the contract to query.
1215
- * @param slot - Slot to query.
1216
- * @param blockNumber - The block number at which to get the data or 'latest'.
1217
- * @returns Storage value at the given contract slot.
1218
- */ async getPublicStorageAt(blockNumber, contract, slot) {
1219
- const committedDb = await this.#getWorldState(blockNumber);
1156
+ async getPublicStorageAt(block, contract, slot) {
1157
+ const committedDb = await this.#getWorldState(block);
1220
1158
  const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
1221
1159
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
1222
1160
  if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
@@ -1225,22 +1163,23 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1225
1163
  const preimage = await committedDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
1226
1164
  return preimage.leaf.value;
1227
1165
  }
1228
- /**
1229
- * Returns the currently committed block header, or the initial header if no blocks have been produced.
1230
- * @returns The current committed block header.
1231
- */ async getBlockHeader(blockNumber = 'latest') {
1232
- return blockNumber === BlockNumber.ZERO || blockNumber === 'latest' && await this.blockSource.getBlockNumber() === BlockNumber.ZERO ? this.worldStateSynchronizer.getCommitted().getInitialHeader() : this.blockSource.getBlockHeader(blockNumber === 'latest' ? blockNumber : blockNumber);
1233
- }
1234
- /**
1235
- * Get a block header specified by its hash.
1236
- * @param blockHash - The block hash being requested.
1237
- * @returns The requested block header.
1238
- */ async getBlockHeaderByHash(blockHash) {
1239
- const initialBlockHash = await this.#getInitialHeaderHash();
1240
- if (blockHash.equals(initialBlockHash)) {
1241
- return this.worldStateSynchronizer.getCommitted().getInitialHeader();
1166
+ async getBlockHeader(block = 'latest') {
1167
+ if (block instanceof L2BlockHash) {
1168
+ const initialBlockHash = await this.#getInitialHeaderHash();
1169
+ if (block.equals(initialBlockHash)) {
1170
+ // Block source doesn't handle initial header so we need to handle the case separately.
1171
+ return this.worldStateSynchronizer.getCommitted().getInitialHeader();
1172
+ }
1173
+ const blockHashFr = Fr.fromBuffer(block.toBuffer());
1174
+ return this.blockSource.getBlockHeaderByHash(blockHashFr);
1175
+ } else {
1176
+ // Block source doesn't handle initial header so we need to handle the case separately.
1177
+ const blockNumber = block === 'latest' ? await this.getBlockNumber() : block;
1178
+ if (blockNumber === BlockNumber.ZERO) {
1179
+ return this.worldStateSynchronizer.getCommitted().getInitialHeader();
1180
+ }
1181
+ return this.blockSource.getBlockHeader(block);
1242
1182
  }
1243
- return await this.blockSource.getBlockHeaderByHash(blockHash);
1244
1183
  }
1245
1184
  /**
1246
1185
  * Get a block header specified by its archive root.
@@ -1461,18 +1400,15 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1461
1400
  }
1462
1401
  #getInitialHeaderHash() {
1463
1402
  if (!this.initialHeaderHashPromise) {
1464
- this.initialHeaderHashPromise = this.worldStateSynchronizer.getCommitted().getInitialHeader().hash();
1403
+ this.initialHeaderHashPromise = this.worldStateSynchronizer.getCommitted().getInitialHeader().hash().then((hash)=>L2BlockHash.fromField(hash));
1465
1404
  }
1466
1405
  return this.initialHeaderHashPromise;
1467
1406
  }
1468
1407
  /**
1469
1408
  * Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
1470
- * @param blockNumber - The block number at which to get the data.
1409
+ * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
1471
1410
  * @returns An instance of a committed MerkleTreeOperations
1472
- */ async #getWorldState(blockNumber) {
1473
- if (typeof blockNumber === 'number' && blockNumber < INITIAL_L2_BLOCK_NUM - 1) {
1474
- throw new Error('Invalid block number to get world state for: ' + blockNumber);
1475
- }
1411
+ */ async #getWorldState(block) {
1476
1412
  let blockSyncedTo = BlockNumber.ZERO;
1477
1413
  try {
1478
1414
  // Attempt to sync the world state if necessary
@@ -1480,15 +1416,33 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1480
1416
  } catch (err) {
1481
1417
  this.log.error(`Error getting world state: ${err}`);
1482
1418
  }
1483
- // using a snapshot could be less efficient than using the committed db
1484
- if (blockNumber === 'latest' /*|| blockNumber === blockSyncedTo*/ ) {
1485
- this.log.debug(`Using committed db for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1419
+ if (block === 'latest') {
1420
+ this.log.debug(`Using committed db for block 'latest', world state synced upto ${blockSyncedTo}`);
1486
1421
  return this.worldStateSynchronizer.getCommitted();
1487
- } else if (blockNumber <= blockSyncedTo) {
1422
+ }
1423
+ if (block instanceof L2BlockHash) {
1424
+ const initialBlockHash = await this.#getInitialHeaderHash();
1425
+ if (block.equals(initialBlockHash)) {
1426
+ // Block source doesn't handle initial header so we need to handle the case separately.
1427
+ return this.worldStateSynchronizer.getSnapshot(BlockNumber.ZERO);
1428
+ }
1429
+ const blockHashFr = Fr.fromBuffer(block.toBuffer());
1430
+ const header = await this.blockSource.getBlockHeaderByHash(blockHashFr);
1431
+ if (!header) {
1432
+ throw new Error(`Block hash ${block.toString()} not found when querying world state. If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
1433
+ }
1434
+ const blockNumber = header.getBlockNumber();
1435
+ this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1436
+ return this.worldStateSynchronizer.getSnapshot(blockNumber);
1437
+ }
1438
+ // Block number provided
1439
+ {
1440
+ const blockNumber = block;
1441
+ if (blockNumber > blockSyncedTo) {
1442
+ throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
1443
+ }
1488
1444
  this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1489
1445
  return this.worldStateSynchronizer.getSnapshot(blockNumber);
1490
- } else {
1491
- throw new Error(`Block ${blockNumber} not yet synced`);
1492
1446
  }
1493
1447
  }
1494
1448
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec-node",
3
- "version": "4.0.0-nightly.20260118",
3
+ "version": "4.0.0-nightly.20260120",
4
4
  "main": "dest/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -65,30 +65,30 @@
65
65
  ]
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/archiver": "4.0.0-nightly.20260118",
69
- "@aztec/bb-prover": "4.0.0-nightly.20260118",
70
- "@aztec/blob-client": "4.0.0-nightly.20260118",
71
- "@aztec/constants": "4.0.0-nightly.20260118",
72
- "@aztec/epoch-cache": "4.0.0-nightly.20260118",
73
- "@aztec/ethereum": "4.0.0-nightly.20260118",
74
- "@aztec/foundation": "4.0.0-nightly.20260118",
75
- "@aztec/kv-store": "4.0.0-nightly.20260118",
76
- "@aztec/l1-artifacts": "4.0.0-nightly.20260118",
77
- "@aztec/merkle-tree": "4.0.0-nightly.20260118",
78
- "@aztec/node-keystore": "4.0.0-nightly.20260118",
79
- "@aztec/node-lib": "4.0.0-nightly.20260118",
80
- "@aztec/noir-protocol-circuits-types": "4.0.0-nightly.20260118",
81
- "@aztec/p2p": "4.0.0-nightly.20260118",
82
- "@aztec/protocol-contracts": "4.0.0-nightly.20260118",
83
- "@aztec/prover-client": "4.0.0-nightly.20260118",
84
- "@aztec/sequencer-client": "4.0.0-nightly.20260118",
85
- "@aztec/simulator": "4.0.0-nightly.20260118",
86
- "@aztec/slasher": "4.0.0-nightly.20260118",
87
- "@aztec/stdlib": "4.0.0-nightly.20260118",
88
- "@aztec/telemetry-client": "4.0.0-nightly.20260118",
89
- "@aztec/validator-client": "4.0.0-nightly.20260118",
90
- "@aztec/validator-ha-signer": "4.0.0-nightly.20260118",
91
- "@aztec/world-state": "4.0.0-nightly.20260118",
68
+ "@aztec/archiver": "4.0.0-nightly.20260120",
69
+ "@aztec/bb-prover": "4.0.0-nightly.20260120",
70
+ "@aztec/blob-client": "4.0.0-nightly.20260120",
71
+ "@aztec/constants": "4.0.0-nightly.20260120",
72
+ "@aztec/epoch-cache": "4.0.0-nightly.20260120",
73
+ "@aztec/ethereum": "4.0.0-nightly.20260120",
74
+ "@aztec/foundation": "4.0.0-nightly.20260120",
75
+ "@aztec/kv-store": "4.0.0-nightly.20260120",
76
+ "@aztec/l1-artifacts": "4.0.0-nightly.20260120",
77
+ "@aztec/merkle-tree": "4.0.0-nightly.20260120",
78
+ "@aztec/node-keystore": "4.0.0-nightly.20260120",
79
+ "@aztec/node-lib": "4.0.0-nightly.20260120",
80
+ "@aztec/noir-protocol-circuits-types": "4.0.0-nightly.20260120",
81
+ "@aztec/p2p": "4.0.0-nightly.20260120",
82
+ "@aztec/protocol-contracts": "4.0.0-nightly.20260120",
83
+ "@aztec/prover-client": "4.0.0-nightly.20260120",
84
+ "@aztec/sequencer-client": "4.0.0-nightly.20260120",
85
+ "@aztec/simulator": "4.0.0-nightly.20260120",
86
+ "@aztec/slasher": "4.0.0-nightly.20260120",
87
+ "@aztec/stdlib": "4.0.0-nightly.20260120",
88
+ "@aztec/telemetry-client": "4.0.0-nightly.20260120",
89
+ "@aztec/validator-client": "4.0.0-nightly.20260120",
90
+ "@aztec/validator-ha-signer": "4.0.0-nightly.20260120",
91
+ "@aztec/world-state": "4.0.0-nightly.20260120",
92
92
  "koa": "^2.16.1",
93
93
  "koa-router": "^13.1.1",
94
94
  "tslib": "^2.4.0",
@@ -3,7 +3,6 @@ import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@azte
3
3
  import { type BlobClientInterface, createBlobClientWithFileStores } from '@aztec/blob-client/client';
4
4
  import {
5
5
  ARCHIVE_HEIGHT,
6
- INITIAL_L2_BLOCK_NUM,
7
6
  type L1_TO_L2_MSG_TREE_HEIGHT,
8
7
  type NOTE_HASH_TREE_HEIGHT,
9
8
  type NULLIFIER_TREE_HEIGHT,
@@ -31,7 +30,7 @@ import {
31
30
  } from '@aztec/node-lib/factories';
32
31
  import { type P2P, type P2PClientDeps, createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
33
32
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
34
- import { BlockBuilder, GlobalVariableBuilder, SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
33
+ import { GlobalVariableBuilder, SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
35
34
  import { PublicProcessorFactory } from '@aztec/simulator/server';
36
35
  import {
37
36
  AttestationsBlockWatcher,
@@ -44,13 +43,11 @@ import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm
44
43
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
45
44
  import {
46
45
  type BlockParameter,
46
+ type CheckpointedL2Block,
47
47
  type DataInBlock,
48
- L2Block,
49
48
  L2BlockHash,
50
- L2BlockHeader,
51
49
  L2BlockNew,
52
50
  type L2BlockSource,
53
- type PublishedL2Block,
54
51
  } from '@aztec/stdlib/block';
55
52
  import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
56
53
  import type {
@@ -129,7 +126,7 @@ import { NodeMetrics } from './node_metrics.js';
129
126
  */
130
127
  export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
131
128
  private metrics: NodeMetrics;
132
- private initialHeaderHashPromise: Promise<Fr> | undefined = undefined;
129
+ private initialHeaderHashPromise: Promise<L2BlockHash> | undefined = undefined;
133
130
 
134
131
  // Prevent two snapshot operations to happen simultaneously
135
132
  private isUploadingSnapshot = false;
@@ -311,18 +308,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
311
308
  // We should really not be modifying the config object
312
309
  config.txPublicSetupAllowList = config.txPublicSetupAllowList ?? (await getDefaultAllowedSetupFunctions());
313
310
 
314
- // Create BlockBuilder for EpochPruneWatcher (slasher functionality)
315
- const blockBuilder = new BlockBuilder(
316
- { ...config, l1GenesisTime, slotDuration: Number(slotDuration) },
317
- worldStateSynchronizer,
318
- archiver,
319
- dateProvider,
320
- telemetry,
321
- );
322
-
323
311
  // Create FullNodeCheckpointsBuilder for validator and non-validator block proposal handling
324
312
  const validatorCheckpointsBuilder = new FullNodeCheckpointsBuilder(
325
313
  { ...config, l1GenesisTime, slotDuration: Number(slotDuration) },
314
+ worldStateSynchronizer,
326
315
  archiver,
327
316
  dateProvider,
328
317
  telemetry,
@@ -389,7 +378,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
389
378
  archiver,
390
379
  epochCache,
391
380
  p2pClient.getTxProvider(),
392
- blockBuilder,
381
+ validatorCheckpointsBuilder,
393
382
  config,
394
383
  );
395
384
  watchers.push(epochPruneWatcher);
@@ -454,6 +443,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
454
443
  // Create and start the sequencer client
455
444
  const checkpointsBuilder = new CheckpointsBuilder(
456
445
  { ...config, l1GenesisTime, slotDuration: Number(slotDuration) },
446
+ worldStateSynchronizer,
457
447
  archiver,
458
448
  dateProvider,
459
449
  telemetry,
@@ -582,16 +572,19 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
582
572
  }
583
573
 
584
574
  /**
585
- * Get a block specified by its number.
586
- * @param number - The block number being requested.
575
+ * Get a block specified by its block number, block hash, or 'latest'.
576
+ * @param block - The block parameter (block number, block hash, or 'latest').
587
577
  * @returns The requested block.
588
578
  */
589
- public async getBlock(number: BlockParameter): Promise<L2Block | undefined> {
590
- const blockNumber = number === 'latest' ? await this.getBlockNumber() : (number as BlockNumber);
579
+ public async getBlock(block: BlockParameter): Promise<L2BlockNew | undefined> {
580
+ if (block instanceof L2BlockHash) {
581
+ return this.getBlockByHash(Fr.fromBuffer(block.toBuffer()));
582
+ }
583
+ const blockNumber = block === 'latest' ? await this.getBlockNumber() : (block as BlockNumber);
591
584
  if (blockNumber === BlockNumber.ZERO) {
592
585
  return this.buildInitialBlock();
593
586
  }
594
- return await this.blockSource.getBlock(blockNumber);
587
+ return await this.blockSource.getL2BlockNew(blockNumber);
595
588
  }
596
589
 
597
590
  /**
@@ -599,29 +592,17 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
599
592
  * @param blockHash - The block hash being requested.
600
593
  * @returns The requested block.
601
594
  */
602
- public async getBlockByHash(blockHash: Fr): Promise<L2Block | undefined> {
595
+ public async getBlockByHash(blockHash: Fr): Promise<L2BlockNew | undefined> {
603
596
  const initialBlockHash = await this.#getInitialHeaderHash();
604
- if (blockHash.equals(initialBlockHash)) {
597
+ if (blockHash.equals(Fr.fromBuffer(initialBlockHash.toBuffer()))) {
605
598
  return this.buildInitialBlock();
606
599
  }
607
- const publishedBlock = await this.blockSource.getPublishedBlockByHash(blockHash);
608
- return publishedBlock?.block;
600
+ return await this.blockSource.getL2BlockNewByHash(blockHash);
609
601
  }
610
602
 
611
- private buildInitialBlock(): L2Block {
603
+ private buildInitialBlock(): L2BlockNew {
612
604
  const initialHeader = this.worldStateSynchronizer.getCommitted().getInitialHeader();
613
- // TODO: (pw/mbps) Clean this up when we move completely to the new types.
614
- // return L2BlockNew.empty(initialHeader);
615
- const oldBlockHeader = L2BlockHeader.empty();
616
- oldBlockHeader.state.l1ToL2MessageTree.root = initialHeader.state.l1ToL2MessageTree.root;
617
- oldBlockHeader.state.partial.noteHashTree.root = initialHeader.state.partial.noteHashTree.root;
618
- oldBlockHeader.state.partial.nullifierTree.root = initialHeader.state.partial.nullifierTree.root;
619
- oldBlockHeader.state.partial.nullifierTree.nextAvailableLeafIndex =
620
- initialHeader.state.partial.nullifierTree.nextAvailableLeafIndex;
621
- oldBlockHeader.state.partial.publicDataTree.root = initialHeader.state.partial.publicDataTree.root;
622
- oldBlockHeader.state.partial.publicDataTree.nextAvailableLeafIndex =
623
- initialHeader.state.partial.publicDataTree.nextAvailableLeafIndex;
624
- return L2Block.empty(oldBlockHeader);
605
+ return L2BlockNew.empty(initialHeader);
625
606
  }
626
607
 
627
608
  /**
@@ -629,9 +610,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
629
610
  * @param archive - The archive root being requested.
630
611
  * @returns The requested block.
631
612
  */
632
- public async getBlockByArchive(archive: Fr): Promise<L2Block | undefined> {
633
- const publishedBlock = await this.blockSource.getPublishedBlockByArchive(archive);
634
- return publishedBlock?.block;
613
+ public async getBlockByArchive(archive: Fr): Promise<L2BlockNew | undefined> {
614
+ return await this.blockSource.getL2BlockNewByArchive(archive);
635
615
  }
636
616
 
637
617
  /**
@@ -640,11 +620,11 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
640
620
  * @param limit - The maximum number of blocks to obtain.
641
621
  * @returns The blocks requested.
642
622
  */
643
- public async getBlocks(from: BlockNumber, limit: number): Promise<L2Block[]> {
644
- return (await this.blockSource.getBlocks(from, limit)) ?? [];
623
+ public async getBlocks(from: BlockNumber, limit: number): Promise<L2BlockNew[]> {
624
+ return (await this.blockSource.getL2BlocksNew(from, limit)) ?? [];
645
625
  }
646
626
 
647
- public async getPublishedBlocks(from: BlockNumber, limit: number): Promise<PublishedL2Block[]> {
627
+ public async getPublishedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]> {
648
628
  return (await this.blockSource.getPublishedBlocks(from, limit)) ?? [];
649
629
  }
650
630
 
@@ -851,20 +831,12 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
851
831
  return compactArray(await Promise.all(txHashes.map(txHash => this.getTxByHash(txHash))));
852
832
  }
853
833
 
854
- /**
855
- * Find the indexes of the given leaves in the given tree along with a block metadata pointing to the block in which
856
- * the leaves were inserted.
857
- * @param blockNumber - The block number at which to get the data or 'latest' for latest data.
858
- * @param treeId - The tree to search in.
859
- * @param leafValues - The values to search for.
860
- * @returns The indices of leaves and the block metadata of a block in which the leaves were inserted.
861
- */
862
834
  public async findLeavesIndexes(
863
- blockNumber: BlockParameter,
835
+ block: BlockParameter,
864
836
  treeId: MerkleTreeId,
865
837
  leafValues: Fr[],
866
838
  ): Promise<(DataInBlock<bigint> | undefined)[]> {
867
- const committedDb = await this.#getWorldState(blockNumber);
839
+ const committedDb = await this.#getWorldState(block);
868
840
  const maybeIndices = await committedDb.findLeafIndices(
869
841
  treeId,
870
842
  leafValues.map(x => x.toBuffer()),
@@ -922,39 +894,27 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
922
894
  });
923
895
  }
924
896
 
925
- /**
926
- * Returns a sibling path for the given index in the nullifier tree.
927
- * @param blockNumber - The block number at which to get the data.
928
- * @param leafIndex - The index of the leaf for which the sibling path is required.
929
- * @returns The sibling path for the leaf index.
930
- */
931
897
  public async getNullifierSiblingPath(
932
- blockNumber: BlockParameter,
898
+ block: BlockParameter,
933
899
  leafIndex: bigint,
934
900
  ): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>> {
935
- const committedDb = await this.#getWorldState(blockNumber);
901
+ const committedDb = await this.#getWorldState(block);
936
902
  return committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, leafIndex);
937
903
  }
938
904
 
939
- /**
940
- * Returns a sibling path for the given index in the data tree.
941
- * @param blockNumber - The block number at which to get the data.
942
- * @param leafIndex - The index of the leaf for which the sibling path is required.
943
- * @returns The sibling path for the leaf index.
944
- */
945
905
  public async getNoteHashSiblingPath(
946
- blockNumber: BlockParameter,
906
+ block: BlockParameter,
947
907
  leafIndex: bigint,
948
908
  ): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>> {
949
- const committedDb = await this.#getWorldState(blockNumber);
909
+ const committedDb = await this.#getWorldState(block);
950
910
  return committedDb.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
951
911
  }
952
912
 
953
913
  public async getArchiveMembershipWitness(
954
- blockNumber: BlockParameter,
914
+ block: BlockParameter,
955
915
  archive: Fr,
956
916
  ): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
957
- const committedDb = await this.#getWorldState(blockNumber);
917
+ const committedDb = await this.#getWorldState(block);
958
918
  const [pathAndIndex] = await committedDb.findSiblingPaths<MerkleTreeId.ARCHIVE>(MerkleTreeId.ARCHIVE, [archive]);
959
919
  return pathAndIndex === undefined
960
920
  ? undefined
@@ -962,10 +922,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
962
922
  }
963
923
 
964
924
  public async getNoteHashMembershipWitness(
965
- blockNumber: BlockParameter,
925
+ block: BlockParameter,
966
926
  noteHash: Fr,
967
927
  ): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
968
- const committedDb = await this.#getWorldState(blockNumber);
928
+ const committedDb = await this.#getWorldState(block);
969
929
  const [pathAndIndex] = await committedDb.findSiblingPaths<MerkleTreeId.NOTE_HASH_TREE>(
970
930
  MerkleTreeId.NOTE_HASH_TREE,
971
931
  [noteHash],
@@ -975,17 +935,11 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
975
935
  : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
976
936
  }
977
937
 
978
- /**
979
- * Returns the index and a sibling path for a leaf in the committed l1 to l2 data tree.
980
- * @param blockNumber - The block number at which to get the data.
981
- * @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
982
- * @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
983
- */
984
938
  public async getL1ToL2MessageMembershipWitness(
985
- blockNumber: BlockParameter,
939
+ block: BlockParameter,
986
940
  l1ToL2Message: Fr,
987
941
  ): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined> {
988
- const db = await this.#getWorldState(blockNumber);
942
+ const db = await this.#getWorldState(block);
989
943
  const [witness] = await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [l1ToL2Message]);
990
944
  if (!witness) {
991
945
  return undefined;
@@ -1020,7 +974,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1020
974
  public async getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]> {
1021
975
  // Assumes `getBlocksForEpoch` returns blocks in ascending order of block number.
1022
976
  const blocks = await this.blockSource.getBlocksForEpoch(epoch);
1023
- const blocksInCheckpoints: L2Block[][] = [];
977
+ const blocksInCheckpoints: L2BlockNew[][] = [];
1024
978
  let previousSlotNumber = SlotNumber.ZERO;
1025
979
  let checkpointIndex = -1;
1026
980
  for (const block of blocks) {
@@ -1037,45 +991,27 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1037
991
  );
1038
992
  }
1039
993
 
1040
- /**
1041
- * Returns a sibling path for a leaf in the committed blocks tree.
1042
- * @param blockNumber - The block number at which to get the data.
1043
- * @param leafIndex - Index of the leaf in the tree.
1044
- * @returns The sibling path.
1045
- */
1046
994
  public async getArchiveSiblingPath(
1047
- blockNumber: BlockParameter,
995
+ block: BlockParameter,
1048
996
  leafIndex: bigint,
1049
997
  ): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>> {
1050
- const committedDb = await this.#getWorldState(blockNumber);
998
+ const committedDb = await this.#getWorldState(block);
1051
999
  return committedDb.getSiblingPath(MerkleTreeId.ARCHIVE, leafIndex);
1052
1000
  }
1053
1001
 
1054
- /**
1055
- * Returns a sibling path for a leaf in the committed public data tree.
1056
- * @param blockNumber - The block number at which to get the data.
1057
- * @param leafIndex - Index of the leaf in the tree.
1058
- * @returns The sibling path.
1059
- */
1060
1002
  public async getPublicDataSiblingPath(
1061
- blockNumber: BlockParameter,
1003
+ block: BlockParameter,
1062
1004
  leafIndex: bigint,
1063
1005
  ): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>> {
1064
- const committedDb = await this.#getWorldState(blockNumber);
1006
+ const committedDb = await this.#getWorldState(block);
1065
1007
  return committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, leafIndex);
1066
1008
  }
1067
1009
 
1068
- /**
1069
- * Returns a nullifier membership witness for a given nullifier at a given block.
1070
- * @param blockNumber - The block number at which to get the index.
1071
- * @param nullifier - Nullifier we try to find witness for.
1072
- * @returns The nullifier membership witness (if found).
1073
- */
1074
1010
  public async getNullifierMembershipWitness(
1075
- blockNumber: BlockParameter,
1011
+ block: BlockParameter,
1076
1012
  nullifier: Fr,
1077
1013
  ): Promise<NullifierMembershipWitness | undefined> {
1078
- const db = await this.#getWorldState(blockNumber);
1014
+ const db = await this.#getWorldState(block);
1079
1015
  const [witness] = await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]);
1080
1016
  if (!witness) {
1081
1017
  return undefined;
@@ -1092,7 +1028,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1092
1028
 
1093
1029
  /**
1094
1030
  * Returns a low nullifier membership witness for a given nullifier at a given block.
1095
- * @param blockNumber - The block number at which to get the index.
1031
+ * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
1096
1032
  * @param nullifier - Nullifier we try to find the low nullifier witness for.
1097
1033
  * @returns The low nullifier membership witness (if found).
1098
1034
  * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
@@ -1105,10 +1041,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1105
1041
  * TODO: This is a confusing behavior and we should eventually address that.
1106
1042
  */
1107
1043
  public async getLowNullifierMembershipWitness(
1108
- blockNumber: BlockParameter,
1044
+ block: BlockParameter,
1109
1045
  nullifier: Fr,
1110
1046
  ): Promise<NullifierMembershipWitness | undefined> {
1111
- const committedDb = await this.#getWorldState(blockNumber);
1047
+ const committedDb = await this.#getWorldState(block);
1112
1048
  const findResult = await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
1113
1049
  if (!findResult) {
1114
1050
  return undefined;
@@ -1123,8 +1059,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1123
1059
  return new NullifierMembershipWitness(BigInt(index), preimageData as NullifierLeafPreimage, siblingPath);
1124
1060
  }
1125
1061
 
1126
- async getPublicDataWitness(blockNumber: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
1127
- const committedDb = await this.#getWorldState(blockNumber);
1062
+ async getPublicDataWitness(block: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
1063
+ const committedDb = await this.#getWorldState(block);
1128
1064
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
1129
1065
  if (!lowLeafResult) {
1130
1066
  return undefined;
@@ -1138,19 +1074,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1138
1074
  }
1139
1075
  }
1140
1076
 
1141
- /**
1142
- * Gets the storage value at the given contract storage slot.
1143
- *
1144
- * @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
1145
- * Aztec's version of `eth_getStorageAt`.
1146
- *
1147
- * @param contract - Address of the contract to query.
1148
- * @param slot - Slot to query.
1149
- * @param blockNumber - The block number at which to get the data or 'latest'.
1150
- * @returns Storage value at the given contract slot.
1151
- */
1152
- public async getPublicStorageAt(blockNumber: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr> {
1153
- const committedDb = await this.#getWorldState(blockNumber);
1077
+ public async getPublicStorageAt(block: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr> {
1078
+ const committedDb = await this.#getWorldState(block);
1154
1079
  const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
1155
1080
 
1156
1081
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
@@ -1164,28 +1089,23 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1164
1089
  return preimage.leaf.value;
1165
1090
  }
1166
1091
 
1167
- /**
1168
- * Returns the currently committed block header, or the initial header if no blocks have been produced.
1169
- * @returns The current committed block header.
1170
- */
1171
- public async getBlockHeader(blockNumber: BlockParameter = 'latest'): Promise<BlockHeader | undefined> {
1172
- return blockNumber === BlockNumber.ZERO ||
1173
- (blockNumber === 'latest' && (await this.blockSource.getBlockNumber()) === BlockNumber.ZERO)
1174
- ? this.worldStateSynchronizer.getCommitted().getInitialHeader()
1175
- : this.blockSource.getBlockHeader(blockNumber === 'latest' ? blockNumber : (blockNumber as BlockNumber));
1176
- }
1177
-
1178
- /**
1179
- * Get a block header specified by its hash.
1180
- * @param blockHash - The block hash being requested.
1181
- * @returns The requested block header.
1182
- */
1183
- public async getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
1184
- const initialBlockHash = await this.#getInitialHeaderHash();
1185
- if (blockHash.equals(initialBlockHash)) {
1186
- return this.worldStateSynchronizer.getCommitted().getInitialHeader();
1092
+ public async getBlockHeader(block: BlockParameter = 'latest'): Promise<BlockHeader | undefined> {
1093
+ if (block instanceof L2BlockHash) {
1094
+ const initialBlockHash = await this.#getInitialHeaderHash();
1095
+ if (block.equals(initialBlockHash)) {
1096
+ // Block source doesn't handle initial header so we need to handle the case separately.
1097
+ return this.worldStateSynchronizer.getCommitted().getInitialHeader();
1098
+ }
1099
+ const blockHashFr = Fr.fromBuffer(block.toBuffer());
1100
+ return this.blockSource.getBlockHeaderByHash(blockHashFr);
1101
+ } else {
1102
+ // Block source doesn't handle initial header so we need to handle the case separately.
1103
+ const blockNumber = block === 'latest' ? await this.getBlockNumber() : (block as BlockNumber);
1104
+ if (blockNumber === BlockNumber.ZERO) {
1105
+ return this.worldStateSynchronizer.getCommitted().getInitialHeader();
1106
+ }
1107
+ return this.blockSource.getBlockHeader(block);
1187
1108
  }
1188
- return await this.blockSource.getBlockHeaderByHash(blockHash);
1189
1109
  }
1190
1110
 
1191
1111
  /**
@@ -1461,23 +1381,23 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1461
1381
  }
1462
1382
  }
1463
1383
 
1464
- #getInitialHeaderHash(): Promise<Fr> {
1384
+ #getInitialHeaderHash(): Promise<L2BlockHash> {
1465
1385
  if (!this.initialHeaderHashPromise) {
1466
- this.initialHeaderHashPromise = this.worldStateSynchronizer.getCommitted().getInitialHeader().hash();
1386
+ this.initialHeaderHashPromise = this.worldStateSynchronizer
1387
+ .getCommitted()
1388
+ .getInitialHeader()
1389
+ .hash()
1390
+ .then(hash => L2BlockHash.fromField(hash));
1467
1391
  }
1468
1392
  return this.initialHeaderHashPromise;
1469
1393
  }
1470
1394
 
1471
1395
  /**
1472
1396
  * Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
1473
- * @param blockNumber - The block number at which to get the data.
1397
+ * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
1474
1398
  * @returns An instance of a committed MerkleTreeOperations
1475
1399
  */
1476
- async #getWorldState(blockNumber: BlockParameter) {
1477
- if (typeof blockNumber === 'number' && blockNumber < INITIAL_L2_BLOCK_NUM - 1) {
1478
- throw new Error('Invalid block number to get world state for: ' + blockNumber);
1479
- }
1480
-
1400
+ async #getWorldState(block: BlockParameter) {
1481
1401
  let blockSyncedTo: BlockNumber = BlockNumber.ZERO;
1482
1402
  try {
1483
1403
  // Attempt to sync the world state if necessary
@@ -1486,15 +1406,40 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1486
1406
  this.log.error(`Error getting world state: ${err}`);
1487
1407
  }
1488
1408
 
1489
- // using a snapshot could be less efficient than using the committed db
1490
- if (blockNumber === 'latest' /*|| blockNumber === blockSyncedTo*/) {
1491
- this.log.debug(`Using committed db for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1409
+ if (block === 'latest') {
1410
+ this.log.debug(`Using committed db for block 'latest', world state synced upto ${blockSyncedTo}`);
1492
1411
  return this.worldStateSynchronizer.getCommitted();
1493
- } else if (blockNumber <= blockSyncedTo) {
1412
+ }
1413
+
1414
+ if (block instanceof L2BlockHash) {
1415
+ const initialBlockHash = await this.#getInitialHeaderHash();
1416
+ if (block.equals(initialBlockHash)) {
1417
+ // Block source doesn't handle initial header so we need to handle the case separately.
1418
+ return this.worldStateSynchronizer.getSnapshot(BlockNumber.ZERO);
1419
+ }
1420
+
1421
+ const blockHashFr = Fr.fromBuffer(block.toBuffer());
1422
+ const header = await this.blockSource.getBlockHeaderByHash(blockHashFr);
1423
+ if (!header) {
1424
+ throw new Error(
1425
+ `Block hash ${block.toString()} not found when querying world state. If the node API has been queried with anchor block hash possibly a reorg has occurred.`,
1426
+ );
1427
+ }
1428
+ const blockNumber = header.getBlockNumber();
1494
1429
  this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1495
- return this.worldStateSynchronizer.getSnapshot(blockNumber as BlockNumber);
1496
- } else {
1497
- throw new Error(`Block ${blockNumber} not yet synced`);
1430
+ return this.worldStateSynchronizer.getSnapshot(blockNumber);
1431
+ }
1432
+
1433
+ // Block number provided
1434
+ {
1435
+ const blockNumber = block as BlockNumber;
1436
+
1437
+ if (blockNumber > blockSyncedTo) {
1438
+ throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
1439
+ }
1440
+
1441
+ this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1442
+ return this.worldStateSynchronizer.getSnapshot(blockNumber);
1498
1443
  }
1499
1444
  }
1500
1445