@aztec/archiver 0.0.1-commit.1142ef1 → 0.0.1-commit.11bf3dd6e

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 (214) hide show
  1. package/README.md +162 -22
  2. package/dest/archiver.d.ts +140 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +750 -0
  5. package/dest/config.d.ts +30 -0
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/{archiver/config.js → config.js} +12 -2
  8. package/dest/errors.d.ts +65 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +91 -0
  11. package/dest/factory.d.ts +8 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +96 -13
  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 +403 -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 +59 -77
  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 +13 -9
  41. package/dest/modules/data_source_base.d.ts +91 -0
  42. package/dest/modules/data_source_base.d.ts.map +1 -0
  43. package/dest/modules/data_source_base.js +222 -0
  44. package/dest/modules/data_store_updater.d.ts +86 -0
  45. package/dest/modules/data_store_updater.d.ts.map +1 -0
  46. package/dest/modules/data_store_updater.js +333 -0
  47. package/dest/modules/instrumentation.d.ts +52 -0
  48. package/dest/modules/instrumentation.d.ts.map +1 -0
  49. package/dest/{archiver → modules}/instrumentation.js +53 -18
  50. package/dest/modules/l1_synchronizer.d.ts +73 -0
  51. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  52. package/dest/modules/l1_synchronizer.js +1154 -0
  53. package/dest/{archiver → modules}/validation.d.ts +1 -1
  54. package/dest/modules/validation.d.ts.map +1 -0
  55. package/dest/{archiver → modules}/validation.js +8 -2
  56. package/dest/store/block_store.d.ts +230 -0
  57. package/dest/store/block_store.d.ts.map +1 -0
  58. package/dest/store/block_store.js +942 -0
  59. package/dest/store/contract_class_store.d.ts +17 -0
  60. package/dest/store/contract_class_store.d.ts.map +1 -0
  61. package/dest/store/contract_class_store.js +64 -0
  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 +7 -3
  65. package/dest/store/kv_archiver_store.d.ts +377 -0
  66. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  67. package/dest/store/kv_archiver_store.js +494 -0
  68. package/dest/store/l2_tips_cache.d.ts +20 -0
  69. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  70. package/dest/store/l2_tips_cache.js +109 -0
  71. package/dest/store/log_store.d.ts +57 -0
  72. package/dest/store/log_store.d.ts.map +1 -0
  73. package/dest/store/log_store.js +531 -0
  74. package/dest/store/message_store.d.ts +44 -0
  75. package/dest/store/message_store.d.ts.map +1 -0
  76. package/dest/{archiver/kv_archiver_store → store}/message_store.js +21 -9
  77. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  78. package/dest/structs/data_retrieval.d.ts.map +1 -0
  79. package/dest/structs/inbox_message.d.ts +15 -0
  80. package/dest/structs/inbox_message.d.ts.map +1 -0
  81. package/dest/{archiver/structs → structs}/published.d.ts +1 -1
  82. package/dest/structs/published.d.ts.map +1 -0
  83. package/dest/test/fake_l1_state.d.ts +210 -0
  84. package/dest/test/fake_l1_state.d.ts.map +1 -0
  85. package/dest/test/fake_l1_state.js +490 -0
  86. package/dest/test/index.d.ts +2 -1
  87. package/dest/test/index.d.ts.map +1 -1
  88. package/dest/test/index.js +4 -1
  89. package/dest/test/mock_archiver.d.ts +2 -2
  90. package/dest/test/mock_archiver.d.ts.map +1 -1
  91. package/dest/test/mock_archiver.js +3 -3
  92. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  93. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  94. package/dest/test/mock_l1_to_l2_message_source.js +2 -1
  95. package/dest/test/mock_l2_block_source.d.ts +43 -19
  96. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  97. package/dest/test/mock_l2_block_source.js +211 -80
  98. package/dest/test/mock_structs.d.ts +81 -3
  99. package/dest/test/mock_structs.d.ts.map +1 -1
  100. package/dest/test/mock_structs.js +152 -7
  101. package/dest/test/noop_l1_archiver.d.ts +26 -0
  102. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  103. package/dest/test/noop_l1_archiver.js +71 -0
  104. package/package.json +16 -17
  105. package/src/archiver.ts +510 -0
  106. package/src/{archiver/config.ts → config.ts} +20 -2
  107. package/src/errors.ts +146 -0
  108. package/src/factory.ts +152 -16
  109. package/src/index.ts +11 -3
  110. package/src/interfaces.ts +9 -0
  111. package/src/l1/README.md +55 -0
  112. package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +45 -33
  113. package/src/l1/calldata_retriever.ts +512 -0
  114. package/src/{archiver/l1 → l1}/data_retrieval.ts +79 -102
  115. package/src/{archiver/l1 → l1}/spire_proposer.ts +7 -15
  116. package/src/{archiver/l1 → l1}/validate_trace.ts +24 -6
  117. package/src/modules/data_source_base.ts +347 -0
  118. package/src/modules/data_store_updater.ts +437 -0
  119. package/src/{archiver → modules}/instrumentation.ts +64 -20
  120. package/src/modules/l1_synchronizer.ts +961 -0
  121. package/src/{archiver → modules}/validation.ts +7 -2
  122. package/src/store/block_store.ts +1245 -0
  123. package/src/store/contract_class_store.ts +82 -0
  124. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +9 -6
  125. package/src/store/kv_archiver_store.ts +713 -0
  126. package/src/store/l2_tips_cache.ts +134 -0
  127. package/src/store/log_store.ts +733 -0
  128. package/src/{archiver/kv_archiver_store → store}/message_store.ts +27 -10
  129. package/src/{archiver/structs → structs}/inbox_message.ts +1 -1
  130. package/src/test/fake_l1_state.ts +747 -0
  131. package/src/test/index.ts +4 -0
  132. package/src/test/mock_archiver.ts +4 -3
  133. package/src/test/mock_l1_to_l2_message_source.ts +1 -0
  134. package/src/test/mock_l2_block_source.ts +269 -94
  135. package/src/test/mock_structs.ts +283 -8
  136. package/src/test/noop_l1_archiver.ts +114 -0
  137. package/dest/archiver/archiver.d.ts +0 -307
  138. package/dest/archiver/archiver.d.ts.map +0 -1
  139. package/dest/archiver/archiver.js +0 -2102
  140. package/dest/archiver/archiver_store.d.ts +0 -315
  141. package/dest/archiver/archiver_store.d.ts.map +0 -1
  142. package/dest/archiver/archiver_store.js +0 -4
  143. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  144. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  145. package/dest/archiver/archiver_store_test_suite.js +0 -2770
  146. package/dest/archiver/config.d.ts +0 -22
  147. package/dest/archiver/config.d.ts.map +0 -1
  148. package/dest/archiver/errors.d.ts +0 -36
  149. package/dest/archiver/errors.d.ts.map +0 -1
  150. package/dest/archiver/errors.js +0 -54
  151. package/dest/archiver/index.d.ts +0 -7
  152. package/dest/archiver/index.d.ts.map +0 -1
  153. package/dest/archiver/index.js +0 -4
  154. package/dest/archiver/instrumentation.d.ts +0 -37
  155. package/dest/archiver/instrumentation.d.ts.map +0 -1
  156. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -164
  157. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  158. package/dest/archiver/kv_archiver_store/block_store.js +0 -626
  159. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  160. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  161. package/dest/archiver/kv_archiver_store/contract_class_store.js +0 -120
  162. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  163. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  164. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -159
  165. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  166. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -316
  167. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -45
  168. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  169. package/dest/archiver/kv_archiver_store/log_store.js +0 -401
  170. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -40
  171. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  172. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
  173. package/dest/archiver/l1/calldata_retriever.d.ts +0 -112
  174. package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
  175. package/dest/archiver/l1/calldata_retriever.js +0 -471
  176. package/dest/archiver/l1/data_retrieval.d.ts +0 -90
  177. package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
  178. package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
  179. package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
  180. package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
  181. package/dest/archiver/l1/types.d.ts +0 -12
  182. package/dest/archiver/l1/types.d.ts.map +0 -1
  183. package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
  184. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  185. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  186. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  187. package/dest/archiver/structs/published.d.ts.map +0 -1
  188. package/dest/archiver/validation.d.ts.map +0 -1
  189. package/dest/rpc/index.d.ts +0 -9
  190. package/dest/rpc/index.d.ts.map +0 -1
  191. package/dest/rpc/index.js +0 -15
  192. package/src/archiver/archiver.ts +0 -2265
  193. package/src/archiver/archiver_store.ts +0 -380
  194. package/src/archiver/archiver_store_test_suite.ts +0 -2842
  195. package/src/archiver/errors.ts +0 -90
  196. package/src/archiver/index.ts +0 -6
  197. package/src/archiver/kv_archiver_store/block_store.ts +0 -850
  198. package/src/archiver/kv_archiver_store/contract_class_store.ts +0 -176
  199. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -442
  200. package/src/archiver/kv_archiver_store/log_store.ts +0 -516
  201. package/src/archiver/l1/README.md +0 -98
  202. package/src/archiver/l1/calldata_retriever.ts +0 -641
  203. package/src/rpc/index.ts +0 -16
  204. /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
  205. /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
  206. /package/dest/{archiver/l1 → l1}/types.js +0 -0
  207. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  208. /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
  209. /package/dest/{archiver/structs → structs}/published.js +0 -0
  210. /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
  211. /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
  212. /package/src/{archiver/l1 → l1}/types.ts +0 -0
  213. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
  214. /package/src/{archiver/structs → structs}/published.ts +0 -0
@@ -0,0 +1,134 @@
1
+ import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
+ import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
3
+ import {
4
+ type BlockData,
5
+ type CheckpointId,
6
+ GENESIS_BLOCK_HEADER_HASH,
7
+ GENESIS_CHECKPOINT_HEADER_HASH,
8
+ type L2Tips,
9
+ } from '@aztec/stdlib/block';
10
+
11
+ import type { BlockStore } from './block_store.js';
12
+
13
+ /**
14
+ * In-memory cache for L2 chain tips (proposed, checkpointed, proven, finalized).
15
+ * Populated from the BlockStore on first access, then kept up-to-date by the ArchiverDataStoreUpdater.
16
+ * Refresh calls should happen within the store transaction that mutates block data to ensure consistency.
17
+ */
18
+ export class L2TipsCache {
19
+ #tipsPromise: Promise<L2Tips> | undefined;
20
+
21
+ constructor(private blockStore: BlockStore) {}
22
+
23
+ /** Returns the cached L2 tips. Loads from the block store on first call. */
24
+ public getL2Tips(): Promise<L2Tips> {
25
+ return (this.#tipsPromise ??= this.loadFromStore());
26
+ }
27
+
28
+ /** Reloads the L2 tips from the block store. Should be called within the store transaction that mutates data. */
29
+ public async refresh(): Promise<void> {
30
+ this.#tipsPromise = this.loadFromStore();
31
+ await this.#tipsPromise;
32
+ }
33
+
34
+ private async loadFromStore(): Promise<L2Tips> {
35
+ const [
36
+ latestBlockNumber,
37
+ provenBlockNumber,
38
+ proposedCheckpointBlockNumber,
39
+ checkpointedBlockNumber,
40
+ finalizedBlockNumber,
41
+ ] = await Promise.all([
42
+ this.blockStore.getLatestL2BlockNumber(),
43
+ this.blockStore.getProvenBlockNumber(),
44
+ this.blockStore.getProposedCheckpointL2BlockNumber(),
45
+ this.blockStore.getCheckpointedL2BlockNumber(),
46
+ this.blockStore.getFinalizedL2BlockNumber(),
47
+ ]);
48
+
49
+ const genesisBlockHeader = {
50
+ blockHash: GENESIS_BLOCK_HEADER_HASH,
51
+ checkpointNumber: CheckpointNumber.ZERO,
52
+ } as const;
53
+ const beforeInitialBlockNumber = BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
54
+
55
+ const getBlockData = (blockNumber: BlockNumber) =>
56
+ blockNumber > beforeInitialBlockNumber ? this.blockStore.getBlockData(blockNumber) : genesisBlockHeader;
57
+
58
+ const [latestBlockData, provenBlockData, proposedCheckpointBlockData, checkpointedBlockData, finalizedBlockData] =
59
+ await Promise.all(
60
+ [
61
+ latestBlockNumber,
62
+ provenBlockNumber,
63
+ proposedCheckpointBlockNumber,
64
+ checkpointedBlockNumber,
65
+ finalizedBlockNumber,
66
+ ].map(getBlockData),
67
+ );
68
+
69
+ if (
70
+ !latestBlockData ||
71
+ !provenBlockData ||
72
+ !finalizedBlockData ||
73
+ !checkpointedBlockData ||
74
+ !proposedCheckpointBlockData
75
+ ) {
76
+ throw new Error('Failed to load block data for L2 tips');
77
+ }
78
+
79
+ const [provenCheckpointId, finalizedCheckpointId, proposedCheckpointId, checkpointedCheckpointId] =
80
+ await Promise.all([
81
+ this.getCheckpointIdForBlock(provenBlockData),
82
+ this.getCheckpointIdForBlock(finalizedBlockData),
83
+ this.getCheckpointIdForProposedCheckpoint(checkpointedBlockData),
84
+ this.getCheckpointIdForBlock(checkpointedBlockData),
85
+ ]);
86
+
87
+ return {
88
+ proposed: { number: latestBlockNumber, hash: latestBlockData.blockHash.toString() },
89
+ proven: {
90
+ block: { number: provenBlockNumber, hash: provenBlockData.blockHash.toString() },
91
+ checkpoint: provenCheckpointId,
92
+ },
93
+ proposedCheckpoint: {
94
+ block: { number: proposedCheckpointBlockNumber, hash: proposedCheckpointBlockData.blockHash.toString() },
95
+ checkpoint: proposedCheckpointId,
96
+ },
97
+ finalized: {
98
+ block: { number: finalizedBlockNumber, hash: finalizedBlockData.blockHash.toString() },
99
+ checkpoint: finalizedCheckpointId,
100
+ },
101
+ checkpointed: {
102
+ block: { number: checkpointedBlockNumber, hash: checkpointedBlockData.blockHash.toString() },
103
+ checkpoint: checkpointedCheckpointId,
104
+ },
105
+ };
106
+ }
107
+
108
+ private async getCheckpointIdForProposedCheckpoint(
109
+ checkpointedBlockData: Pick<BlockData, 'checkpointNumber'>,
110
+ ): Promise<CheckpointId> {
111
+ const checkpointData = await this.blockStore.getProposedCheckpointOnly();
112
+ if (!checkpointData) {
113
+ return this.getCheckpointIdForBlock(checkpointedBlockData);
114
+ }
115
+ return {
116
+ number: checkpointData.checkpointNumber,
117
+ hash: checkpointData.header.hash().toString(),
118
+ };
119
+ }
120
+
121
+ private async getCheckpointIdForBlock(blockData: Pick<BlockData, 'checkpointNumber'>): Promise<CheckpointId> {
122
+ const checkpointData = await this.blockStore.getCheckpointData(blockData.checkpointNumber);
123
+ if (!checkpointData) {
124
+ return {
125
+ number: CheckpointNumber.ZERO,
126
+ hash: GENESIS_CHECKPOINT_HEADER_HASH.toString(),
127
+ };
128
+ }
129
+ return {
130
+ number: checkpointData.checkpointNumber,
131
+ hash: checkpointData.header.hash().toString(),
132
+ };
133
+ }
134
+ }