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

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 (122) hide show
  1. package/dest/archiver/archiver.d.ts +84 -70
  2. package/dest/archiver/archiver.d.ts.map +1 -1
  3. package/dest/archiver/archiver.js +439 -228
  4. package/dest/archiver/archiver_store.d.ts +95 -43
  5. package/dest/archiver/archiver_store.d.ts.map +1 -1
  6. package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
  7. package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
  8. package/dest/archiver/archiver_store_test_suite.js +1847 -366
  9. package/dest/archiver/config.d.ts +5 -4
  10. package/dest/archiver/config.d.ts.map +1 -1
  11. package/dest/archiver/config.js +10 -3
  12. package/dest/archiver/errors.d.ts +25 -1
  13. package/dest/archiver/errors.d.ts.map +1 -1
  14. package/dest/archiver/errors.js +37 -0
  15. package/dest/archiver/index.d.ts +2 -2
  16. package/dest/archiver/index.d.ts.map +1 -1
  17. package/dest/archiver/instrumentation.d.ts +3 -1
  18. package/dest/archiver/instrumentation.d.ts.map +1 -1
  19. package/dest/archiver/instrumentation.js +11 -0
  20. package/dest/archiver/kv_archiver_store/block_store.d.ts +50 -18
  21. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  22. package/dest/archiver/kv_archiver_store/block_store.js +320 -84
  23. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -2
  24. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
  25. package/dest/archiver/kv_archiver_store/contract_class_store.js +1 -1
  26. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +2 -2
  27. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
  28. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +40 -51
  29. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  30. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +65 -48
  31. package/dest/archiver/kv_archiver_store/log_store.d.ts +12 -16
  32. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
  33. package/dest/archiver/kv_archiver_store/log_store.js +148 -84
  34. package/dest/archiver/kv_archiver_store/message_store.d.ts +6 -5
  35. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
  36. package/dest/archiver/kv_archiver_store/message_store.js +15 -14
  37. package/dest/archiver/l1/bin/retrieve-calldata.d.ts +3 -0
  38. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +1 -0
  39. package/dest/archiver/l1/bin/retrieve-calldata.js +149 -0
  40. package/dest/archiver/l1/calldata_retriever.d.ts +112 -0
  41. package/dest/archiver/l1/calldata_retriever.d.ts.map +1 -0
  42. package/dest/archiver/l1/calldata_retriever.js +471 -0
  43. package/dest/archiver/l1/data_retrieval.d.ts +90 -0
  44. package/dest/archiver/l1/data_retrieval.d.ts.map +1 -0
  45. package/dest/archiver/{data_retrieval.js → l1/data_retrieval.js} +50 -106
  46. package/dest/archiver/l1/debug_tx.d.ts +19 -0
  47. package/dest/archiver/l1/debug_tx.d.ts.map +1 -0
  48. package/dest/archiver/l1/debug_tx.js +73 -0
  49. package/dest/archiver/l1/spire_proposer.d.ts +70 -0
  50. package/dest/archiver/l1/spire_proposer.d.ts.map +1 -0
  51. package/dest/archiver/l1/spire_proposer.js +157 -0
  52. package/dest/archiver/l1/trace_tx.d.ts +97 -0
  53. package/dest/archiver/l1/trace_tx.d.ts.map +1 -0
  54. package/dest/archiver/l1/trace_tx.js +91 -0
  55. package/dest/archiver/l1/types.d.ts +12 -0
  56. package/dest/archiver/l1/types.d.ts.map +1 -0
  57. package/dest/archiver/l1/types.js +3 -0
  58. package/dest/archiver/l1/validate_trace.d.ts +29 -0
  59. package/dest/archiver/l1/validate_trace.d.ts.map +1 -0
  60. package/dest/archiver/l1/validate_trace.js +150 -0
  61. package/dest/archiver/structs/inbox_message.d.ts +4 -4
  62. package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
  63. package/dest/archiver/structs/inbox_message.js +6 -6
  64. package/dest/archiver/structs/published.d.ts +1 -2
  65. package/dest/archiver/structs/published.d.ts.map +1 -1
  66. package/dest/factory.d.ts +1 -1
  67. package/dest/factory.js +1 -1
  68. package/dest/index.d.ts +2 -2
  69. package/dest/index.d.ts.map +1 -1
  70. package/dest/index.js +1 -1
  71. package/dest/test/mock_archiver.d.ts +4 -5
  72. package/dest/test/mock_archiver.d.ts.map +1 -1
  73. package/dest/test/mock_archiver.js +5 -9
  74. package/dest/test/mock_l1_to_l2_message_source.d.ts +5 -6
  75. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  76. package/dest/test/mock_l1_to_l2_message_source.js +7 -11
  77. package/dest/test/mock_l2_block_source.d.ts +11 -4
  78. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  79. package/dest/test/mock_l2_block_source.js +18 -17
  80. package/dest/test/mock_structs.d.ts +3 -2
  81. package/dest/test/mock_structs.d.ts.map +1 -1
  82. package/dest/test/mock_structs.js +9 -9
  83. package/package.json +15 -14
  84. package/src/archiver/archiver.ts +567 -290
  85. package/src/archiver/archiver_store.ts +104 -42
  86. package/src/archiver/archiver_store_test_suite.ts +1895 -347
  87. package/src/archiver/config.ts +15 -10
  88. package/src/archiver/errors.ts +64 -0
  89. package/src/archiver/index.ts +1 -1
  90. package/src/archiver/instrumentation.ts +14 -0
  91. package/src/archiver/kv_archiver_store/block_store.ts +435 -95
  92. package/src/archiver/kv_archiver_store/contract_class_store.ts +1 -1
  93. package/src/archiver/kv_archiver_store/contract_instance_store.ts +1 -1
  94. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +81 -66
  95. package/src/archiver/kv_archiver_store/log_store.ts +208 -99
  96. package/src/archiver/kv_archiver_store/message_store.ts +21 -18
  97. package/src/archiver/l1/README.md +98 -0
  98. package/src/archiver/l1/bin/retrieve-calldata.ts +182 -0
  99. package/src/archiver/l1/calldata_retriever.ts +641 -0
  100. package/src/archiver/{data_retrieval.ts → l1/data_retrieval.ts} +96 -161
  101. package/src/archiver/l1/debug_tx.ts +99 -0
  102. package/src/archiver/l1/spire_proposer.ts +160 -0
  103. package/src/archiver/l1/trace_tx.ts +128 -0
  104. package/src/archiver/l1/types.ts +13 -0
  105. package/src/archiver/l1/validate_trace.ts +211 -0
  106. package/src/archiver/structs/inbox_message.ts +7 -8
  107. package/src/archiver/structs/published.ts +0 -1
  108. package/src/factory.ts +1 -1
  109. package/src/index.ts +1 -1
  110. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  111. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  112. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  113. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  114. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  115. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  116. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  117. package/src/test/mock_archiver.ts +6 -11
  118. package/src/test/mock_l1_to_l2_message_source.ts +6 -11
  119. package/src/test/mock_l2_block_source.ts +22 -18
  120. package/src/test/mock_structs.ts +10 -10
  121. package/dest/archiver/data_retrieval.d.ts +0 -80
  122. package/dest/archiver/data_retrieval.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { toArray } from '@aztec/foundation/iterable';
3
3
  import { BufferReader, numToUInt8, serializeToBuffer } from '@aztec/foundation/serialize';
4
4
  import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import {
@@ -1,12 +1,13 @@
1
- import type { L1BlockId } from '@aztec/ethereum';
2
- import { BlockNumber } from '@aztec/foundation/branded-types';
3
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { L1BlockId } from '@aztec/ethereum/l1-types';
2
+ import type { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
3
+ import type { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import { toArray } from '@aztec/foundation/iterable';
5
5
  import { createLogger } from '@aztec/foundation/log';
6
6
  import type { AztecAsyncKVStore, CustomRange, StoreSize } from '@aztec/kv-store';
7
7
  import { FunctionSelector } from '@aztec/stdlib/abi';
8
8
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
9
- import { type L2Block, L2BlockHash, type ValidateBlockResult } from '@aztec/stdlib/block';
9
+ import { CheckpointedL2Block, L2BlockHash, L2BlockNew, type ValidateBlockResult } from '@aztec/stdlib/block';
10
+ import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
10
11
  import type {
11
12
  ContractClassPublic,
12
13
  ContractDataSource,
@@ -16,7 +17,7 @@ import type {
16
17
  UtilityFunctionWithMembershipProof,
17
18
  } from '@aztec/stdlib/contract';
18
19
  import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client';
19
- import { type LogFilter, PrivateLog, type TxScopedL2Log } from '@aztec/stdlib/logs';
20
+ import type { LogFilter, SiloedTag, Tag, TxScopedL2Log } from '@aztec/stdlib/logs';
20
21
  import type { BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
21
22
  import type { UInt64 } from '@aztec/stdlib/types';
22
23
 
@@ -24,14 +25,13 @@ import { join } from 'path';
24
25
 
25
26
  import type { ArchiverDataStore, ArchiverL1SynchPoint } from '../archiver_store.js';
26
27
  import type { InboxMessage } from '../structs/inbox_message.js';
27
- import type { PublishedL2Block } from '../structs/published.js';
28
- import { BlockStore } from './block_store.js';
28
+ import { BlockStore, type CheckpointData } from './block_store.js';
29
29
  import { ContractClassStore } from './contract_class_store.js';
30
30
  import { ContractInstanceStore } from './contract_instance_store.js';
31
31
  import { LogStore } from './log_store.js';
32
32
  import { MessageStore } from './message_store.js';
33
33
 
34
- export const ARCHIVER_DB_VERSION = 3;
34
+ export const ARCHIVER_DB_VERSION = 5;
35
35
  export const MAX_FUNCTION_SIGNATURES = 1000;
36
36
  export const MAX_FUNCTION_NAME_LEN = 256;
37
37
 
@@ -67,7 +67,7 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
67
67
  }
68
68
 
69
69
  public getBlockNumber(): Promise<BlockNumber> {
70
- return this.getSynchedL2BlockNumber();
70
+ return this.#blockStore.getLatestL2BlockNumber();
71
71
  }
72
72
 
73
73
  public async getContract(
@@ -186,42 +186,52 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
186
186
  * @param blocks - The L2 blocks to be added to the store and the last processed L1 block.
187
187
  * @returns True if the operation is successful.
188
188
  */
189
- addBlocks(blocks: PublishedL2Block[], opts: { force?: boolean } = {}): Promise<boolean> {
189
+ addBlocks(blocks: L2BlockNew[], opts: { force?: boolean; checkpointNumber?: number } = {}): Promise<boolean> {
190
190
  return this.#blockStore.addBlocks(blocks, opts);
191
191
  }
192
192
 
193
+ getRangeOfCheckpoints(from: CheckpointNumber, limit: number): Promise<CheckpointData[]> {
194
+ return this.#blockStore.getRangeOfCheckpoints(from, limit);
195
+ }
196
+ getLatestBlockNumber(): Promise<BlockNumber> {
197
+ return this.#blockStore.getLatestBlockNumber();
198
+ }
199
+
193
200
  /**
194
- * Unwinds blocks from the database
201
+ * Unwinds checkpoints from the database
195
202
  * @param from - The tip of the chain, passed for verification purposes,
196
203
  * ensuring that we don't end up deleting something we did not intend
197
- * @param blocksToUnwind - The number of blocks we are to unwind
204
+ * @param checkpointsToUnwind - The number of checkpoints we are to unwind
198
205
  * @returns True if the operation is successful
199
206
  */
200
- unwindBlocks(from: BlockNumber, blocksToUnwind: number): Promise<boolean> {
201
- return this.#blockStore.unwindBlocks(from, blocksToUnwind);
207
+ unwindCheckpoints(from: CheckpointNumber, checkpointsToUnwind: number): Promise<boolean> {
208
+ return this.#blockStore.unwindCheckpoints(from, checkpointsToUnwind);
202
209
  }
203
210
 
204
- getPublishedBlock(number: BlockNumber): Promise<PublishedL2Block | undefined> {
205
- return this.#blockStore.getBlock(number);
211
+ addCheckpoints(checkpoints: PublishedCheckpoint[]): Promise<boolean> {
212
+ return this.#blockStore.addCheckpoints(checkpoints);
206
213
  }
207
214
 
208
- getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
215
+ getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined> {
216
+ return this.#blockStore.getCheckpointedBlock(number);
217
+ }
218
+ getCheckpointedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined> {
219
+ return this.#blockStore.getCheckpointedBlockByHash(blockHash);
220
+ }
221
+ getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined> {
222
+ return this.#blockStore.getCheckpointedBlockByArchive(archive);
223
+ }
224
+ getBlock(number: BlockNumber): Promise<L2BlockNew | undefined> {
225
+ return this.#blockStore.getBlock(number);
226
+ }
227
+ getBlockByHash(blockHash: Fr): Promise<L2BlockNew | undefined> {
209
228
  return this.#blockStore.getBlockByHash(L2BlockHash.fromField(blockHash));
210
229
  }
211
-
212
- getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
230
+ getBlockByArchive(archive: Fr): Promise<L2BlockNew | undefined> {
213
231
  return this.#blockStore.getBlockByArchive(archive);
214
232
  }
215
-
216
- /**
217
- * Gets up to `limit` amount of L2 blocks starting from `from`.
218
- *
219
- * @param start - Number of the first block to return (inclusive).
220
- * @param limit - The number of blocks to return.
221
- * @returns The requested L2 blocks
222
- */
223
- getPublishedBlocks(start: BlockNumber, limit: number): Promise<PublishedL2Block[]> {
224
- return toArray(this.#blockStore.getBlocks(start, limit));
233
+ getBlocks(from: BlockNumber, limit: BlockNumber): Promise<L2BlockNew[]> {
234
+ return toArray(this.#blockStore.getBlocks(from, limit));
225
235
  }
226
236
 
227
237
  /**
@@ -266,11 +276,11 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
266
276
  * @param blocks - The blocks for which to add the logs.
267
277
  * @returns True if the operation is successful.
268
278
  */
269
- addLogs(blocks: L2Block[]): Promise<boolean> {
279
+ addLogs(blocks: L2BlockNew[]): Promise<boolean> {
270
280
  return this.#logStore.addLogs(blocks);
271
281
  }
272
282
 
273
- deleteLogs(blocks: L2Block[]): Promise<boolean> {
283
+ deleteLogs(blocks: L2BlockNew[]): Promise<boolean> {
274
284
  return this.#logStore.deleteLogs(blocks);
275
285
  }
276
286
 
@@ -300,34 +310,25 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
300
310
  }
301
311
 
302
312
  /**
303
- * Gets L1 to L2 message (to be) included in a given block.
304
- * @param blockNumber - L2 block number to get messages for.
313
+ * Gets L1 to L2 message (to be) included in a given checkpoint.
314
+ * @param checkpointNumber - Checkpoint number to get messages for.
305
315
  * @returns The L1 to L2 messages/leaves of the messages subtree (throws if not found).
306
316
  */
307
- getL1ToL2Messages(blockNumber: BlockNumber): Promise<Fr[]> {
308
- return this.#messageStore.getL1ToL2Messages(blockNumber);
317
+ getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]> {
318
+ return this.#messageStore.getL1ToL2Messages(checkpointNumber);
309
319
  }
310
320
 
311
- /**
312
- * Retrieves all private logs from up to `limit` blocks, starting from the block number `from`.
313
- * @param from - The block number from which to begin retrieving logs.
314
- * @param limit - The maximum number of blocks to retrieve logs from.
315
- * @returns An array of private logs from the specified range of blocks.
316
- */
317
- getPrivateLogs(from: BlockNumber, limit: number): Promise<PrivateLog[]> {
318
- return this.#logStore.getPrivateLogs(from, limit);
321
+ getPrivateLogsByTags(tags: SiloedTag[]): Promise<TxScopedL2Log[][]> {
322
+ try {
323
+ return this.#logStore.getPrivateLogsByTags(tags);
324
+ } catch (err) {
325
+ return Promise.reject(err);
326
+ }
319
327
  }
320
328
 
321
- /**
322
- * Gets all logs that match any of the received tags (i.e. logs with their first field equal to a tag).
323
- * @param tags - The tags to filter the logs by.
324
- * @param logsPerTag - How many logs to return per tag. Default returns everything
325
- * @returns For each received tag, an array of matching logs is returned. An empty array implies no logs match
326
- * that tag.
327
- */
328
- getLogsByTags(tags: Fr[], logsPerTag?: number): Promise<TxScopedL2Log[][]> {
329
+ getPublicLogsByTagsFromContract(contractAddress: AztecAddress, tags: Tag[]): Promise<TxScopedL2Log[][]> {
329
330
  try {
330
- return this.#logStore.getLogsByTags(tags, logsPerTag);
331
+ return this.#logStore.getPublicLogsByTagsFromContract(contractAddress, tags);
331
332
  } catch (err) {
332
333
  return Promise.reject(err);
333
334
  }
@@ -359,20 +360,12 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
359
360
  }
360
361
  }
361
362
 
362
- /**
363
- * Gets the number of the latest L2 block processed.
364
- * @returns The number of the latest L2 block processed.
365
- */
366
- getSynchedL2BlockNumber(): Promise<BlockNumber> {
367
- return this.#blockStore.getSynchedL2BlockNumber();
363
+ getProvenCheckpointNumber(): Promise<CheckpointNumber> {
364
+ return this.#blockStore.getProvenCheckpointNumber();
368
365
  }
369
366
 
370
- getProvenL2BlockNumber(): Promise<BlockNumber> {
371
- return this.#blockStore.getProvenL2BlockNumber();
372
- }
373
-
374
- async setProvenL2BlockNumber(blockNumber: BlockNumber) {
375
- await this.#blockStore.setProvenL2BlockNumber(blockNumber);
367
+ async setProvenCheckpointNumber(checkpointNumber: CheckpointNumber) {
368
+ await this.#blockStore.setProvenCheckpointNumber(checkpointNumber);
376
369
  }
377
370
 
378
371
  async setBlockSynchedL1BlockNumber(l1BlockNumber: bigint) {
@@ -383,6 +376,10 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
383
376
  await this.#messageStore.setSynchedL1Block(l1Block);
384
377
  }
385
378
 
379
+ getProvenBlockNumber(): Promise<BlockNumber> {
380
+ return this.#blockStore.getProvenBlockNumber();
381
+ }
382
+
386
383
  /**
387
384
  * Gets the last L1 block number processed by the archiver
388
385
  */
@@ -401,8 +398,8 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
401
398
  return this.db.estimateSize();
402
399
  }
403
400
 
404
- public rollbackL1ToL2MessagesToL2Block(targetBlockNumber: BlockNumber): Promise<void> {
405
- return this.#messageStore.rollbackL1ToL2MessagesToL2Block(targetBlockNumber);
401
+ public rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber: CheckpointNumber): Promise<void> {
402
+ return this.#messageStore.rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber);
406
403
  }
407
404
 
408
405
  public iterateL1ToL2Messages(range: CustomRange<bigint> = {}): AsyncIterableIterator<InboxMessage> {
@@ -420,4 +417,22 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
420
417
  public setPendingChainValidationStatus(status: ValidateBlockResult | undefined): Promise<void> {
421
418
  return this.#blockStore.setPendingChainValidationStatus(status);
422
419
  }
420
+
421
+ public getCheckpointedL2BlockNumber(): Promise<BlockNumber> {
422
+ return this.#blockStore.getCheckpointedL2BlockNumber();
423
+ }
424
+ public getSynchedCheckpointNumber(): Promise<CheckpointNumber> {
425
+ return this.#blockStore.getLatestCheckpointNumber();
426
+ }
427
+ async setCheckpointSynchedL1BlockNumber(l1BlockNumber: bigint): Promise<void> {
428
+ await this.#blockStore.setSynchedL1BlockNumber(l1BlockNumber);
429
+ }
430
+
431
+ getBlocksForCheckpoint(checkpointNumber: CheckpointNumber): Promise<L2BlockNew[] | undefined> {
432
+ return this.#blockStore.getBlocksForCheckpoint(checkpointNumber);
433
+ }
434
+
435
+ getCheckpointData(checkpointNumber: CheckpointNumber): Promise<CheckpointData | undefined> {
436
+ return this.#blockStore.getCheckpointData(checkpointNumber);
437
+ }
423
438
  }