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

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 (142) hide show
  1. package/README.md +19 -11
  2. package/dest/archiver.d.ts +60 -19
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +292 -155
  5. package/dest/config.d.ts +4 -1
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +21 -14
  8. package/dest/errors.d.ts +55 -9
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +81 -14
  11. package/dest/factory.d.ts +14 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +56 -41
  14. package/dest/index.d.ts +12 -3
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +11 -2
  17. package/dest/l1/bin/retrieve-calldata.js +36 -33
  18. package/dest/l1/calldata_retriever.d.ts +74 -50
  19. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  20. package/dest/l1/calldata_retriever.js +201 -260
  21. package/dest/l1/data_retrieval.d.ts +26 -17
  22. package/dest/l1/data_retrieval.d.ts.map +1 -1
  23. package/dest/l1/data_retrieval.js +43 -48
  24. package/dest/l1/spire_proposer.d.ts +5 -5
  25. package/dest/l1/spire_proposer.d.ts.map +1 -1
  26. package/dest/l1/spire_proposer.js +9 -17
  27. package/dest/l1/trace_tx.d.ts +12 -66
  28. package/dest/l1/trace_tx.d.ts.map +1 -1
  29. package/dest/l1/validate_historical_logs.d.ts +23 -0
  30. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  31. package/dest/l1/validate_historical_logs.js +108 -0
  32. package/dest/l1/validate_trace.d.ts +6 -3
  33. package/dest/l1/validate_trace.d.ts.map +1 -1
  34. package/dest/l1/validate_trace.js +13 -9
  35. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  36. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  37. package/dest/modules/contract_data_source_adapter.js +40 -0
  38. package/dest/modules/data_source_base.d.ts +74 -45
  39. package/dest/modules/data_source_base.d.ts.map +1 -1
  40. package/dest/modules/data_source_base.js +269 -181
  41. package/dest/modules/data_store_updater.d.ts +49 -17
  42. package/dest/modules/data_store_updater.d.ts.map +1 -1
  43. package/dest/modules/data_store_updater.js +211 -121
  44. package/dest/modules/instrumentation.d.ts +21 -3
  45. package/dest/modules/instrumentation.d.ts.map +1 -1
  46. package/dest/modules/instrumentation.js +61 -19
  47. package/dest/modules/l1_synchronizer.d.ts +14 -12
  48. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  49. package/dest/modules/l1_synchronizer.js +445 -214
  50. package/dest/modules/outbox_trees_resolver.d.ts +62 -0
  51. package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
  52. package/dest/modules/outbox_trees_resolver.js +162 -0
  53. package/dest/modules/validation.d.ts +4 -3
  54. package/dest/modules/validation.d.ts.map +1 -1
  55. package/dest/modules/validation.js +6 -6
  56. package/dest/store/block_store.d.ts +174 -72
  57. package/dest/store/block_store.d.ts.map +1 -1
  58. package/dest/store/block_store.js +740 -273
  59. package/dest/store/contract_class_store.d.ts +17 -4
  60. package/dest/store/contract_class_store.d.ts.map +1 -1
  61. package/dest/store/contract_class_store.js +33 -73
  62. package/dest/store/contract_instance_store.d.ts +28 -1
  63. package/dest/store/contract_instance_store.d.ts.map +1 -1
  64. package/dest/store/contract_instance_store.js +37 -2
  65. package/dest/store/data_stores.d.ts +68 -0
  66. package/dest/store/data_stores.d.ts.map +1 -0
  67. package/dest/store/data_stores.js +54 -0
  68. package/dest/store/function_names_cache.d.ts +17 -0
  69. package/dest/store/function_names_cache.d.ts.map +1 -0
  70. package/dest/store/function_names_cache.js +30 -0
  71. package/dest/store/l2_tips_cache.d.ts +25 -0
  72. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  73. package/dest/store/l2_tips_cache.js +26 -0
  74. package/dest/store/log_store.d.ts +42 -37
  75. package/dest/store/log_store.d.ts.map +1 -1
  76. package/dest/store/log_store.js +262 -388
  77. package/dest/store/log_store_codec.d.ts +70 -0
  78. package/dest/store/log_store_codec.d.ts.map +1 -0
  79. package/dest/store/log_store_codec.js +101 -0
  80. package/dest/store/message_store.d.ts +11 -1
  81. package/dest/store/message_store.d.ts.map +1 -1
  82. package/dest/store/message_store.js +51 -9
  83. package/dest/test/fake_l1_state.d.ts +25 -1
  84. package/dest/test/fake_l1_state.d.ts.map +1 -1
  85. package/dest/test/fake_l1_state.js +166 -32
  86. package/dest/test/index.js +3 -1
  87. package/dest/test/mock_archiver.d.ts +1 -1
  88. package/dest/test/mock_archiver.d.ts.map +1 -1
  89. package/dest/test/mock_archiver.js +3 -2
  90. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  91. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  92. package/dest/test/mock_l1_to_l2_message_source.js +2 -1
  93. package/dest/test/mock_l2_block_source.d.ts +65 -48
  94. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  95. package/dest/test/mock_l2_block_source.js +324 -215
  96. package/dest/test/mock_structs.d.ts +6 -2
  97. package/dest/test/mock_structs.d.ts.map +1 -1
  98. package/dest/test/mock_structs.js +20 -6
  99. package/dest/test/noop_l1_archiver.d.ts +30 -0
  100. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  101. package/dest/test/noop_l1_archiver.js +85 -0
  102. package/package.json +15 -14
  103. package/src/archiver.ts +376 -180
  104. package/src/config.ts +24 -11
  105. package/src/errors.ts +122 -21
  106. package/src/factory.ts +80 -39
  107. package/src/index.ts +19 -2
  108. package/src/l1/README.md +25 -68
  109. package/src/l1/bin/retrieve-calldata.ts +46 -39
  110. package/src/l1/calldata_retriever.ts +260 -379
  111. package/src/l1/data_retrieval.ts +59 -70
  112. package/src/l1/spire_proposer.ts +7 -15
  113. package/src/l1/validate_historical_logs.ts +140 -0
  114. package/src/l1/validate_trace.ts +24 -6
  115. package/src/modules/contract_data_source_adapter.ts +55 -0
  116. package/src/modules/data_source_base.ts +354 -226
  117. package/src/modules/data_store_updater.ts +248 -153
  118. package/src/modules/instrumentation.ts +71 -19
  119. package/src/modules/l1_synchronizer.ts +586 -260
  120. package/src/modules/outbox_trees_resolver.ts +199 -0
  121. package/src/modules/validation.ts +10 -9
  122. package/src/store/block_store.ts +919 -345
  123. package/src/store/contract_class_store.ts +39 -107
  124. package/src/store/contract_instance_store.ts +51 -5
  125. package/src/store/data_stores.ts +104 -0
  126. package/src/store/function_names_cache.ts +37 -0
  127. package/src/store/l2_tips_cache.ts +35 -0
  128. package/src/store/log_store.ts +303 -499
  129. package/src/store/log_store_codec.ts +132 -0
  130. package/src/store/message_store.ts +60 -10
  131. package/src/structs/inbox_message.ts +1 -1
  132. package/src/test/fake_l1_state.ts +213 -42
  133. package/src/test/index.ts +3 -0
  134. package/src/test/mock_archiver.ts +3 -2
  135. package/src/test/mock_l1_to_l2_message_source.ts +1 -0
  136. package/src/test/mock_l2_block_source.ts +392 -233
  137. package/src/test/mock_structs.ts +42 -12
  138. package/src/test/noop_l1_archiver.ts +148 -0
  139. package/dest/store/kv_archiver_store.d.ts +0 -340
  140. package/dest/store/kv_archiver_store.d.ts.map +0 -1
  141. package/dest/store/kv_archiver_store.js +0 -447
  142. package/src/store/kv_archiver_store.ts +0 -639
@@ -1,5 +1,9 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import { createLogger } from '@aztec/foundation/log';
2
3
  import type { L2Block } from '@aztec/stdlib/block';
4
+ import type { CheckpointData } from '@aztec/stdlib/checkpoint';
5
+ import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
6
+ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
3
7
  import {
4
8
  Attributes,
5
9
  type Gauge,
@@ -10,12 +14,14 @@ import {
10
14
  type TelemetryClient,
11
15
  type Tracer,
12
16
  type UpDownCounter,
17
+ createUpDownCounterWithDefault,
13
18
  } from '@aztec/telemetry-client';
14
19
 
15
20
  export class ArchiverInstrumentation {
16
21
  public readonly tracer: Tracer;
17
22
 
18
23
  private blockHeight: Gauge;
24
+ private checkpointHeight: Gauge;
19
25
  private txCount: UpDownCounter;
20
26
  private l1BlockHeight: Gauge;
21
27
  private proofsSubmittedDelay: Histogram;
@@ -26,6 +32,7 @@ export class ArchiverInstrumentation {
26
32
  private pruneCount: UpDownCounter;
27
33
 
28
34
  private syncDurationPerBlock: Histogram;
35
+ private syncDurationPerCheckpoint: Histogram;
29
36
  private syncBlockCount: UpDownCounter;
30
37
  private manaPerBlock: Histogram;
31
38
  private txsPerBlock: Histogram;
@@ -35,6 +42,9 @@ export class ArchiverInstrumentation {
35
42
 
36
43
  private blockProposalTxTargetCount: UpDownCounter;
37
44
 
45
+ private checkpointL1InclusionDelay: Histogram;
46
+ private checkpointPromotedCount: UpDownCounter;
47
+
38
48
  private log = createLogger('archiver:instrumentation');
39
49
 
40
50
  private constructor(
@@ -46,17 +56,23 @@ export class ArchiverInstrumentation {
46
56
 
47
57
  this.blockHeight = meter.createGauge(Metrics.ARCHIVER_BLOCK_HEIGHT);
48
58
 
59
+ this.checkpointHeight = meter.createGauge(Metrics.ARCHIVER_CHECKPOINT_HEIGHT);
60
+
49
61
  this.l1BlockHeight = meter.createGauge(Metrics.ARCHIVER_L1_BLOCK_HEIGHT);
50
62
 
51
- this.txCount = meter.createUpDownCounter(Metrics.ARCHIVER_TOTAL_TXS);
63
+ this.txCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_TOTAL_TXS);
52
64
 
53
- this.proofsSubmittedCount = meter.createUpDownCounter(Metrics.ARCHIVER_ROLLUP_PROOF_COUNT);
65
+ this.proofsSubmittedCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_ROLLUP_PROOF_COUNT, {
66
+ [Attributes.PROOF_TIMED_OUT]: [true, false],
67
+ });
54
68
 
55
69
  this.proofsSubmittedDelay = meter.createHistogram(Metrics.ARCHIVER_ROLLUP_PROOF_DELAY);
56
70
 
57
71
  this.syncDurationPerBlock = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_BLOCK);
58
72
 
59
- this.syncBlockCount = meter.createUpDownCounter(Metrics.ARCHIVER_SYNC_BLOCK_COUNT);
73
+ this.syncDurationPerCheckpoint = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_CHECKPOINT);
74
+
75
+ this.syncBlockCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_SYNC_BLOCK_COUNT);
60
76
 
61
77
  this.manaPerBlock = meter.createHistogram(Metrics.ARCHIVER_MANA_PER_BLOCK);
62
78
 
@@ -64,13 +80,23 @@ export class ArchiverInstrumentation {
64
80
 
65
81
  this.syncDurationPerMessage = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_MESSAGE);
66
82
 
67
- this.syncMessageCount = meter.createUpDownCounter(Metrics.ARCHIVER_SYNC_MESSAGE_COUNT);
83
+ this.syncMessageCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_SYNC_MESSAGE_COUNT);
68
84
 
69
85
  this.pruneDuration = meter.createHistogram(Metrics.ARCHIVER_PRUNE_DURATION);
70
86
 
71
- this.pruneCount = meter.createUpDownCounter(Metrics.ARCHIVER_PRUNE_COUNT);
87
+ this.pruneCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_PRUNE_COUNT);
72
88
 
73
- this.blockProposalTxTargetCount = meter.createUpDownCounter(Metrics.ARCHIVER_BLOCK_PROPOSAL_TX_TARGET_COUNT);
89
+ this.blockProposalTxTargetCount = createUpDownCounterWithDefault(
90
+ meter,
91
+ Metrics.ARCHIVER_BLOCK_PROPOSAL_TX_TARGET_COUNT,
92
+ {
93
+ [Attributes.L1_BLOCK_PROPOSAL_USED_TRACE]: [true, false],
94
+ },
95
+ );
96
+
97
+ this.checkpointL1InclusionDelay = meter.createHistogram(Metrics.ARCHIVER_CHECKPOINT_L1_INCLUSION_DELAY);
98
+
99
+ this.checkpointPromotedCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_CHECKPOINT_PROMOTED_COUNT);
74
100
 
75
101
  this.dbMetrics = new LmdbMetrics(
76
102
  meter,
@@ -84,10 +110,6 @@ export class ArchiverInstrumentation {
84
110
  public static async new(telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback) {
85
111
  const instance = new ArchiverInstrumentation(telemetry, lmdbStats);
86
112
 
87
- instance.syncBlockCount.add(0);
88
- instance.syncMessageCount.add(0);
89
- instance.pruneCount.add(0);
90
-
91
113
  await instance.telemetry.flush();
92
114
 
93
115
  return instance;
@@ -97,16 +119,26 @@ export class ArchiverInstrumentation {
97
119
  return this.telemetry.isEnabled();
98
120
  }
99
121
 
100
- public processNewBlocks(syncTimePerBlock: number, blocks: L2Block[]) {
122
+ public processNewProposedBlock(syncTimePerBlock: number, block: L2Block) {
123
+ const attrs = { [Attributes.STATUS]: 'proposed' };
124
+ this.blockHeight.record(block.number, attrs);
101
125
  this.syncDurationPerBlock.record(Math.ceil(syncTimePerBlock));
102
- this.blockHeight.record(Math.max(...blocks.map(b => b.number)));
103
- this.syncBlockCount.add(blocks.length);
104
126
 
105
- for (const block of blocks) {
106
- this.txCount.add(block.body.txEffects.length);
107
- this.txsPerBlock.record(block.body.txEffects.length);
108
- this.manaPerBlock.record(block.header.totalManaUsed.toNumber() / 1e6);
127
+ // Per block metrics
128
+ this.txCount.add(block.body.txEffects.length);
129
+ this.txsPerBlock.record(block.body.txEffects.length);
130
+ this.manaPerBlock.record(block.header.totalManaUsed.toNumber() / 1e6);
131
+ }
132
+
133
+ public processNewCheckpointedBlocks(syncTimePerCheckpoint: number, blocks: L2Block[]) {
134
+ if (blocks.length === 0) {
135
+ return;
109
136
  }
137
+
138
+ this.syncDurationPerCheckpoint.record(Math.ceil(syncTimePerCheckpoint));
139
+ this.blockHeight.record(Math.max(...blocks.map(b => b.number)), { [Attributes.STATUS]: 'checkpointed' });
140
+ this.checkpointHeight.record(Math.max(...blocks.map(b => b.checkpointNumber)));
141
+ this.syncBlockCount.add(blocks.length);
110
142
  }
111
143
 
112
144
  public processNewMessages(count: number, syncPerMessageMs: number) {
@@ -122,8 +154,10 @@ export class ArchiverInstrumentation {
122
154
  this.pruneDuration.record(Math.ceil(duration));
123
155
  }
124
156
 
125
- public updateLastProvenBlock(blockNumber: number) {
126
- this.blockHeight.record(blockNumber, { [Attributes.STATUS]: 'proven' });
157
+ public updateLastProvenCheckpoint(checkpoint: CheckpointData) {
158
+ const lastBlockNumberInCheckpoint = checkpoint.startBlock + checkpoint.blockCount - 1;
159
+ this.blockHeight.record(lastBlockNumberInCheckpoint, { [Attributes.STATUS]: 'proven' });
160
+ this.checkpointHeight.record(checkpoint.checkpointNumber, { [Attributes.STATUS]: 'proven' });
127
161
  }
128
162
 
129
163
  public processProofsVerified(logs: { proverId: string; l2BlockNumber: bigint; delay: bigint }[]) {
@@ -149,4 +183,22 @@ export class ArchiverInstrumentation {
149
183
  [Attributes.L1_BLOCK_PROPOSAL_USED_TRACE]: usedTrace,
150
184
  });
151
185
  }
186
+
187
+ /** Records a checkpoint promoted from proposed (blob fetch skipped). */
188
+ public processCheckpointPromoted() {
189
+ this.checkpointPromotedCount.add(1);
190
+ }
191
+
192
+ /**
193
+ * Records L1 inclusion timing for a checkpoint observed on L1 (seconds into the L2 slot).
194
+ */
195
+ public processCheckpointL1Timing(data: {
196
+ slotNumber: SlotNumber;
197
+ l1Timestamp: bigint;
198
+ l1Constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration'>;
199
+ }): void {
200
+ const slotStartTs = getTimestampForSlot(data.slotNumber, data.l1Constants);
201
+ const inclusionDelaySeconds = Number(data.l1Timestamp - slotStartTs);
202
+ this.checkpointL1InclusionDelay.record(inclusionDelaySeconds);
203
+ }
152
204
  }