@aztec/archiver 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc

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 (204) hide show
  1. package/README.md +156 -22
  2. package/dest/archiver.d.ts +139 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +699 -0
  5. package/dest/{archiver/config.d.ts → config.d.ts} +9 -1
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/{archiver/config.js → config.js} +11 -2
  8. package/dest/errors.d.ts +41 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/{archiver/errors.js → errors.js} +8 -0
  11. package/dest/factory.d.ts +9 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +91 -11
  14. package/dest/index.d.ts +11 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +9 -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 +135 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +402 -0
  26. package/dest/l1/data_retrieval.d.ts +88 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver/l1 → l1}/data_retrieval.js +54 -71
  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/{archiver/l1 → l1}/trace_tx.d.ts +1 -1
  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/{archiver/l1 → l1}/validate_trace.d.ts +6 -3
  39. package/dest/l1/validate_trace.d.ts.map +1 -0
  40. package/dest/{archiver/l1 → l1}/validate_trace.js +14 -10
  41. package/dest/modules/data_source_base.d.ts +89 -0
  42. package/dest/modules/data_source_base.d.ts.map +1 -0
  43. package/dest/modules/data_source_base.js +216 -0
  44. package/dest/modules/data_store_updater.d.ts +80 -0
  45. package/dest/modules/data_store_updater.d.ts.map +1 -0
  46. package/dest/modules/data_store_updater.js +323 -0
  47. package/dest/modules/instrumentation.d.ts +50 -0
  48. package/dest/modules/instrumentation.d.ts.map +1 -0
  49. package/dest/{archiver → modules}/instrumentation.js +44 -68
  50. package/dest/modules/l1_synchronizer.d.ts +71 -0
  51. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  52. package/dest/modules/l1_synchronizer.js +1117 -0
  53. package/dest/modules/validation.d.ts +17 -0
  54. package/dest/modules/validation.d.ts.map +1 -0
  55. package/dest/{archiver → modules}/validation.js +7 -1
  56. package/dest/store/block_store.d.ts +196 -0
  57. package/dest/store/block_store.d.ts.map +1 -0
  58. package/dest/{archiver/kv_archiver_store → store}/block_store.js +228 -62
  59. package/dest/store/contract_class_store.d.ts +18 -0
  60. package/dest/store/contract_class_store.d.ts.map +1 -0
  61. package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +12 -8
  62. package/dest/store/contract_instance_store.d.ts +24 -0
  63. package/dest/store/contract_instance_store.d.ts.map +1 -0
  64. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
  65. package/dest/store/kv_archiver_store.d.ts +354 -0
  66. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  67. package/dest/store/kv_archiver_store.js +464 -0
  68. package/dest/store/l2_tips_cache.d.ts +19 -0
  69. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  70. package/dest/store/l2_tips_cache.js +89 -0
  71. package/dest/store/log_store.d.ts +54 -0
  72. package/dest/store/log_store.d.ts.map +1 -0
  73. package/dest/{archiver/kv_archiver_store → store}/log_store.js +146 -91
  74. package/dest/{archiver/kv_archiver_store → store}/message_store.d.ts +1 -1
  75. package/dest/store/message_store.d.ts.map +1 -0
  76. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  77. package/dest/structs/data_retrieval.d.ts.map +1 -0
  78. package/dest/structs/inbox_message.d.ts +15 -0
  79. package/dest/structs/inbox_message.d.ts.map +1 -0
  80. package/dest/{archiver/structs → structs}/published.d.ts +1 -1
  81. package/dest/structs/published.d.ts.map +1 -0
  82. package/dest/test/fake_l1_state.d.ts +195 -0
  83. package/dest/test/fake_l1_state.d.ts.map +1 -0
  84. package/dest/test/fake_l1_state.js +421 -0
  85. package/dest/test/index.d.ts +2 -1
  86. package/dest/test/index.d.ts.map +1 -1
  87. package/dest/test/index.js +4 -1
  88. package/dest/test/mock_archiver.d.ts +2 -2
  89. package/dest/test/mock_archiver.d.ts.map +1 -1
  90. package/dest/test/mock_archiver.js +3 -3
  91. package/dest/test/mock_l1_to_l2_message_source.d.ts +2 -2
  92. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  93. package/dest/test/mock_l1_to_l2_message_source.js +12 -3
  94. package/dest/test/mock_l2_block_source.d.ts +39 -17
  95. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  96. package/dest/test/mock_l2_block_source.js +232 -83
  97. package/dest/test/mock_structs.d.ts +78 -3
  98. package/dest/test/mock_structs.d.ts.map +1 -1
  99. package/dest/test/mock_structs.js +140 -7
  100. package/dest/test/noop_l1_archiver.d.ts +23 -0
  101. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  102. package/dest/test/noop_l1_archiver.js +68 -0
  103. package/package.json +16 -17
  104. package/src/archiver.ts +443 -0
  105. package/src/{archiver/config.ts → config.ts} +13 -2
  106. package/src/{archiver/errors.ts → errors.ts} +12 -0
  107. package/src/factory.ts +139 -11
  108. package/src/index.ts +11 -3
  109. package/src/interfaces.ts +9 -0
  110. package/src/l1/README.md +55 -0
  111. package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +45 -33
  112. package/src/l1/calldata_retriever.ts +511 -0
  113. package/src/{archiver/l1 → l1}/data_retrieval.ts +75 -94
  114. package/src/{archiver/l1 → l1}/spire_proposer.ts +7 -15
  115. package/src/{archiver/l1 → l1}/validate_trace.ts +25 -7
  116. package/src/modules/data_source_base.ts +328 -0
  117. package/src/modules/data_store_updater.ts +448 -0
  118. package/src/{archiver → modules}/instrumentation.ts +53 -70
  119. package/src/modules/l1_synchronizer.ts +933 -0
  120. package/src/{archiver → modules}/validation.ts +11 -6
  121. package/src/{archiver/kv_archiver_store → store}/block_store.ts +293 -100
  122. package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +12 -8
  123. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +1 -1
  124. package/src/{archiver/kv_archiver_store → store}/kv_archiver_store.ts +273 -40
  125. package/src/store/l2_tips_cache.ts +89 -0
  126. package/src/{archiver/kv_archiver_store → store}/log_store.ts +242 -121
  127. package/src/test/fake_l1_state.ts +657 -0
  128. package/src/test/index.ts +4 -0
  129. package/src/test/mock_archiver.ts +4 -3
  130. package/src/test/mock_l1_to_l2_message_source.ts +10 -4
  131. package/src/test/mock_l2_block_source.ts +276 -90
  132. package/src/test/mock_structs.ts +269 -8
  133. package/src/test/noop_l1_archiver.ts +109 -0
  134. package/dest/archiver/archiver.d.ts +0 -304
  135. package/dest/archiver/archiver.d.ts.map +0 -1
  136. package/dest/archiver/archiver.js +0 -1645
  137. package/dest/archiver/archiver_store.d.ts +0 -308
  138. package/dest/archiver/archiver_store.d.ts.map +0 -1
  139. package/dest/archiver/archiver_store.js +0 -4
  140. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  141. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  142. package/dest/archiver/archiver_store_test_suite.js +0 -2770
  143. package/dest/archiver/config.d.ts.map +0 -1
  144. package/dest/archiver/errors.d.ts +0 -36
  145. package/dest/archiver/errors.d.ts.map +0 -1
  146. package/dest/archiver/index.d.ts +0 -7
  147. package/dest/archiver/index.d.ts.map +0 -1
  148. package/dest/archiver/index.js +0 -4
  149. package/dest/archiver/instrumentation.d.ts +0 -37
  150. package/dest/archiver/instrumentation.d.ts.map +0 -1
  151. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -157
  152. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  153. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  154. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  155. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  156. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  157. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -158
  158. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  159. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -313
  160. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -45
  161. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  162. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  163. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
  164. package/dest/archiver/l1/calldata_retriever.d.ts +0 -112
  165. package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
  166. package/dest/archiver/l1/calldata_retriever.js +0 -471
  167. package/dest/archiver/l1/data_retrieval.d.ts +0 -90
  168. package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
  169. package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
  170. package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
  171. package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
  172. package/dest/archiver/l1/types.d.ts +0 -12
  173. package/dest/archiver/l1/types.d.ts.map +0 -1
  174. package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
  175. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  176. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  177. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  178. package/dest/archiver/structs/published.d.ts.map +0 -1
  179. package/dest/archiver/validation.d.ts +0 -17
  180. package/dest/archiver/validation.d.ts.map +0 -1
  181. package/dest/rpc/index.d.ts +0 -9
  182. package/dest/rpc/index.d.ts.map +0 -1
  183. package/dest/rpc/index.js +0 -15
  184. package/src/archiver/archiver.ts +0 -2157
  185. package/src/archiver/archiver_store.ts +0 -372
  186. package/src/archiver/archiver_store_test_suite.ts +0 -2843
  187. package/src/archiver/index.ts +0 -6
  188. package/src/archiver/l1/README.md +0 -98
  189. package/src/archiver/l1/calldata_retriever.ts +0 -641
  190. package/src/rpc/index.ts +0 -16
  191. /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
  192. /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
  193. /package/dest/{archiver/l1 → l1}/types.js +0 -0
  194. /package/dest/{archiver/kv_archiver_store → store}/message_store.js +0 -0
  195. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  196. /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
  197. /package/dest/{archiver/structs → structs}/published.js +0 -0
  198. /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
  199. /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
  200. /package/src/{archiver/l1 → l1}/types.ts +0 -0
  201. /package/src/{archiver/kv_archiver_store → store}/message_store.ts +0 -0
  202. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
  203. /package/src/{archiver/structs → structs}/inbox_message.ts +0 -0
  204. /package/src/{archiver/structs → structs}/published.ts +0 -0
@@ -0,0 +1,50 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import type { L2Block } from '@aztec/stdlib/block';
3
+ import type { CheckpointData } from '@aztec/stdlib/checkpoint';
4
+ import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
5
+ import { type LmdbStatsCallback, type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
6
+ export declare class ArchiverInstrumentation {
7
+ private telemetry;
8
+ readonly tracer: Tracer;
9
+ private blockHeight;
10
+ private checkpointHeight;
11
+ private txCount;
12
+ private l1BlockHeight;
13
+ private proofsSubmittedDelay;
14
+ private proofsSubmittedCount;
15
+ private dbMetrics;
16
+ private pruneDuration;
17
+ private pruneCount;
18
+ private syncDurationPerBlock;
19
+ private syncBlockCount;
20
+ private manaPerBlock;
21
+ private txsPerBlock;
22
+ private syncDurationPerMessage;
23
+ private syncMessageCount;
24
+ private blockProposalTxTargetCount;
25
+ private checkpointL1InclusionDelay;
26
+ private log;
27
+ private constructor();
28
+ static new(telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback): Promise<ArchiverInstrumentation>;
29
+ isEnabled(): boolean;
30
+ processNewBlocks(syncTimePerBlock: number, blocks: L2Block[]): void;
31
+ processNewMessages(count: number, syncPerMessageMs: number): void;
32
+ processPrune(duration: number): void;
33
+ updateLastProvenCheckpoint(checkpoint: CheckpointData): void;
34
+ processProofsVerified(logs: {
35
+ proverId: string;
36
+ l2BlockNumber: bigint;
37
+ delay: bigint;
38
+ }[]): void;
39
+ updateL1BlockHeight(blockNumber: bigint): void;
40
+ recordBlockProposalTxTarget(target: string, usedTrace: boolean): void;
41
+ /**
42
+ * Records L1 inclusion timing for a checkpoint observed on L1 (seconds into the L2 slot).
43
+ */
44
+ processCheckpointL1Timing(data: {
45
+ slotNumber: SlotNumber;
46
+ l1Timestamp: bigint;
47
+ l1Constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration'>;
48
+ }): void;
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbEUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxPQUFPLEVBS0wsS0FBSyxpQkFBaUIsRUFFdEIsS0FBSyxlQUFlLEVBQ3BCLEtBQUssTUFBTSxFQUdaLE1BQU0seUJBQXlCLENBQUM7QUFFakMscUJBQWEsdUJBQXVCO0lBNkJoQyxPQUFPLENBQUMsU0FBUztJQTVCbkIsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixPQUFPLENBQUMsV0FBVyxDQUFRO0lBQzNCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBUTtJQUNoQyxPQUFPLENBQUMsT0FBTyxDQUFnQjtJQUMvQixPQUFPLENBQUMsYUFBYSxDQUFRO0lBQzdCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBWTtJQUN4QyxPQUFPLENBQUMsb0JBQW9CLENBQWdCO0lBQzVDLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFFL0IsT0FBTyxDQUFDLGFBQWEsQ0FBWTtJQUNqQyxPQUFPLENBQUMsVUFBVSxDQUFnQjtJQUVsQyxPQUFPLENBQUMsb0JBQW9CLENBQVk7SUFDeEMsT0FBTyxDQUFDLGNBQWMsQ0FBZ0I7SUFDdEMsT0FBTyxDQUFDLFlBQVksQ0FBWTtJQUNoQyxPQUFPLENBQUMsV0FBVyxDQUFZO0lBRS9CLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUMxQyxPQUFPLENBQUMsZ0JBQWdCLENBQWdCO0lBRXhDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBZ0I7SUFFbEQsT0FBTyxDQUFDLDBCQUEwQixDQUFZO0lBRTlDLE9BQU8sQ0FBQyxHQUFHLENBQTRDO0lBRXZELE9BQU8sZUFzRE47SUFFRCxPQUFvQixHQUFHLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsRUFBRSxpQkFBaUIsb0NBTWhGO0lBRU0sU0FBUyxJQUFJLE9BQU8sQ0FFMUI7SUFFTSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQVdsRTtJQUVNLGtCQUFrQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQU1oRTtJQUVNLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxRQUduQztJQUVNLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxjQUFjLFFBSTNEO0lBRU0scUJBQXFCLENBQUMsSUFBSSxFQUFFO1FBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFBRSxRQVc5RjtJQUVNLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRTdDO0lBRU0sMkJBQTJCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxRQUtwRTtJQUVEOztPQUVHO0lBQ0kseUJBQXlCLENBQUMsSUFBSSxFQUFFO1FBQ3JDLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsR0FBRyxjQUFjLENBQUMsQ0FBQztLQUN4RSxHQUFHLElBQUksQ0FJUDtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/modules/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAKL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,uBAAuB;IA6BhC,OAAO,CAAC,SAAS;IA5BnB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,WAAW,CAAY;IAE/B,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,gBAAgB,CAAgB;IAExC,OAAO,CAAC,0BAA0B,CAAgB;IAElD,OAAO,CAAC,0BAA0B,CAAY;IAE9C,OAAO,CAAC,GAAG,CAA4C;IAEvD,OAAO,eAsDN;IAED,OAAoB,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,iBAAiB,oCAMhF;IAEM,SAAS,IAAI,OAAO,CAE1B;IAEM,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAWlE;IAEM,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,QAMhE;IAEM,YAAY,CAAC,QAAQ,EAAE,MAAM,QAGnC;IAEM,0BAA0B,CAAC,UAAU,EAAE,cAAc,QAI3D;IAEM,qBAAqB,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,QAW9F;IAEM,mBAAmB,CAAC,WAAW,EAAE,MAAM,QAE7C;IAEM,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,QAKpE;IAED;;OAEG;IACI,yBAAyB,CAAC,IAAI,EAAE;QACrC,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,CAAC,CAAC;KACxE,GAAG,IAAI,CAIP;CACF"}
@@ -1,9 +1,11 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
- import { Attributes, LmdbMetrics, Metrics, ValueType } from '@aztec/telemetry-client';
2
+ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
3
+ import { Attributes, LmdbMetrics, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
3
4
  export class ArchiverInstrumentation {
4
5
  telemetry;
5
6
  tracer;
6
7
  blockHeight;
8
+ checkpointHeight;
7
9
  txCount;
8
10
  l1BlockHeight;
9
11
  proofsSubmittedDelay;
@@ -18,83 +20,45 @@ export class ArchiverInstrumentation {
18
20
  syncDurationPerMessage;
19
21
  syncMessageCount;
20
22
  blockProposalTxTargetCount;
23
+ checkpointL1InclusionDelay;
21
24
  log;
22
25
  constructor(telemetry, lmdbStats){
23
26
  this.telemetry = telemetry;
24
27
  this.log = createLogger('archiver:instrumentation');
25
28
  this.tracer = telemetry.getTracer('Archiver');
26
29
  const meter = telemetry.getMeter('Archiver');
27
- this.blockHeight = meter.createGauge(Metrics.ARCHIVER_BLOCK_HEIGHT, {
28
- description: 'The height of the latest block processed by the archiver',
29
- valueType: ValueType.INT
30
- });
31
- this.l1BlockHeight = meter.createGauge(Metrics.ARCHIVER_L1_BLOCK_HEIGHT, {
32
- description: 'The height of the latest L1 block processed by the archiver',
33
- valueType: ValueType.INT
34
- });
35
- this.txCount = meter.createUpDownCounter(Metrics.ARCHIVER_TOTAL_TXS, {
36
- description: 'The total number of transactions',
37
- valueType: ValueType.INT
38
- });
39
- this.proofsSubmittedCount = meter.createUpDownCounter(Metrics.ARCHIVER_ROLLUP_PROOF_COUNT, {
40
- description: 'Number of proofs submitted',
41
- valueType: ValueType.INT
42
- });
43
- this.proofsSubmittedDelay = meter.createHistogram(Metrics.ARCHIVER_ROLLUP_PROOF_DELAY, {
44
- unit: 'ms',
45
- description: 'Time after a block is submitted until its proof is published',
46
- valueType: ValueType.INT
47
- });
48
- this.syncDurationPerBlock = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_BLOCK, {
49
- unit: 'ms',
50
- description: 'Duration to sync a block',
51
- valueType: ValueType.INT
52
- });
53
- this.syncBlockCount = meter.createUpDownCounter(Metrics.ARCHIVER_SYNC_BLOCK_COUNT, {
54
- description: 'Number of blocks synced from L1',
55
- valueType: ValueType.INT
56
- });
57
- this.manaPerBlock = meter.createHistogram(Metrics.ARCHIVER_MANA_PER_BLOCK, {
58
- description: 'The mana consumed by blocks',
59
- valueType: ValueType.DOUBLE,
60
- unit: 'Mmana'
61
- });
62
- this.txsPerBlock = meter.createHistogram(Metrics.ARCHIVER_TXS_PER_BLOCK, {
63
- description: 'The block tx count',
64
- valueType: ValueType.INT,
65
- unit: 'tx'
66
- });
67
- this.syncDurationPerMessage = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_MESSAGE, {
68
- unit: 'ms',
69
- description: 'Duration to sync a message',
70
- valueType: ValueType.INT
71
- });
72
- this.syncMessageCount = meter.createUpDownCounter(Metrics.ARCHIVER_SYNC_MESSAGE_COUNT, {
73
- description: 'Number of L1 to L2 messages synced',
74
- valueType: ValueType.INT
75
- });
76
- this.pruneDuration = meter.createHistogram(Metrics.ARCHIVER_PRUNE_DURATION, {
77
- unit: 'ms',
78
- description: 'Duration to sync a message',
79
- valueType: ValueType.INT
80
- });
81
- this.pruneCount = meter.createUpDownCounter(Metrics.ARCHIVER_PRUNE_COUNT, {
82
- description: 'Number of prunes detected',
83
- valueType: ValueType.INT
84
- });
85
- this.blockProposalTxTargetCount = meter.createUpDownCounter(Metrics.ARCHIVER_BLOCK_PROPOSAL_TX_TARGET_COUNT, {
86
- description: 'Number of block proposals by tx target',
87
- valueType: ValueType.INT
88
- });
30
+ this.blockHeight = meter.createGauge(Metrics.ARCHIVER_BLOCK_HEIGHT);
31
+ this.checkpointHeight = meter.createGauge(Metrics.ARCHIVER_CHECKPOINT_HEIGHT);
32
+ this.l1BlockHeight = meter.createGauge(Metrics.ARCHIVER_L1_BLOCK_HEIGHT);
33
+ this.txCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_TOTAL_TXS);
34
+ this.proofsSubmittedCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_ROLLUP_PROOF_COUNT, {
35
+ [Attributes.PROOF_TIMED_OUT]: [
36
+ true,
37
+ false
38
+ ]
39
+ });
40
+ this.proofsSubmittedDelay = meter.createHistogram(Metrics.ARCHIVER_ROLLUP_PROOF_DELAY);
41
+ this.syncDurationPerBlock = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_BLOCK);
42
+ this.syncBlockCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_SYNC_BLOCK_COUNT);
43
+ this.manaPerBlock = meter.createHistogram(Metrics.ARCHIVER_MANA_PER_BLOCK);
44
+ this.txsPerBlock = meter.createHistogram(Metrics.ARCHIVER_TXS_PER_BLOCK);
45
+ this.syncDurationPerMessage = meter.createHistogram(Metrics.ARCHIVER_SYNC_PER_MESSAGE);
46
+ this.syncMessageCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_SYNC_MESSAGE_COUNT);
47
+ this.pruneDuration = meter.createHistogram(Metrics.ARCHIVER_PRUNE_DURATION);
48
+ this.pruneCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_PRUNE_COUNT);
49
+ this.blockProposalTxTargetCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_BLOCK_PROPOSAL_TX_TARGET_COUNT, {
50
+ [Attributes.L1_BLOCK_PROPOSAL_USED_TRACE]: [
51
+ true,
52
+ false
53
+ ]
54
+ });
55
+ this.checkpointL1InclusionDelay = meter.createHistogram(Metrics.ARCHIVER_CHECKPOINT_L1_INCLUSION_DELAY);
89
56
  this.dbMetrics = new LmdbMetrics(meter, {
90
57
  [Attributes.DB_DATA_TYPE]: 'archiver'
91
58
  }, lmdbStats);
92
59
  }
93
60
  static async new(telemetry, lmdbStats) {
94
61
  const instance = new ArchiverInstrumentation(telemetry, lmdbStats);
95
- instance.syncBlockCount.add(0);
96
- instance.syncMessageCount.add(0);
97
- instance.pruneCount.add(0);
98
62
  await instance.telemetry.flush();
99
63
  return instance;
100
64
  }
@@ -104,6 +68,7 @@ export class ArchiverInstrumentation {
104
68
  processNewBlocks(syncTimePerBlock, blocks) {
105
69
  this.syncDurationPerBlock.record(Math.ceil(syncTimePerBlock));
106
70
  this.blockHeight.record(Math.max(...blocks.map((b)=>b.number)));
71
+ this.checkpointHeight.record(Math.max(...blocks.map((b)=>b.checkpointNumber)));
107
72
  this.syncBlockCount.add(blocks.length);
108
73
  for (const block of blocks){
109
74
  this.txCount.add(block.body.txEffects.length);
@@ -122,8 +87,12 @@ export class ArchiverInstrumentation {
122
87
  this.pruneCount.add(1);
123
88
  this.pruneDuration.record(Math.ceil(duration));
124
89
  }
125
- updateLastProvenBlock(blockNumber) {
126
- this.blockHeight.record(blockNumber, {
90
+ updateLastProvenCheckpoint(checkpoint) {
91
+ const lastBlockNumberInCheckpoint = checkpoint.startBlock + checkpoint.blockCount - 1;
92
+ this.blockHeight.record(lastBlockNumberInCheckpoint, {
93
+ [Attributes.STATUS]: 'proven'
94
+ });
95
+ this.checkpointHeight.record(checkpoint.checkpointNumber, {
127
96
  [Attributes.STATUS]: 'proven'
128
97
  });
129
98
  }
@@ -148,4 +117,11 @@ export class ArchiverInstrumentation {
148
117
  [Attributes.L1_BLOCK_PROPOSAL_USED_TRACE]: usedTrace
149
118
  });
150
119
  }
120
+ /**
121
+ * Records L1 inclusion timing for a checkpoint observed on L1 (seconds into the L2 slot).
122
+ */ processCheckpointL1Timing(data) {
123
+ const slotStartTs = getTimestampForSlot(data.slotNumber, data.l1Constants);
124
+ const inclusionDelaySeconds = Number(data.l1Timestamp - slotStartTs);
125
+ this.checkpointL1InclusionDelay.record(inclusionDelaySeconds);
126
+ }
151
127
  }
@@ -0,0 +1,71 @@
1
+ import type { BlobClientInterface } from '@aztec/blob-client/client';
2
+ import { EpochCache } from '@aztec/epoch-cache';
3
+ import { InboxContract, RollupContract } from '@aztec/ethereum/contracts';
4
+ import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
5
+ import { Buffer32 } from '@aztec/foundation/buffer';
6
+ import { Fr } from '@aztec/foundation/curves/bn254';
7
+ import { type Logger } from '@aztec/foundation/log';
8
+ import { DateProvider } from '@aztec/foundation/timer';
9
+ import { type ArchiverEmitter } from '@aztec/stdlib/block';
10
+ import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
11
+ import { type Traceable, type Tracer } from '@aztec/telemetry-client';
12
+ import type { KVArchiverDataStore } from '../store/kv_archiver_store.js';
13
+ import type { L2TipsCache } from '../store/l2_tips_cache.js';
14
+ import type { ArchiverInstrumentation } from './instrumentation.js';
15
+ /**
16
+ * Handles L1 synchronization for the archiver.
17
+ * Responsible for fetching checkpoints, L1→L2 messages, and handling L1 reorgs.
18
+ */
19
+ export declare class ArchiverL1Synchronizer implements Traceable {
20
+ private readonly publicClient;
21
+ private readonly debugClient;
22
+ private readonly rollup;
23
+ private readonly inbox;
24
+ private readonly store;
25
+ private config;
26
+ private readonly blobClient;
27
+ private readonly epochCache;
28
+ private readonly dateProvider;
29
+ private readonly instrumentation;
30
+ private readonly l1Constants;
31
+ private readonly events;
32
+ private readonly log;
33
+ private l1BlockNumber;
34
+ private l1BlockHash;
35
+ private l1Timestamp;
36
+ private readonly updater;
37
+ readonly tracer: Tracer;
38
+ constructor(publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, rollup: RollupContract, inbox: InboxContract, store: KVArchiverDataStore, config: {
39
+ batchSize: number;
40
+ skipValidateCheckpointAttestations?: boolean;
41
+ maxAllowedEthClientDriftSeconds: number;
42
+ }, blobClient: BlobClientInterface, epochCache: EpochCache, dateProvider: DateProvider, instrumentation: ArchiverInstrumentation, l1Constants: L1RollupConstants & {
43
+ l1StartBlockHash: Buffer32;
44
+ genesisArchiveRoot: Fr;
45
+ }, events: ArchiverEmitter, tracer: Tracer, l2TipsCache?: L2TipsCache, log?: Logger);
46
+ /** Sets new config */
47
+ setConfig(newConfig: {
48
+ batchSize: number;
49
+ skipValidateCheckpointAttestations?: boolean;
50
+ maxAllowedEthClientDriftSeconds: number;
51
+ }): void;
52
+ /** Returns the last L1 block number that was synced. */
53
+ getL1BlockNumber(): bigint | undefined;
54
+ /** Returns the last L1 timestamp that was synced. */
55
+ getL1Timestamp(): bigint | undefined;
56
+ /** Checks that the ethereum node we are connected to has a latest timestamp no more than the allowed drift. Throw if not. */
57
+ testEthereumNodeSynced(): Promise<void>;
58
+ syncFromL1(initialSyncComplete: boolean): Promise<void>;
59
+ private pruneUncheckpointedBlocks;
60
+ private canPrune;
61
+ private handleEpochPrune;
62
+ private nextRange;
63
+ private handleL1ToL2Messages;
64
+ private retrieveL1ToL2Message;
65
+ private rollbackL1ToL2Messages;
66
+ private getL1BlockHash;
67
+ private handleCheckpoints;
68
+ private checkForNewCheckpointsBeforeL1SyncPoint;
69
+ private getCheckpointHeader;
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfc3luY2hyb25pemVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9sMV9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3JGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFFdkUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzRCxNQUFNLHFCQUFxQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUF3QyxNQUFNLDZCQUE2QixDQUFDO0FBRTNHLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQVM3RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzdELE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFhcEU7OztHQUdHO0FBQ0gscUJBQWEsc0JBQXVCLFlBQVcsU0FBUztJQVNwRCxPQUFPLENBQUMsUUFBUSxDQUFDLFlB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l1_synchronizer.d.ts","sourceRoot":"","sources":["../../src/modules/l1_synchronizer.ts"],"names":[],"mappings":"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"}