@aztec/archiver 0.0.1-commit.2f68f620 → 0.0.1-commit.3100065

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 (83) hide show
  1. package/README.md +1 -3
  2. package/dest/archiver.d.ts +22 -4
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +79 -35
  5. package/dest/config.d.ts +5 -4
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +27 -5
  8. package/dest/factory.d.ts +8 -2
  9. package/dest/factory.d.ts.map +1 -1
  10. package/dest/factory.js +37 -3
  11. package/dest/l1/calldata_retriever.d.ts +8 -1
  12. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  13. package/dest/l1/calldata_retriever.js +7 -6
  14. package/dest/l1/data_retrieval.d.ts +7 -2
  15. package/dest/l1/data_retrieval.d.ts.map +1 -1
  16. package/dest/modules/contract_data_source_adapter.d.ts +2 -2
  17. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -1
  18. package/dest/modules/contract_data_source_adapter.js +1 -9
  19. package/dest/modules/data_source_base.d.ts +2 -3
  20. package/dest/modules/data_source_base.d.ts.map +1 -1
  21. package/dest/modules/data_source_base.js +9 -35
  22. package/dest/modules/data_store_updater.d.ts +1 -1
  23. package/dest/modules/data_store_updater.d.ts.map +1 -1
  24. package/dest/modules/data_store_updater.js +11 -5
  25. package/dest/modules/instrumentation.d.ts +9 -1
  26. package/dest/modules/instrumentation.d.ts.map +1 -1
  27. package/dest/modules/instrumentation.js +23 -2
  28. package/dest/modules/l1_synchronizer.d.ts +3 -3
  29. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  30. package/dest/modules/l1_synchronizer.js +78 -41
  31. package/dest/modules/validation.d.ts +29 -7
  32. package/dest/modules/validation.d.ts.map +1 -1
  33. package/dest/modules/validation.js +31 -13
  34. package/dest/store/block_store.d.ts +20 -11
  35. package/dest/store/block_store.d.ts.map +1 -1
  36. package/dest/store/block_store.js +43 -25
  37. package/dest/store/contract_class_store.d.ts +1 -1
  38. package/dest/store/contract_class_store.d.ts.map +1 -1
  39. package/dest/store/contract_class_store.js +19 -1
  40. package/dest/store/contract_instance_store.d.ts +1 -1
  41. package/dest/store/contract_instance_store.d.ts.map +1 -1
  42. package/dest/store/contract_instance_store.js +18 -1
  43. package/dest/store/log_store.d.ts +1 -1
  44. package/dest/store/log_store.d.ts.map +1 -1
  45. package/dest/store/log_store.js +3 -3
  46. package/dest/store/log_store_codec.d.ts +9 -1
  47. package/dest/store/log_store_codec.d.ts.map +1 -1
  48. package/dest/store/log_store_codec.js +9 -0
  49. package/dest/test/fake_l1_state.js +3 -3
  50. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  51. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  52. package/dest/test/mock_l1_to_l2_message_source.js +1 -2
  53. package/dest/test/mock_l2_block_source.d.ts +1 -4
  54. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  55. package/dest/test/mock_l2_block_source.js +8 -22
  56. package/dest/test/mock_structs.d.ts +1 -1
  57. package/dest/test/mock_structs.d.ts.map +1 -1
  58. package/dest/test/mock_structs.js +2 -2
  59. package/dest/test/noop_l1_archiver.d.ts +7 -3
  60. package/dest/test/noop_l1_archiver.d.ts.map +1 -1
  61. package/dest/test/noop_l1_archiver.js +9 -6
  62. package/package.json +14 -13
  63. package/src/archiver.ts +107 -41
  64. package/src/config.ts +34 -9
  65. package/src/factory.ts +46 -4
  66. package/src/l1/calldata_retriever.ts +13 -6
  67. package/src/l1/data_retrieval.ts +8 -1
  68. package/src/modules/contract_data_source_adapter.ts +1 -10
  69. package/src/modules/data_source_base.ts +9 -38
  70. package/src/modules/data_store_updater.ts +15 -5
  71. package/src/modules/instrumentation.ts +15 -2
  72. package/src/modules/l1_synchronizer.ts +120 -57
  73. package/src/modules/validation.ts +71 -15
  74. package/src/store/block_store.ts +42 -31
  75. package/src/store/contract_class_store.ts +19 -1
  76. package/src/store/contract_instance_store.ts +18 -1
  77. package/src/store/log_store.ts +3 -2
  78. package/src/store/log_store_codec.ts +11 -0
  79. package/src/test/fake_l1_state.ts +3 -3
  80. package/src/test/mock_l1_to_l2_message_source.ts +0 -1
  81. package/src/test/mock_l2_block_source.ts +8 -22
  82. package/src/test/mock_structs.ts +5 -2
  83. package/src/test/noop_l1_archiver.ts +15 -5
@@ -85,4 +85,4 @@ export interface MockCheckpointWithLogsOptions {
85
85
  }
86
86
  /** Creates a checkpoint with specified logs on each tx effect. */
87
87
  export declare function makeCheckpointWithLogs(blockNumber: number, options?: MockCheckpointWithLogsOptions): Promise<PublishedCheckpoint>;
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUF5QixjQUFjLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFbkYsd0JBQWdCLGdCQUFnQixDQUM5QixtQkFBbUIsV0FBZ0IsRUFDbkMsU0FBUyxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0sR0FDcEMsWUFBWSxDQWdCZDtBQUVELHdCQUFnQixpQkFBaUIsQ0FDL0IsVUFBVSxFQUFFLE1BQU0sRUFDbEIsSUFBSSxHQUFFO0lBQ0osV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDM0MscUJBQXFCLENBQUMsRUFB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
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUF5QixjQUFjLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFbkYsd0JBQWdCLGdCQUFnQixDQUM5QixtQkFBbUIsV0FBZ0IsRUFDbkMsU0FBUyxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0sR0FDcEMsWUFBWSxDQWdCZDtBQUVELHdCQUFnQixpQkFBaUIsQ0FDL0IsVUFBVSxFQUFFLE1BQU0sRUFDbEIsSUFBSSxHQUFFO0lBQ0osV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDM0MscUJBQXFCLENBQUMsRUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
@@ -147,13 +147,13 @@ export function makeInboxMessages(totalCount, opts = {}) {
147
147
  /** Creates a deterministic Tag for public log testing. */ export function makePublicLogTag(blockNumber, txIndex, logIndex) {
148
148
  return new Tag(blockNumber === 1 && txIndex === 0 && logIndex === 0 ? Fr.ZERO : new Fr((blockNumber * 100 + txIndex * 10 + logIndex) * 123));
149
149
  }
150
- /** Creates a PublicLog with fields derived from the tag. */ export function makePublicLog(tag, contractAddress = AztecAddress.fromNumber(543254)) {
150
+ /** Creates a PublicLog with fields derived from the tag. */ export function makePublicLog(tag, contractAddress = AztecAddress.fromNumberUnsafe(543254)) {
151
151
  return PublicLog.from({
152
152
  contractAddress,
153
153
  fields: new Array(10).fill(null).map((_, i)=>!i ? tag.value : new Fr(tag.value.toBigInt() + BigInt(i)))
154
154
  });
155
155
  }
156
- /** Creates multiple public logs for a transaction. */ export function makePublicLogs(blockNumber, txIndex, numLogsPerTx, contractAddress = AztecAddress.fromNumber(543254)) {
156
+ /** Creates multiple public logs for a transaction. */ export function makePublicLogs(blockNumber, txIndex, numLogsPerTx, contractAddress = AztecAddress.fromNumberUnsafe(543254)) {
157
157
  return times(numLogsPerTx, (logIndex)=>{
158
158
  const tag = makePublicLogTag(blockNumber, txIndex, logIndex);
159
159
  return makePublicLog(tag, contractAddress);
@@ -9,6 +9,9 @@ import { Archiver } from '../archiver.js';
9
9
  import { ArchiverInstrumentation } from '../modules/instrumentation.js';
10
10
  import type { ArchiverDataStores } from '../store/data_stores.js';
11
11
  import { L2TipsCache } from '../store/l2_tips_cache.js';
12
+ type NoopL1ArchiverConfigOverrides = Partial<{
13
+ skipOrphanProposedBlockPruning: boolean;
14
+ }>;
12
15
  /**
13
16
  * Archiver with mocked L1 connectivity for testing.
14
17
  * Uses mock L1 clients and a noop synchronizer, enabling tests that
@@ -17,7 +20,7 @@ import { L2TipsCache } from '../store/l2_tips_cache.js';
17
20
  export declare class NoopL1Archiver extends Archiver {
18
21
  constructor(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
19
22
  genesisArchiveRoot: Fr;
20
- }, instrumentation: ArchiverInstrumentation, initialHeader: BlockHeader, initialBlockHash: BlockHash, l2TipsCache: L2TipsCache, dateProvider?: DateProvider);
23
+ }, instrumentation: ArchiverInstrumentation, initialHeader: BlockHeader, initialBlockHash: BlockHash, l2TipsCache: L2TipsCache, dateProvider?: DateProvider, configOverrides?: NoopL1ArchiverConfigOverrides);
21
24
  /** Override start to skip L1 validation checks. */
22
25
  start(_blockUntilSynced?: boolean): Promise<void>;
23
26
  /** Always reports as fully synced since there is no real L1 to sync from. */
@@ -26,5 +29,6 @@ export declare class NoopL1Archiver extends Archiver {
26
29
  /** Creates an archiver with mocked L1 connectivity for testing. */
27
30
  export declare function createNoopL1Archiver(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
28
31
  genesisArchiveRoot: Fr;
29
- }, telemetry: TelemetryClient | undefined, initialHeader: BlockHeader, dateProvider?: DateProvider): Promise<NoopL1Archiver>;
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBbUIsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFLaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBeUJ4RDs7OztHQUlHO0FBQ0gscUJBQWEsY0FBZSxTQUFRLFFBQVE7SUFDMUMsWUFDRSxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztRQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQzNELGVBQWUsRUFBRSx1QkFBdUIsRUFDeEMsYUFBYSxFQUFFLFdBQVcsRUFDMUIsZ0JBQWdCLEVBQUUsU0FBUyxFQUMzQixXQUFXLEVBQUUsV0FBVyxFQUN4QixZQUFZLEdBQUUsWUFBaUMsRUFpRGhEO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsNkJBQXdDLEVBQ2pELGFBQWEsRUFBRSxXQUFXLEVBQzFCLFlBQVksQ0FBQyxFQUFFLFlBQVksR0FDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQWlCekIifQ==
32
+ }, telemetry: TelemetryClient | undefined, initialHeader: BlockHeader, dateProvider?: DateProvider, configOverrides?: NoopL1ArchiverConfigOverrides): Promise<NoopL1Archiver>;
33
+ export {};
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBbUIsU0FBUyxFQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFLaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXhELEtBQUssNkJBQTZCLEdBQUcsT0FBTyxDQUFDO0lBQzNDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQztDQUN6QyxDQUFDLENBQUM7QUF5Qkg7Ozs7R0FJRztBQUNILHFCQUFhLGNBQWUsU0FBUSxRQUFRO0lBQzFDLFlBQ0UsVUFBVSxFQUFFLGtCQUFrQixFQUM5QixXQUFXLEVBQUUsaUJBQWlCLEdBQUc7UUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUE7S0FBRSxFQUMzRCxlQUFlLEVBQUUsdUJBQXVCLEVBQ3hDLGFBQWEsRUFBRSxXQUFXLEVBQzFCLGdCQUFnQixFQUFFLFNBQVMsRUFDM0IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsWUFBWSxHQUFFLFlBQWlDLEVBQy9DLGVBQWUsR0FBRSw2QkFBa0MsRUFvRHBEO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsNkJBQXdDLEVBQ2pELGFBQWEsRUFBRSxXQUFXLEVBQzFCLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFDM0IsZUFBZSxDQUFDLEVBQUUsNkJBQTZCLEdBQzlDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FrQnpCIn0=
@@ -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;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,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,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAyBxD;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EACxC,aAAa,EAAE,WAAW,EAC1B,gBAAgB,EAAE,SAAS,EAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,GAAE,YAAiC,EAiDhD;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,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,6BAAwC,EACjD,aAAa,EAAE,WAAW,EAC1B,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
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;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAmB,SAAS,EAAW,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,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,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,KAAK,6BAA6B,GAAG,OAAO,CAAC;IAC3C,8BAA8B,EAAE,OAAO,CAAC;CACzC,CAAC,CAAC;AAyBH;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EACxC,aAAa,EAAE,WAAW,EAC1B,gBAAgB,EAAE,SAAS,EAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,GAAE,YAAiC,EAC/C,eAAe,GAAE,6BAAkC,EAoDpD;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,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,6BAAwC,EACjD,aAAa,EAAE,WAAW,EAC1B,YAAY,CAAC,EAAE,YAAY,EAC3B,eAAe,CAAC,EAAE,6BAA6B,GAC9C,OAAO,CAAC,cAAc,CAAC,CAkBzB"}
@@ -24,7 +24,7 @@ import { L2TipsCache } from '../store/l2_tips_cache.js';
24
24
  return Promise.resolve();
25
25
  }
26
26
  syncFromL1(_initialSyncComplete) {
27
- return Promise.resolve();
27
+ return Promise.resolve([]);
28
28
  }
29
29
  }
30
30
  /**
@@ -32,7 +32,7 @@ import { L2TipsCache } from '../store/l2_tips_cache.js';
32
32
  * Uses mock L1 clients and a noop synchronizer, enabling tests that
33
33
  * don't require real Ethereum connectivity.
34
34
  */ export class NoopL1Archiver extends Archiver {
35
- constructor(dataStores, l1Constants, instrumentation, initialHeader, initialBlockHash, l2TipsCache, dateProvider = new DateProvider()){
35
+ constructor(dataStores, l1Constants, instrumentation, initialHeader, initialBlockHash, l2TipsCache, dateProvider = new DateProvider(), configOverrides = {}){
36
36
  // Create mocks for L1 clients
37
37
  const publicClient = mock();
38
38
  const debugClient = mock();
@@ -57,8 +57,11 @@ import { L2TipsCache } from '../store/l2_tips_cache.js';
57
57
  maxAllowedEthClientDriftSeconds: 300,
58
58
  ethereumAllowNoDebugHosts: true,
59
59
  skipHistoricalLogsCheck: true,
60
- orphanProposedBlockPruneGraceSeconds: 2,
61
- enableOrphanProposedBlockPruning: true
60
+ checkpointProposalSyncGrace: 4,
61
+ orphanPruneNoProposalTolerance: 1,
62
+ skipOrphanProposedBlockPruning: true,
63
+ blockDuration: 2,
64
+ ...configOverrides
62
65
  }, blobClient, instrumentation, {
63
66
  ...l1Constants,
64
67
  l1StartBlockHash: Buffer32.random()
@@ -73,7 +76,7 @@ import { L2TipsCache } from '../store/l2_tips_cache.js';
73
76
  return Promise.resolve(SlotNumber(Number.MAX_SAFE_INTEGER));
74
77
  }
75
78
  }
76
- /** Creates an archiver with mocked L1 connectivity for testing. */ export async function createNoopL1Archiver(dataStores, l1Constants, telemetry = getTelemetryClient(), initialHeader, dateProvider) {
79
+ /** Creates an archiver with mocked L1 connectivity for testing. */ export async function createNoopL1Archiver(dataStores, l1Constants, telemetry = getTelemetryClient(), initialHeader, dateProvider, configOverrides) {
77
80
  const instrumentation = await ArchiverInstrumentation.new(telemetry, ()=>dataStores.db.estimateSize());
78
81
  // Mirror the production factory: precompute the dynamic genesis block hash from the injected
79
82
  // initial header so `L2TipsCache` reports the correct tip hash at block 0. Without this, the
@@ -81,5 +84,5 @@ import { L2TipsCache } from '../store/l2_tips_cache.js';
81
84
  // with default empty genesis.
82
85
  const initialBlockHash = await initialHeader.hash();
83
86
  const l2TipsCache = new L2TipsCache(dataStores.blocks, initialBlockHash);
84
- return new NoopL1Archiver(dataStores, l1Constants, instrumentation, initialHeader, initialBlockHash, l2TipsCache, dateProvider);
87
+ return new NoopL1Archiver(dataStores, l1Constants, instrumentation, initialHeader, initialBlockHash, l2TipsCache, dateProvider, configOverrides);
85
88
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/archiver",
3
- "version": "0.0.1-commit.2f68f620",
3
+ "version": "0.0.1-commit.3100065",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -65,18 +65,19 @@
65
65
  ]
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/blob-client": "0.0.1-commit.2f68f620",
69
- "@aztec/blob-lib": "0.0.1-commit.2f68f620",
70
- "@aztec/constants": "0.0.1-commit.2f68f620",
71
- "@aztec/epoch-cache": "0.0.1-commit.2f68f620",
72
- "@aztec/ethereum": "0.0.1-commit.2f68f620",
73
- "@aztec/foundation": "0.0.1-commit.2f68f620",
74
- "@aztec/kv-store": "0.0.1-commit.2f68f620",
75
- "@aztec/l1-artifacts": "0.0.1-commit.2f68f620",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.2f68f620",
77
- "@aztec/protocol-contracts": "0.0.1-commit.2f68f620",
78
- "@aztec/stdlib": "0.0.1-commit.2f68f620",
79
- "@aztec/telemetry-client": "0.0.1-commit.2f68f620",
68
+ "@aztec/blob-client": "0.0.1-commit.3100065",
69
+ "@aztec/blob-lib": "0.0.1-commit.3100065",
70
+ "@aztec/constants": "0.0.1-commit.3100065",
71
+ "@aztec/epoch-cache": "0.0.1-commit.3100065",
72
+ "@aztec/ethereum": "0.0.1-commit.3100065",
73
+ "@aztec/foundation": "0.0.1-commit.3100065",
74
+ "@aztec/kv-store": "0.0.1-commit.3100065",
75
+ "@aztec/l1-artifacts": "0.0.1-commit.3100065",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.3100065",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.3100065",
78
+ "@aztec/standard-contracts": "0.0.1-commit.3100065",
79
+ "@aztec/stdlib": "0.0.1-commit.3100065",
80
+ "@aztec/telemetry-client": "0.0.1-commit.3100065",
80
81
  "lodash.groupby": "^4.6.0",
81
82
  "lodash.omit": "^4.5.0",
82
83
  "tslib": "^2.5.0",
package/src/archiver.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import type { BlobClientInterface } from '@aztec/blob-client/client';
2
- import { EpochCache, PROPOSER_PIPELINING_SLOT_OFFSET } from '@aztec/epoch-cache';
2
+ import { EpochCache } from '@aztec/epoch-cache';
3
3
  import { BlockTagTooOldError, OutboxContract, RollupContract } from '@aztec/ethereum/contracts';
4
4
  import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
5
5
  import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
6
6
  import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
7
7
  import { Buffer32 } from '@aztec/foundation/buffer';
8
- import { merge, pick } from '@aztec/foundation/collection';
8
+ import { merge } from '@aztec/foundation/collection';
9
9
  import { Fr } from '@aztec/foundation/curves/bn254';
10
10
  import { EthAddress } from '@aztec/foundation/eth-address';
11
11
  import { type Logger, createLogger } from '@aztec/foundation/log';
@@ -20,6 +20,7 @@ import {
20
20
  L2BlockSourceEvents,
21
21
  type L2Tips,
22
22
  type ValidateCheckpointResult,
23
+ l2TipsEqual,
23
24
  } from '@aztec/stdlib/block';
24
25
  import { type ProposedCheckpointInput, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
25
26
  import {
@@ -31,6 +32,7 @@ import {
31
32
  getTimestampRangeForEpoch,
32
33
  } from '@aztec/stdlib/epoch-helpers';
33
34
  import type { L2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
35
+ import { ConsensusTimetable } from '@aztec/stdlib/timetable';
34
36
  import type { BlockHeader, TxHash } from '@aztec/stdlib/tx';
35
37
  import { type TelemetryClient, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
36
38
 
@@ -72,6 +74,16 @@ export type ArchiverDeps = {
72
74
  dateProvider?: DateProvider;
73
75
  };
74
76
 
77
+ /** Minimal dependency for observing whether a checkpoint proposal was received for a slot. */
78
+ export type CheckpointProposalPresence = {
79
+ /** Returns true when a checkpoint proposal for `slot` has been retained locally. */
80
+ hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean>;
81
+ };
82
+
83
+ const noCheckpointProposalPresence: CheckpointProposalPresence = {
84
+ hasCheckpointProposalForSlot: () => Promise.resolve(false),
85
+ };
86
+
75
87
  /**
76
88
  * Pulls checkpoints in a non-blocking manner and provides interface for their retrieval.
77
89
  * Responsible for handling robust L1 polling so that other components do not need to
@@ -102,6 +114,9 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
102
114
  /** In-memory cache for L2 chain tips. */
103
115
  private readonly l2TipsCache: L2TipsCache;
104
116
 
117
+ /** Consensus timing model used for proposed-checkpoint arrival expectations. */
118
+ private readonly timetable: ConsensusTimetable;
119
+
105
120
  public readonly tracer: Tracer;
106
121
 
107
122
  private readonly instrumentation: ArchiverInstrumentation;
@@ -146,8 +161,10 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
146
161
  maxAllowedEthClientDriftSeconds: number;
147
162
  ethereumAllowNoDebugHosts?: boolean;
148
163
  skipHistoricalLogsCheck?: boolean;
149
- orphanProposedBlockPruneGraceSeconds: number;
150
- enableOrphanProposedBlockPruning: boolean;
164
+ checkpointProposalSyncGrace: number;
165
+ orphanPruneNoProposalTolerance: number;
166
+ skipOrphanProposedBlockPruning: boolean;
167
+ blockDuration: number;
151
168
  },
152
169
  private readonly blobClient: BlobClientInterface,
153
170
  instrumentation: ArchiverInstrumentation,
@@ -161,6 +178,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
161
178
  initialBlockHash: BlockHash,
162
179
  l2TipsCache: L2TipsCache,
163
180
  private readonly dateProvider: DateProvider,
181
+ private checkpointProposalPresence: CheckpointProposalPresence = noCheckpointProposalPresence,
164
182
  private readonly log: Logger = createLogger('archiver'),
165
183
  ) {
166
184
  super(dataStores, l1Constants, initialHeader, initialBlockHash, l1Constants.genesisArchiveRoot);
@@ -171,6 +189,11 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
171
189
  this.synchronizer = synchronizer;
172
190
  this.events = events;
173
191
  this.l2TipsCache = l2TipsCache;
192
+ this.timetable = new ConsensusTimetable({
193
+ l1Constants,
194
+ blockDuration: this.config.blockDuration,
195
+ checkpointProposalSyncGrace: this.config.checkpointProposalSyncGrace,
196
+ });
174
197
  this.updater = new ArchiverDataStoreUpdater(this.dataStores, this.l2TipsCache, {
175
198
  rollupManaLimit: l1Constants.rollupManaLimit,
176
199
  });
@@ -271,6 +294,11 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
271
294
  return this.runningPromise.trigger();
272
295
  }
273
296
 
297
+ /** Sets the proposal-presence provider used by orphan proposed-block pruning. */
298
+ public setCheckpointProposalPresence(checkpointProposalPresence: CheckpointProposalPresence): void {
299
+ this.checkpointProposalPresence = checkpointProposalPresence;
300
+ }
301
+
274
302
  public trySyncImmediate() {
275
303
  try {
276
304
  return this.syncImmediate();
@@ -312,9 +340,10 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
312
340
  * Called at the beginning of each sync iteration.
313
341
  * Items are processed in the order they were queued.
314
342
  */
315
- private async processInboundQueue(): Promise<void> {
343
+ private async processInboundQueue(): Promise<L2Block[]> {
344
+ const blocksAdded: L2Block[] = [];
316
345
  if (this.inboundQueue.length === 0) {
317
- return;
346
+ return blocksAdded;
318
347
  }
319
348
 
320
349
  // Take all items from the queue
@@ -351,6 +380,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
351
380
  if (type === 'block') {
352
381
  const [durationMs] = await elapsed(() => this.updater.addProposedBlock(item.block));
353
382
  this.instrumentation.processNewProposedBlock(durationMs, item.block);
383
+ blocksAdded.push(item.block);
354
384
  } else {
355
385
  await this.updater.addProposedCheckpoint(item.checkpoint);
356
386
  }
@@ -359,6 +389,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
359
389
  } catch (err: any) {
360
390
  if (err instanceof BlockAlreadyCheckpointedError) {
361
391
  this.log.debug(`Proposed block ${itemNumber} matches already checkpointed block, ignoring late proposal`);
392
+ // A late proposal that matches an already-checkpointed block adds nothing new, so it is not appended.
362
393
  resolve();
363
394
  continue;
364
395
  }
@@ -369,6 +400,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
369
400
  reject(err);
370
401
  }
371
402
  }
403
+ return blocksAdded;
372
404
  }
373
405
 
374
406
  public waitForInitialSync() {
@@ -380,12 +412,31 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
380
412
  */
381
413
  @trackSpan('Archiver.sync')
382
414
  private async sync() {
415
+ // Capture the tips before any mutation so the aggregate event can report what moved this pass.
416
+ const fromTips = await this.getL2Tips();
417
+
418
+ // Accumulate the blocks added across the pass's sub-steps (queued proposals + L1 checkpoint payloads).
419
+ const blocksAdded: L2Block[] = [];
383
420
  // Process any queued blocks first, before doing L1 sync
384
- await this.processInboundQueue();
421
+ blocksAdded.push(...(await this.processInboundQueue()));
385
422
  // Now perform L1 sync
386
- await this.syncFromL1();
387
- // Prune proposed blocks with no corresponding proposed checkpoint by the end of their build slot.
423
+ blocksAdded.push(...(await this.syncFromL1()));
424
+ // Prune proposed blocks with no corresponding proposed checkpoint after the appropriate materialization deadline.
388
425
  await this.pruneOrphanProposedBlocks();
426
+
427
+ // Emit a single aggregate update event after all pass work has committed and the tips cache has refreshed,
428
+ // so `toTips` and the source state observed by listeners are consistent with the event payload. The pass
429
+ // mutated state if the tips moved (added blocks, a prune, or a thin tier movement) or blocks were added; a
430
+ // fully-synced no-op pass emits nothing.
431
+ const toTips = await this.getL2Tips();
432
+ if (!l2TipsEqual(fromTips, toTips) || blocksAdded.length > 0) {
433
+ this.events.emit(L2BlockSourceEvents.L2BlockSourceUpdated, {
434
+ type: L2BlockSourceEvents.L2BlockSourceUpdated,
435
+ fromTips,
436
+ toTips,
437
+ blocksAdded,
438
+ });
439
+ }
389
440
  }
390
441
 
391
442
  /**
@@ -393,40 +444,38 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
393
444
  *
394
445
  * Under pipelining, a proposer publishes the blocks for a checkpoint (block-only proposals) before
395
446
  * assembling and publishing the enclosing proposed checkpoint at the end of the build slot. A node
396
- * that received those blocks but never the proposed checkpoint is left with an orphan tip it must
397
- * not build on. We prune it once enough wall-clock time has elapsed that the proposed checkpoint
398
- * should have arrived. This runs on wall-clock time (not L1 block advancement) so it fires during
399
- * quiet L1 periods, and is the liveness counterpart to the sequencer's checkSync guard.
447
+ * that received those blocks but never the proposed checkpoint is left with an orphan tip it must not build on.
448
+ * If no checkpoint proposal was received for the orphan slot, we prune after the receive deadline plus local
449
+ * tolerance. If a checkpoint proposal was received but has not materialized into proposed archiver state,
450
+ * we prune after the consensus materialization deadline.
400
451
  *
401
452
  * The uncheckpointed suffix is scanned in order. Blocks covered by proposed checkpoints are left in
402
453
  * place; the first block not covered by a proposed checkpoint starts the orphan suffix to prune.
403
454
  */
404
455
  private async pruneOrphanProposedBlocks(): Promise<void> {
405
- // Orphan pruning is a pipelining-only liveness mechanism: it cleans up block-only proposals
406
- // whose enclosing checkpoint never arrived over gossip. The test-only automine sequencer is
407
- // non-pipelined — it publishes each checkpoint synchronously in the slot it builds — so it
408
- // never produces orphan proposed blocks. Running the prune there would race its two-step local
409
- // push (addBlock then addProposedCheckpoint) and delete the block before its checkpoint attaches.
410
- if (!this.config.enableOrphanProposedBlockPruning) {
456
+ if (this.config.skipOrphanProposedBlockPruning) {
411
457
  return;
412
458
  }
413
459
  const tips = await this.getL2Tips();
414
460
  const now = BigInt(this.dateProvider.nowInSeconds());
415
- const pipeliningOffset = PROPOSER_PIPELINING_SLOT_OFFSET;
461
+
462
+ // Frontier block covered by a proposed (or, falling back, confirmed) checkpoint. Blocks beyond it
463
+ // have no enclosing checkpoint proposal and are the orphan-pruning candidates.
464
+ const proposedCheckpointBlockNumber = await this.stores.blocks.getProposedCheckpointL2BlockNumber();
416
465
 
417
466
  // The proposed tip is a proposed-checkpointed block, so there are no orphan proposed blocks to prune
418
- if (tips.proposedCheckpoint.block.number === tips.proposed.number) {
419
- this.log.trace(
420
- `No orphan proposed blocks to prune: proposed tip ${tips.proposed.number} is checkpointed`,
421
- pick(tips, 'proposed', 'proposedCheckpoint'),
422
- );
467
+ if (proposedCheckpointBlockNumber === tips.proposed.number) {
468
+ this.log.trace(`No orphan proposed blocks to prune: proposed tip ${tips.proposed.number} is checkpointed`, {
469
+ proposed: tips.proposed,
470
+ proposedCheckpointBlockNumber,
471
+ });
423
472
  return;
424
473
  }
425
474
 
426
475
  // Load the blocks that are candidates for pruning (ie blocks without a proposed checkpoint covering them)
427
476
  const blocksWithoutProposedCheckpoint = await this.stores.blocks.getBlocksData({
428
- from: BlockNumber(tips.proposedCheckpoint.block.number + 1),
429
- limit: tips.proposed.number - tips.proposedCheckpoint.block.number,
477
+ from: BlockNumber(proposedCheckpointBlockNumber + 1),
478
+ limit: tips.proposed.number - proposedCheckpointBlockNumber,
430
479
  });
431
480
 
432
481
  // Iterate through them in order, the first one with a slot that should have received a proposed checkpoint
@@ -441,15 +490,21 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
441
490
  }
442
491
  lastSlotChecked = blockSlot;
443
492
 
444
- // The proposed checkpoint should have landed by the start of the slot after the block's build slot
445
- // (build slot = blockSlot - pipeliningOffset). Wait a grace period beyond that to tolerate propagation.
446
- const expectedCheckpointedBySlot = SlotNumber(Number(blockSlot) - pipeliningOffset + 1);
447
- const expectedCheckpointedByTime =
448
- getTimestampForSlot(expectedCheckpointedBySlot, this.l1Constants) +
449
- BigInt(this.config.orphanProposedBlockPruneGraceSeconds);
493
+ const hasCheckpointProposal = await this.checkpointProposalPresence.hasCheckpointProposalForSlot(blockSlot);
494
+ const deadlineType = hasCheckpointProposal ? 'checkpoint-proposal-synced' : 'checkpoint-proposal-received';
495
+ const selectedDeadline = BigInt(
496
+ hasCheckpointProposal
497
+ ? this.timetable.getCheckpointProposalSyncedDeadline(blockSlot)
498
+ : Math.ceil(
499
+ this.timetable.getCheckpointProposalReceiveDeadline(blockSlot) +
500
+ this.config.orphanPruneNoProposalTolerance,
501
+ ),
502
+ );
450
503
 
451
- // If it's not checkpointed by the expected time, prune it along with all blocks after it.
452
- if (now >= expectedCheckpointedByTime) {
504
+ // If it's still not checkpointed once strictly past the selected deadline, prune it along with all blocks after
505
+ // it. A proposal may still legitimately arrive or materialize at exactly its deadline, so the tip is only
506
+ // orphaned once that instant has fully elapsed.
507
+ if (now > selectedDeadline) {
453
508
  const pruneAfterBlockNumber = BlockNumber(blockNumber - 1);
454
509
  this.log.warn(
455
510
  `Pruning orphan blocks after block ${pruneAfterBlockNumber}: block at slot ${blockSlot} belongs to ` +
@@ -459,15 +514,16 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
459
514
  blockCheckpointNumber: blockData.checkpointNumber,
460
515
  blockNumber,
461
516
  blockSlot,
462
- pipeliningOffset,
463
- expectedCheckpointedBySlot,
464
- expectedCheckpointedByTime,
517
+ hasCheckpointProposal,
518
+ deadlineType,
519
+ selectedDeadline,
465
520
  now,
466
521
  },
467
522
  );
468
523
 
469
524
  const prunedBlocks = await this.updater.removeBlocksWithoutProposedCheckpointAfter(pruneAfterBlockNumber);
470
525
  if (prunedBlocks.length > 0) {
526
+ this.instrumentation.recordPrune('orphan');
471
527
  this.events.emit(L2BlockSourceEvents.L2PruneUncheckpointed, {
472
528
  type: L2BlockSourceEvents.L2PruneUncheckpointed,
473
529
  slotNumber: blockSlot,
@@ -478,14 +534,14 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
478
534
  }
479
535
  }
480
536
 
481
- this.log.trace('No orphan proposed blocks to prune: all uncheckpointed blocks are still within the grace period', {
537
+ this.log.trace('No orphan proposed blocks to prune: all uncheckpointed blocks are still within deadline', {
482
538
  blocksWithoutProposedCheckpoint: blocksWithoutProposedCheckpoint.map(b => b.header.toInspect()),
483
539
  });
484
540
  }
485
541
 
486
- private async syncFromL1() {
542
+ private async syncFromL1(): Promise<L2Block[]> {
487
543
  // Delegate to the L1 synchronizer
488
- await this.synchronizer.syncFromL1(this.initialSyncComplete);
544
+ const blocksAdded = await this.synchronizer.syncFromL1(this.initialSyncComplete);
489
545
 
490
546
  // Check if we've completed initial sync
491
547
  const currentL1BlockNumber = this.synchronizer.getL1BlockNumber();
@@ -502,6 +558,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
502
558
  this.initialSyncPromise.resolve();
503
559
  }
504
560
  }
561
+ return blocksAdded;
505
562
  }
506
563
 
507
564
  /** Resumes the archiver after a stop. */
@@ -637,6 +694,15 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
637
694
  return this.updater.removeCheckpointsAfter(checkpointNumber);
638
695
  }
639
696
 
697
+ /**
698
+ * Removes all uncheckpointed blocks strictly after `blockNumber`, along with the proposed checkpoints
699
+ * that referenced them. Used by the AutomineSequencer to undo a local insert whose propose tx failed
700
+ * to land on L1 (no reorg needed — nothing reached L1). Refuses to touch checkpointed blocks.
701
+ */
702
+ public removeUncheckpointedBlocksAfter(blockNumber: BlockNumber): Promise<L2Block[]> {
703
+ return this.updater.removeUncheckpointedBlocksAfter(blockNumber);
704
+ }
705
+
640
706
  /** Used by TXE to add checkpoints directly without syncing from L1. */
641
707
  public async addCheckpoints(
642
708
  checkpoints: PublishedCheckpoint[],
package/src/config.ts CHANGED
@@ -8,8 +8,9 @@ import {
8
8
  numberConfigHelper,
9
9
  optionalNumberConfigHelper,
10
10
  } from '@aztec/foundation/config';
11
- import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
11
+ import { type ChainConfig, type SequencerConfig, chainConfigMappings } from '@aztec/stdlib/config';
12
12
  import type { ArchiverSpecificConfig } from '@aztec/stdlib/interfaces/server';
13
+ import { DEFAULT_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE } from '@aztec/stdlib/timetable';
13
14
 
14
15
  /**
15
16
  * The archiver configuration.
@@ -22,7 +23,8 @@ export type ArchiverConfig = ArchiverSpecificConfig &
22
23
  L1ReaderConfig &
23
24
  L1ContractsConfig &
24
25
  BlobClientConfig &
25
- ChainConfig;
26
+ ChainConfig &
27
+ Pick<SequencerConfig, 'blockDurationMs' | 'checkpointProposalSyncGraceSeconds'>;
26
28
 
27
29
  export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
28
30
  ...blobClientConfigMapping,
@@ -41,6 +43,18 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
41
43
  ...optionalNumberConfigHelper(),
42
44
  description: 'The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb.',
43
45
  },
46
+ blockDurationMs: {
47
+ env: 'SEQ_BLOCK_DURATION_MS',
48
+ description:
49
+ 'Duration per block in milliseconds when building multiple blocks per slot. Used to derive orphan proposed block pruning timing.',
50
+ ...optionalNumberConfigHelper(),
51
+ },
52
+ checkpointProposalSyncGraceSeconds: {
53
+ env: 'CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS',
54
+ description:
55
+ 'Consensus grace in seconds for a received checkpoint proposal to materialize into local proposed state.',
56
+ ...optionalNumberConfigHelper(),
57
+ },
44
58
  skipValidateCheckpointAttestations: {
45
59
  description: 'Skip validating checkpoint attestations (for testing purposes only)',
46
60
  ...booleanConfigHelper(false),
@@ -66,13 +80,23 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
66
80
  'Set to true to bypass the check when the connected RPC node is known to prune old logs.',
67
81
  ...booleanConfigHelper(false),
68
82
  },
69
- orphanProposedBlockPruneGraceSeconds: {
70
- env: 'ARCHIVER_ORPHAN_PROPOSED_BLOCK_PRUNE_GRACE_SECONDS',
83
+ orphanPruneNoProposalTolerance: {
84
+ env: 'ARCHIVER_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE',
85
+ description: 'Local tolerance in seconds before pruning an orphan block when no checkpoint proposal was received.',
86
+ ...numberConfigHelper(DEFAULT_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE),
87
+ },
88
+ skipOrphanProposedBlockPruning: {
89
+ env: 'ARCHIVER_SKIP_ORPHAN_PROPOSED_BLOCK_PRUNING',
90
+ description: 'Skip pruning orphan proposed blocks that have no matching proposed checkpoint.',
91
+ ...booleanConfigHelper(false),
92
+ },
93
+ testPreloadStandardContracts: {
94
+ env: 'TEST_PRELOAD_STANDARD_CONTRACTS',
71
95
  description:
72
- 'Grace period in seconds, measured from the end of a proposed block build slot, after which a ' +
73
- 'proposed block with no matching proposed checkpoint is pruned as an orphan. Defaults from the ' +
74
- 'sequencer block duration at the node wiring layer when unset.',
75
- ...optionalNumberConfigHelper(),
96
+ 'Preload the standard contracts (AuthRegistry, PublicChecks, HandshakeRegistry) into the contract store at ' +
97
+ 'block 0. For test environments only, and only safe when genesis seeds the matching registration/deployment ' +
98
+ 'nullifiers; otherwise a later on-chain publish would collide with the block-0 preload.',
99
+ ...booleanConfigHelper(false),
76
100
  },
77
101
  ...chainConfigMappings,
78
102
  ...l1ReaderConfigMappings,
@@ -103,6 +127,7 @@ export function mapArchiverConfig(config: Partial<ArchiverConfig>) {
103
127
  maxAllowedEthClientDriftSeconds: config.maxAllowedEthClientDriftSeconds,
104
128
  ethereumAllowNoDebugHosts: config.ethereumAllowNoDebugHosts,
105
129
  skipHistoricalLogsCheck: config.archiverSkipHistoricalLogsCheck,
106
- orphanProposedBlockPruneGraceSeconds: config.orphanProposedBlockPruneGraceSeconds,
130
+ orphanPruneNoProposalTolerance: config.orphanPruneNoProposalTolerance,
131
+ skipOrphanProposedBlockPruning: config.skipOrphanProposedBlockPruning,
107
132
  };
108
133
  }