@aztec/archiver 0.0.1-commit.8c0b8ff → 0.0.1-commit.8cb2d04d8

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 (87) hide show
  1. package/README.md +12 -6
  2. package/dest/archiver.d.ts +6 -5
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +11 -5
  5. package/dest/config.d.ts +3 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +3 -2
  8. package/dest/errors.d.ts +28 -2
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +36 -2
  11. package/dest/factory.d.ts +2 -2
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +1 -3
  14. package/dest/l1/calldata_retriever.d.ts +1 -1
  15. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  16. package/dest/l1/calldata_retriever.js +2 -1
  17. package/dest/l1/data_retrieval.d.ts +8 -5
  18. package/dest/l1/data_retrieval.d.ts.map +1 -1
  19. package/dest/l1/data_retrieval.js +26 -21
  20. package/dest/modules/data_source_base.d.ts +6 -4
  21. package/dest/modules/data_source_base.d.ts.map +1 -1
  22. package/dest/modules/data_source_base.js +10 -4
  23. package/dest/modules/data_store_updater.d.ts +5 -7
  24. package/dest/modules/data_store_updater.d.ts.map +1 -1
  25. package/dest/modules/data_store_updater.js +14 -56
  26. package/dest/modules/instrumentation.d.ts +15 -2
  27. package/dest/modules/instrumentation.d.ts.map +1 -1
  28. package/dest/modules/instrumentation.js +27 -6
  29. package/dest/modules/l1_synchronizer.d.ts +3 -2
  30. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  31. package/dest/modules/l1_synchronizer.js +143 -131
  32. package/dest/modules/validation.d.ts +1 -1
  33. package/dest/modules/validation.d.ts.map +1 -1
  34. package/dest/modules/validation.js +2 -2
  35. package/dest/store/block_store.d.ts +38 -4
  36. package/dest/store/block_store.d.ts.map +1 -1
  37. package/dest/store/block_store.js +187 -63
  38. package/dest/store/contract_class_store.d.ts +2 -3
  39. package/dest/store/contract_class_store.d.ts.map +1 -1
  40. package/dest/store/contract_class_store.js +1 -65
  41. package/dest/store/kv_archiver_store.d.ts +28 -13
  42. package/dest/store/kv_archiver_store.d.ts.map +1 -1
  43. package/dest/store/kv_archiver_store.js +33 -14
  44. package/dest/store/l2_tips_cache.d.ts +2 -1
  45. package/dest/store/l2_tips_cache.d.ts.map +1 -1
  46. package/dest/store/l2_tips_cache.js +27 -7
  47. package/dest/store/log_store.d.ts +6 -3
  48. package/dest/store/log_store.d.ts.map +1 -1
  49. package/dest/store/log_store.js +47 -10
  50. package/dest/store/message_store.d.ts +5 -1
  51. package/dest/store/message_store.d.ts.map +1 -1
  52. package/dest/store/message_store.js +20 -8
  53. package/dest/test/fake_l1_state.d.ts +2 -1
  54. package/dest/test/fake_l1_state.d.ts.map +1 -1
  55. package/dest/test/fake_l1_state.js +36 -6
  56. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  57. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  58. package/dest/test/mock_l1_to_l2_message_source.js +2 -1
  59. package/dest/test/mock_l2_block_source.d.ts +7 -2
  60. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  61. package/dest/test/mock_l2_block_source.js +28 -3
  62. package/dest/test/noop_l1_archiver.d.ts +1 -1
  63. package/dest/test/noop_l1_archiver.d.ts.map +1 -1
  64. package/dest/test/noop_l1_archiver.js +0 -1
  65. package/package.json +13 -13
  66. package/src/archiver.ts +19 -10
  67. package/src/config.ts +9 -2
  68. package/src/errors.ts +60 -2
  69. package/src/factory.ts +1 -3
  70. package/src/l1/calldata_retriever.ts +2 -1
  71. package/src/l1/data_retrieval.ts +25 -21
  72. package/src/modules/data_source_base.ts +23 -4
  73. package/src/modules/data_store_updater.ts +17 -83
  74. package/src/modules/instrumentation.ts +39 -7
  75. package/src/modules/l1_synchronizer.ts +166 -168
  76. package/src/modules/validation.ts +2 -2
  77. package/src/store/block_store.ts +243 -73
  78. package/src/store/contract_class_store.ts +1 -103
  79. package/src/store/kv_archiver_store.ts +52 -24
  80. package/src/store/l2_tips_cache.ts +58 -13
  81. package/src/store/log_store.ts +62 -20
  82. package/src/store/message_store.ts +26 -9
  83. package/src/structs/inbox_message.ts +1 -1
  84. package/src/test/fake_l1_state.ts +53 -9
  85. package/src/test/mock_l1_to_l2_message_source.ts +1 -0
  86. package/src/test/mock_l2_block_source.ts +37 -2
  87. package/src/test/noop_l1_archiver.ts +0 -1
@@ -1,4 +1,5 @@
1
1
  import { getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
2
+ import { INITIAL_CHECKPOINT_NUMBER } from '@aztec/constants';
2
3
  import { MULTI_CALL_3_ADDRESS } from '@aztec/ethereum/contracts';
3
4
  import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
5
  import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
@@ -291,14 +292,26 @@ import { updateRollingHash } from '../structs/inbox_message.js';
291
292
  }
292
293
  /** Creates mock InboxContract that reads from this fake state. */ createMockInboxContract(_publicClient) {
293
294
  const mockInbox = mock();
294
- mockInbox.getState.mockImplementation(()=>Promise.resolve({
295
- messagesRollingHash: this.messagesRollingHash,
296
- totalMessagesInserted: BigInt(this.messages.length),
297
- treeInProgress: 0n
298
- }));
295
+ mockInbox.getState.mockImplementation((opts = {})=>{
296
+ // Filter messages visible at the given block number (or all if not specified)
297
+ const blockNumber = opts.blockNumber ?? this.l1BlockNumber;
298
+ const visibleMessages = this.messages.filter((m)=>m.l1BlockNumber <= blockNumber);
299
+ // treeInProgress must be > any sealed checkpoint. On L1, a checkpoint can only be proposed
300
+ // after its messages are sealed, so treeInProgress > checkpointNumber for all published checkpoints.
301
+ const maxFromMessages = visibleMessages.length > 0 ? Math.max(...visibleMessages.map((m)=>Number(m.checkpointNumber))) + 1 : 0;
302
+ const maxFromCheckpoints = this.checkpoints.length > 0 ? Math.max(...this.checkpoints.filter((cp)=>!cp.pruned && cp.l1BlockNumber <= blockNumber).map((cp)=>Number(cp.checkpointNumber)), 0) + 1 : 0;
303
+ const treeInProgress = Math.max(maxFromMessages, maxFromCheckpoints, INITIAL_CHECKPOINT_NUMBER);
304
+ // Compute rolling hash only for visible messages
305
+ const rollingHash = visibleMessages.length > 0 ? visibleMessages[visibleMessages.length - 1].rollingHash : Buffer16.ZERO;
306
+ return Promise.resolve({
307
+ messagesRollingHash: rollingHash,
308
+ totalMessagesInserted: BigInt(visibleMessages.length),
309
+ treeInProgress: BigInt(treeInProgress)
310
+ });
311
+ });
299
312
  // Mock the wrapper methods for fetching message events
300
313
  mockInbox.getMessageSentEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock)));
301
- mockInbox.getMessageSentEventByHash.mockImplementation((hash, fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock, hash)));
314
+ mockInbox.getMessageSentEventByHash.mockImplementation((msgHash, l1BlockHash)=>Promise.resolve(this.getMessageSentLogByHash(msgHash, l1BlockHash)));
302
315
  return mockInbox;
303
316
  }
304
317
  /** Creates mock PublicClient that reads from this fake state. */ createMockPublicClient() {
@@ -376,6 +389,23 @@ import { updateRollingHash } from '../structs/inbox_message.js';
376
389
  }
377
390
  }));
378
391
  }
392
+ getMessageSentLogByHash(msgHash, l1BlockHash) {
393
+ const msg = this.messages.find((msg)=>msg.leaf.toString() === msgHash && Buffer32.fromBigInt(msg.l1BlockNumber).toString() === l1BlockHash);
394
+ if (!msg) {
395
+ return undefined;
396
+ }
397
+ return {
398
+ l1BlockNumber: msg.l1BlockNumber,
399
+ l1BlockHash: Buffer32.fromBigInt(msg.l1BlockNumber),
400
+ l1TransactionHash: `0x${msg.l1BlockNumber.toString(16)}`,
401
+ args: {
402
+ checkpointNumber: msg.checkpointNumber,
403
+ index: msg.index,
404
+ leaf: msg.leaf,
405
+ rollingHash: msg.rollingHash
406
+ }
407
+ };
408
+ }
379
409
  async makeRollupTx(checkpoint, signers) {
380
410
  const attestations = signers.map((signer)=>makeCheckpointAttestationFromCheckpoint(checkpoint, signer)).map((attestation)=>CommitteeAttestation.fromSignature(attestation.signature)).map((committeeAttestation)=>committeeAttestation.toViem());
381
411
  const header = checkpoint.header.toViem();
@@ -16,4 +16,4 @@ export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
16
16
  getBlockNumber(): Promise<BlockNumber>;
17
17
  getL2Tips(): Promise<L2Tips>;
18
18
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWMzQjtDQUNGIn0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWUzQjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAc3B;CACF"}
1
+ {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAe3B;CACF"}
@@ -42,7 +42,8 @@ import { Fr } from '@aztec/foundation/curves/bn254';
42
42
  proposed: blockId,
43
43
  checkpointed: tip,
44
44
  proven: tip,
45
- finalized: tip
45
+ finalized: tip,
46
+ proposedCheckpoint: tip
46
47
  });
47
48
  }
48
49
  }
@@ -4,7 +4,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import type { FunctionSelector } from '@aztec/stdlib/abi';
5
5
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
6
  import { type BlockData, BlockHash, CheckpointedL2Block, L2Block, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
7
- import { Checkpoint, type CheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
7
+ import { Checkpoint, type CheckpointData, type ProposedCheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
8
8
  import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
9
9
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
10
10
  import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
@@ -18,6 +18,7 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
18
18
  private provenBlockNumber;
19
19
  private finalizedBlockNumber;
20
20
  private checkpointedBlockNumber;
21
+ private proposedCheckpointBlockNumber;
21
22
  private log;
22
23
  /** Creates blocks grouped into single-block checkpoints. */
23
24
  createBlocks(numBlocks: number): Promise<void>;
@@ -28,6 +29,7 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
28
29
  removeBlocks(numBlocks: number): void;
29
30
  setProvenBlockNumber(provenBlockNumber: number): void;
30
31
  setFinalizedBlockNumber(finalizedBlockNumber: number): void;
32
+ setProposedCheckpointBlockNumber(blockNumber: number): void;
31
33
  setCheckpointedBlockNumber(checkpointedBlockNumber: number): void;
32
34
  /**
33
35
  * Method to fetch the rollup contract address at the base-layer.
@@ -47,6 +49,7 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
47
49
  getProvenBlockNumber(): Promise<BlockNumber>;
48
50
  getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
49
51
  getFinalizedL2BlockNumber(): Promise<BlockNumber>;
52
+ getProposedCheckpointL2BlockNumber(): Promise<BlockNumber>;
50
53
  getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
51
54
  getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
52
55
  /**
@@ -129,6 +132,8 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
129
132
  syncImmediate(): Promise<void>;
130
133
  isPendingChainInvalid(): Promise<boolean>;
131
134
  getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
135
+ getProposedCheckpoint(): Promise<ProposedCheckpointData | undefined>;
136
+ getProposedCheckpointOnly(): Promise<ProposedCheckpointData | undefined>;
132
137
  /** Returns checkpoints whose slot falls within the given epoch. */
133
138
  private getCheckpointsInEpoch;
134
139
  /** Creates a mock L1PublishedData for a checkpoint. */
@@ -138,4 +143,4 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
138
143
  /** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */
139
144
  private findCheckpointNumberForBlock;
140
145
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxTQUFTLEVBQ2QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLGNBQWMsRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqSCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFFTCxLQUFLLGlCQUFpQixFQUd2QixNQUFNLDZCQUE2QixDQUFDO0FBR3JDLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BHLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gscUJBQWEsaUJBQWtCLFlBQVcsYUFBYSxFQUFFLGtCQUFrQjtJQUN6RSxT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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxTQUFTLEVBQ2QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLGNBQWMsRUFFbkIsS0FBSyxzQkFBc0IsRUFDM0IsbUJBQW1CLEVBQ3BCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuSCxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFHdkIsTUFBTSw2QkFBNkIsQ0FBQztBQUdyQyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRDs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLGFBQWEs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
@@ -1 +1 @@
1
- {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
19
19
  provenBlockNumber = 0;
20
20
  finalizedBlockNumber = 0;
21
21
  checkpointedBlockNumber = 0;
22
+ proposedCheckpointBlockNumber = 0;
22
23
  log = createLogger('archiver:mock_l2_block_source');
23
24
  /** Creates blocks grouped into single-block checkpoints. */ async createBlocks(numBlocks) {
24
25
  await this.createCheckpoints(numBlocks, 1);
@@ -56,6 +57,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
56
57
  });
57
58
  // Keep tip numbers consistent with remaining blocks.
58
59
  this.checkpointedBlockNumber = Math.min(this.checkpointedBlockNumber, maxBlockNum);
60
+ this.proposedCheckpointBlockNumber = Math.min(this.proposedCheckpointBlockNumber, maxBlockNum);
59
61
  this.provenBlockNumber = Math.min(this.provenBlockNumber, maxBlockNum);
60
62
  this.finalizedBlockNumber = Math.min(this.finalizedBlockNumber, maxBlockNum);
61
63
  this.log.verbose(`Removed ${numBlocks} blocks from the mock L2 block source`);
@@ -69,9 +71,16 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
69
71
  }
70
72
  this.finalizedBlockNumber = finalizedBlockNumber;
71
73
  }
74
+ setProposedCheckpointBlockNumber(blockNumber) {
75
+ this.proposedCheckpointBlockNumber = blockNumber;
76
+ }
72
77
  setCheckpointedBlockNumber(checkpointedBlockNumber) {
73
78
  const prevCheckpointed = this.checkpointedBlockNumber;
74
79
  this.checkpointedBlockNumber = checkpointedBlockNumber;
80
+ // Proposed checkpoint is always at least as advanced as checkpointed
81
+ if (this.proposedCheckpointBlockNumber < checkpointedBlockNumber) {
82
+ this.proposedCheckpointBlockNumber = checkpointedBlockNumber;
83
+ }
75
84
  // Auto-create single-block checkpoints for newly checkpointed blocks that don't have one yet.
76
85
  // This handles blocks added via addProposedBlocks that are now being marked as checkpointed.
77
86
  const newCheckpoints = [];
@@ -124,6 +133,9 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
124
133
  getFinalizedL2BlockNumber() {
125
134
  return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
126
135
  }
136
+ getProposedCheckpointL2BlockNumber() {
137
+ return Promise.resolve(BlockNumber(this.proposedCheckpointBlockNumber));
138
+ }
127
139
  getCheckpointedBlock(number) {
128
140
  if (number > this.checkpointedBlockNumber) {
129
141
  return Promise.resolve(undefined);
@@ -315,16 +327,18 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
315
327
  return undefined;
316
328
  }
317
329
  async getL2Tips() {
318
- const [latest, proven, finalized, checkpointed] = [
330
+ const [latest, proven, finalized, checkpointed, proposedCheckpoint] = [
319
331
  await this.getBlockNumber(),
320
332
  await this.getProvenBlockNumber(),
321
333
  this.finalizedBlockNumber,
322
- this.checkpointedBlockNumber
334
+ this.checkpointedBlockNumber,
335
+ await this.getProposedCheckpointL2BlockNumber()
323
336
  ];
324
337
  const latestBlock = this.l2Blocks[latest - 1];
325
338
  const provenBlock = this.l2Blocks[proven - 1];
326
339
  const finalizedBlock = this.l2Blocks[finalized - 1];
327
340
  const checkpointedBlock = this.l2Blocks[checkpointed - 1];
341
+ const proposedCheckpointBlock = this.l2Blocks[proposedCheckpoint - 1];
328
342
  const latestBlockId = {
329
343
  number: BlockNumber(latest),
330
344
  hash: (await latestBlock?.hash())?.toString()
@@ -341,6 +355,10 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
341
355
  number: BlockNumber(checkpointed),
342
356
  hash: (await checkpointedBlock?.hash())?.toString()
343
357
  };
358
+ const proposedCheckpointBlockId = {
359
+ number: BlockNumber(proposedCheckpoint),
360
+ hash: (await proposedCheckpointBlock?.hash())?.toString()
361
+ };
344
362
  const makeTipId = (blockId)=>({
345
363
  block: blockId,
346
364
  checkpoint: {
@@ -352,7 +370,8 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
352
370
  proposed: latestBlockId,
353
371
  checkpointed: makeTipId(checkpointedBlockId),
354
372
  proven: makeTipId(provenBlockId),
355
- finalized: makeTipId(finalizedBlockId)
373
+ finalized: makeTipId(finalizedBlockId),
374
+ proposedCheckpoint: makeTipId(proposedCheckpointBlockId)
356
375
  };
357
376
  }
358
377
  getSyncedL2EpochNumber() {
@@ -418,6 +437,12 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
418
437
  valid: true
419
438
  });
420
439
  }
440
+ getProposedCheckpoint() {
441
+ return Promise.resolve(undefined);
442
+ }
443
+ getProposedCheckpointOnly() {
444
+ return Promise.resolve(undefined);
445
+ }
421
446
  /** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
422
447
  const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
423
448
  const [start, end] = getSlotRangeForEpoch(epochNumber, {
@@ -23,4 +23,4 @@ export declare class NoopL1Archiver extends Archiver {
23
23
  export declare function createNoopL1Archiver(dataStore: KVArchiverDataStore, l1Constants: L1RollupConstants & {
24
24
  genesisArchiveRoot: Fr;
25
25
  }, telemetry?: TelemetryClient): Promise<NoopL1Archiver>;
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBS2hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBeUJ6RTs7OztHQUlHO0FBQ0gscUJBQWEsY0FBZSxTQUFRLFFBQVE7SUFDMUMsWUFDRSxTQUFTLEVBQUUsbUJBQW1CLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztRQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQzNELGVBQWUsRUFBRSx1QkFBdUIsRUF1Q3pDO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxTQUFTLEVBQUUsbUJBQW1CLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsR0FBRSxlQUFzQyxHQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFDLENBR3pCIn0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBS2hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBeUJ6RTs7OztHQUlHO0FBQ0gscUJBQWEsY0FBZSxTQUFRLFFBQVE7SUFDMUMsWUFDRSxTQUFTLEVBQUUsbUJBQW1CLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztRQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQzNELGVBQWUsRUFBRSx1QkFBdUIsRUFzQ3pDO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxTQUFTLEVBQUUsbUJBQW1CLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsR0FBRSxlQUFzQyxHQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFDLENBR3pCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,yBAAyB,CAAC;AAKhG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAyBzE;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EAuCzC;IAED,mDAAmD;IACnC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;IAED,6EAA6E;IAC7D,qBAAqB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAEvE;CACF;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,cAAc,CAAC,CAGzB"}
1
+ {"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,yBAAyB,CAAC;AAKhG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAyBzE;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EAsCzC;IAED,mDAAmD;IACnC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;IAED,6EAA6E;IAC7D,qBAAqB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAEvE;CACF;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,cAAc,CAAC,CAGzB"}
@@ -44,7 +44,6 @@ import { ArchiverInstrumentation } from '../modules/instrumentation.js';
44
44
  super(publicClient, debugClient, rollup, {
45
45
  registryAddress: EthAddress.ZERO,
46
46
  governanceProposerAddress: EthAddress.ZERO,
47
- slashFactoryAddress: EthAddress.ZERO,
48
47
  slashingProposerAddress: EthAddress.ZERO
49
48
  }, dataStore, {
50
49
  pollingIntervalMs: 1000,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/archiver",
3
- "version": "0.0.1-commit.8c0b8ff",
3
+ "version": "0.0.1-commit.8cb2d04d8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -65,18 +65,18 @@
65
65
  ]
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/blob-client": "0.0.1-commit.8c0b8ff",
69
- "@aztec/blob-lib": "0.0.1-commit.8c0b8ff",
70
- "@aztec/constants": "0.0.1-commit.8c0b8ff",
71
- "@aztec/epoch-cache": "0.0.1-commit.8c0b8ff",
72
- "@aztec/ethereum": "0.0.1-commit.8c0b8ff",
73
- "@aztec/foundation": "0.0.1-commit.8c0b8ff",
74
- "@aztec/kv-store": "0.0.1-commit.8c0b8ff",
75
- "@aztec/l1-artifacts": "0.0.1-commit.8c0b8ff",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.8c0b8ff",
77
- "@aztec/protocol-contracts": "0.0.1-commit.8c0b8ff",
78
- "@aztec/stdlib": "0.0.1-commit.8c0b8ff",
79
- "@aztec/telemetry-client": "0.0.1-commit.8c0b8ff",
68
+ "@aztec/blob-client": "0.0.1-commit.8cb2d04d8",
69
+ "@aztec/blob-lib": "0.0.1-commit.8cb2d04d8",
70
+ "@aztec/constants": "0.0.1-commit.8cb2d04d8",
71
+ "@aztec/epoch-cache": "0.0.1-commit.8cb2d04d8",
72
+ "@aztec/ethereum": "0.0.1-commit.8cb2d04d8",
73
+ "@aztec/foundation": "0.0.1-commit.8cb2d04d8",
74
+ "@aztec/kv-store": "0.0.1-commit.8cb2d04d8",
75
+ "@aztec/l1-artifacts": "0.0.1-commit.8cb2d04d8",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.8cb2d04d8",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.8cb2d04d8",
78
+ "@aztec/stdlib": "0.0.1-commit.8cb2d04d8",
79
+ "@aztec/telemetry-client": "0.0.1-commit.8cb2d04d8",
80
80
  "lodash.groupby": "^4.6.0",
81
81
  "lodash.omit": "^4.5.0",
82
82
  "tslib": "^2.5.0",
package/src/archiver.ts CHANGED
@@ -11,7 +11,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
11
11
  import { type Logger, createLogger } from '@aztec/foundation/log';
12
12
  import { type PromiseWithResolvers, promiseWithResolvers } from '@aztec/foundation/promise';
13
13
  import { RunningPromise, makeLoggingErrorHandler } from '@aztec/foundation/running-promise';
14
- import { DateProvider } from '@aztec/foundation/timer';
14
+ import { DateProvider, elapsed } from '@aztec/foundation/timer';
15
15
  import {
16
16
  type ArchiverEmitter,
17
17
  L2Block,
@@ -19,7 +19,7 @@ import {
19
19
  type L2Tips,
20
20
  type ValidateCheckpointResult,
21
21
  } from '@aztec/stdlib/block';
22
- import { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
22
+ import { type ProposedCheckpointInput, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
23
23
  import {
24
24
  type L1RollupConstants,
25
25
  getEpochAtSlot,
@@ -85,17 +85,18 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
85
85
 
86
86
  public readonly tracer: Tracer;
87
87
 
88
+ private readonly instrumentation: ArchiverInstrumentation;
89
+
88
90
  /**
89
91
  * Creates a new instance of the Archiver.
90
92
  * @param publicClient - A client for interacting with the Ethereum node.
91
93
  * @param debugClient - A client for interacting with the Ethereum node for debug/trace methods.
92
94
  * @param rollup - Rollup contract instance.
93
95
  * @param inbox - Inbox contract instance.
94
- * @param l1Addresses - L1 contract addresses (registry, governance proposer, slash factory, slashing proposer).
96
+ * @param l1Addresses - L1 contract addresses (registry, governance proposer, slashing proposer).
95
97
  * @param dataStore - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
96
98
  * @param config - Archiver configuration options.
97
99
  * @param blobClient - Client for retrieving blob data.
98
- * @param epochCache - Cache for epoch-related data.
99
100
  * @param dateProvider - Provider for current date/time.
100
101
  * @param instrumentation - Instrumentation for metrics and tracing.
101
102
  * @param l1Constants - L1 rollup constants.
@@ -105,10 +106,9 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
105
106
  private readonly publicClient: ViemPublicClient,
106
107
  private readonly debugClient: ViemPublicDebugClient,
107
108
  private readonly rollup: RollupContract,
108
- private readonly l1Addresses: Pick<
109
- L1ContractAddresses,
110
- 'registryAddress' | 'governanceProposerAddress' | 'slashFactoryAddress'
111
- > & { slashingProposerAddress: EthAddress },
109
+ private readonly l1Addresses: Pick<L1ContractAddresses, 'registryAddress' | 'governanceProposerAddress'> & {
110
+ slashingProposerAddress: EthAddress;
111
+ },
112
112
  readonly dataStore: KVArchiverDataStore,
113
113
  private config: {
114
114
  pollingIntervalMs: number;
@@ -131,6 +131,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
131
131
  super(dataStore, l1Constants);
132
132
 
133
133
  this.tracer = instrumentation.tracer;
134
+ this.instrumentation = instrumentation;
134
135
  this.initialSyncPromise = promiseWithResolvers();
135
136
  this.synchronizer = synchronizer;
136
137
  this.events = events;
@@ -210,6 +211,10 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
210
211
  });
211
212
  }
212
213
 
214
+ public async setProposedCheckpoint(pending: ProposedCheckpointInput): Promise<void> {
215
+ await this.updater.setProposedCheckpoint(pending);
216
+ }
217
+
213
218
  /**
214
219
  * Processes all queued blocks, adding them to the store.
215
220
  * Called at the beginning of each sync iteration.
@@ -242,7 +247,8 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
242
247
  }
243
248
 
244
249
  try {
245
- await this.updater.addProposedBlock(block);
250
+ const [durationMs] = await elapsed(() => this.updater.addProposedBlock(block));
251
+ this.instrumentation.processNewProposedBlock(durationMs, block);
246
252
  this.log.debug(`Added block ${block.number} to store`);
247
253
  resolve();
248
254
  } catch (err: any) {
@@ -487,7 +493,10 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
487
493
  await this.store.rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber);
488
494
  this.log.info(`Setting L1 syncpoints to ${targetL1BlockNumber}`);
489
495
  await this.store.setCheckpointSynchedL1BlockNumber(targetL1BlockNumber);
490
- await this.store.setMessageSynchedL1Block({ l1BlockNumber: targetL1BlockNumber, l1BlockHash: targetL1BlockHash });
496
+ await this.store.setMessageSyncState(
497
+ { l1BlockNumber: targetL1BlockNumber, l1BlockHash: targetL1BlockHash },
498
+ undefined,
499
+ );
491
500
  if (targetL2BlockNumber < currentProvenBlock) {
492
501
  this.log.info(`Rolling back proven L2 checkpoint to ${targetCheckpointNumber}`);
493
502
  await this.updater.setProvenCheckpointNumber(targetCheckpointNumber);
package/src/config.ts CHANGED
@@ -8,7 +8,12 @@ import {
8
8
  getConfigFromMappings,
9
9
  numberConfigHelper,
10
10
  } from '@aztec/foundation/config';
11
- import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
11
+ import {
12
+ type ChainConfig,
13
+ type PipelineConfig,
14
+ chainConfigMappings,
15
+ pipelineConfigMappings,
16
+ } from '@aztec/stdlib/config';
12
17
  import type { ArchiverSpecificConfig } from '@aztec/stdlib/interfaces/server';
13
18
 
14
19
  /**
@@ -21,11 +26,13 @@ import type { ArchiverSpecificConfig } from '@aztec/stdlib/interfaces/server';
21
26
  export type ArchiverConfig = ArchiverSpecificConfig &
22
27
  L1ReaderConfig &
23
28
  L1ContractsConfig &
29
+ PipelineConfig & // required to pass through to epoch cache
24
30
  BlobClientConfig &
25
31
  ChainConfig;
26
32
 
27
33
  export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
28
34
  ...blobClientConfigMapping,
35
+ ...pipelineConfigMappings,
29
36
  archiverPollingIntervalMS: {
30
37
  env: 'ARCHIVER_POLLING_INTERVAL_MS',
31
38
  description: 'The polling interval in ms for retrieving new L2 blocks and encrypted logs.',
@@ -43,7 +50,7 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
43
50
  },
44
51
  archiverStoreMapSizeKb: {
45
52
  env: 'ARCHIVER_STORE_MAP_SIZE_KB',
46
- parseEnv: (val: string | undefined) => (val ? +val : undefined),
53
+ parseEnv: (val: string) => +val,
47
54
  description: 'The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb.',
48
55
  },
49
56
  skipValidateCheckpointAttestations: {
package/src/errors.ts CHANGED
@@ -26,9 +26,13 @@ export class InitialCheckpointNumberNotSequentialError extends Error {
26
26
  }
27
27
 
28
28
  export class CheckpointNumberNotSequentialError extends Error {
29
- constructor(newCheckpointNumber: number, previous: number | undefined) {
29
+ constructor(
30
+ newCheckpointNumber: number,
31
+ previous: number | undefined,
32
+ source: 'confirmed' | 'proposed' = 'confirmed',
33
+ ) {
30
34
  super(
31
- `Cannot insert new checkpoint ${newCheckpointNumber} given previous checkpoint number in batch is ${previous ?? 'undefined'}`,
35
+ `Cannot insert new checkpoint ${newCheckpointNumber} given previous ${source} checkpoint number is ${previous ?? 'undefined'}`,
32
36
  );
33
37
  }
34
38
  }
@@ -74,6 +78,60 @@ export class BlockAlreadyCheckpointedError extends Error {
74
78
  }
75
79
  }
76
80
 
81
+ /** Thrown when logs are added for a tag whose last stored log has a higher block number than the new log. */
82
+ export class OutOfOrderLogInsertionError extends Error {
83
+ constructor(
84
+ public readonly logType: 'private' | 'public',
85
+ public readonly tag: string,
86
+ public readonly lastBlockNumber: number,
87
+ public readonly newBlockNumber: number,
88
+ ) {
89
+ super(
90
+ `Out-of-order ${logType} log insertion for tag ${tag}: ` +
91
+ `last existing log is from block ${lastBlockNumber} but new log is from block ${newBlockNumber}`,
92
+ );
93
+ this.name = 'OutOfOrderLogInsertionError';
94
+ }
95
+ }
96
+
97
+ /** Thrown when L1 to L2 messages are requested for a checkpoint whose message tree hasn't been sealed yet. */
98
+ export class L1ToL2MessagesNotReadyError extends Error {
99
+ constructor(
100
+ public readonly checkpointNumber: number,
101
+ public readonly inboxTreeInProgress: bigint,
102
+ ) {
103
+ super(
104
+ `Cannot get L1 to L2 messages for checkpoint ${checkpointNumber}: ` +
105
+ `inbox tree in progress is ${inboxTreeInProgress}, messages not yet sealed`,
106
+ );
107
+ this.name = 'L1ToL2MessagesNotReadyError';
108
+ }
109
+ }
110
+
111
+ /** Thrown when a proposed checkpoint number is stale (already processed). */
112
+ export class ProposedCheckpointStaleError extends Error {
113
+ constructor(
114
+ public readonly proposedCheckpointNumber: number,
115
+ public readonly currentProposedNumber: number,
116
+ ) {
117
+ super(`Stale proposed checkpoint ${proposedCheckpointNumber}: current proposed is ${currentProposedNumber}`);
118
+ this.name = 'ProposedCheckpointStaleError';
119
+ }
120
+ }
121
+
122
+ /** Thrown when a proposed checkpoint number is not the expected confirmed + 1. */
123
+ export class ProposedCheckpointNotSequentialError extends Error {
124
+ constructor(
125
+ public readonly proposedCheckpointNumber: number,
126
+ public readonly confirmedCheckpointNumber: number,
127
+ ) {
128
+ super(
129
+ `Proposed checkpoint ${proposedCheckpointNumber} is not sequential: expected ${confirmedCheckpointNumber + 1} (confirmed + 1)`,
130
+ );
131
+ this.name = 'ProposedCheckpointNotSequentialError';
132
+ }
133
+ }
134
+
77
135
  /** Thrown when a proposed block conflicts with an already checkpointed block (different content). */
78
136
  export class CannotOverwriteCheckpointedBlockError extends Error {
79
137
  constructor(
package/src/factory.ts CHANGED
@@ -8,13 +8,13 @@ import { Buffer32 } from '@aztec/foundation/buffer';
8
8
  import { merge } from '@aztec/foundation/collection';
9
9
  import { Fr } from '@aztec/foundation/curves/bn254';
10
10
  import { DateProvider } from '@aztec/foundation/timer';
11
- import type { DataStoreConfig } from '@aztec/kv-store/config';
12
11
  import { createStore } from '@aztec/kv-store/lmdb-v2';
13
12
  import { protocolContractNames } from '@aztec/protocol-contracts';
14
13
  import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
15
14
  import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
16
15
  import type { ArchiverEmitter } from '@aztec/stdlib/block';
17
16
  import { type ContractClassPublicWithCommitment, computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
17
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
18
18
  import { getTelemetryClient } from '@aztec/telemetry-client';
19
19
 
20
20
  import { EventEmitter } from 'events';
@@ -189,8 +189,6 @@ export async function registerProtocolContracts(store: KVArchiverDataStore) {
189
189
  const contractClassPublic: ContractClassPublicWithCommitment = {
190
190
  ...contract.contractClass,
191
191
  publicBytecodeCommitment,
192
- privateFunctions: [],
193
- utilityFunctions: [],
194
192
  };
195
193
 
196
194
  const publicFunctionSignatures = contract.artifact.functions
@@ -1,6 +1,7 @@
1
1
  import { MULTI_CALL_3_ADDRESS, type ViemCommitteeAttestations, type ViemHeader } from '@aztec/ethereum/contracts';
2
2
  import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
3
3
  import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
+ import { LruSet } from '@aztec/foundation/collection';
4
5
  import { Fr } from '@aztec/foundation/curves/bn254';
5
6
  import { EthAddress } from '@aztec/foundation/eth-address';
6
7
  import type { Logger } from '@aztec/foundation/log';
@@ -44,7 +45,7 @@ type CheckpointData = {
44
45
  */
45
46
  export class CalldataRetriever {
46
47
  /** Tx hashes we've already logged for trace+debug failure (log once per tx per process). */
47
- private static readonly traceFailureWarnedTxHashes = new Set<string>();
48
+ private static readonly traceFailureWarnedTxHashes = new LruSet<string>(1000);
48
49
 
49
50
  /** Clears the trace-failure warned set. For testing only. */
50
51
  static resetTraceFailureWarnedForTesting(): void {