@aztec/archiver 3.0.0-nightly.20251203 → 3.0.0-nightly.20251205

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 (47) hide show
  1. package/dest/archiver/archiver.d.ts +23 -23
  2. package/dest/archiver/archiver.d.ts.map +1 -1
  3. package/dest/archiver/archiver.js +22 -20
  4. package/dest/archiver/archiver_store.d.ts +16 -15
  5. package/dest/archiver/archiver_store.d.ts.map +1 -1
  6. package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
  7. package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
  8. package/dest/archiver/archiver_store_test_suite.js +81 -81
  9. package/dest/archiver/data_retrieval.d.ts +1 -1
  10. package/dest/archiver/data_retrieval.d.ts.map +1 -1
  11. package/dest/archiver/data_retrieval.js +2 -2
  12. package/dest/archiver/kv_archiver_store/block_store.d.ts +9 -8
  13. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  14. package/dest/archiver/kv_archiver_store/block_store.js +8 -7
  15. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +17 -16
  16. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  17. package/dest/archiver/kv_archiver_store/log_store.d.ts +1 -1
  18. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
  19. package/dest/archiver/kv_archiver_store/log_store.js +3 -2
  20. package/dest/archiver/structs/inbox_message.d.ts +3 -3
  21. package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
  22. package/dest/archiver/structs/inbox_message.js +2 -1
  23. package/dest/factory.d.ts +1 -1
  24. package/dest/factory.d.ts.map +1 -1
  25. package/dest/factory.js +3 -2
  26. package/dest/test/mock_l1_to_l2_message_source.d.ts +3 -3
  27. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  28. package/dest/test/mock_l1_to_l2_message_source.js +3 -2
  29. package/dest/test/mock_l2_block_source.d.ts +5 -5
  30. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  31. package/dest/test/mock_l2_block_source.js +7 -6
  32. package/dest/test/mock_structs.d.ts +1 -1
  33. package/dest/test/mock_structs.d.ts.map +1 -1
  34. package/dest/test/mock_structs.js +3 -2
  35. package/package.json +15 -15
  36. package/src/archiver/archiver.ts +46 -54
  37. package/src/archiver/archiver_store.ts +19 -14
  38. package/src/archiver/archiver_store_test_suite.ts +107 -76
  39. package/src/archiver/data_retrieval.ts +2 -2
  40. package/src/archiver/kv_archiver_store/block_store.ts +17 -16
  41. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +16 -15
  42. package/src/archiver/kv_archiver_store/log_store.ts +3 -2
  43. package/src/archiver/structs/inbox_message.ts +4 -4
  44. package/src/factory.ts +3 -2
  45. package/src/test/mock_l1_to_l2_message_source.ts +4 -4
  46. package/src/test/mock_l2_block_source.ts +8 -8
  47. package/src/test/mock_structs.ts +3 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/archiver",
3
- "version": "3.0.0-nightly.20251203",
3
+ "version": "3.0.0-nightly.20251205",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -17,8 +17,8 @@
17
17
  "tsconfig": "./tsconfig.json"
18
18
  },
19
19
  "scripts": {
20
- "build": "yarn clean && tsgo -b",
21
- "build:dev": "tsgo -b --watch",
20
+ "build": "yarn clean && ../scripts/tsc.sh",
21
+ "build:dev": "../scripts/tsc.sh --watch",
22
22
  "clean": "rm -rf ./dest .tsbuildinfo",
23
23
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
24
24
  "test:integration": "concurrently -k -s first -c reset,dim -n test,anvil \"yarn test:integration:run\" \"anvil\"",
@@ -66,18 +66,18 @@
66
66
  ]
67
67
  },
68
68
  "dependencies": {
69
- "@aztec/blob-lib": "3.0.0-nightly.20251203",
70
- "@aztec/blob-sink": "3.0.0-nightly.20251203",
71
- "@aztec/constants": "3.0.0-nightly.20251203",
72
- "@aztec/epoch-cache": "3.0.0-nightly.20251203",
73
- "@aztec/ethereum": "3.0.0-nightly.20251203",
74
- "@aztec/foundation": "3.0.0-nightly.20251203",
75
- "@aztec/kv-store": "3.0.0-nightly.20251203",
76
- "@aztec/l1-artifacts": "3.0.0-nightly.20251203",
77
- "@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251203",
78
- "@aztec/protocol-contracts": "3.0.0-nightly.20251203",
79
- "@aztec/stdlib": "3.0.0-nightly.20251203",
80
- "@aztec/telemetry-client": "3.0.0-nightly.20251203",
69
+ "@aztec/blob-lib": "3.0.0-nightly.20251205",
70
+ "@aztec/blob-sink": "3.0.0-nightly.20251205",
71
+ "@aztec/constants": "3.0.0-nightly.20251205",
72
+ "@aztec/epoch-cache": "3.0.0-nightly.20251205",
73
+ "@aztec/ethereum": "3.0.0-nightly.20251205",
74
+ "@aztec/foundation": "3.0.0-nightly.20251205",
75
+ "@aztec/kv-store": "3.0.0-nightly.20251205",
76
+ "@aztec/l1-artifacts": "3.0.0-nightly.20251205",
77
+ "@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251205",
78
+ "@aztec/protocol-contracts": "3.0.0-nightly.20251205",
79
+ "@aztec/stdlib": "3.0.0-nightly.20251205",
80
+ "@aztec/telemetry-client": "3.0.0-nightly.20251205",
81
81
  "lodash.groupby": "^4.6.0",
82
82
  "lodash.omit": "^4.5.0",
83
83
  "tslib": "^2.5.0",
@@ -1,4 +1,5 @@
1
1
  import type { BlobSinkClientInterface } from '@aztec/blob-sink/client';
2
+ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
3
  import { EpochCache } from '@aztec/epoch-cache';
3
4
  import {
4
5
  BlockTagTooOldError,
@@ -9,7 +10,7 @@ import {
9
10
  createEthereumChain,
10
11
  } from '@aztec/ethereum';
11
12
  import { maxBigint } from '@aztec/foundation/bigint';
12
- import { CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
13
+ import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
13
14
  import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
14
15
  import { merge, pick } from '@aztec/foundation/collection';
15
16
  import type { EthAddress } from '@aztec/foundation/eth-address';
@@ -35,7 +36,6 @@ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
35
36
  import {
36
37
  type ArchiverEmitter,
37
38
  L2Block,
38
- type L2BlockId,
39
39
  type L2BlockSource,
40
40
  L2BlockSourceEvents,
41
41
  type L2Tips,
@@ -747,7 +747,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
747
747
 
748
748
  this.emit(L2BlockSourceEvents.L2BlockProven, {
749
749
  type: L2BlockSourceEvents.L2BlockProven,
750
- blockNumber: BigInt(lastProvenBlockNumber),
750
+ blockNumber: lastProvenBlockNumber,
751
751
  slotNumber: provenSlotNumber,
752
752
  epochNumber: provenEpochNumber,
753
753
  });
@@ -940,7 +940,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
940
940
  if (err instanceof InitialBlockNumberNotSequentialError) {
941
941
  const { previousBlockNumber, newBlockNumber } = err;
942
942
  const previousBlock = previousBlockNumber
943
- ? await this.store.getPublishedBlock(previousBlockNumber)
943
+ ? await this.store.getPublishedBlock(BlockNumber(previousBlockNumber))
944
944
  : undefined;
945
945
  const updatedL1SyncPoint = previousBlock?.l1.blockNumber ?? this.l1constants.l1StartBlock;
946
946
  await this.store.setBlockSynchedL1BlockNumber(updatedL1SyncPoint);
@@ -1094,7 +1094,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1094
1094
  if (slot(block) <= end) {
1095
1095
  blocks.push(block);
1096
1096
  }
1097
- block = await this.getBlock(block.number - 1);
1097
+ block = await this.getBlock(BlockNumber(block.number - 1));
1098
1098
  }
1099
1099
 
1100
1100
  return blocks.reverse();
@@ -1113,7 +1113,8 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1113
1113
  if (slot(header) <= end) {
1114
1114
  blocks.push(header);
1115
1115
  }
1116
- header = await this.getBlockHeader(--number);
1116
+ number = BlockNumber(number - 1);
1117
+ header = await this.getBlockHeader(number);
1117
1118
  }
1118
1119
  return blocks.reverse();
1119
1120
  }
@@ -1157,7 +1158,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1157
1158
  proven?: boolean,
1158
1159
  ): Promise<PublishedCheckpoint[]> {
1159
1160
  // TODO: Implement this properly. This only works when we have one block per checkpoint.
1160
- const blocks = await this.getPublishedBlocks(from, limit, proven);
1161
+ const blocks = await this.getPublishedBlocks(BlockNumber(from), limit, proven);
1161
1162
  return blocks.map(b => b.toPublishedCheckpoint());
1162
1163
  }
1163
1164
 
@@ -1207,19 +1208,19 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1207
1208
  public setProvenCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<void> {
1208
1209
  // TODO: Create store and apis for checkpoints.
1209
1210
  // Proven checkpoint number will no longer be the same as the proven block number once we support multiple blocks per checkpoint.
1210
- return this.store.setProvenL2BlockNumber(checkpointNumber);
1211
+ return this.store.setProvenL2BlockNumber(BlockNumber.fromCheckpointNumber(checkpointNumber));
1211
1212
  }
1212
1213
 
1213
1214
  public unwindCheckpoints(from: CheckpointNumber, checkpointsToUnwind: number): Promise<boolean> {
1214
1215
  // TODO: Create store and apis for checkpoints.
1215
1216
  // This only works when we have one block per checkpoint.
1216
- return this.store.unwindBlocks(from, checkpointsToUnwind);
1217
+ return this.store.unwindBlocks(BlockNumber.fromCheckpointNumber(from), checkpointsToUnwind);
1217
1218
  }
1218
1219
 
1219
- public getLastBlockNumberInCheckpoint(checkpointNumber: CheckpointNumber): Promise<number> {
1220
+ public getLastBlockNumberInCheckpoint(checkpointNumber: CheckpointNumber): Promise<BlockNumber> {
1220
1221
  // TODO: Create store and apis for checkpoints.
1221
1222
  // Checkpoint number will no longer be the same as the block number once we support multiple blocks per checkpoint.
1222
- return Promise.resolve(checkpointNumber);
1223
+ return Promise.resolve(BlockNumber.fromCheckpointNumber(checkpointNumber));
1223
1224
  }
1224
1225
 
1225
1226
  public addCheckpoints(
@@ -1244,7 +1245,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1244
1245
  public getL1ToL2MessagesForCheckpoint(checkpointNumber: CheckpointNumber): Promise<Fr[]> {
1245
1246
  // TODO: Create dedicated api for checkpoints.
1246
1247
  // This only works when we have one block per checkpoint.
1247
- return this.getL1ToL2Messages(checkpointNumber);
1248
+ return this.getL1ToL2Messages(BlockNumber.fromCheckpointNumber(checkpointNumber));
1248
1249
  }
1249
1250
 
1250
1251
  /**
@@ -1254,12 +1255,12 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1254
1255
  * @param proven - If true, only return blocks that have been proven.
1255
1256
  * @returns The requested L2 blocks.
1256
1257
  */
1257
- public getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]> {
1258
+ public getBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<L2Block[]> {
1258
1259
  return this.getPublishedBlocks(from, limit, proven).then(blocks => blocks.map(b => b.block));
1259
1260
  }
1260
1261
 
1261
1262
  /** Equivalent to getBlocks but includes publish data. */
1262
- public async getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<PublishedL2Block[]> {
1263
+ public async getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<PublishedL2Block[]> {
1263
1264
  const limitWithProven = proven
1264
1265
  ? Math.min(limit, Math.max((await this.store.getProvenL2BlockNumber()) - from + 1, 0))
1265
1266
  : limit;
@@ -1287,7 +1288,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1287
1288
  * @param number - The block number to return.
1288
1289
  * @returns The requested L2 block.
1289
1290
  */
1290
- public async getBlock(number: number): Promise<L2Block | undefined> {
1291
+ public async getBlock(number: BlockNumber): Promise<L2Block | undefined> {
1291
1292
  // If the number provided is -ve, then return the latest block.
1292
1293
  if (number < 0) {
1293
1294
  number = await this.store.getSynchedL2BlockNumber();
@@ -1299,7 +1300,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1299
1300
  return publishedBlock?.block;
1300
1301
  }
1301
1302
 
1302
- public async getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
1303
+ public async getBlockHeader(number: BlockNumber | 'latest'): Promise<BlockHeader | undefined> {
1303
1304
  if (number === 'latest') {
1304
1305
  number = await this.store.getSynchedL2BlockNumber();
1305
1306
  }
@@ -1324,7 +1325,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1324
1325
  * @param limit - The maximum number of blocks to retrieve logs from.
1325
1326
  * @returns An array of private logs from the specified range of blocks.
1326
1327
  */
1327
- public getPrivateLogs(from: number, limit: number): Promise<PrivateLog[]> {
1328
+ public getPrivateLogs(from: BlockNumber, limit: number): Promise<PrivateLog[]> {
1328
1329
  return this.store.getPrivateLogs(from, limit);
1329
1330
  }
1330
1331
 
@@ -1360,16 +1361,16 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1360
1361
  * Gets the number of the latest L2 block processed by the block source implementation.
1361
1362
  * @returns The number of the latest L2 block processed by the block source implementation.
1362
1363
  */
1363
- public getBlockNumber(): Promise<number> {
1364
+ public getBlockNumber(): Promise<BlockNumber> {
1364
1365
  return this.store.getSynchedL2BlockNumber();
1365
1366
  }
1366
1367
 
1367
- public getProvenBlockNumber(): Promise<number> {
1368
+ public getProvenBlockNumber(): Promise<BlockNumber> {
1368
1369
  return this.store.getProvenL2BlockNumber();
1369
1370
  }
1370
1371
 
1371
1372
  /** Forcefully updates the last proven block number. Use for testing. */
1372
- public setProvenBlockNumber(blockNumber: number): Promise<void> {
1373
+ public setProvenBlockNumber(blockNumber: BlockNumber): Promise<void> {
1373
1374
  return this.store.setProvenL2BlockNumber(blockNumber);
1374
1375
  }
1375
1376
 
@@ -1402,7 +1403,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1402
1403
  * @param blockNumber - L2 block number to get messages for.
1403
1404
  * @returns The L1 to L2 messages/leaves of the messages subtree (throws if not found).
1404
1405
  */
1405
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]> {
1406
+ getL1ToL2Messages(blockNumber: BlockNumber): Promise<Fr[]> {
1406
1407
  return this.store.getL1ToL2Messages(blockNumber);
1407
1408
  }
1408
1409
 
@@ -1444,7 +1445,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1444
1445
  // TODO(#13569): Compute proper finalized block number based on L1 finalized block.
1445
1446
  // We just force it 2 epochs worth of proven data for now.
1446
1447
  // NOTE: update end-to-end/src/e2e_epochs/epochs_empty_blocks.test.ts as that uses finalized blocks in computations
1447
- const finalizedBlockNumber = Math.max(provenBlockNumber - this.l1constants.epochDuration * 2, 0);
1448
+ const finalizedBlockNumber = BlockNumber(Math.max(provenBlockNumber - this.l1constants.epochDuration * 2, 0));
1448
1449
 
1449
1450
  const [latestBlockHeader, provenBlockHeader, finalizedBlockHeader] = await Promise.all([
1450
1451
  latestBlockNumber > 0 ? this.getBlockHeader(latestBlockNumber) : undefined,
@@ -1468,27 +1469,18 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1468
1469
  );
1469
1470
  }
1470
1471
 
1471
- const latestBlockHeaderHash = await latestBlockHeader?.hash();
1472
- const provenBlockHeaderHash = await provenBlockHeader?.hash();
1473
- const finalizedBlockHeaderHash = await finalizedBlockHeader?.hash();
1472
+ const latestBlockHeaderHash = (await latestBlockHeader?.hash()) ?? GENESIS_BLOCK_HEADER_HASH;
1473
+ const provenBlockHeaderHash = (await provenBlockHeader?.hash()) ?? GENESIS_BLOCK_HEADER_HASH;
1474
+ const finalizedBlockHeaderHash = (await finalizedBlockHeader?.hash()) ?? GENESIS_BLOCK_HEADER_HASH;
1474
1475
 
1475
1476
  return {
1476
- latest: {
1477
- number: latestBlockNumber,
1478
- hash: latestBlockHeaderHash?.toString(),
1479
- } as L2BlockId,
1480
- proven: {
1481
- number: provenBlockNumber,
1482
- hash: provenBlockHeaderHash?.toString(),
1483
- } as L2BlockId,
1484
- finalized: {
1485
- number: finalizedBlockNumber,
1486
- hash: finalizedBlockHeaderHash?.toString(),
1487
- } as L2BlockId,
1477
+ latest: { number: latestBlockNumber, hash: latestBlockHeaderHash.toString() },
1478
+ proven: { number: provenBlockNumber, hash: provenBlockHeaderHash.toString() },
1479
+ finalized: { number: finalizedBlockNumber, hash: finalizedBlockHeaderHash.toString() },
1488
1480
  };
1489
1481
  }
1490
1482
 
1491
- public async rollbackTo(targetL2BlockNumber: number): Promise<void> {
1483
+ public async rollbackTo(targetL2BlockNumber: BlockNumber): Promise<void> {
1492
1484
  const currentBlocks = await this.getL2Tips();
1493
1485
  const currentL2Block = currentBlocks.latest.number;
1494
1486
  const currentProvenBlock = currentBlocks.proven.number;
@@ -1505,7 +1497,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1505
1497
  const targetL1BlockNumber = targetL2Block.l1.blockNumber;
1506
1498
  const targetL1BlockHash = await this.getL1BlockHash(targetL1BlockNumber);
1507
1499
  this.log.info(`Unwinding ${blocksToUnwind} blocks from L2 block ${currentL2Block}`);
1508
- await this.store.unwindBlocks(currentL2Block, blocksToUnwind);
1500
+ await this.store.unwindBlocks(BlockNumber(currentL2Block), blocksToUnwind);
1509
1501
  this.log.info(`Unwinding L1 to L2 messages to ${targetL2BlockNumber}`);
1510
1502
  await this.store.rollbackL1ToL2MessagesToL2Block(targetL2BlockNumber);
1511
1503
  this.log.info(`Setting L1 syncpoints to ${targetL1BlockNumber}`);
@@ -1513,7 +1505,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
1513
1505
  await this.store.setMessageSynchedL1Block({ l1BlockNumber: targetL1BlockNumber, l1BlockHash: targetL1BlockHash });
1514
1506
  if (targetL2BlockNumber < currentProvenBlock) {
1515
1507
  this.log.info(`Clearing proven L2 block number`);
1516
- await this.store.setProvenL2BlockNumber(0);
1508
+ await this.store.setProvenL2BlockNumber(BlockNumber.ZERO);
1517
1509
  }
1518
1510
  // TODO(palla/reorg): Set the finalized block when we add support for it.
1519
1511
  // if (targetL2BlockNumber < currentFinalizedBlock) {
@@ -1561,7 +1553,7 @@ export class ArchiverStoreHelper
1561
1553
  * Extracts and stores contract classes out of ContractClassPublished events emitted by the class registry contract.
1562
1554
  * @param allLogs - All logs emitted in a bunch of blocks.
1563
1555
  */
1564
- async #updatePublishedContractClasses(allLogs: ContractClassLog[], blockNum: number, operation: Operation) {
1556
+ async #updatePublishedContractClasses(allLogs: ContractClassLog[], blockNum: BlockNumber, operation: Operation) {
1565
1557
  const contractClassPublishedEvents = allLogs
1566
1558
  .filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
1567
1559
  .map(log => ContractClassPublishedEvent.fromLog(log));
@@ -1586,7 +1578,7 @@ export class ArchiverStoreHelper
1586
1578
  * Extracts and stores contract instances out of ContractInstancePublished events emitted by the canonical deployer contract.
1587
1579
  * @param allLogs - All logs emitted in a bunch of blocks.
1588
1580
  */
1589
- async #updateDeployedContractInstances(allLogs: PrivateLog[], blockNum: number, operation: Operation) {
1581
+ async #updateDeployedContractInstances(allLogs: PrivateLog[], blockNum: BlockNumber, operation: Operation) {
1590
1582
  const contractInstances = allLogs
1591
1583
  .filter(log => ContractInstancePublishedEvent.isContractInstancePublishedEvent(log))
1592
1584
  .map(log => ContractInstancePublishedEvent.fromLog(log))
@@ -1639,7 +1631,7 @@ export class ArchiverStoreHelper
1639
1631
  * @param _blockNum - The block number
1640
1632
  * @returns
1641
1633
  */
1642
- async #storeBroadcastedIndividualFunctions(allLogs: ContractClassLog[], _blockNum: number) {
1634
+ async #storeBroadcastedIndividualFunctions(allLogs: ContractClassLog[], _blockNum: BlockNumber) {
1643
1635
  // Filter out private and utility function broadcast events
1644
1636
  const privateFnEvents = allLogs
1645
1637
  .filter(log => PrivateFunctionBroadcastedEvent.isPrivateFunctionBroadcastedEvent(log))
@@ -1729,7 +1721,7 @@ export class ArchiverStoreHelper
1729
1721
  });
1730
1722
  }
1731
1723
 
1732
- public async unwindBlocks(from: number, blocksToUnwind: number): Promise<boolean> {
1724
+ public async unwindBlocks(from: BlockNumber, blocksToUnwind: number): Promise<boolean> {
1733
1725
  const last = await this.getSynchedL2BlockNumber();
1734
1726
  if (from != last) {
1735
1727
  throw new Error(`Cannot unwind blocks from block ${from} when the last block is ${last}`);
@@ -1739,7 +1731,7 @@ export class ArchiverStoreHelper
1739
1731
  }
1740
1732
 
1741
1733
  // from - blocksToUnwind = the new head, so + 1 for what we need to remove
1742
- const blocks = await this.getPublishedBlocks(from - blocksToUnwind + 1, blocksToUnwind);
1734
+ const blocks = await this.getPublishedBlocks(BlockNumber(from - blocksToUnwind + 1), blocksToUnwind);
1743
1735
 
1744
1736
  const opResults = await Promise.all([
1745
1737
  // Prune rolls back to the last proven block, which is by definition valid
@@ -1771,10 +1763,10 @@ export class ArchiverStoreHelper
1771
1763
  return opResults.every(Boolean);
1772
1764
  }
1773
1765
 
1774
- getPublishedBlocks(from: number, limit: number): Promise<PublishedL2Block[]> {
1766
+ getPublishedBlocks(from: BlockNumber, limit: number): Promise<PublishedL2Block[]> {
1775
1767
  return this.store.getPublishedBlocks(from, limit);
1776
1768
  }
1777
- getPublishedBlock(number: number): Promise<PublishedL2Block | undefined> {
1769
+ getPublishedBlock(number: BlockNumber): Promise<PublishedL2Block | undefined> {
1778
1770
  return this.store.getPublishedBlock(number);
1779
1771
  }
1780
1772
  getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
@@ -1783,7 +1775,7 @@ export class ArchiverStoreHelper
1783
1775
  getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
1784
1776
  return this.store.getPublishedBlockByArchive(archive);
1785
1777
  }
1786
- getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]> {
1778
+ getBlockHeaders(from: BlockNumber, limit: number): Promise<BlockHeader[]> {
1787
1779
  return this.store.getBlockHeaders(from, limit);
1788
1780
  }
1789
1781
  getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
@@ -1801,13 +1793,13 @@ export class ArchiverStoreHelper
1801
1793
  addL1ToL2Messages(messages: InboxMessage[]): Promise<void> {
1802
1794
  return this.store.addL1ToL2Messages(messages);
1803
1795
  }
1804
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]> {
1796
+ getL1ToL2Messages(blockNumber: BlockNumber): Promise<Fr[]> {
1805
1797
  return this.store.getL1ToL2Messages(blockNumber);
1806
1798
  }
1807
1799
  getL1ToL2MessageIndex(l1ToL2Message: Fr): Promise<bigint | undefined> {
1808
1800
  return this.store.getL1ToL2MessageIndex(l1ToL2Message);
1809
1801
  }
1810
- getPrivateLogs(from: number, limit: number): Promise<PrivateLog[]> {
1802
+ getPrivateLogs(from: BlockNumber, limit: number): Promise<PrivateLog[]> {
1811
1803
  return this.store.getPrivateLogs(from, limit);
1812
1804
  }
1813
1805
  getLogsByTags(tags: Fr[], logsPerTag?: number): Promise<TxScopedL2Log[][]> {
@@ -1819,13 +1811,13 @@ export class ArchiverStoreHelper
1819
1811
  getContractClassLogs(filter: LogFilter): Promise<GetContractClassLogsResponse> {
1820
1812
  return this.store.getContractClassLogs(filter);
1821
1813
  }
1822
- getSynchedL2BlockNumber(): Promise<number> {
1814
+ getSynchedL2BlockNumber(): Promise<BlockNumber> {
1823
1815
  return this.store.getSynchedL2BlockNumber();
1824
1816
  }
1825
- getProvenL2BlockNumber(): Promise<number> {
1817
+ getProvenL2BlockNumber(): Promise<BlockNumber> {
1826
1818
  return this.store.getProvenL2BlockNumber();
1827
1819
  }
1828
- setProvenL2BlockNumber(l2BlockNumber: number): Promise<void> {
1820
+ setProvenL2BlockNumber(l2BlockNumber: BlockNumber): Promise<void> {
1829
1821
  return this.store.setProvenL2BlockNumber(l2BlockNumber);
1830
1822
  }
1831
1823
  setBlockSynchedL1BlockNumber(l1BlockNumber: bigint): Promise<void> {
@@ -1861,7 +1853,7 @@ export class ArchiverStoreHelper
1861
1853
  estimateSize(): Promise<{ mappingSize: number; physicalFileSize: number; actualSize: number; numItems: number }> {
1862
1854
  return this.store.estimateSize();
1863
1855
  }
1864
- rollbackL1ToL2MessagesToL2Block(targetBlockNumber: number): Promise<void> {
1856
+ rollbackL1ToL2MessagesToL2Block(targetBlockNumber: BlockNumber): Promise<void> {
1865
1857
  return this.store.rollbackL1ToL2MessagesToL2Block(targetBlockNumber);
1866
1858
  }
1867
1859
  iterateL1ToL2Messages(range: CustomRange<bigint> = {}): AsyncIterableIterator<InboxMessage> {
@@ -1,4 +1,5 @@
1
1
  import type { L1BlockId } from '@aztec/ethereum';
2
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
3
  import type { Fr } from '@aztec/foundation/fields';
3
4
  import type { CustomRange } from '@aztec/kv-store';
4
5
  import type { FunctionSelector } from '@aztec/stdlib/abi';
@@ -53,13 +54,13 @@ export interface ArchiverDataStore {
53
54
  * @param blocksToUnwind - The number of blocks we are to unwind
54
55
  * @returns True if the operation is successful
55
56
  */
56
- unwindBlocks(from: number, blocksToUnwind: number): Promise<boolean>;
57
+ unwindBlocks(from: BlockNumber, blocksToUnwind: number): Promise<boolean>;
57
58
 
58
59
  /**
59
60
  * Returns the block for the given number, or undefined if not exists.
60
61
  * @param number - The block number to return.
61
62
  */
62
- getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
63
+ getPublishedBlock(number: BlockNumber): Promise<PublishedL2Block | undefined>;
63
64
 
64
65
  /**
65
66
  * Returns the block for the given hash, or undefined if not exists.
@@ -79,7 +80,7 @@ export interface ArchiverDataStore {
79
80
  * @param limit - The number of blocks to return.
80
81
  * @returns The requested L2 blocks.
81
82
  */
82
- getPublishedBlocks(from: number, limit: number): Promise<PublishedL2Block[]>;
83
+ getPublishedBlocks(from: BlockNumber, limit: number): Promise<PublishedL2Block[]>;
83
84
 
84
85
  /**
85
86
  * Gets up to `limit` amount of L2 block headers starting from `from`.
@@ -87,7 +88,7 @@ export interface ArchiverDataStore {
87
88
  * @param limit - The number of blocks to return.
88
89
  * @returns The requested L2 block headers.
89
90
  */
90
- getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]>;
91
+ getBlockHeaders(from: BlockNumber, limit: number): Promise<BlockHeader[]>;
91
92
 
92
93
  /**
93
94
  * Returns the block header for the given hash, or undefined if not exists.
@@ -135,7 +136,7 @@ export interface ArchiverDataStore {
135
136
  * @param blockNumber - L2 block number to get messages for.
136
137
  * @returns The L1 to L2 messages/leaves of the messages subtree (throws if not found).
137
138
  */
138
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]>;
139
+ getL1ToL2Messages(blockNumber: BlockNumber): Promise<Fr[]>;
139
140
 
140
141
  /**
141
142
  * Gets the L1 to L2 message index in the L1 to L2 message tree.
@@ -156,7 +157,7 @@ export interface ArchiverDataStore {
156
157
  * @param limit - The maximum number of blocks to retrieve logs from.
157
158
  * @returns An array of private logs from the specified range of blocks.
158
159
  */
159
- getPrivateLogs(from: number, limit: number): Promise<PrivateLog[]>;
160
+ getPrivateLogs(from: BlockNumber, limit: number): Promise<PrivateLog[]>;
160
161
 
161
162
  /**
162
163
  * Gets all logs that match any of the received tags (i.e. logs with their first field equal to a tag).
@@ -185,19 +186,19 @@ export interface ArchiverDataStore {
185
186
  * Gets the number of the latest L2 block processed.
186
187
  * @returns The number of the latest L2 block processed.
187
188
  */
188
- getSynchedL2BlockNumber(): Promise<number>;
189
+ getSynchedL2BlockNumber(): Promise<BlockNumber>;
189
190
 
190
191
  /**
191
192
  * Gets the number of the latest proven L2 block processed.
192
193
  * @returns The number of the latest proven L2 block processed.
193
194
  */
194
- getProvenL2BlockNumber(): Promise<number>;
195
+ getProvenL2BlockNumber(): Promise<BlockNumber>;
195
196
 
196
197
  /**
197
198
  * Stores the number of the latest proven L2 block processed.
198
199
  * @param l2BlockNumber - The number of the latest proven L2 block processed.
199
200
  */
200
- setProvenL2BlockNumber(l2BlockNumber: number): Promise<void>;
201
+ setProvenL2BlockNumber(l2BlockNumber: BlockNumber): Promise<void>;
201
202
 
202
203
  /**
203
204
  * Stores the l1 block number that blocks have been synched until
@@ -221,9 +222,13 @@ export interface ArchiverDataStore {
221
222
  * @param blockNumber - Number of the L2 block the contracts were registered in.
222
223
  * @returns True if the operation is successful.
223
224
  */
224
- addContractClasses(data: ContractClassPublic[], bytecodeCommitments: Fr[], blockNumber: number): Promise<boolean>;
225
+ addContractClasses(
226
+ data: ContractClassPublic[],
227
+ bytecodeCommitments: Fr[],
228
+ blockNumber: BlockNumber,
229
+ ): Promise<boolean>;
225
230
 
226
- deleteContractClasses(data: ContractClassPublic[], blockNumber: number): Promise<boolean>;
231
+ deleteContractClasses(data: ContractClassPublic[], blockNumber: BlockNumber): Promise<boolean>;
227
232
 
228
233
  getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
229
234
 
@@ -239,8 +244,8 @@ export interface ArchiverDataStore {
239
244
  * @param blockNumber - Number of the L2 block the instances were deployed in.
240
245
  * @returns True if the operation is successful.
241
246
  */
242
- addContractInstances(data: ContractInstanceWithAddress[], blockNumber: number): Promise<boolean>;
243
- deleteContractInstances(data: ContractInstanceWithAddress[], blockNumber: number): Promise<boolean>;
247
+ addContractInstances(data: ContractInstanceWithAddress[], blockNumber: BlockNumber): Promise<boolean>;
248
+ deleteContractInstances(data: ContractInstanceWithAddress[], blockNumber: BlockNumber): Promise<boolean>;
244
249
 
245
250
  /**
246
251
  * Add new contract instance updates
@@ -286,7 +291,7 @@ export interface ArchiverDataStore {
286
291
  close(): Promise<void>;
287
292
 
288
293
  /** Deletes all L1 to L2 messages up until (excluding) the target L2 block number. */
289
- rollbackL1ToL2MessagesToL2Block(targetBlockNumber: number): Promise<void>;
294
+ rollbackL1ToL2MessagesToL2Block(targetBlockNumber: BlockNumber): Promise<void>;
290
295
 
291
296
  /** Returns an async iterator to all L1 to L2 messages on the range. */
292
297
  iterateL1ToL2Messages(range?: CustomRange<bigint>): AsyncIterableIterator<InboxMessage>;