@aztec/archiver 0.0.1-commit.dbf9cec → 0.0.1-commit.ddcf04837

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 (95) hide show
  1. package/README.md +12 -6
  2. package/dest/archiver.d.ts +8 -7
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +77 -26
  5. package/dest/config.d.ts +3 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +3 -2
  8. package/dest/errors.d.ts +34 -10
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +45 -16
  11. package/dest/factory.d.ts +4 -5
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +24 -21
  14. package/dest/l1/calldata_retriever.d.ts +1 -1
  15. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  16. package/dest/l1/calldata_retriever.js +2 -1
  17. package/dest/l1/data_retrieval.d.ts +3 -3
  18. package/dest/l1/data_retrieval.d.ts.map +1 -1
  19. package/dest/l1/data_retrieval.js +14 -15
  20. package/dest/modules/data_source_base.d.ts +8 -6
  21. package/dest/modules/data_source_base.d.ts.map +1 -1
  22. package/dest/modules/data_source_base.js +11 -5
  23. package/dest/modules/data_store_updater.d.ts +18 -12
  24. package/dest/modules/data_store_updater.d.ts.map +1 -1
  25. package/dest/modules/data_store_updater.js +87 -77
  26. package/dest/modules/instrumentation.d.ts +4 -2
  27. package/dest/modules/instrumentation.d.ts.map +1 -1
  28. package/dest/modules/instrumentation.js +17 -6
  29. package/dest/modules/l1_synchronizer.d.ts +4 -2
  30. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  31. package/dest/modules/l1_synchronizer.js +166 -129
  32. package/dest/modules/validation.d.ts +1 -1
  33. package/dest/modules/validation.d.ts.map +1 -1
  34. package/dest/modules/validation.js +2 -2
  35. package/dest/store/block_store.d.ts +50 -16
  36. package/dest/store/block_store.d.ts.map +1 -1
  37. package/dest/store/block_store.js +290 -121
  38. package/dest/store/contract_class_store.d.ts +2 -3
  39. package/dest/store/contract_class_store.d.ts.map +1 -1
  40. package/dest/store/contract_class_store.js +7 -67
  41. package/dest/store/contract_instance_store.d.ts +1 -1
  42. package/dest/store/contract_instance_store.d.ts.map +1 -1
  43. package/dest/store/contract_instance_store.js +6 -2
  44. package/dest/store/kv_archiver_store.d.ts +45 -22
  45. package/dest/store/kv_archiver_store.d.ts.map +1 -1
  46. package/dest/store/kv_archiver_store.js +57 -27
  47. package/dest/store/l2_tips_cache.d.ts +2 -1
  48. package/dest/store/l2_tips_cache.d.ts.map +1 -1
  49. package/dest/store/l2_tips_cache.js +27 -7
  50. package/dest/store/log_store.d.ts +6 -3
  51. package/dest/store/log_store.d.ts.map +1 -1
  52. package/dest/store/log_store.js +95 -20
  53. package/dest/store/message_store.d.ts +5 -1
  54. package/dest/store/message_store.d.ts.map +1 -1
  55. package/dest/store/message_store.js +21 -9
  56. package/dest/test/fake_l1_state.d.ts +16 -1
  57. package/dest/test/fake_l1_state.d.ts.map +1 -1
  58. package/dest/test/fake_l1_state.js +77 -8
  59. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  60. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  61. package/dest/test/mock_l1_to_l2_message_source.js +2 -1
  62. package/dest/test/mock_l2_block_source.d.ts +10 -4
  63. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  64. package/dest/test/mock_l2_block_source.js +35 -7
  65. package/dest/test/mock_structs.d.ts +4 -1
  66. package/dest/test/mock_structs.d.ts.map +1 -1
  67. package/dest/test/mock_structs.js +13 -1
  68. package/dest/test/noop_l1_archiver.d.ts +4 -1
  69. package/dest/test/noop_l1_archiver.d.ts.map +1 -1
  70. package/dest/test/noop_l1_archiver.js +5 -2
  71. package/package.json +13 -13
  72. package/src/archiver.ts +98 -31
  73. package/src/config.ts +9 -2
  74. package/src/errors.ts +70 -26
  75. package/src/factory.ts +23 -15
  76. package/src/l1/calldata_retriever.ts +2 -1
  77. package/src/l1/data_retrieval.ts +8 -12
  78. package/src/modules/data_source_base.ts +26 -7
  79. package/src/modules/data_store_updater.ts +96 -107
  80. package/src/modules/instrumentation.ts +19 -7
  81. package/src/modules/l1_synchronizer.ts +189 -161
  82. package/src/modules/validation.ts +2 -2
  83. package/src/store/block_store.ts +371 -141
  84. package/src/store/contract_class_store.ts +8 -106
  85. package/src/store/contract_instance_store.ts +8 -5
  86. package/src/store/kv_archiver_store.ts +81 -39
  87. package/src/store/l2_tips_cache.ts +58 -13
  88. package/src/store/log_store.ts +128 -32
  89. package/src/store/message_store.ts +27 -10
  90. package/src/structs/inbox_message.ts +1 -1
  91. package/src/test/fake_l1_state.ts +103 -13
  92. package/src/test/mock_l1_to_l2_message_source.ts +1 -0
  93. package/src/test/mock_l2_block_source.ts +52 -5
  94. package/src/test/mock_structs.ts +20 -6
  95. package/src/test/noop_l1_archiver.ts +7 -2
@@ -1,6 +1,6 @@
1
- import { GENESIS_BLOCK_HEADER_HASH, INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
1
+ import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
2
  import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
3
- import { GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
3
+ import { GENESIS_BLOCK_HEADER_HASH, GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
4
4
  /**
5
5
  * In-memory cache for L2 chain tips (proposed, checkpointed, proven, finalized).
6
6
  * Populated from the BlockStore on first access, then kept up-to-date by the ArchiverDataStoreUpdater.
@@ -19,9 +19,10 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
19
19
  await this.#tipsPromise;
20
20
  }
21
21
  async loadFromStore() {
22
- const [latestBlockNumber, provenBlockNumber, checkpointedBlockNumber, finalizedBlockNumber] = await Promise.all([
23
- this.blockStore.getLatestBlockNumber(),
22
+ const [latestBlockNumber, provenBlockNumber, proposedCheckpointBlockNumber, checkpointedBlockNumber, finalizedBlockNumber] = await Promise.all([
23
+ this.blockStore.getLatestL2BlockNumber(),
24
24
  this.blockStore.getProvenBlockNumber(),
25
+ this.blockStore.getProposedCheckpointL2BlockNumber(),
25
26
  this.blockStore.getCheckpointedL2BlockNumber(),
26
27
  this.blockStore.getFinalizedL2BlockNumber()
27
28
  ]);
@@ -31,18 +32,20 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
31
32
  };
32
33
  const beforeInitialBlockNumber = BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
33
34
  const getBlockData = (blockNumber)=>blockNumber > beforeInitialBlockNumber ? this.blockStore.getBlockData(blockNumber) : genesisBlockHeader;
34
- const [latestBlockData, provenBlockData, checkpointedBlockData, finalizedBlockData] = await Promise.all([
35
+ const [latestBlockData, provenBlockData, proposedCheckpointBlockData, checkpointedBlockData, finalizedBlockData] = await Promise.all([
35
36
  latestBlockNumber,
36
37
  provenBlockNumber,
38
+ proposedCheckpointBlockNumber,
37
39
  checkpointedBlockNumber,
38
40
  finalizedBlockNumber
39
41
  ].map(getBlockData));
40
- if (!latestBlockData || !provenBlockData || !finalizedBlockData || !checkpointedBlockData) {
42
+ if (!latestBlockData || !provenBlockData || !finalizedBlockData || !checkpointedBlockData || !proposedCheckpointBlockData) {
41
43
  throw new Error('Failed to load block data for L2 tips');
42
44
  }
43
- const [provenCheckpointId, finalizedCheckpointId, checkpointedCheckpointId] = await Promise.all([
45
+ const [provenCheckpointId, finalizedCheckpointId, proposedCheckpointId, checkpointedCheckpointId] = await Promise.all([
44
46
  this.getCheckpointIdForBlock(provenBlockData),
45
47
  this.getCheckpointIdForBlock(finalizedBlockData),
48
+ this.getCheckpointIdForProposedCheckpoint(checkpointedBlockData),
46
49
  this.getCheckpointIdForBlock(checkpointedBlockData)
47
50
  ]);
48
51
  return {
@@ -57,6 +60,13 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
57
60
  },
58
61
  checkpoint: provenCheckpointId
59
62
  },
63
+ proposedCheckpoint: {
64
+ block: {
65
+ number: proposedCheckpointBlockNumber,
66
+ hash: proposedCheckpointBlockData.blockHash.toString()
67
+ },
68
+ checkpoint: proposedCheckpointId
69
+ },
60
70
  finalized: {
61
71
  block: {
62
72
  number: finalizedBlockNumber,
@@ -73,6 +83,16 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
73
83
  }
74
84
  };
75
85
  }
86
+ async getCheckpointIdForProposedCheckpoint(checkpointedBlockData) {
87
+ const checkpointData = await this.blockStore.getProposedCheckpointOnly();
88
+ if (!checkpointData) {
89
+ return this.getCheckpointIdForBlock(checkpointedBlockData);
90
+ }
91
+ return {
92
+ number: checkpointData.checkpointNumber,
93
+ hash: checkpointData.header.hash().toString()
94
+ };
95
+ }
76
96
  async getCheckpointIdForBlock(blockData) {
77
97
  const checkpointData = await this.blockStore.getCheckpointData(blockData.checkpointNumber);
78
98
  if (!checkpointData) {
@@ -1,3 +1,4 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
4
  import { L2Block } from '@aztec/stdlib/block';
@@ -24,20 +25,22 @@ export declare class LogStore {
24
25
  * array implies no logs match that tag.
25
26
  * @param tags - The tags to search for.
26
27
  * @param page - The page number (0-indexed) for pagination.
28
+ * @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
27
29
  * @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
28
30
  * MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
29
31
  */
30
- getPrivateLogsByTags(tags: SiloedTag[], page?: number): Promise<TxScopedL2Log[][]>;
32
+ getPrivateLogsByTags(tags: SiloedTag[], page?: number, upToBlockNumber?: BlockNumber): Promise<TxScopedL2Log[][]>;
31
33
  /**
32
34
  * Gets public logs that match any of the `tags` from the specified contract. For each tag, an array of matching
33
35
  * logs is returned. An empty array implies no logs match that tag.
34
36
  * @param contractAddress - The contract address to search logs for.
35
37
  * @param tags - The tags to search for.
36
38
  * @param page - The page number (0-indexed) for pagination.
39
+ * @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
37
40
  * @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
38
41
  * MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
39
42
  */
40
- getPublicLogsByTagsFromContract(contractAddress: AztecAddress, tags: Tag[], page?: number): Promise<TxScopedL2Log[][]>;
43
+ getPublicLogsByTagsFromContract(contractAddress: AztecAddress, tags: Tag[], page?: number, upToBlockNumber?: BlockNumber): Promise<TxScopedL2Log[][]>;
41
44
  /**
42
45
  * Gets public logs based on the provided filter.
43
46
  * @param filter - The filter to apply to the logs.
@@ -51,4 +54,4 @@ export declare class LogStore {
51
54
  */
52
55
  getContractClassLogs(filter: LogFilter): Promise<GetContractClassLogsResponse>;
53
56
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmUvbG9nX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBYSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNHLE9BQU8sRUFJTCxLQUFLLFNBQVMsRUFHZCxLQUFLLFNBQVMsRUFDZCxHQUFHLEVBQ0gsYUFBYSxFQUNkLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxxQkFBYSxRQUFROztJQWFqQixPQUFPLENBQUMsRUFBRTtJQUNWLE9BQU8sQ0FBQyxVQUFVO0lBRnBCLFlBQ1UsRUFBRSxFQUFFLGlCQUFpQixFQUNyQixVQUFVLEVBQUUsVUFBVSxFQUM5QixlQUFlLEdBQUUsTUFBYSxFQVUvQjtJQThNRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBUzNDO0lBZ0JELFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQTJCOUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0csb0JBQW9CLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksR0FBRSxNQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FRMUY7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLCtCQUErQixDQUNuQyxlQUFlLEVBQUUsWUFBWSxFQUM3QixJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQ1gsSUFBSSxHQUFFLE1BQVUsR0FDZixPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQWE1QjtJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FRL0Q7SUErRkQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBUTdFO0NBc0pGIn0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmUvbG9nX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk5RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQWEsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRyxPQUFPLEVBSUwsS0FBSyxTQUFTLEVBR2QsS0FBSyxTQUFTLEVBQ2QsR0FBRyxFQUNILGFBQWEsRUFDZCxNQUFNLG9CQUFvQixDQUFDO0FBSTVCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5EOztHQUVHO0FBQ0gscUJBQWEsUUFBUTs7SUFhakIsT0FBTyxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsVUFBVTtJQUZwQixZQUNVLEVBQUUsRUFBRSxpQkFBaUIsRUFDckIsVUFBVSxFQUFFLFVBQVUsRUFDOUIsZUFBZSxHQUFFLE1BQWEsRUFVL0I7SUFvT0Q7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVMzQztJQWNELFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQTBEOUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLG9CQUFvQixDQUN4QixJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQ2pCLElBQUksR0FBRSxNQUFVLEVBQ2hCLGVBQWUsQ0FBQyxFQUFFLFdBQVcsR0FDNUIsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FnQjVCO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0csK0JBQStCLENBQ25DLGVBQWUsRUFBRSxZQUFZLEVBQzdCLElBQUksRUFBRSxHQUFHLEVBQUUsRUFDWCxJQUFJLEdBQUUsTUFBVSxFQUNoQixlQUFlLENBQUMsRUFBRSxXQUFXLEdBQzVCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBb0I1QjtJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FRL0Q7SUErRkQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBUTdFO0NBNktGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"log_store.d.ts","sourceRoot":"","sources":["../../src/store/log_store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAIL,KAAK,SAAS,EAGd,KAAK,SAAS,EACd,GAAG,EACH,aAAa,EACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,QAAQ;;IAajB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAFpB,YACU,EAAE,EAAE,iBAAiB,EACrB,UAAU,EAAE,UAAU,EAC9B,eAAe,GAAE,MAAa,EAU/B;IA8MD;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3C;IAgBD,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B9C;IAED;;;;;;;OAOG;IACG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAQ1F;IAED;;;;;;;;OAQG;IACG,+BAA+B,CACnC,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,GAAG,EAAE,EACX,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAa5B;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ/D;IA+FD;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAQ7E;CAsJF"}
1
+ {"version":3,"file":"log_store.d.ts","sourceRoot":"","sources":["../../src/store/log_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAI9D,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAIL,KAAK,SAAS,EAGd,KAAK,SAAS,EACd,GAAG,EACH,aAAa,EACd,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,QAAQ;;IAajB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAFpB,YACU,EAAE,EAAE,iBAAiB,EACrB,UAAU,EAAE,UAAU,EAC9B,eAAe,GAAE,MAAa,EAU/B;IAoOD;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3C;IAcD,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA0D9C;IAED;;;;;;;;OAQG;IACG,oBAAoB,CACxB,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,GAAE,MAAU,EAChB,eAAe,CAAC,EAAE,WAAW,GAC5B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAgB5B;IAED;;;;;;;;;OASG;IACG,+BAA+B,CACnC,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,GAAG,EAAE,EACX,IAAI,GAAE,MAAU,EAChB,eAAe,CAAC,EAAE,WAAW,GAC5B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAoB5B;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ/D;IA+FD;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAQ7E;CA6KF"}
@@ -1,13 +1,13 @@
1
1
  import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
2
  import { BlockNumber } from '@aztec/foundation/branded-types';
3
- import { filterAsync } from '@aztec/foundation/collection';
4
- import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import { compactArray, filterAsync } from '@aztec/foundation/collection';
5
4
  import { createLogger } from '@aztec/foundation/log';
6
5
  import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize';
7
6
  import { BlockHash } from '@aztec/stdlib/block';
8
7
  import { MAX_LOGS_PER_TAG } from '@aztec/stdlib/interfaces/api-limit';
9
8
  import { ContractClassLog, ExtendedContractClassLog, ExtendedPublicLog, LogId, PublicLog, TxScopedL2Log } from '@aztec/stdlib/logs';
10
9
  import { TxHash } from '@aztec/stdlib/tx';
10
+ import { OutOfOrderLogInsertionError } from '../errors.js';
11
11
  /**
12
12
  * A store for logs
13
13
  */ export class LogStore {
@@ -108,7 +108,16 @@ import { TxHash } from '@aztec/stdlib/tx';
108
108
  })));
109
109
  for (const taggedLogBuffer of currentPrivateTaggedLogs){
110
110
  if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
111
- privateTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(privateTaggedLogs.get(taggedLogBuffer.tag)));
111
+ const newLogs = privateTaggedLogs.get(taggedLogBuffer.tag);
112
+ if (newLogs.length === 0) {
113
+ continue;
114
+ }
115
+ const lastExisting = TxScopedL2Log.fromBuffer(taggedLogBuffer.logBuffers.at(-1));
116
+ const firstNew = TxScopedL2Log.fromBuffer(newLogs[0]);
117
+ if (lastExisting.blockNumber > firstNew.blockNumber) {
118
+ throw new OutOfOrderLogInsertionError('private', taggedLogBuffer.tag, lastExisting.blockNumber, firstNew.blockNumber);
119
+ }
120
+ privateTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(newLogs));
112
121
  }
113
122
  }
114
123
  for (const block of newBlocks){
@@ -130,7 +139,16 @@ import { TxHash } from '@aztec/stdlib/tx';
130
139
  })));
131
140
  for (const taggedLogBuffer of currentPublicTaggedLogs){
132
141
  if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
133
- publicTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(publicTaggedLogs.get(taggedLogBuffer.tag)));
142
+ const newLogs = publicTaggedLogs.get(taggedLogBuffer.tag);
143
+ if (newLogs.length === 0) {
144
+ continue;
145
+ }
146
+ const lastExisting = TxScopedL2Log.fromBuffer(taggedLogBuffer.logBuffers.at(-1));
147
+ const firstNew = TxScopedL2Log.fromBuffer(newLogs[0]);
148
+ if (lastExisting.blockNumber > firstNew.blockNumber) {
149
+ throw new OutOfOrderLogInsertionError('public', taggedLogBuffer.tag, lastExisting.blockNumber, firstNew.blockNumber);
150
+ }
151
+ publicTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(newLogs));
134
152
  }
135
153
  }
136
154
  for (const block of newBlocks){
@@ -184,22 +202,41 @@ import { TxHash } from '@aztec/stdlib/tx';
184
202
  ]);
185
203
  }
186
204
  #unpackBlockHash(reader) {
187
- const blockHash = reader.remainingBytes() > 0 ? reader.readObject(Fr) : undefined;
188
- if (!blockHash) {
205
+ if (reader.remainingBytes() === 0) {
189
206
  throw new Error('Failed to read block hash from log entry buffer');
190
207
  }
191
- return new BlockHash(blockHash);
208
+ return BlockHash.fromBuffer(reader);
192
209
  }
193
210
  deleteLogs(blocks) {
194
211
  return this.db.transactionAsync(async ()=>{
195
- await Promise.all(blocks.map(async (block)=>{
196
- // Delete private logs
197
- const privateKeys = await this.#privateLogKeysByBlock.getAsync(block.number) ?? [];
198
- await Promise.all(privateKeys.map((tag)=>this.#privateLogsByTag.delete(tag)));
199
- // Delete public logs
200
- const publicKeys = await this.#publicLogKeysByBlock.getAsync(block.number) ?? [];
201
- await Promise.all(publicKeys.map((key)=>this.#publicLogsByContractAndTag.delete(key)));
202
- }));
212
+ const blockNumbers = new Set(blocks.map((block)=>block.number));
213
+ const firstBlockToDelete = Math.min(...blockNumbers);
214
+ // Collect all unique private tags across all blocks being deleted
215
+ const allPrivateTags = new Set(compactArray(await Promise.all(blocks.map((block)=>this.#privateLogKeysByBlock.getAsync(block.number)))).flat());
216
+ // Trim private logs: for each tag, delete all instances including and after the first block being deleted.
217
+ // This hinges on the invariant that logs for a given tag are always inserted in order of block number, which is enforced in #addPrivateLogs.
218
+ for (const tag of allPrivateTags){
219
+ const existing = await this.#privateLogsByTag.getAsync(tag);
220
+ if (existing === undefined || existing.length === 0) {
221
+ continue;
222
+ }
223
+ const lastIndexToKeep = existing.findLastIndex((buf)=>TxScopedL2Log.getBlockNumberFromBuffer(buf) < firstBlockToDelete);
224
+ const remaining = existing.slice(0, lastIndexToKeep + 1);
225
+ await (remaining.length > 0 ? this.#privateLogsByTag.set(tag, remaining) : this.#privateLogsByTag.delete(tag));
226
+ }
227
+ // Collect all unique public keys across all blocks being deleted
228
+ const allPublicKeys = new Set(compactArray(await Promise.all(blocks.map((block)=>this.#publicLogKeysByBlock.getAsync(block.number)))).flat());
229
+ // And do the same as we did with private logs
230
+ for (const key of allPublicKeys){
231
+ const existing = await this.#publicLogsByContractAndTag.getAsync(key);
232
+ if (existing === undefined || existing.length === 0) {
233
+ continue;
234
+ }
235
+ const lastIndexToKeep = existing.findLastIndex((buf)=>TxScopedL2Log.getBlockNumberFromBuffer(buf) < firstBlockToDelete);
236
+ const remaining = existing.slice(0, lastIndexToKeep + 1);
237
+ await (remaining.length > 0 ? this.#publicLogsByContractAndTag.set(key, remaining) : this.#publicLogsByContractAndTag.delete(key));
238
+ }
239
+ // After trimming the tagged logs, we can delete the block-level keys that track which tags are in which blocks.
203
240
  await Promise.all(blocks.map((block)=>Promise.all([
204
241
  this.#publicLogsByBlock.delete(block.number),
205
242
  this.#privateLogKeysByBlock.delete(block.number),
@@ -214,13 +251,23 @@ import { TxHash } from '@aztec/stdlib/tx';
214
251
  * array implies no logs match that tag.
215
252
  * @param tags - The tags to search for.
216
253
  * @param page - The page number (0-indexed) for pagination.
254
+ * @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
217
255
  * @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
218
256
  * MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
219
- */ async getPrivateLogsByTags(tags, page = 0) {
257
+ */ async getPrivateLogsByTags(tags, page = 0, upToBlockNumber) {
220
258
  const logs = await Promise.all(tags.map((tag)=>this.#privateLogsByTag.getAsync(tag.toString())));
221
259
  const start = page * MAX_LOGS_PER_TAG;
222
260
  const end = start + MAX_LOGS_PER_TAG;
223
- return logs.map((logBuffers)=>logBuffers?.slice(start, end).map((logBuffer)=>TxScopedL2Log.fromBuffer(logBuffer)) ?? []);
261
+ return logs.map((logBuffers)=>{
262
+ const deserialized = logBuffers?.slice(start, end).map((buf)=>TxScopedL2Log.fromBuffer(buf)) ?? [];
263
+ if (upToBlockNumber !== undefined) {
264
+ const cutoff = deserialized.findIndex((log)=>log.blockNumber > upToBlockNumber);
265
+ if (cutoff !== -1) {
266
+ return deserialized.slice(0, cutoff);
267
+ }
268
+ }
269
+ return deserialized;
270
+ });
224
271
  }
225
272
  /**
226
273
  * Gets public logs that match any of the `tags` from the specified contract. For each tag, an array of matching
@@ -228,16 +275,26 @@ import { TxHash } from '@aztec/stdlib/tx';
228
275
  * @param contractAddress - The contract address to search logs for.
229
276
  * @param tags - The tags to search for.
230
277
  * @param page - The page number (0-indexed) for pagination.
278
+ * @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
231
279
  * @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
232
280
  * MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
233
- */ async getPublicLogsByTagsFromContract(contractAddress, tags, page = 0) {
281
+ */ async getPublicLogsByTagsFromContract(contractAddress, tags, page = 0, upToBlockNumber) {
234
282
  const logs = await Promise.all(tags.map((tag)=>{
235
283
  const key = `${contractAddress.toString()}_${tag.value.toString()}`;
236
284
  return this.#publicLogsByContractAndTag.getAsync(key);
237
285
  }));
238
286
  const start = page * MAX_LOGS_PER_TAG;
239
287
  const end = start + MAX_LOGS_PER_TAG;
240
- return logs.map((logBuffers)=>logBuffers?.slice(start, end).map((logBuffer)=>TxScopedL2Log.fromBuffer(logBuffer)) ?? []);
288
+ return logs.map((logBuffers)=>{
289
+ const deserialized = logBuffers?.slice(start, end).map((buf)=>TxScopedL2Log.fromBuffer(buf)) ?? [];
290
+ if (upToBlockNumber !== undefined) {
291
+ const cutoff = deserialized.findIndex((log)=>log.blockNumber > upToBlockNumber);
292
+ if (cutoff !== -1) {
293
+ return deserialized.slice(0, cutoff);
294
+ }
295
+ }
296
+ return deserialized;
297
+ });
241
298
  }
242
299
  /**
243
300
  * Gets public logs based on the provided filter.
@@ -424,11 +481,20 @@ import { TxHash } from '@aztec/stdlib/tx';
424
481
  };
425
482
  }
426
483
  #accumulatePublicLogs(results, blockNumber, blockHash, txIndex, txHash, txLogs, filter = {}) {
484
+ if (filter.fromBlock && blockNumber < filter.fromBlock) {
485
+ return false;
486
+ }
487
+ if (filter.toBlock && blockNumber >= filter.toBlock) {
488
+ return false;
489
+ }
490
+ if (filter.txHash && !txHash.equals(filter.txHash)) {
491
+ return false;
492
+ }
427
493
  let maxLogsHit = false;
428
494
  let logIndex = typeof filter.afterLog?.logIndex === 'number' ? filter.afterLog.logIndex + 1 : 0;
429
495
  for(; logIndex < txLogs.length; logIndex++){
430
496
  const log = txLogs[logIndex];
431
- if (!filter.contractAddress || log.contractAddress.equals(filter.contractAddress)) {
497
+ if ((!filter.contractAddress || log.contractAddress.equals(filter.contractAddress)) && (!filter.tag || log.fields[0]?.equals(filter.tag))) {
432
498
  results.push(new ExtendedPublicLog(new LogId(BlockNumber(blockNumber), blockHash, txHash, txIndex, logIndex), log));
433
499
  if (results.length >= this.#logsMaxPageSize) {
434
500
  maxLogsHit = true;
@@ -439,6 +505,15 @@ import { TxHash } from '@aztec/stdlib/tx';
439
505
  return maxLogsHit;
440
506
  }
441
507
  #accumulateContractClassLogs(results, blockNumber, blockHash, txIndex, txHash, txLogs, filter = {}) {
508
+ if (filter.fromBlock && blockNumber < filter.fromBlock) {
509
+ return false;
510
+ }
511
+ if (filter.toBlock && blockNumber >= filter.toBlock) {
512
+ return false;
513
+ }
514
+ if (filter.txHash && !txHash.equals(filter.txHash)) {
515
+ return false;
516
+ }
442
517
  let maxLogsHit = false;
443
518
  let logIndex = typeof filter.afterLog?.logIndex === 'number' ? filter.afterLog.logIndex + 1 : 0;
444
519
  for(; logIndex < txLogs.length; logIndex++){
@@ -29,6 +29,10 @@ export declare class MessageStore {
29
29
  */
30
30
  getL1ToL2MessageIndex(l1ToL2Message: Fr): Promise<bigint | undefined>;
31
31
  getLastMessage(): Promise<InboxMessage | undefined>;
32
+ /** Returns the inbox tree-in-progress checkpoint number from L1, or undefined if not yet set. */
33
+ getInboxTreeInProgress(): Promise<bigint | undefined>;
34
+ /** Atomically updates the message sync state: the L1 sync point and the inbox tree-in-progress marker. */
35
+ setMessageSyncState(l1Block: L1BlockId, treeInProgress: bigint | undefined): Promise<void>;
32
36
  getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
33
37
  iterateL1ToL2Messages(range?: CustomRange<bigint>): AsyncIterableIterator<InboxMessage>;
34
38
  removeL1ToL2Messages(startIndex: bigint): Promise<void>;
@@ -37,4 +41,4 @@ export declare class MessageStore {
37
41
  private leafToIndexKey;
38
42
  private increaseTotalMessageCount;
39
43
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL21lc3NhZ2Vfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBELE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUd0QixLQUFLLFdBQVcsRUFFakIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQ0wsS0FBSyxZQUFZLEVBSWxCLE1BQU0sNkJBQTZCLENBQUM7QUFFckMscUJBQWEsaUJBQWtCLFNBQVEsS0FBSzthQUd4QixZQUFZLEVBQUUsWUFBWTtJQUY1QyxZQUNFLE9BQU8sRUFBRSxNQUFNLEVBQ0MsWUFBWSxFQUFFLFlBQVksRUFJM0M7Q0FDRjtBQUVELHFCQUFhLFlBQVk7O0lBWVgsT0FBTyxDQUFDLEVBQUU7SUFBdEIsWUFBb0IsRUFBRSxFQUFFLGlCQUFpQixFQUt4QztJQUVZLDBCQUEwQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekQ7SUFFRCxxQ0FBcUM7SUFDeEIsaUJBQWlCLElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FRL0Q7SUFFRCxvQ0FBb0M7SUFDdkIsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBR2hFO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBNkZoRTtJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRTNFO0lBRVksY0FBYyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBRy9EO0lBRVksaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBdUJoRjtJQUVhLHFCQUFxQixDQUFDLEtBQUssR0FBRSxXQUFXLENBQUMsTUFBTSxDQUFNLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBS3hHO0lBRU0sb0JBQW9CLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBZ0I3RDtJQUVNLGtDQUFrQyxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJakc7SUFFRCxPQUFPLENBQUMsVUFBVTtJQUlsQixPQUFPLENBQUMsY0FBYztZQUlSLHlCQUF5QjtDQVN4QyJ9
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL21lc3NhZ2Vfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBELE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUd0QixLQUFLLFdBQVcsRUFFakIsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQ0wsS0FBSyxZQUFZLEVBSWxCLE1BQU0sNkJBQTZCLENBQUM7QUFFckMscUJBQWEsaUJBQWtCLFNBQVEsS0FBSzthQUd4QixZQUFZLEVBQUUsWUFBWTtJQUY1QyxZQUNFLE9BQU8sRUFBRSxNQUFNLEVBQ0MsWUFBWSxFQUFFLFlBQVksRUFJM0M7Q0FDRjtBQUVELHFCQUFhLFlBQVk7O0lBY1gsT0FBTyxDQUFDLEVBQUU7SUFBdEIsWUFBb0IsRUFBRSxFQUFFLGlCQUFpQixFQU14QztJQUVZLDBCQUEwQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekQ7SUFFRCxxQ0FBcUM7SUFDeEIsaUJBQWlCLElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FRL0Q7SUFFRCxvQ0FBb0M7SUFDdkIsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBR2hFO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBb0ZoRTtJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRTNFO0lBRVksY0FBYyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBRy9EO0lBRUQsaUdBQWlHO0lBQzFGLHNCQUFzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRTNEO0lBRUQsMEdBQTBHO0lBQ25HLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVNoRztJQUVZLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQTRCaEY7SUFFYSxxQkFBcUIsQ0FBQyxLQUFLLEdBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBTSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUt4RztJQUVNLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWdCN0Q7SUFFTSxrQ0FBa0MsQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWpHO0lBRUQsT0FBTyxDQUFDLFVBQVU7SUFJbEIsT0FBTyxDQUFDLGNBQWM7WUFJUix5QkFBeUI7Q0FTeEMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"message_store.d.ts","sourceRoot":"","sources":["../../src/store/message_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,YAAY,EAAE,YAAY;IAF5C,YACE,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,YAAY,EAI3C;CACF;AAED,qBAAa,YAAY;;IAYX,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,iBAAiB,EAKxC;IAEY,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzD;IAED,qCAAqC;IACxB,iBAAiB,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAQ/D;IAED,oCAAoC;IACvB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;IAED;;;;OAIG;IACI,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FhE;IAED;;;;OAIG;IACI,qBAAqB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3E;IAEY,cAAc,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAG/D;IAEY,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAuBhF;IAEa,qBAAqB,CAAC,KAAK,GAAE,WAAW,CAAC,MAAM,CAAM,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAKxG;IAEM,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D;IAEM,kCAAkC,CAAC,sBAAsB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjG;IAED,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;YAIR,yBAAyB;CASxC"}
1
+ {"version":3,"file":"message_store.d.ts","sourceRoot":"","sources":["../../src/store/message_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,YAAY,EAAE,YAAY;IAF5C,YACE,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,YAAY,EAI3C;CACF;AAED,qBAAa,YAAY;;IAcX,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,iBAAiB,EAMxC;IAEY,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzD;IAED,qCAAqC;IACxB,iBAAiB,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAQ/D;IAED,oCAAoC;IACvB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;IAED;;;;OAIG;IACI,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFhE;IAED;;;;OAIG;IACI,qBAAqB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3E;IAEY,cAAc,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAG/D;IAED,iGAAiG;IAC1F,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3D;IAED,0GAA0G;IACnG,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAShG;IAEY,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CA4BhF;IAEa,qBAAqB,CAAC,KAAK,GAAE,WAAW,CAAC,MAAM,CAAM,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAKxG;IAEM,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D;IAEM,kCAAkC,CAAC,sBAAsB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjG;IAED,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;YAIR,yBAAyB;CASxC"}
@@ -5,6 +5,7 @@ import { createLogger } from '@aztec/foundation/log';
5
5
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
6
6
  import { mapRange } from '@aztec/kv-store';
7
7
  import { InboxLeaf } from '@aztec/stdlib/messaging';
8
+ import { L1ToL2MessagesNotReadyError } from '../errors.js';
8
9
  import { deserializeInboxMessage, serializeInboxMessage, updateRollingHash } from '../structs/inbox_message.js';
9
10
  export class MessageStoreError extends Error {
10
11
  inboxMessage;
@@ -19,6 +20,7 @@ export class MessageStore {
19
20
  /** Maps from hex-stringified message leaf to its index */ #l1ToL2MessageIndices;
20
21
  /** Stores L1 block number and hash of the L1 synchpoint */ #lastSynchedL1Block;
21
22
  /** Stores total messages stored */ #totalMessageCount;
23
+ /** Stores the checkpoint number whose message tree is currently being filled on L1. */ #inboxTreeInProgress;
22
24
  #log;
23
25
  constructor(db){
24
26
  this.db = db;
@@ -27,6 +29,7 @@ export class MessageStore {
27
29
  this.#l1ToL2MessageIndices = db.openMap('archiver_l1_to_l2_message_indices');
28
30
  this.#lastSynchedL1Block = db.openSingleton('archiver_last_l1_block_id');
29
31
  this.#totalMessageCount = db.openSingleton('archiver_l1_to_l2_message_count');
32
+ this.#inboxTreeInProgress = db.openSingleton('archiver_inbox_tree_in_progress');
30
33
  }
31
34
  async getTotalL1ToL2MessageCount() {
32
35
  return await this.#totalMessageCount.getAsync() ?? 0n;
@@ -87,7 +90,7 @@ export class MessageStore {
87
90
  if (lastMessage && message.checkpointNumber === lastMessage.checkpointNumber && message.index !== lastMessage.index + 1n) {
88
91
  throw new MessageStoreError(`Missing prior message for incoming L1 to L2 message ${message.leaf.toString()} ` + `with index ${message.index}`, message);
89
92
  }
90
- // Check the first message in a block has the correct index.
93
+ // Check the first message in a checkpoint has the correct index.
91
94
  if ((!lastMessage || message.checkpointNumber > lastMessage.checkpointNumber) && message.index !== expectedStart) {
92
95
  throw new MessageStoreError(`Message ${message.leaf.toString()} for checkpoint ${message.checkpointNumber} has wrong index ` + `${message.index} (expected ${expectedStart})`, message);
93
96
  }
@@ -98,14 +101,6 @@ export class MessageStore {
98
101
  this.#log.trace(`Inserted L1 to L2 message ${message.leaf} with index ${message.index} into the store`);
99
102
  lastMessage = message;
100
103
  }
101
- // Update the L1 sync point to that of the last message added.
102
- const currentSyncPoint = await this.getSynchedL1Block();
103
- if (!currentSyncPoint || currentSyncPoint.l1BlockNumber < lastMessage.l1BlockNumber) {
104
- await this.setSynchedL1Block({
105
- l1BlockNumber: lastMessage.l1BlockNumber,
106
- l1BlockHash: lastMessage.l1BlockHash
107
- });
108
- }
109
104
  // Update total message count with the number of inserted messages.
110
105
  await this.increaseTotalMessageCount(messageCount);
111
106
  });
@@ -124,7 +119,24 @@ export class MessageStore {
124
119
  }));
125
120
  return msg ? deserializeInboxMessage(msg) : undefined;
126
121
  }
122
+ /** Returns the inbox tree-in-progress checkpoint number from L1, or undefined if not yet set. */ getInboxTreeInProgress() {
123
+ return this.#inboxTreeInProgress.getAsync();
124
+ }
125
+ /** Atomically updates the message sync state: the L1 sync point and the inbox tree-in-progress marker. */ setMessageSyncState(l1Block, treeInProgress) {
126
+ return this.db.transactionAsync(async ()=>{
127
+ await this.setSynchedL1Block(l1Block);
128
+ if (treeInProgress !== undefined) {
129
+ await this.#inboxTreeInProgress.set(treeInProgress);
130
+ } else {
131
+ await this.#inboxTreeInProgress.delete();
132
+ }
133
+ });
134
+ }
127
135
  async getL1ToL2Messages(checkpointNumber) {
136
+ const treeInProgress = await this.#inboxTreeInProgress.getAsync();
137
+ if (treeInProgress !== undefined && BigInt(checkpointNumber) >= treeInProgress) {
138
+ throw new L1ToL2MessagesNotReadyError(checkpointNumber, treeInProgress);
139
+ }
128
140
  const messages = [];
129
141
  const [startIndex, endIndex] = InboxLeaf.indexRangeForCheckpoint(checkpointNumber);
130
142
  let lastIndex = startIndex - 1n;
@@ -93,6 +93,7 @@ export declare class FakeL1State {
93
93
  private version;
94
94
  private canPruneResult;
95
95
  private pendingCheckpointNumber;
96
+ private finalizedL1BlockNumber;
96
97
  constructor(config: FakeL1StateConfig);
97
98
  /**
98
99
  * Adds messages for a checkpoint. Returns the message leaves.
@@ -125,8 +126,14 @@ export declare class FakeL1State {
125
126
  * Auto-updates pending checkpoint number based on visible checkpoints.
126
127
  */
127
128
  setL1BlockNumber(blockNumber: bigint): void;
129
+ /** Sets the L1 block number that will be reported as "finalized". */
130
+ setFinalizedL1BlockNumber(blockNumber: bigint): void;
128
131
  /** Marks a checkpoint as proven. Updates provenCheckpointNumber. */
129
132
  markCheckpointAsProven(checkpointNumber: CheckpointNumber): void;
133
+ /**
134
+ * Simulates what `rollup.getProvenCheckpointNumber({ blockNumber: atL1Block })` would return.
135
+ */
136
+ getProvenCheckpointNumberAtL1Block(atL1Block: bigint): CheckpointNumber;
130
137
  /** Sets the target committee size for attestation validation. */
131
138
  setTargetCommitteeSize(size: number): void;
132
139
  /** Sets whether the rollup contract would allow pruning at the next block. */
@@ -137,6 +144,13 @@ export declare class FakeL1State {
137
144
  * Auto-updates pending status.
138
145
  */
139
146
  removeCheckpoint(checkpointNumber: CheckpointNumber): void;
147
+ /**
148
+ * Moves a checkpoint to a different L1 block number (simulates L1 reorg that
149
+ * re-includes the same checkpoint transaction in a different block).
150
+ * The checkpoint content stays the same — only the L1 metadata changes.
151
+ * Auto-updates pending status.
152
+ */
153
+ moveCheckpointToL1Block(checkpointNumber: CheckpointNumber, newL1BlockNumber: bigint): void;
140
154
  /**
141
155
  * Removes messages after a given total index (simulates L1 reorg).
142
156
  * Auto-updates rolling hash.
@@ -185,6 +199,7 @@ export declare class FakeL1State {
185
199
  private getNextBlockNumber;
186
200
  private getCheckpointProposedLogs;
187
201
  private getMessageSentLogs;
202
+ private getMessageSentLogByHash;
188
203
  private makeRollupTx;
189
204
  /** Extracts the CommitteeAttestations struct definition from RollupAbi for hash computation. */
190
205
  private getCommitteeAttestationsStructDef;
@@ -192,4 +207,4 @@ export declare class FakeL1State {
192
207
  private makeBlobsFromCheckpoint;
193
208
  }
194
209
  export {};
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZV9sMV9zdGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvZmFrZV9sMV9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBcUQsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRixPQUFPLEtBQUssRUFBeUIsYUFBYSxFQUFrQixjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0SCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUF5RCxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFjMUQsMkNBQTJDO0FBQzNDLE1BQU0sTUFBTSxpQkFBaUIsR0FBRztJQUM5Qiw0QkFBNEI7SUFDNUIsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLDZCQUE2QjtJQUM3QixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGtDQUFrQztJQUNsQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLHlDQUF5QztJQUN6QyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7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
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZV9sMV9zdGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvZmFrZV9sMV9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBcUQsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRixPQUFPLEtBQUssRUFBeUIsYUFBYSxFQUFrQixjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0SCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUF5RCxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFjMUQsMkNBQTJDO0FBQzNDLE1BQU0sTUFBTSxpQkFBaUIsR0FBRztJQUM5Qiw0QkFBNEI7SUFDNUIsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLDZCQUE2QjtJQUM3QixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGtDQUFrQztJQUNsQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLHlDQUF5QztJQUN6QyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7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
@@ -1 +1 @@
1
- {"version":3,"file":"fake_l1_state.d.ts","sourceRoot":"","sources":["../../src/test/fake_l1_state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fake_l1_state.d.ts","sourceRoot":"","sources":["../../src/test/fake_l1_state.ts"],"names":[],"mappings":"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"}