@aztec/archiver 0.0.1-commit.d3ec352c → 0.0.1-commit.d58ff9d0

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 (236) hide show
  1. package/README.md +164 -22
  2. package/dest/archiver.d.ts +194 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +949 -0
  5. package/dest/config.d.ts +34 -0
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/config.js +95 -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 +117 -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/l1/bin/retrieve-calldata.d.ts +3 -0
  21. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  22. package/dest/l1/bin/retrieve-calldata.js +152 -0
  23. package/dest/l1/calldata_retriever.d.ts +143 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +413 -0
  26. package/dest/l1/data_retrieval.d.ts +102 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver → l1}/data_retrieval.js +85 -165
  29. package/dest/l1/debug_tx.d.ts +19 -0
  30. package/dest/l1/debug_tx.d.ts.map +1 -0
  31. package/dest/l1/debug_tx.js +73 -0
  32. package/dest/l1/spire_proposer.d.ts +70 -0
  33. package/dest/l1/spire_proposer.d.ts.map +1 -0
  34. package/dest/l1/spire_proposer.js +149 -0
  35. package/dest/l1/trace_tx.d.ts +43 -0
  36. package/dest/l1/trace_tx.d.ts.map +1 -0
  37. package/dest/l1/trace_tx.js +91 -0
  38. package/dest/l1/types.d.ts +12 -0
  39. package/dest/l1/types.d.ts.map +1 -0
  40. package/dest/l1/types.js +3 -0
  41. package/dest/l1/validate_historical_logs.d.ts +23 -0
  42. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  43. package/dest/l1/validate_historical_logs.js +108 -0
  44. package/dest/l1/validate_trace.d.ts +32 -0
  45. package/dest/l1/validate_trace.d.ts.map +1 -0
  46. package/dest/l1/validate_trace.js +154 -0
  47. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  48. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  49. package/dest/modules/contract_data_source_adapter.js +32 -0
  50. package/dest/modules/data_source_base.d.ts +112 -0
  51. package/dest/modules/data_source_base.d.ts.map +1 -0
  52. package/dest/modules/data_source_base.js +322 -0
  53. package/dest/modules/data_store_updater.d.ts +105 -0
  54. package/dest/modules/data_store_updater.d.ts.map +1 -0
  55. package/dest/modules/data_store_updater.js +393 -0
  56. package/dest/modules/instrumentation.d.ts +63 -0
  57. package/dest/modules/instrumentation.d.ts.map +1 -0
  58. package/dest/modules/instrumentation.js +166 -0
  59. package/dest/modules/l1_synchronizer.d.ts +77 -0
  60. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  61. package/dest/modules/l1_synchronizer.js +1381 -0
  62. package/dest/modules/outbox_trees_resolver.d.ts +62 -0
  63. package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
  64. package/dest/modules/outbox_trees_resolver.js +162 -0
  65. package/dest/modules/validation.d.ts +40 -0
  66. package/dest/modules/validation.d.ts.map +1 -0
  67. package/dest/{archiver → modules}/validation.js +41 -17
  68. package/dest/store/block_store.d.ts +303 -0
  69. package/dest/store/block_store.d.ts.map +1 -0
  70. package/dest/store/block_store.js +1206 -0
  71. package/dest/store/contract_class_store.d.ts +31 -0
  72. package/dest/store/contract_class_store.d.ts.map +1 -0
  73. package/dest/store/contract_class_store.js +98 -0
  74. package/dest/store/contract_instance_store.d.ts +51 -0
  75. package/dest/store/contract_instance_store.d.ts.map +1 -0
  76. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +55 -3
  77. package/dest/store/data_stores.d.ts +68 -0
  78. package/dest/store/data_stores.d.ts.map +1 -0
  79. package/dest/store/data_stores.js +54 -0
  80. package/dest/store/function_names_cache.d.ts +17 -0
  81. package/dest/store/function_names_cache.d.ts.map +1 -0
  82. package/dest/store/function_names_cache.js +30 -0
  83. package/dest/store/l2_tips_cache.d.ts +25 -0
  84. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  85. package/dest/store/l2_tips_cache.js +26 -0
  86. package/dest/store/log_store.d.ts +59 -0
  87. package/dest/store/log_store.d.ts.map +1 -0
  88. package/dest/store/log_store.js +310 -0
  89. package/dest/store/log_store_codec.d.ts +78 -0
  90. package/dest/store/log_store_codec.d.ts.map +1 -0
  91. package/dest/store/log_store_codec.js +110 -0
  92. package/dest/store/message_store.d.ts +50 -0
  93. package/dest/store/message_store.d.ts.map +1 -0
  94. package/dest/{archiver/kv_archiver_store → store}/message_store.js +66 -23
  95. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  96. package/dest/structs/data_retrieval.d.ts.map +1 -0
  97. package/dest/structs/inbox_message.d.ts +15 -0
  98. package/dest/structs/inbox_message.d.ts.map +1 -0
  99. package/dest/{archiver/structs → structs}/inbox_message.js +6 -6
  100. package/dest/structs/published.d.ts +2 -0
  101. package/dest/structs/published.d.ts.map +1 -0
  102. package/dest/test/fake_l1_state.d.ts +214 -0
  103. package/dest/test/fake_l1_state.d.ts.map +1 -0
  104. package/dest/test/fake_l1_state.js +517 -0
  105. package/dest/test/index.d.ts +2 -1
  106. package/dest/test/index.d.ts.map +1 -1
  107. package/dest/test/index.js +4 -1
  108. package/dest/test/mock_archiver.d.ts +5 -6
  109. package/dest/test/mock_archiver.d.ts.map +1 -1
  110. package/dest/test/mock_archiver.js +8 -12
  111. package/dest/test/mock_l1_to_l2_message_source.d.ts +6 -7
  112. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  113. package/dest/test/mock_l1_to_l2_message_source.js +19 -14
  114. package/dest/test/mock_l2_block_source.d.ts +68 -40
  115. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  116. package/dest/test/mock_l2_block_source.js +347 -145
  117. package/dest/test/mock_structs.d.ts +83 -4
  118. package/dest/test/mock_structs.d.ts.map +1 -1
  119. package/dest/test/mock_structs.js +157 -12
  120. package/dest/test/noop_l1_archiver.d.ts +34 -0
  121. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  122. package/dest/test/noop_l1_archiver.js +88 -0
  123. package/package.json +18 -18
  124. package/src/archiver.ts +785 -0
  125. package/src/config.ts +125 -0
  126. package/src/errors.ts +203 -0
  127. package/src/factory.ts +185 -22
  128. package/src/index.ts +27 -3
  129. package/src/interfaces.ts +9 -0
  130. package/src/l1/README.md +55 -0
  131. package/src/l1/bin/retrieve-calldata.ts +194 -0
  132. package/src/l1/calldata_retriever.ts +529 -0
  133. package/src/{archiver → l1}/data_retrieval.ts +157 -243
  134. package/src/l1/debug_tx.ts +99 -0
  135. package/src/l1/spire_proposer.ts +152 -0
  136. package/src/l1/trace_tx.ts +128 -0
  137. package/src/l1/types.ts +13 -0
  138. package/src/l1/validate_historical_logs.ts +140 -0
  139. package/src/l1/validate_trace.ts +229 -0
  140. package/src/modules/contract_data_source_adapter.ts +46 -0
  141. package/src/modules/data_source_base.ts +466 -0
  142. package/src/modules/data_store_updater.ts +519 -0
  143. package/src/modules/instrumentation.ts +217 -0
  144. package/src/modules/l1_synchronizer.ts +1320 -0
  145. package/src/modules/outbox_trees_resolver.ts +199 -0
  146. package/src/modules/validation.ts +186 -0
  147. package/src/store/block_store.ts +1551 -0
  148. package/src/store/contract_class_store.ts +126 -0
  149. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +70 -7
  150. package/src/store/data_stores.ts +104 -0
  151. package/src/store/function_names_cache.ts +37 -0
  152. package/src/store/l2_tips_cache.ts +35 -0
  153. package/src/store/log_store.ts +380 -0
  154. package/src/store/log_store_codec.ts +143 -0
  155. package/src/{archiver/kv_archiver_store → store}/message_store.ts +81 -28
  156. package/src/{archiver/structs → structs}/inbox_message.ts +8 -9
  157. package/src/{archiver/structs → structs}/published.ts +0 -1
  158. package/src/test/fake_l1_state.ts +770 -0
  159. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  160. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  161. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  162. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  163. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  164. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  165. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  166. package/src/test/index.ts +4 -0
  167. package/src/test/mock_archiver.ts +10 -14
  168. package/src/test/mock_l1_to_l2_message_source.ts +16 -15
  169. package/src/test/mock_l2_block_source.ts +416 -161
  170. package/src/test/mock_structs.ts +292 -14
  171. package/src/test/noop_l1_archiver.ts +158 -0
  172. package/dest/archiver/archiver.d.ts +0 -290
  173. package/dest/archiver/archiver.d.ts.map +0 -1
  174. package/dest/archiver/archiver.js +0 -1434
  175. package/dest/archiver/archiver_store.d.ts +0 -256
  176. package/dest/archiver/archiver_store.d.ts.map +0 -1
  177. package/dest/archiver/archiver_store.js +0 -4
  178. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  179. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  180. package/dest/archiver/archiver_store_test_suite.js +0 -1289
  181. package/dest/archiver/config.d.ts +0 -21
  182. package/dest/archiver/config.d.ts.map +0 -1
  183. package/dest/archiver/config.js +0 -55
  184. package/dest/archiver/data_retrieval.d.ts +0 -80
  185. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  186. package/dest/archiver/errors.d.ts +0 -12
  187. package/dest/archiver/errors.d.ts.map +0 -1
  188. package/dest/archiver/errors.js +0 -17
  189. package/dest/archiver/index.d.ts +0 -7
  190. package/dest/archiver/index.d.ts.map +0 -1
  191. package/dest/archiver/index.js +0 -4
  192. package/dest/archiver/instrumentation.d.ts +0 -35
  193. package/dest/archiver/instrumentation.d.ts.map +0 -1
  194. package/dest/archiver/instrumentation.js +0 -140
  195. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -125
  196. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  197. package/dest/archiver/kv_archiver_store/block_store.js +0 -371
  198. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  199. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  200. package/dest/archiver/kv_archiver_store/contract_class_store.js +0 -120
  201. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  202. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  203. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -169
  204. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  205. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -296
  206. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -49
  207. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  208. package/dest/archiver/kv_archiver_store/log_store.js +0 -337
  209. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -39
  210. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  211. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  212. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  213. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  214. package/dest/archiver/structs/published.d.ts +0 -3
  215. package/dest/archiver/structs/published.d.ts.map +0 -1
  216. package/dest/archiver/validation.d.ts +0 -17
  217. package/dest/archiver/validation.d.ts.map +0 -1
  218. package/dest/rpc/index.d.ts +0 -9
  219. package/dest/rpc/index.d.ts.map +0 -1
  220. package/dest/rpc/index.js +0 -15
  221. package/src/archiver/archiver.ts +0 -1880
  222. package/src/archiver/archiver_store.ts +0 -310
  223. package/src/archiver/archiver_store_test_suite.ts +0 -1295
  224. package/src/archiver/config.ts +0 -79
  225. package/src/archiver/errors.ts +0 -26
  226. package/src/archiver/index.ts +0 -6
  227. package/src/archiver/instrumentation.ts +0 -187
  228. package/src/archiver/kv_archiver_store/block_store.ts +0 -482
  229. package/src/archiver/kv_archiver_store/contract_class_store.ts +0 -176
  230. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -423
  231. package/src/archiver/kv_archiver_store/log_store.ts +0 -407
  232. package/src/archiver/validation.ts +0 -124
  233. package/src/rpc/index.ts +0 -16
  234. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  235. /package/dest/{archiver/structs → structs}/published.js +0 -0
  236. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
@@ -1,6 +1,7 @@
1
- import type { L1BlockId } from '@aztec/ethereum';
1
+ import type { L1BlockId } from '@aztec/ethereum/l1-types';
2
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
2
3
  import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
3
- import { Fr } from '@aztec/foundation/fields';
4
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
5
  import { toArray } from '@aztec/foundation/iterable';
5
6
  import { createLogger } from '@aztec/foundation/log';
6
7
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
@@ -13,6 +14,7 @@ import {
13
14
  } from '@aztec/kv-store';
14
15
  import { InboxLeaf } from '@aztec/stdlib/messaging';
15
16
 
17
+ import { L1ToL2MessagesNotReadyError } from '../errors.js';
16
18
  import {
17
19
  type InboxMessage,
18
20
  deserializeInboxMessage,
@@ -39,6 +41,10 @@ export class MessageStore {
39
41
  #lastSynchedL1Block: AztecAsyncSingleton<Buffer>;
40
42
  /** Stores total messages stored */
41
43
  #totalMessageCount: AztecAsyncSingleton<bigint>;
44
+ /** Stores the checkpoint number whose message tree is currently being filled on L1. */
45
+ #inboxTreeInProgress: AztecAsyncSingleton<bigint>;
46
+ /** Stores the L1 finalized block as of the last successful message sync. */
47
+ #messagesFinalizedL1Block: AztecAsyncSingleton<Buffer>;
42
48
 
43
49
  #log = createLogger('archiver:message_store');
44
50
 
@@ -47,6 +53,8 @@ export class MessageStore {
47
53
  this.#l1ToL2MessageIndices = db.openMap('archiver_l1_to_l2_message_indices');
48
54
  this.#lastSynchedL1Block = db.openSingleton('archiver_last_l1_block_id');
49
55
  this.#totalMessageCount = db.openSingleton('archiver_l1_to_l2_message_count');
56
+ this.#inboxTreeInProgress = db.openSingleton('archiver_inbox_tree_in_progress');
57
+ this.#messagesFinalizedL1Block = db.openSingleton('archiver_messages_finalized_l1_block');
50
58
  }
51
59
 
52
60
  public async getTotalL1ToL2MessageCount(): Promise<bigint> {
@@ -70,6 +78,26 @@ export class MessageStore {
70
78
  await this.#lastSynchedL1Block.set(buffer);
71
79
  }
72
80
 
81
+ /** Gets the L1 finalized block as of the last successful message sync. */
82
+ public async getMessagesFinalizedL1Block(): Promise<L1BlockId | undefined> {
83
+ const buffer = await this.#messagesFinalizedL1Block.getAsync();
84
+ if (!buffer) {
85
+ return undefined;
86
+ }
87
+ const reader = BufferReader.asReader(buffer);
88
+ return { l1BlockNumber: reader.readUInt256(), l1BlockHash: Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE)) };
89
+ }
90
+
91
+ /** Monotonically advances the persisted L1 finalized block for message sync. Never regresses. */
92
+ private async maybeAdvanceFinalizedL1Block(l1Block: L1BlockId): Promise<void> {
93
+ const existing = await this.getMessagesFinalizedL1Block();
94
+ if (existing && l1Block.l1BlockNumber <= existing.l1BlockNumber) {
95
+ return;
96
+ }
97
+ const buffer = serializeToBuffer([l1Block.l1BlockNumber, l1Block.l1BlockHash]);
98
+ await this.#messagesFinalizedL1Block.set(buffer);
99
+ }
100
+
73
101
  /**
74
102
  * Append L1 to L2 messages to the store.
75
103
  * Requires new messages to be in order and strictly after the last message added.
@@ -113,20 +141,20 @@ export class MessageStore {
113
141
  );
114
142
  }
115
143
 
116
- // Check index corresponds to the L2 block number.
117
- const [expectedStart, expectedEnd] = InboxLeaf.indexRangeFromL2Block(message.l2BlockNumber);
144
+ // Check index corresponds to the checkpoint number.
145
+ const [expectedStart, expectedEnd] = InboxLeaf.indexRangeForCheckpoint(message.checkpointNumber);
118
146
  if (message.index < expectedStart || message.index >= expectedEnd) {
119
147
  throw new MessageStoreError(
120
148
  `Invalid index ${message.index} for incoming L1 to L2 message ${message.leaf.toString()} ` +
121
- `at block ${message.l2BlockNumber} (expected value in range [${expectedStart}, ${expectedEnd}))`,
149
+ `at checkpoint ${message.checkpointNumber} (expected value in range [${expectedStart}, ${expectedEnd}))`,
122
150
  message,
123
151
  );
124
152
  }
125
153
 
126
- // Check there are no gaps in the indices within the same block.
154
+ // Check there are no gaps in the indices within the same checkpoint.
127
155
  if (
128
156
  lastMessage &&
129
- message.l2BlockNumber === lastMessage.l2BlockNumber &&
157
+ message.checkpointNumber === lastMessage.checkpointNumber &&
130
158
  message.index !== lastMessage.index + 1n
131
159
  ) {
132
160
  throw new MessageStoreError(
@@ -136,14 +164,14 @@ export class MessageStore {
136
164
  );
137
165
  }
138
166
 
139
- // Check the first message in a block has the correct index.
167
+ // Check the first message in a checkpoint has the correct index.
140
168
  if (
141
- (!lastMessage || message.l2BlockNumber > lastMessage.l2BlockNumber) &&
142
- message.index !== InboxLeaf.smallestIndexFromL2Block(message.l2BlockNumber)
169
+ (!lastMessage || message.checkpointNumber > lastMessage.checkpointNumber) &&
170
+ message.index !== expectedStart
143
171
  ) {
144
172
  throw new MessageStoreError(
145
- `Message ${message.leaf.toString()} for L2 block ${message.l2BlockNumber} has wrong index ` +
146
- `${message.index} (expected ${InboxLeaf.smallestIndexFromL2Block(message.l2BlockNumber)})`,
173
+ `Message ${message.leaf.toString()} for checkpoint ${message.checkpointNumber} has wrong index ` +
174
+ `${message.index} (expected ${expectedStart})`,
147
175
  message,
148
176
  );
149
177
  }
@@ -156,15 +184,6 @@ export class MessageStore {
156
184
  lastMessage = message;
157
185
  }
158
186
 
159
- // Update the L1 sync point to that of the last message added.
160
- const currentSyncPoint = await this.getSynchedL1Block();
161
- if (!currentSyncPoint || currentSyncPoint.l1BlockNumber < lastMessage!.l1BlockNumber) {
162
- await this.setSynchedL1Block({
163
- l1BlockNumber: lastMessage!.l1BlockNumber,
164
- l1BlockHash: lastMessage!.l1BlockHash,
165
- });
166
- }
167
-
168
187
  // Update total message count with the number of inserted messages.
169
188
  await this.increaseTotalMessageCount(messageCount);
170
189
  });
@@ -184,10 +203,42 @@ export class MessageStore {
184
203
  return msg ? deserializeInboxMessage(msg) : undefined;
185
204
  }
186
205
 
187
- public async getL1ToL2Messages(blockNumber: number): Promise<Fr[]> {
206
+ /** Returns the inbox tree-in-progress checkpoint number from L1, or undefined if not yet set. */
207
+ public getInboxTreeInProgress(): Promise<bigint | undefined> {
208
+ return this.#inboxTreeInProgress.getAsync();
209
+ }
210
+
211
+ /**
212
+ * Atomically updates the message sync state: the L1 sync point, the inbox tree-in-progress marker, and
213
+ * (optionally) the L1 finalized block as of this sync. The finalized block is advanced monotonically.
214
+ */
215
+ public setMessageSyncState(
216
+ l1Block: L1BlockId,
217
+ treeInProgress: bigint | undefined,
218
+ finalizedL1Block?: L1BlockId,
219
+ ): Promise<void> {
220
+ return this.db.transactionAsync(async () => {
221
+ await this.setSynchedL1Block(l1Block);
222
+ if (treeInProgress !== undefined) {
223
+ await this.#inboxTreeInProgress.set(treeInProgress);
224
+ } else {
225
+ await this.#inboxTreeInProgress.delete();
226
+ }
227
+ if (finalizedL1Block !== undefined) {
228
+ await this.maybeAdvanceFinalizedL1Block(finalizedL1Block);
229
+ }
230
+ });
231
+ }
232
+
233
+ public async getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]> {
234
+ const treeInProgress = await this.#inboxTreeInProgress.getAsync();
235
+ if (treeInProgress !== undefined && BigInt(checkpointNumber) >= treeInProgress) {
236
+ throw new L1ToL2MessagesNotReadyError(checkpointNumber, treeInProgress);
237
+ }
238
+
188
239
  const messages: Fr[] = [];
189
240
 
190
- const [startIndex, endIndex] = InboxLeaf.indexRangeFromL2Block(blockNumber);
241
+ const [startIndex, endIndex] = InboxLeaf.indexRangeForCheckpoint(checkpointNumber);
191
242
  let lastIndex = startIndex - 1n;
192
243
 
193
244
  for await (const msgBuffer of this.#l1ToL2Messages.valuesAsync({
@@ -195,8 +246,10 @@ export class MessageStore {
195
246
  end: this.indexToKey(endIndex),
196
247
  })) {
197
248
  const msg = deserializeInboxMessage(msgBuffer);
198
- if (msg.l2BlockNumber !== blockNumber) {
199
- throw new Error(`L1 to L2 message with index ${msg.index} has invalid block number ${msg.l2BlockNumber}`);
249
+ if (msg.checkpointNumber !== checkpointNumber) {
250
+ throw new Error(
251
+ `L1 to L2 message with index ${msg.index} has invalid checkpoint number ${msg.checkpointNumber}`,
252
+ );
200
253
  } else if (msg.index !== lastIndex + 1n) {
201
254
  throw new Error(`Expected L1 to L2 message with index ${lastIndex + 1n} but got ${msg.index}`);
202
255
  }
@@ -232,9 +285,9 @@ export class MessageStore {
232
285
  });
233
286
  }
234
287
 
235
- public rollbackL1ToL2MessagesToL2Block(targetBlockNumber: number): Promise<void> {
236
- this.#log.debug(`Deleting L1 to L2 messages up to target L2 block ${targetBlockNumber}`);
237
- const startIndex = InboxLeaf.smallestIndexFromL2Block(targetBlockNumber + 1);
288
+ public rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber: CheckpointNumber): Promise<void> {
289
+ this.#log.debug(`Deleting L1 to L2 messages up to target checkpoint ${targetCheckpointNumber}`);
290
+ const startIndex = InboxLeaf.smallestIndexForCheckpoint(CheckpointNumber(targetCheckpointNumber + 1));
238
291
  return this.removeL1ToL2Messages(startIndex);
239
292
  }
240
293
 
@@ -1,15 +1,14 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
1
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
2
2
  import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
3
- import { keccak256 } from '@aztec/foundation/crypto';
4
- import { Fr } from '@aztec/foundation/fields';
3
+ import { keccak256 } from '@aztec/foundation/crypto/keccak';
4
+ import { Fr } from '@aztec/foundation/curves/bn254';
5
5
  import { BufferReader, bigintToUInt64BE, numToUInt32BE, serializeToBuffer } from '@aztec/foundation/serialize';
6
6
 
7
7
  export type InboxMessage = {
8
8
  index: bigint;
9
9
  leaf: Fr;
10
- // TODO: should be checkpointNumber
11
- l2BlockNumber: BlockNumber;
12
- l1BlockNumber: bigint; // L1 block number - NOT Aztec L2
10
+ checkpointNumber: CheckpointNumber;
11
+ l1BlockNumber: bigint;
13
12
  l1BlockHash: Buffer32;
14
13
  rollingHash: Buffer16;
15
14
  };
@@ -25,7 +24,7 @@ export function serializeInboxMessage(message: InboxMessage): Buffer {
25
24
  message.leaf,
26
25
  message.l1BlockHash,
27
26
  numToUInt32BE(Number(message.l1BlockNumber)),
28
- numToUInt32BE(message.l2BlockNumber),
27
+ numToUInt32BE(message.checkpointNumber),
29
28
  message.rollingHash,
30
29
  ]);
31
30
  }
@@ -36,7 +35,7 @@ export function deserializeInboxMessage(buffer: Buffer): InboxMessage {
36
35
  const leaf = reader.readObject(Fr);
37
36
  const l1BlockHash = reader.readObject(Buffer32);
38
37
  const l1BlockNumber = BigInt(reader.readNumber());
39
- const l2BlockNumber = BlockNumber(reader.readNumber());
38
+ const checkpointNumber = CheckpointNumber(reader.readNumber());
40
39
  const rollingHash = reader.readObject(Buffer16);
41
- return { index, leaf, l1BlockHash, l1BlockNumber, l2BlockNumber, rollingHash };
40
+ return { index, leaf, l1BlockHash, l1BlockNumber, checkpointNumber, rollingHash };
42
41
  }
@@ -1,2 +1 @@
1
- export type { PublishedL2Block } from '@aztec/stdlib/block';
2
1
  export type { L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';