@aztec/archiver 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f

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 (235) hide show
  1. package/README.md +164 -22
  2. package/dest/archiver.d.ts +158 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +881 -0
  5. package/dest/config.d.ts +33 -0
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/config.js +79 -0
  8. package/dest/errors.d.ts +87 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +129 -0
  11. package/dest/factory.d.ts +16 -10
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +112 -20
  14. package/dest/index.d.ts +19 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +17 -3
  17. package/dest/interfaces.d.ts +9 -0
  18. package/dest/interfaces.d.ts.map +1 -0
  19. package/dest/interfaces.js +3 -0
  20. package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.d.ts +1 -1
  21. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  22. package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.js +35 -32
  23. package/dest/l1/calldata_retriever.d.ts +136 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +412 -0
  26. package/dest/l1/data_retrieval.d.ts +97 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver/l1 → l1}/data_retrieval.js +65 -89
  29. package/dest/{archiver/l1 → l1}/debug_tx.d.ts +1 -1
  30. package/dest/l1/debug_tx.d.ts.map +1 -0
  31. package/dest/{archiver/l1 → l1}/spire_proposer.d.ts +5 -5
  32. package/dest/l1/spire_proposer.d.ts.map +1 -0
  33. package/dest/{archiver/l1 → l1}/spire_proposer.js +9 -17
  34. package/dest/l1/trace_tx.d.ts +43 -0
  35. package/dest/l1/trace_tx.d.ts.map +1 -0
  36. package/dest/l1/types.d.ts +12 -0
  37. package/dest/l1/types.d.ts.map +1 -0
  38. package/dest/l1/validate_historical_logs.d.ts +23 -0
  39. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  40. package/dest/l1/validate_historical_logs.js +108 -0
  41. package/dest/{archiver/l1 → l1}/validate_trace.d.ts +6 -3
  42. package/dest/l1/validate_trace.d.ts.map +1 -0
  43. package/dest/{archiver/l1 → l1}/validate_trace.js +14 -10
  44. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  45. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  46. package/dest/modules/contract_data_source_adapter.js +40 -0
  47. package/dest/modules/data_source_base.d.ts +113 -0
  48. package/dest/modules/data_source_base.d.ts.map +1 -0
  49. package/dest/modules/data_source_base.js +351 -0
  50. package/dest/modules/data_store_updater.d.ts +105 -0
  51. package/dest/modules/data_store_updater.d.ts.map +1 -0
  52. package/dest/modules/data_store_updater.js +392 -0
  53. package/dest/modules/instrumentation.d.ts +55 -0
  54. package/dest/modules/instrumentation.d.ts.map +1 -0
  55. package/dest/modules/instrumentation.js +145 -0
  56. package/dest/modules/l1_synchronizer.d.ts +77 -0
  57. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  58. package/dest/modules/l1_synchronizer.js +1344 -0
  59. package/dest/modules/validation.d.ts +18 -0
  60. package/dest/modules/validation.d.ts.map +1 -0
  61. package/dest/{archiver → modules}/validation.js +13 -7
  62. package/dest/store/block_store.d.ts +300 -0
  63. package/dest/store/block_store.d.ts.map +1 -0
  64. package/dest/store/block_store.js +1219 -0
  65. package/dest/store/contract_class_store.d.ts +31 -0
  66. package/dest/store/contract_class_store.d.ts.map +1 -0
  67. package/dest/store/contract_class_store.js +80 -0
  68. package/dest/store/contract_instance_store.d.ts +51 -0
  69. package/dest/store/contract_instance_store.d.ts.map +1 -0
  70. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +38 -3
  71. package/dest/store/data_stores.d.ts +68 -0
  72. package/dest/store/data_stores.d.ts.map +1 -0
  73. package/dest/store/data_stores.js +54 -0
  74. package/dest/store/function_names_cache.d.ts +17 -0
  75. package/dest/store/function_names_cache.d.ts.map +1 -0
  76. package/dest/store/function_names_cache.js +30 -0
  77. package/dest/store/l2_tips_cache.d.ts +25 -0
  78. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  79. package/dest/store/l2_tips_cache.js +26 -0
  80. package/dest/store/log_store.d.ts +59 -0
  81. package/dest/store/log_store.d.ts.map +1 -0
  82. package/dest/store/log_store.js +310 -0
  83. package/dest/store/log_store_codec.d.ts +70 -0
  84. package/dest/store/log_store_codec.d.ts.map +1 -0
  85. package/dest/store/log_store_codec.js +101 -0
  86. package/dest/store/message_store.d.ts +50 -0
  87. package/dest/store/message_store.d.ts.map +1 -0
  88. package/dest/{archiver/kv_archiver_store → store}/message_store.js +51 -9
  89. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  90. package/dest/structs/data_retrieval.d.ts.map +1 -0
  91. package/dest/structs/inbox_message.d.ts +15 -0
  92. package/dest/structs/inbox_message.d.ts.map +1 -0
  93. package/dest/{archiver/structs → structs}/published.d.ts +1 -1
  94. package/dest/structs/published.d.ts.map +1 -0
  95. package/dest/test/fake_l1_state.d.ts +214 -0
  96. package/dest/test/fake_l1_state.d.ts.map +1 -0
  97. package/dest/test/fake_l1_state.js +517 -0
  98. package/dest/test/index.d.ts +2 -1
  99. package/dest/test/index.d.ts.map +1 -1
  100. package/dest/test/index.js +4 -1
  101. package/dest/test/mock_archiver.d.ts +2 -2
  102. package/dest/test/mock_archiver.d.ts.map +1 -1
  103. package/dest/test/mock_archiver.js +3 -3
  104. package/dest/test/mock_l1_to_l2_message_source.d.ts +2 -2
  105. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  106. package/dest/test/mock_l1_to_l2_message_source.js +14 -4
  107. package/dest/test/mock_l2_block_source.d.ts +68 -40
  108. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  109. package/dest/test/mock_l2_block_source.js +356 -131
  110. package/dest/test/mock_structs.d.ts +81 -3
  111. package/dest/test/mock_structs.d.ts.map +1 -1
  112. package/dest/test/mock_structs.js +152 -7
  113. package/dest/test/noop_l1_archiver.d.ts +29 -0
  114. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  115. package/dest/test/noop_l1_archiver.js +85 -0
  116. package/package.json +17 -18
  117. package/src/archiver.ts +681 -0
  118. package/src/{archiver/config.ts → config.ts} +45 -14
  119. package/src/errors.ts +203 -0
  120. package/src/factory.ts +175 -22
  121. package/src/index.ts +27 -3
  122. package/src/interfaces.ts +9 -0
  123. package/src/l1/README.md +55 -0
  124. package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +45 -33
  125. package/src/l1/calldata_retriever.ts +522 -0
  126. package/src/{archiver/l1 → l1}/data_retrieval.ts +106 -134
  127. package/src/{archiver/l1 → l1}/spire_proposer.ts +7 -15
  128. package/src/l1/validate_historical_logs.ts +140 -0
  129. package/src/{archiver/l1 → l1}/validate_trace.ts +25 -7
  130. package/src/modules/contract_data_source_adapter.ts +55 -0
  131. package/src/modules/data_source_base.ts +493 -0
  132. package/src/modules/data_store_updater.ts +518 -0
  133. package/src/modules/instrumentation.ts +204 -0
  134. package/src/modules/l1_synchronizer.ts +1257 -0
  135. package/src/{archiver → modules}/validation.ts +21 -15
  136. package/src/store/block_store.ts +1590 -0
  137. package/src/store/contract_class_store.ts +108 -0
  138. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +52 -6
  139. package/src/store/data_stores.ts +104 -0
  140. package/src/store/function_names_cache.ts +37 -0
  141. package/src/store/l2_tips_cache.ts +35 -0
  142. package/src/store/log_store.ts +379 -0
  143. package/src/store/log_store_codec.ts +132 -0
  144. package/src/{archiver/kv_archiver_store → store}/message_store.ts +60 -10
  145. package/src/{archiver/structs → structs}/inbox_message.ts +1 -1
  146. package/src/test/fake_l1_state.ts +770 -0
  147. package/src/test/index.ts +4 -0
  148. package/src/test/mock_archiver.ts +4 -3
  149. package/src/test/mock_l1_to_l2_message_source.ts +11 -4
  150. package/src/test/mock_l2_block_source.ts +434 -144
  151. package/src/test/mock_structs.ts +283 -8
  152. package/src/test/noop_l1_archiver.ts +139 -0
  153. package/dest/archiver/archiver.d.ts +0 -304
  154. package/dest/archiver/archiver.d.ts.map +0 -1
  155. package/dest/archiver/archiver.js +0 -1645
  156. package/dest/archiver/archiver_store.d.ts +0 -308
  157. package/dest/archiver/archiver_store.d.ts.map +0 -1
  158. package/dest/archiver/archiver_store.js +0 -4
  159. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  160. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  161. package/dest/archiver/archiver_store_test_suite.js +0 -2790
  162. package/dest/archiver/config.d.ts +0 -22
  163. package/dest/archiver/config.d.ts.map +0 -1
  164. package/dest/archiver/config.js +0 -62
  165. package/dest/archiver/errors.d.ts +0 -36
  166. package/dest/archiver/errors.d.ts.map +0 -1
  167. package/dest/archiver/errors.js +0 -54
  168. package/dest/archiver/index.d.ts +0 -7
  169. package/dest/archiver/index.d.ts.map +0 -1
  170. package/dest/archiver/index.js +0 -4
  171. package/dest/archiver/instrumentation.d.ts +0 -37
  172. package/dest/archiver/instrumentation.d.ts.map +0 -1
  173. package/dest/archiver/instrumentation.js +0 -151
  174. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -157
  175. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  176. package/dest/archiver/kv_archiver_store/block_store.js +0 -607
  177. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  178. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  179. package/dest/archiver/kv_archiver_store/contract_class_store.js +0 -120
  180. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  181. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  182. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -158
  183. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  184. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -313
  185. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -45
  186. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  187. package/dest/archiver/kv_archiver_store/log_store.js +0 -404
  188. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -40
  189. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  190. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
  191. package/dest/archiver/l1/calldata_retriever.d.ts +0 -112
  192. package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
  193. package/dest/archiver/l1/calldata_retriever.js +0 -471
  194. package/dest/archiver/l1/data_retrieval.d.ts +0 -90
  195. package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
  196. package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
  197. package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
  198. package/dest/archiver/l1/trace_tx.d.ts +0 -97
  199. package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
  200. package/dest/archiver/l1/types.d.ts +0 -12
  201. package/dest/archiver/l1/types.d.ts.map +0 -1
  202. package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
  203. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  204. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  205. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  206. package/dest/archiver/structs/published.d.ts.map +0 -1
  207. package/dest/archiver/validation.d.ts +0 -17
  208. package/dest/archiver/validation.d.ts.map +0 -1
  209. package/dest/rpc/index.d.ts +0 -9
  210. package/dest/rpc/index.d.ts.map +0 -1
  211. package/dest/rpc/index.js +0 -15
  212. package/src/archiver/archiver.ts +0 -2157
  213. package/src/archiver/archiver_store.ts +0 -372
  214. package/src/archiver/archiver_store_test_suite.ts +0 -2863
  215. package/src/archiver/errors.ts +0 -90
  216. package/src/archiver/index.ts +0 -6
  217. package/src/archiver/instrumentation.ts +0 -201
  218. package/src/archiver/kv_archiver_store/block_store.ts +0 -822
  219. package/src/archiver/kv_archiver_store/contract_class_store.ts +0 -176
  220. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -438
  221. package/src/archiver/kv_archiver_store/log_store.ts +0 -522
  222. package/src/archiver/l1/README.md +0 -98
  223. package/src/archiver/l1/calldata_retriever.ts +0 -641
  224. package/src/rpc/index.ts +0 -16
  225. /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
  226. /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
  227. /package/dest/{archiver/l1 → l1}/types.js +0 -0
  228. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  229. /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
  230. /package/dest/{archiver/structs → structs}/published.js +0 -0
  231. /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
  232. /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
  233. /package/src/{archiver/l1 → l1}/types.ts +0 -0
  234. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
  235. /package/src/{archiver/structs → structs}/published.ts +0 -0
@@ -0,0 +1,204 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { createLogger } from '@aztec/foundation/log';
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';
7
+ import {
8
+ Attributes,
9
+ type Gauge,
10
+ type Histogram,
11
+ LmdbMetrics,
12
+ type LmdbStatsCallback,
13
+ Metrics,
14
+ type TelemetryClient,
15
+ type Tracer,
16
+ type UpDownCounter,
17
+ createUpDownCounterWithDefault,
18
+ } from '@aztec/telemetry-client';
19
+
20
+ export class ArchiverInstrumentation {
21
+ public readonly tracer: Tracer;
22
+
23
+ private blockHeight: Gauge;
24
+ private checkpointHeight: Gauge;
25
+ private txCount: UpDownCounter;
26
+ private l1BlockHeight: Gauge;
27
+ private proofsSubmittedDelay: Histogram;
28
+ private proofsSubmittedCount: UpDownCounter;
29
+ private dbMetrics: LmdbMetrics;
30
+
31
+ private pruneDuration: Histogram;
32
+ private pruneCount: UpDownCounter;
33
+
34
+ private syncDurationPerBlock: Histogram;
35
+ private syncDurationPerCheckpoint: Histogram;
36
+ private syncBlockCount: UpDownCounter;
37
+ private manaPerBlock: Histogram;
38
+ private txsPerBlock: Histogram;
39
+
40
+ private syncDurationPerMessage: Histogram;
41
+ private syncMessageCount: UpDownCounter;
42
+
43
+ private blockProposalTxTargetCount: UpDownCounter;
44
+
45
+ private checkpointL1InclusionDelay: Histogram;
46
+ private checkpointPromotedCount: UpDownCounter;
47
+
48
+ private log = createLogger('archiver:instrumentation');
49
+
50
+ private constructor(
51
+ private telemetry: TelemetryClient,
52
+ lmdbStats?: LmdbStatsCallback,
53
+ ) {
54
+ this.tracer = telemetry.getTracer('Archiver');
55
+ const meter = telemetry.getMeter('Archiver');
56
+
57
+ this.blockHeight = meter.createGauge(Metrics.ARCHIVER_BLOCK_HEIGHT);
58
+
59
+ this.checkpointHeight = meter.createGauge(Metrics.ARCHIVER_CHECKPOINT_HEIGHT);
60
+
61
+ this.l1BlockHeight = meter.createGauge(Metrics.ARCHIVER_L1_BLOCK_HEIGHT);
62
+
63
+ this.txCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_TOTAL_TXS);
64
+
65
+ this.proofsSubmittedCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_ROLLUP_PROOF_COUNT, {
66
+ [Attributes.PROOF_TIMED_OUT]: [true, false],
67
+ });
68
+
69
+ this.proofsSubmittedDelay = meter.createHistogram(Metrics.ARCHIVER_ROLLUP_PROOF_DELAY);
70
+
71
+ this.syncDurationPerBlock = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_BLOCK);
72
+
73
+ this.syncDurationPerCheckpoint = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_CHECKPOINT);
74
+
75
+ this.syncBlockCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_SYNC_BLOCK_COUNT);
76
+
77
+ this.manaPerBlock = meter.createHistogram(Metrics.ARCHIVER_MANA_PER_BLOCK);
78
+
79
+ this.txsPerBlock = meter.createHistogram(Metrics.ARCHIVER_TXS_PER_BLOCK);
80
+
81
+ this.syncDurationPerMessage = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_MESSAGE);
82
+
83
+ this.syncMessageCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_SYNC_MESSAGE_COUNT);
84
+
85
+ this.pruneDuration = meter.createHistogram(Metrics.ARCHIVER_PRUNE_DURATION);
86
+
87
+ this.pruneCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_PRUNE_COUNT);
88
+
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);
100
+
101
+ this.dbMetrics = new LmdbMetrics(
102
+ meter,
103
+ {
104
+ [Attributes.DB_DATA_TYPE]: 'archiver',
105
+ },
106
+ lmdbStats,
107
+ );
108
+ }
109
+
110
+ public static async new(telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback) {
111
+ const instance = new ArchiverInstrumentation(telemetry, lmdbStats);
112
+
113
+ await instance.telemetry.flush();
114
+
115
+ return instance;
116
+ }
117
+
118
+ public isEnabled(): boolean {
119
+ return this.telemetry.isEnabled();
120
+ }
121
+
122
+ public processNewProposedBlock(syncTimePerBlock: number, block: L2Block) {
123
+ const attrs = { [Attributes.STATUS]: 'proposed' };
124
+ this.blockHeight.record(block.number, attrs);
125
+ this.syncDurationPerBlock.record(Math.ceil(syncTimePerBlock));
126
+
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;
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);
142
+ }
143
+
144
+ public processNewMessages(count: number, syncPerMessageMs: number) {
145
+ if (count === 0) {
146
+ return;
147
+ }
148
+ this.syncMessageCount.add(count);
149
+ this.syncDurationPerMessage.record(Math.ceil(syncPerMessageMs));
150
+ }
151
+
152
+ public processPrune(duration: number) {
153
+ this.pruneCount.add(1);
154
+ this.pruneDuration.record(Math.ceil(duration));
155
+ }
156
+
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' });
161
+ }
162
+
163
+ public processProofsVerified(logs: { proverId: string; l2BlockNumber: bigint; delay: bigint }[]) {
164
+ for (const log of logs) {
165
+ this.log.debug('Recording proof verified event', log);
166
+ this.proofsSubmittedCount.add(1, {
167
+ [Attributes.ROLLUP_PROVER_ID]: log.proverId,
168
+ [Attributes.PROOF_TIMED_OUT]: log.delay > 20n * 60n * 1000n,
169
+ });
170
+ this.proofsSubmittedDelay.record(Math.ceil(Number(log.delay)), {
171
+ [Attributes.ROLLUP_PROVER_ID]: log.proverId,
172
+ });
173
+ }
174
+ }
175
+
176
+ public updateL1BlockHeight(blockNumber: bigint) {
177
+ this.l1BlockHeight.record(Number(blockNumber));
178
+ }
179
+
180
+ public recordBlockProposalTxTarget(target: string, usedTrace: boolean) {
181
+ this.blockProposalTxTargetCount.add(1, {
182
+ [Attributes.L1_BLOCK_PROPOSAL_TX_TARGET]: target.toLowerCase(),
183
+ [Attributes.L1_BLOCK_PROPOSAL_USED_TRACE]: usedTrace,
184
+ });
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
+ }
204
+ }