@aztec/archiver 0.0.1-commit.4d3c002 → 0.0.1-commit.4d9804df

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 (124) hide show
  1. package/README.md +7 -5
  2. package/dest/archiver.d.ts +70 -15
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +274 -71
  5. package/dest/config.d.ts +7 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +39 -16
  8. package/dest/errors.d.ts +35 -13
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +54 -16
  11. package/dest/factory.d.ts +11 -6
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +35 -21
  14. package/dest/index.d.ts +11 -3
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +10 -2
  17. package/dest/l1/calldata_retriever.d.ts +9 -1
  18. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  19. package/dest/l1/calldata_retriever.js +20 -10
  20. package/dest/l1/data_retrieval.d.ts +24 -10
  21. package/dest/l1/data_retrieval.d.ts.map +1 -1
  22. package/dest/l1/data_retrieval.js +13 -19
  23. package/dest/l1/trace_tx.d.ts +12 -66
  24. package/dest/l1/trace_tx.d.ts.map +1 -1
  25. package/dest/l1/validate_historical_logs.d.ts +23 -0
  26. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  27. package/dest/l1/validate_historical_logs.js +108 -0
  28. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  29. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  30. package/dest/modules/contract_data_source_adapter.js +32 -0
  31. package/dest/modules/data_source_base.d.ts +71 -50
  32. package/dest/modules/data_source_base.d.ts.map +1 -1
  33. package/dest/modules/data_source_base.js +250 -150
  34. package/dest/modules/data_store_updater.d.ts +28 -9
  35. package/dest/modules/data_store_updater.d.ts.map +1 -1
  36. package/dest/modules/data_store_updater.js +121 -61
  37. package/dest/modules/instrumentation.d.ts +15 -2
  38. package/dest/modules/instrumentation.d.ts.map +1 -1
  39. package/dest/modules/instrumentation.js +48 -9
  40. package/dest/modules/l1_synchronizer.d.ts +11 -7
  41. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  42. package/dest/modules/l1_synchronizer.js +347 -118
  43. package/dest/modules/outbox_trees_resolver.d.ts +62 -0
  44. package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
  45. package/dest/modules/outbox_trees_resolver.js +162 -0
  46. package/dest/modules/validation.d.ts +30 -7
  47. package/dest/modules/validation.d.ts.map +1 -1
  48. package/dest/modules/validation.js +33 -15
  49. package/dest/store/block_store.d.ts +167 -94
  50. package/dest/store/block_store.d.ts.map +1 -1
  51. package/dest/store/block_store.js +524 -260
  52. package/dest/store/contract_class_store.d.ts +17 -3
  53. package/dest/store/contract_class_store.d.ts.map +1 -1
  54. package/dest/store/contract_class_store.js +36 -2
  55. package/dest/store/contract_instance_store.d.ts +28 -1
  56. package/dest/store/contract_instance_store.d.ts.map +1 -1
  57. package/dest/store/contract_instance_store.js +49 -1
  58. package/dest/store/data_stores.d.ts +68 -0
  59. package/dest/store/data_stores.d.ts.map +1 -0
  60. package/dest/store/data_stores.js +54 -0
  61. package/dest/store/function_names_cache.d.ts +17 -0
  62. package/dest/store/function_names_cache.d.ts.map +1 -0
  63. package/dest/store/function_names_cache.js +30 -0
  64. package/dest/store/l2_tips_cache.d.ts +13 -8
  65. package/dest/store/l2_tips_cache.d.ts.map +1 -1
  66. package/dest/store/l2_tips_cache.js +13 -96
  67. package/dest/store/log_store.d.ts +42 -40
  68. package/dest/store/log_store.d.ts.map +1 -1
  69. package/dest/store/log_store.js +257 -480
  70. package/dest/store/log_store_codec.d.ts +78 -0
  71. package/dest/store/log_store_codec.d.ts.map +1 -0
  72. package/dest/store/log_store_codec.js +110 -0
  73. package/dest/store/message_store.d.ts +9 -3
  74. package/dest/store/message_store.d.ts.map +1 -1
  75. package/dest/store/message_store.js +31 -1
  76. package/dest/test/fake_l1_state.d.ts +7 -3
  77. package/dest/test/fake_l1_state.d.ts.map +1 -1
  78. package/dest/test/fake_l1_state.js +45 -18
  79. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  80. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  81. package/dest/test/mock_l1_to_l2_message_source.js +1 -2
  82. package/dest/test/mock_l2_block_source.d.ts +47 -54
  83. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  84. package/dest/test/mock_l2_block_source.js +229 -205
  85. package/dest/test/mock_structs.d.ts +1 -1
  86. package/dest/test/mock_structs.d.ts.map +1 -1
  87. package/dest/test/mock_structs.js +2 -2
  88. package/dest/test/noop_l1_archiver.d.ts +14 -6
  89. package/dest/test/noop_l1_archiver.d.ts.map +1 -1
  90. package/dest/test/noop_l1_archiver.js +26 -10
  91. package/package.json +14 -14
  92. package/src/archiver.ts +355 -77
  93. package/src/config.ts +43 -20
  94. package/src/errors.ts +80 -23
  95. package/src/factory.ts +46 -19
  96. package/src/index.ts +18 -2
  97. package/src/l1/calldata_retriever.ts +27 -10
  98. package/src/l1/data_retrieval.ts +38 -36
  99. package/src/l1/validate_historical_logs.ts +140 -0
  100. package/src/modules/contract_data_source_adapter.ts +46 -0
  101. package/src/modules/data_source_base.ts +319 -200
  102. package/src/modules/data_store_updater.ts +146 -64
  103. package/src/modules/instrumentation.ts +43 -10
  104. package/src/modules/l1_synchronizer.ts +499 -136
  105. package/src/modules/outbox_trees_resolver.ts +199 -0
  106. package/src/modules/validation.ts +78 -21
  107. package/src/store/block_store.ts +627 -321
  108. package/src/store/contract_class_store.ts +47 -3
  109. package/src/store/contract_instance_store.ts +61 -1
  110. package/src/store/data_stores.ts +104 -0
  111. package/src/store/function_names_cache.ts +37 -0
  112. package/src/store/l2_tips_cache.ts +16 -109
  113. package/src/store/log_store.ts +296 -652
  114. package/src/store/log_store_codec.ts +143 -0
  115. package/src/store/message_store.ts +35 -2
  116. package/src/test/fake_l1_state.ts +50 -27
  117. package/src/test/mock_l1_to_l2_message_source.ts +0 -1
  118. package/src/test/mock_l2_block_source.ts +276 -258
  119. package/src/test/mock_structs.ts +5 -2
  120. package/src/test/noop_l1_archiver.ts +54 -11
  121. package/dest/store/kv_archiver_store.d.ts +0 -377
  122. package/dest/store/kv_archiver_store.d.ts.map +0 -1
  123. package/dest/store/kv_archiver_store.js +0 -494
  124. package/src/store/kv_archiver_store.ts +0 -713
@@ -1,16 +1,17 @@
1
1
  import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
2
2
  import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
3
- import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
4
4
  import { Buffer32 } from '@aztec/foundation/buffer';
5
5
  import { Fr } from '@aztec/foundation/curves/bn254';
6
6
  import { EthAddress } from '@aztec/foundation/eth-address';
7
7
  import { createLogger } from '@aztec/foundation/log';
8
- import { CheckpointedL2Block } from '@aztec/stdlib/block';
8
+ import { Body, GENESIS_BLOCK_HEADER_HASH, GENESIS_CHECKPOINT_HEADER_HASH, L2Block } from '@aztec/stdlib/block';
9
9
  import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
10
- import { EmptyL1RollupConstants, getEpochAtSlot, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
10
+ import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
11
11
  import { computeCheckpointOutHash } from '@aztec/stdlib/messaging';
12
12
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
13
- import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
13
+ import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
14
+ import { BlockHeader } from '@aztec/stdlib/tx';
14
15
  /**
15
16
  * A mocked implementation of L2BlockSource to be used in tests.
16
17
  */ export class MockL2BlockSource {
@@ -19,8 +20,47 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
19
20
  provenBlockNumber = 0;
20
21
  finalizedBlockNumber = 0;
21
22
  checkpointedBlockNumber = 0;
22
- proposedCheckpointBlockNumber = 0;
23
+ initialHeader = BlockHeader.empty();
24
+ initialHeaderHash = GENESIS_BLOCK_HEADER_HASH;
25
+ genesisArchiveRoot;
26
+ genesisBlock;
23
27
  log = createLogger('archiver:mock_l2_block_source');
28
+ /** Returns the initial header used to synthesize block 0. */ getInitialHeader() {
29
+ return this.initialHeader;
30
+ }
31
+ /**
32
+ * Sets the initial header used to synthesize block 0. Tests that wire up a real
33
+ * world-state should call this with `worldState.getInitialHeader()` so the L2BlockStream
34
+ * agrees on the genesis hash on both sides. Precomputes and caches the header hash so
35
+ * `getGenesisBlockHash()` can return synchronously.
36
+ */ async setInitialHeader(header) {
37
+ this.initialHeader = header;
38
+ this.initialHeaderHash = await header.hash();
39
+ this.genesisBlock = undefined;
40
+ }
41
+ /**
42
+ * Returns the precomputed hash of the genesis block header. Defaults to the static
43
+ * {@link GENESIS_BLOCK_HEADER_HASH} unless {@link setInitialHeader} has been called with a
44
+ * custom header.
45
+ */ getGenesisBlockHash() {
46
+ return this.initialHeaderHash;
47
+ }
48
+ /**
49
+ * Sets the post-genesis archive root used to synthesize block 0. Mirrors the real archiver,
50
+ * whose synthetic block 0 carries `new AppendOnlyTreeSnapshot(genesisArchiveRoot, 1)` rather
51
+ * than `AppendOnlyTreeSnapshot.empty()`. Tests wiring up a real world-state should set this so
52
+ * archive-based block lookups against the mock match production semantics.
53
+ */ setGenesisArchiveRoot(root) {
54
+ this.genesisArchiveRoot = root;
55
+ this.genesisBlock = undefined;
56
+ }
57
+ getGenesisBlock() {
58
+ if (this.genesisBlock) {
59
+ return this.genesisBlock;
60
+ }
61
+ const archive = this.genesisArchiveRoot ? new AppendOnlyTreeSnapshot(this.genesisArchiveRoot, 1) : AppendOnlyTreeSnapshot.empty();
62
+ return this.genesisBlock = new L2Block(archive, this.initialHeader, Body.empty(), CheckpointNumber.ZERO, IndexWithinCheckpoint(0));
63
+ }
24
64
  /** Creates blocks grouped into single-block checkpoints. */ async createBlocks(numBlocks) {
25
65
  await this.createCheckpoints(numBlocks, 1);
26
66
  }
@@ -57,7 +97,6 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
57
97
  });
58
98
  // Keep tip numbers consistent with remaining blocks.
59
99
  this.checkpointedBlockNumber = Math.min(this.checkpointedBlockNumber, maxBlockNum);
60
- this.proposedCheckpointBlockNumber = Math.min(this.proposedCheckpointBlockNumber, maxBlockNum);
61
100
  this.provenBlockNumber = Math.min(this.provenBlockNumber, maxBlockNum);
62
101
  this.finalizedBlockNumber = Math.min(this.finalizedBlockNumber, maxBlockNum);
63
102
  this.log.verbose(`Removed ${numBlocks} blocks from the mock L2 block source`);
@@ -71,16 +110,9 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
71
110
  }
72
111
  this.finalizedBlockNumber = finalizedBlockNumber;
73
112
  }
74
- setProposedCheckpointBlockNumber(blockNumber) {
75
- this.proposedCheckpointBlockNumber = blockNumber;
76
- }
77
113
  setCheckpointedBlockNumber(checkpointedBlockNumber) {
78
114
  const prevCheckpointed = this.checkpointedBlockNumber;
79
115
  this.checkpointedBlockNumber = checkpointedBlockNumber;
80
- // Proposed checkpoint is always at least as advanced as checkpointed
81
- if (this.proposedCheckpointBlockNumber < checkpointedBlockNumber) {
82
- this.proposedCheckpointBlockNumber = checkpointedBlockNumber;
83
- }
84
116
  // Auto-create single-block checkpoints for newly checkpointed blocks that don't have one yet.
85
117
  // This handles blocks added via addProposedBlocks that are now being marked as checkpointed.
86
118
  const newCheckpoints = [];
@@ -118,179 +150,95 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
118
150
  */ getRegistryAddress() {
119
151
  return Promise.resolve(EthAddress.random());
120
152
  }
121
- /**
122
- * Gets the number of the latest L2 block processed by the block source implementation.
123
- * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
124
- */ getBlockNumber() {
125
- return Promise.resolve(BlockNumber(this.l2Blocks.length));
126
- }
127
- getProvenBlockNumber() {
128
- return Promise.resolve(BlockNumber(this.provenBlockNumber));
129
- }
130
- getCheckpointedL2BlockNumber() {
131
- return Promise.resolve(BlockNumber(this.checkpointedBlockNumber));
132
- }
133
- getFinalizedL2BlockNumber() {
134
- return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
135
- }
136
- getProposedCheckpointL2BlockNumber() {
137
- return Promise.resolve(BlockNumber(this.proposedCheckpointBlockNumber));
138
- }
139
- getCheckpointedBlock(number) {
140
- if (number > this.checkpointedBlockNumber) {
141
- return Promise.resolve(undefined);
153
+ async getBlockNumber(query) {
154
+ if (!query) {
155
+ return BlockNumber(this.l2Blocks.length);
142
156
  }
143
- const block = this.l2Blocks[number - 1];
144
- if (!block) {
145
- return Promise.resolve(undefined);
157
+ if ('number' in query) {
158
+ return query.number;
146
159
  }
147
- return Promise.resolve(this.toCheckpointedBlock(block));
148
- }
149
- async getCheckpointedBlocks(from, limit) {
150
- const result = [];
151
- for(let i = 0; i < limit; i++){
152
- const blockNum = from + i;
153
- if (blockNum > this.checkpointedBlockNumber) {
154
- break;
155
- }
156
- const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
157
- if (block) {
158
- result.push(block);
159
- }
160
+ if ('tag' in query) {
161
+ return BlockNumber(this.resolveBlockTag(query.tag));
160
162
  }
161
- return result;
162
- }
163
- /**
164
- * Gets an l2 block.
165
- * @param number - The block number to return (inclusive).
166
- * @returns The requested L2 block.
167
- */ getBlock(number) {
168
- const block = this.l2Blocks[number - 1];
169
- return Promise.resolve(block);
163
+ const block = await this.getBlock(query);
164
+ return block ? block.header.globalVariables.blockNumber : undefined;
170
165
  }
171
- /**
172
- * Gets an L2 block (new format).
173
- * @param number - The block number to return.
174
- * @returns The requested L2 block.
175
- */ getL2Block(number) {
176
- const block = this.l2Blocks[number - 1];
177
- return Promise.resolve(block);
166
+ getCheckpoint(query) {
167
+ const checkpoint = this.resolveCheckpointQuery(query);
168
+ if (!checkpoint) {
169
+ return Promise.resolve(undefined);
170
+ }
171
+ return Promise.resolve(new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), []));
178
172
  }
179
- /**
180
- * Gets up to `limit` amount of L2 blocks starting from `from`.
181
- * @param from - Number of the first block to return (inclusive).
182
- * @param limit - The maximum number of blocks to return.
183
- * @returns The requested mocked L2 blocks.
184
- */ getBlocks(from, limit) {
185
- return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
186
- }
187
- getCheckpoints(from, limit) {
188
- const checkpoints = this.checkpointList.slice(from - 1, from - 1 + limit);
173
+ getCheckpoints(query) {
174
+ const checkpoints = this.resolveCheckpointsQuery(query);
189
175
  return Promise.resolve(checkpoints.map((checkpoint)=>new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), [])));
190
176
  }
191
177
  getCheckpointByArchive(archive) {
192
178
  const checkpoint = this.checkpointList.find((c)=>c.archive.root.equals(archive));
193
179
  return Promise.resolve(checkpoint);
194
180
  }
195
- async getCheckpointedBlockByHash(blockHash) {
196
- for (const block of this.l2Blocks){
197
- const hash = await block.hash();
198
- if (hash.equals(blockHash)) {
199
- return this.toCheckpointedBlock(block);
200
- }
201
- }
202
- return undefined;
203
- }
204
- getCheckpointedBlockByArchive(archive) {
205
- const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
206
- if (!block) {
181
+ getCheckpointData(query) {
182
+ const checkpoint = this.resolveCheckpointQuery(query);
183
+ if (!checkpoint) {
207
184
  return Promise.resolve(undefined);
208
185
  }
209
- return Promise.resolve(this.toCheckpointedBlock(block));
210
- }
211
- async getL2BlockByHash(blockHash) {
212
- for (const block of this.l2Blocks){
213
- const hash = await block.hash();
214
- if (hash.equals(blockHash)) {
215
- return block;
216
- }
217
- }
218
- return undefined;
186
+ return Promise.resolve(this.checkpointToData(checkpoint));
219
187
  }
220
- getL2BlockByArchive(archive) {
221
- const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
222
- return Promise.resolve(block);
188
+ getCheckpointsData(query) {
189
+ const checkpoints = this.resolveCheckpointsQuery(query);
190
+ return Promise.resolve(checkpoints.map((c)=>this.checkpointToData(c)));
223
191
  }
224
- async getBlockHeaderByHash(blockHash) {
225
- for (const block of this.l2Blocks){
226
- const hash = await block.hash();
227
- if (hash.equals(blockHash)) {
228
- return block.header;
229
- }
230
- }
231
- return undefined;
232
- }
233
- getBlockHeaderByArchive(archive) {
234
- const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
235
- return Promise.resolve(block?.header);
236
- }
237
- async getBlockData(number) {
238
- const block = this.l2Blocks[number - 1];
239
- if (!block) {
240
- return undefined;
241
- }
192
+ checkpointToData(checkpoint) {
242
193
  return {
243
- header: block.header,
244
- archive: block.archive,
245
- blockHash: await block.hash(),
246
- checkpointNumber: block.checkpointNumber,
247
- indexWithinCheckpoint: block.indexWithinCheckpoint
194
+ checkpointNumber: checkpoint.number,
195
+ header: checkpoint.header,
196
+ archive: checkpoint.archive,
197
+ checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
198
+ startBlock: checkpoint.blocks[0].number,
199
+ blockCount: checkpoint.blocks.length,
200
+ feeAssetPriceModifier: checkpoint.feeAssetPriceModifier,
201
+ attestations: [],
202
+ l1: this.mockL1DataForCheckpoint(checkpoint)
248
203
  };
249
204
  }
250
- async getBlockDataByArchive(archive) {
251
- const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
252
- if (!block) {
253
- return undefined;
205
+ resolveCheckpointQuery(query) {
206
+ if ('number' in query) {
207
+ return this.checkpointList[query.number - 1];
208
+ }
209
+ if ('slot' in query) {
210
+ return this.checkpointList.find((c)=>c.header.slotNumber === query.slot);
211
+ }
212
+ switch(query.tag){
213
+ case 'checkpointed':
214
+ return this.checkpointList[this.checkpointList.length - 1];
215
+ case 'proven':
216
+ {
217
+ const provenCheckpoint = this.checkpointList.filter((c)=>c.blocks.some((b)=>b.number <= this.provenBlockNumber));
218
+ return provenCheckpoint.at(-1);
219
+ }
220
+ case 'finalized':
221
+ {
222
+ const finalizedCheckpoint = this.checkpointList.filter((c)=>c.blocks.some((b)=>b.number <= this.finalizedBlockNumber));
223
+ return finalizedCheckpoint.at(-1);
224
+ }
254
225
  }
255
- return {
256
- header: block.header,
257
- archive: block.archive,
258
- blockHash: await block.hash(),
259
- checkpointNumber: block.checkpointNumber,
260
- indexWithinCheckpoint: block.indexWithinCheckpoint
261
- };
262
- }
263
- getBlockHeader(number) {
264
- return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
265
- }
266
- getCheckpointsForEpoch(epochNumber) {
267
- return Promise.resolve(this.getCheckpointsInEpoch(epochNumber));
268
- }
269
- getCheckpointsDataForEpoch(epochNumber) {
270
- const checkpoints = this.getCheckpointsInEpoch(epochNumber);
271
- return Promise.resolve(checkpoints.map((checkpoint)=>({
272
- checkpointNumber: checkpoint.number,
273
- header: checkpoint.header,
274
- archive: checkpoint.archive,
275
- checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
276
- startBlock: checkpoint.blocks[0].number,
277
- blockCount: checkpoint.blocks.length,
278
- attestations: [],
279
- l1: this.mockL1DataForCheckpoint(checkpoint)
280
- })));
281
226
  }
282
- getCheckpointedBlocksForEpoch(epochNumber) {
283
- const checkpoints = this.getCheckpointsInEpoch(epochNumber);
284
- return Promise.resolve(checkpoints.flatMap((checkpoint)=>checkpoint.blocks.map((block)=>this.toCheckpointedBlock(block))));
227
+ resolveCheckpointsQuery(query) {
228
+ if ('from' in query) {
229
+ return this.checkpointList.slice(query.from - 1, query.from - 1 + query.limit);
230
+ }
231
+ if ('fromSlot' in query) {
232
+ const matching = this.checkpointList.filter((c)=>query.reverse ? c.header.slotNumber <= query.fromSlot : c.header.slotNumber >= query.fromSlot);
233
+ const nearestFirst = query.reverse ? matching.reverse() : matching;
234
+ return nearestFirst.slice(0, query.limit);
235
+ }
236
+ return this.getCheckpointsInEpoch(query.epoch);
285
237
  }
286
238
  getBlocksForSlot(slotNumber) {
287
239
  const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
288
240
  return Promise.resolve(blocks);
289
241
  }
290
- async getCheckpointedBlockHeadersForEpoch(epochNumber) {
291
- const checkpointedBlocks = await this.getCheckpointedBlocksForEpoch(epochNumber);
292
- return checkpointedBlocks.map((b)=>b.block.header);
293
- }
294
242
  /**
295
243
  * Gets a tx effect.
296
244
  * @param txHash - The hash of the tx corresponding to the tx effect.
@@ -308,70 +256,69 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
308
256
  data: txEffect,
309
257
  l2BlockNumber: block.number,
310
258
  l2BlockHash: await block.hash(),
311
- txIndexInBlock: block.body.txEffects.indexOf(txEffect)
259
+ txIndexInBlock: block.body.txEffects.findIndex((t)=>t.txHash.equals(txHash)),
260
+ slotNumber: block.header.globalVariables.slotNumber
312
261
  };
313
262
  }
314
- /**
315
- * Gets a receipt of a settled tx.
316
- * @param txHash - The hash of a tx we try to get the receipt for.
317
- * @returns The requested tx receipt (or undefined if not found).
318
- */ async getSettledTxReceipt(txHash) {
319
- for (const block of this.l2Blocks){
320
- for (const txEffect of block.body.txEffects){
321
- if (txEffect.txHash.equals(txHash)) {
322
- // In mock, assume all txs are checkpointed with successful execution
323
- return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(), await block.hash(), block.number, getEpochAtSlot(block.slot, EmptyL1RollupConstants));
324
- }
325
- }
326
- }
327
- return undefined;
263
+ getL2ToL1MembershipWitness() {
264
+ // Mock does not back the L2-to-L1 message witness flow.
265
+ return Promise.resolve(undefined);
328
266
  }
329
267
  async getL2Tips() {
330
- const [latest, proven, finalized, checkpointed, proposedCheckpoint] = [
268
+ const [latest, proven, finalized, checkpointed] = [
331
269
  await this.getBlockNumber(),
332
- await this.getProvenBlockNumber(),
270
+ this.provenBlockNumber,
333
271
  this.finalizedBlockNumber,
334
- this.checkpointedBlockNumber,
335
- await this.getProposedCheckpointL2BlockNumber()
272
+ this.checkpointedBlockNumber
336
273
  ];
337
274
  const latestBlock = this.l2Blocks[latest - 1];
338
275
  const provenBlock = this.l2Blocks[proven - 1];
339
276
  const finalizedBlock = this.l2Blocks[finalized - 1];
340
277
  const checkpointedBlock = this.l2Blocks[checkpointed - 1];
341
- const proposedCheckpointBlock = this.l2Blocks[proposedCheckpoint - 1];
278
+ // For genesis tips (block number 0) report the dynamic initial header hash so consumers
279
+ // running L2BlockStream against this mock agree at block 0 with their local tip store.
280
+ const genesisHash = (await this.initialHeader.hash()).toString();
281
+ const tipHash = async (block, number)=>{
282
+ if (block) {
283
+ return (await block.hash()).toString();
284
+ }
285
+ return number === 0 ? genesisHash : '';
286
+ };
342
287
  const latestBlockId = {
343
288
  number: BlockNumber(latest),
344
- hash: (await latestBlock?.hash())?.toString()
289
+ hash: await tipHash(latestBlock, latest)
345
290
  };
346
291
  const provenBlockId = {
347
292
  number: BlockNumber(proven),
348
- hash: (await provenBlock?.hash())?.toString()
293
+ hash: await tipHash(provenBlock, proven)
349
294
  };
350
295
  const finalizedBlockId = {
351
296
  number: BlockNumber(finalized),
352
- hash: (await finalizedBlock?.hash())?.toString()
297
+ hash: await tipHash(finalizedBlock, finalized)
353
298
  };
354
299
  const checkpointedBlockId = {
355
300
  number: BlockNumber(checkpointed),
356
- hash: (await checkpointedBlock?.hash())?.toString()
301
+ hash: await tipHash(checkpointedBlock, checkpointed)
357
302
  };
358
- const proposedCheckpointBlockId = {
359
- number: BlockNumber(proposedCheckpoint),
360
- hash: (await proposedCheckpointBlock?.hash())?.toString()
361
- };
362
- const makeTipId = (blockId)=>({
303
+ const makeTipId = (blockId)=>{
304
+ const checkpointNumber = this.findCheckpointNumberForBlock(blockId.number) ?? CheckpointNumber(0);
305
+ // Match production semantics: checkpoint 0 is fully synthetic (no real checkpoint header
306
+ // exists at 0), so its hash stays at the protocol constant `GENESIS_CHECKPOINT_HEADER_HASH`
307
+ // even though the block-0 hash is dynamic. See L2TipsCache for the production path.
308
+ const hash = checkpointNumber === 0 ? GENESIS_CHECKPOINT_HEADER_HASH.toString() : blockId.hash;
309
+ return {
363
310
  block: blockId,
364
311
  checkpoint: {
365
- number: this.findCheckpointNumberForBlock(blockId.number) ?? CheckpointNumber(0),
366
- hash: blockId.hash
312
+ number: checkpointNumber,
313
+ hash
367
314
  }
368
- });
315
+ };
316
+ };
369
317
  return {
370
318
  proposed: latestBlockId,
371
319
  checkpointed: makeTipId(checkpointedBlockId),
372
320
  proven: makeTipId(provenBlockId),
373
- finalized: makeTipId(finalizedBlockId),
374
- proposedCheckpoint: makeTipId(proposedCheckpointBlockId)
321
+ finalized: makeTipId(finalizedBlockId)
375
322
  };
376
323
  }
377
324
  getSyncedL2EpochNumber() {
@@ -386,9 +333,12 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
386
333
  getL1Constants() {
387
334
  return Promise.resolve(EmptyL1RollupConstants);
388
335
  }
336
+ isPruneDueAtSlot(_slot) {
337
+ return Promise.resolve(false);
338
+ }
389
339
  getGenesisValues() {
390
340
  return Promise.resolve({
391
- genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
341
+ genesisArchiveRoot: this.genesisArchiveRoot ?? new Fr(GENESIS_ARCHIVE_ROOT)
392
342
  });
393
343
  }
394
344
  getL1Timestamp() {
@@ -429,6 +379,88 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
429
379
  syncImmediate() {
430
380
  return Promise.resolve();
431
381
  }
382
+ async getBlock(query) {
383
+ if ('number' in query) {
384
+ if (query.number === 0) {
385
+ return this.getGenesisBlock();
386
+ }
387
+ return this.l2Blocks[query.number - 1];
388
+ }
389
+ if ('hash' in query) {
390
+ const genesis = this.getGenesisBlock();
391
+ if ((await genesis.hash()).equals(query.hash)) {
392
+ return genesis;
393
+ }
394
+ for (const b of this.l2Blocks){
395
+ const hash = await b.hash();
396
+ if (hash.equals(query.hash)) {
397
+ return b;
398
+ }
399
+ }
400
+ return undefined;
401
+ }
402
+ if ('archive' in query) {
403
+ const genesis = this.getGenesisBlock();
404
+ if (genesis.archive.root.equals(query.archive)) {
405
+ return genesis;
406
+ }
407
+ return this.l2Blocks.find((b)=>b.archive.root.equals(query.archive));
408
+ }
409
+ const number = this.resolveBlockTag(query.tag);
410
+ if (number === 0) {
411
+ return this.getGenesisBlock();
412
+ }
413
+ return this.l2Blocks[number - 1];
414
+ }
415
+ resolveBlockTag(tag) {
416
+ switch(tag){
417
+ case 'latest':
418
+ case 'proposed':
419
+ return this.l2Blocks.length;
420
+ case 'checkpointed':
421
+ return this.checkpointedBlockNumber;
422
+ case 'proven':
423
+ return this.provenBlockNumber;
424
+ case 'finalized':
425
+ return this.finalizedBlockNumber;
426
+ }
427
+ }
428
+ getBlocks(query) {
429
+ let blocks;
430
+ if ('from' in query) {
431
+ blocks = this.l2Blocks.slice(query.from - 1, query.from - 1 + query.limit);
432
+ } else {
433
+ const epochCheckpoints = this.getCheckpointsInEpoch(query.epoch);
434
+ blocks = epochCheckpoints.flatMap((c)=>c.blocks);
435
+ }
436
+ if (query.onlyCheckpointed) {
437
+ blocks = blocks.filter((b)=>b.header.globalVariables.blockNumber <= this.checkpointedBlockNumber);
438
+ }
439
+ return Promise.resolve(blocks);
440
+ }
441
+ async getBlockData(query) {
442
+ const block = await this.getBlock(query);
443
+ if (!block) {
444
+ return undefined;
445
+ }
446
+ return {
447
+ header: block.header,
448
+ archive: block.archive,
449
+ blockHash: await block.hash(),
450
+ checkpointNumber: block.checkpointNumber,
451
+ indexWithinCheckpoint: block.indexWithinCheckpoint
452
+ };
453
+ }
454
+ async getBlocksData(query) {
455
+ const blocks = await this.getBlocks(query);
456
+ return Promise.all(blocks.map(async (block)=>({
457
+ header: block.header,
458
+ archive: block.archive,
459
+ blockHash: await block.hash(),
460
+ checkpointNumber: block.checkpointNumber,
461
+ indexWithinCheckpoint: block.indexWithinCheckpoint
462
+ })));
463
+ }
432
464
  isPendingChainInvalid() {
433
465
  return Promise.resolve(false);
434
466
  }
@@ -437,10 +469,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
437
469
  valid: true
438
470
  });
439
471
  }
440
- getProposedCheckpoint() {
441
- return Promise.resolve(undefined);
442
- }
443
- getProposedCheckpointOnly() {
472
+ getProposedCheckpointData(_query) {
444
473
  return Promise.resolve(undefined);
445
474
  }
446
475
  /** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
@@ -453,11 +482,6 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
453
482
  /** Creates a mock L1PublishedData for a checkpoint. */ mockL1DataForCheckpoint(checkpoint) {
454
483
  return new L1PublishedData(BigInt(checkpoint.number), BigInt(checkpoint.number), Buffer32.random().toString());
455
484
  }
456
- /** Creates a CheckpointedL2Block from a block using stored checkpoint info. */ toCheckpointedBlock(block) {
457
- const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === block.number));
458
- const checkpointNumber = checkpoint?.number ?? block.checkpointNumber;
459
- return new CheckpointedL2Block(checkpointNumber, block, new L1PublishedData(BigInt(block.number), BigInt(block.number), `0x${block.number.toString(16).padStart(64, '0')}`), []);
460
- }
461
485
  /** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */ findCheckpointNumberForBlock(blockNumber) {
462
486
  const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === blockNumber));
463
487
  return checkpoint?.number;
@@ -85,4 +85,4 @@ export interface MockCheckpointWithLogsOptions {
85
85
  }
86
86
  /** Creates a checkpoint with specified logs on each tx effect. */
87
87
  export declare function makeCheckpointWithLogs(blockNumber: number, options?: MockCheckpointWithLogsOptions): Promise<PublishedCheckpoint>;
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUF5QixjQUFjLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFbkYsd0JBQWdCLGdCQUFnQixDQUM5QixtQkFBbUIsV0FBZ0IsRUFDbkMsU0FBUyxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0sR0FDcEMsWUFBWSxDQWdCZDtBQUVELHdCQUFnQixpQkFBaUIsQ0FDL0IsVUFBVSxFQUFFLE1BQU0sRUFDbEIsSUFBSSxHQUFFO0lBQ0osV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDM0MscUJBQXFCLENBQUMsRUFB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
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUF5QixjQUFjLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFbkYsd0JBQWdCLGdCQUFnQixDQUM5QixtQkFBbUIsV0FBZ0IsRUFDbkMsU0FBUyxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0sR0FDcEMsWUFBWSxDQWdCZDtBQUVELHdCQUFnQixpQkFBaUIsQ0FDL0IsVUFBVSxFQUFFLE1BQU0sRUFDbEIsSUFBSSxHQUFFO0lBQ0osV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDM0MscUJBQXFCLENBQUMsRUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
@@ -147,13 +147,13 @@ export function makeInboxMessages(totalCount, opts = {}) {
147
147
  /** Creates a deterministic Tag for public log testing. */ export function makePublicLogTag(blockNumber, txIndex, logIndex) {
148
148
  return new Tag(blockNumber === 1 && txIndex === 0 && logIndex === 0 ? Fr.ZERO : new Fr((blockNumber * 100 + txIndex * 10 + logIndex) * 123));
149
149
  }
150
- /** Creates a PublicLog with fields derived from the tag. */ export function makePublicLog(tag, contractAddress = AztecAddress.fromNumber(543254)) {
150
+ /** Creates a PublicLog with fields derived from the tag. */ export function makePublicLog(tag, contractAddress = AztecAddress.fromNumberUnsafe(543254)) {
151
151
  return PublicLog.from({
152
152
  contractAddress,
153
153
  fields: new Array(10).fill(null).map((_, i)=>!i ? tag.value : new Fr(tag.value.toBigInt() + BigInt(i)))
154
154
  });
155
155
  }
156
- /** Creates multiple public logs for a transaction. */ export function makePublicLogs(blockNumber, txIndex, numLogsPerTx, contractAddress = AztecAddress.fromNumber(543254)) {
156
+ /** Creates multiple public logs for a transaction. */ export function makePublicLogs(blockNumber, txIndex, numLogsPerTx, contractAddress = AztecAddress.fromNumberUnsafe(543254)) {
157
157
  return times(numLogsPerTx, (logIndex)=>{
158
158
  const tag = makePublicLogTag(blockNumber, txIndex, logIndex);
159
159
  return makePublicLog(tag, contractAddress);