@aztec/archiver 0.0.1-commit.c7c42ec → 0.0.1-commit.f295ac2

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 (187) hide show
  1. package/README.md +147 -22
  2. package/dest/archiver.d.ts +135 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +769 -0
  5. package/dest/{archiver/config.d.ts → config.d.ts} +9 -1
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/{archiver/config.js → config.js} +11 -2
  8. package/dest/{archiver/errors.d.ts → errors.d.ts} +1 -1
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/factory.d.ts +5 -6
  11. package/dest/factory.d.ts.map +1 -1
  12. package/dest/factory.js +82 -5
  13. package/dest/index.d.ts +10 -4
  14. package/dest/index.d.ts.map +1 -1
  15. package/dest/index.js +8 -3
  16. package/dest/interfaces.d.ts +9 -0
  17. package/dest/interfaces.d.ts.map +1 -0
  18. package/dest/interfaces.js +3 -0
  19. package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.d.ts +1 -1
  20. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  21. package/dest/{archiver/l1 → l1}/calldata_retriever.d.ts +3 -3
  22. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  23. package/dest/{archiver/l1 → l1}/calldata_retriever.js +2 -2
  24. package/dest/l1/data_retrieval.d.ts +88 -0
  25. package/dest/l1/data_retrieval.d.ts.map +1 -0
  26. package/dest/{archiver/l1 → l1}/data_retrieval.js +34 -53
  27. package/dest/{archiver/l1 → l1}/debug_tx.d.ts +1 -1
  28. package/dest/l1/debug_tx.d.ts.map +1 -0
  29. package/dest/{archiver/l1 → l1}/spire_proposer.d.ts +1 -1
  30. package/dest/l1/spire_proposer.d.ts.map +1 -0
  31. package/dest/{archiver/l1 → l1}/trace_tx.d.ts +1 -1
  32. package/dest/l1/trace_tx.d.ts.map +1 -0
  33. package/dest/l1/types.d.ts +12 -0
  34. package/dest/l1/types.d.ts.map +1 -0
  35. package/dest/{archiver/l1 → l1}/validate_trace.d.ts +1 -1
  36. package/dest/l1/validate_trace.d.ts.map +1 -0
  37. package/dest/{archiver/l1 → l1}/validate_trace.js +1 -1
  38. package/dest/modules/data_source_base.d.ts +85 -0
  39. package/dest/modules/data_source_base.d.ts.map +1 -0
  40. package/dest/modules/data_source_base.js +291 -0
  41. package/dest/modules/data_store_updater.d.ts +69 -0
  42. package/dest/modules/data_store_updater.d.ts.map +1 -0
  43. package/dest/modules/data_store_updater.js +304 -0
  44. package/dest/modules/instrumentation.d.ts +37 -0
  45. package/dest/modules/instrumentation.d.ts.map +1 -0
  46. package/dest/{archiver → modules}/instrumentation.js +15 -63
  47. package/dest/modules/l1_synchronizer.d.ts +75 -0
  48. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  49. package/dest/modules/l1_synchronizer.js +1113 -0
  50. package/dest/modules/validation.d.ts +17 -0
  51. package/dest/modules/validation.d.ts.map +1 -0
  52. package/dest/{archiver → modules}/validation.js +7 -1
  53. package/dest/{archiver/kv_archiver_store → store}/block_store.d.ts +27 -6
  54. package/dest/store/block_store.d.ts.map +1 -0
  55. package/dest/{archiver/kv_archiver_store → store}/block_store.js +87 -14
  56. package/dest/store/contract_class_store.d.ts +18 -0
  57. package/dest/store/contract_class_store.d.ts.map +1 -0
  58. package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +1 -1
  59. package/dest/store/contract_instance_store.d.ts +24 -0
  60. package/dest/store/contract_instance_store.d.ts.map +1 -0
  61. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
  62. package/dest/{archiver/archiver_store.d.ts → store/kv_archiver_store.d.ts} +155 -132
  63. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  64. package/dest/{archiver/kv_archiver_store → store}/kv_archiver_store.js +173 -48
  65. package/dest/{archiver/kv_archiver_store → store}/log_store.d.ts +1 -1
  66. package/dest/store/log_store.d.ts.map +1 -0
  67. package/dest/{archiver/kv_archiver_store → store}/log_store.js +69 -48
  68. package/dest/{archiver/kv_archiver_store → store}/message_store.d.ts +1 -1
  69. package/dest/store/message_store.d.ts.map +1 -0
  70. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  71. package/dest/structs/data_retrieval.d.ts.map +1 -0
  72. package/dest/structs/inbox_message.d.ts +15 -0
  73. package/dest/structs/inbox_message.d.ts.map +1 -0
  74. package/dest/{archiver/structs → structs}/published.d.ts +1 -1
  75. package/dest/structs/published.d.ts.map +1 -0
  76. package/dest/test/fake_l1_state.d.ts +190 -0
  77. package/dest/test/fake_l1_state.d.ts.map +1 -0
  78. package/dest/test/fake_l1_state.js +383 -0
  79. package/dest/test/index.d.ts +2 -1
  80. package/dest/test/index.d.ts.map +1 -1
  81. package/dest/test/index.js +1 -0
  82. package/dest/test/mock_archiver.d.ts +2 -2
  83. package/dest/test/mock_archiver.d.ts.map +1 -1
  84. package/dest/test/mock_archiver.js +1 -2
  85. package/dest/test/mock_l1_to_l2_message_source.d.ts +2 -2
  86. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  87. package/dest/test/mock_l1_to_l2_message_source.js +12 -3
  88. package/dest/test/mock_l2_block_source.d.ts +21 -14
  89. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  90. package/dest/test/mock_l2_block_source.js +147 -40
  91. package/dest/test/mock_structs.d.ts +76 -2
  92. package/dest/test/mock_structs.d.ts.map +1 -1
  93. package/dest/test/mock_structs.js +133 -2
  94. package/package.json +15 -17
  95. package/src/archiver.ts +525 -0
  96. package/src/{archiver/config.ts → config.ts} +13 -2
  97. package/src/factory.ts +118 -6
  98. package/src/index.ts +10 -3
  99. package/src/interfaces.ts +9 -0
  100. package/src/{archiver/l1 → l1}/calldata_retriever.ts +3 -3
  101. package/src/{archiver/l1 → l1}/data_retrieval.ts +54 -71
  102. package/src/{archiver/l1 → l1}/validate_trace.ts +1 -1
  103. package/src/modules/data_source_base.ts +414 -0
  104. package/src/modules/data_store_updater.ts +419 -0
  105. package/src/{archiver → modules}/instrumentation.ts +14 -63
  106. package/src/modules/l1_synchronizer.ts +931 -0
  107. package/src/{archiver → modules}/validation.ts +11 -6
  108. package/src/{archiver/kv_archiver_store → store}/block_store.ts +116 -19
  109. package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +1 -1
  110. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +1 -1
  111. package/src/{archiver/kv_archiver_store → store}/kv_archiver_store.ts +196 -12
  112. package/src/{archiver/kv_archiver_store → store}/log_store.ts +112 -76
  113. package/src/test/fake_l1_state.ts +599 -0
  114. package/src/test/index.ts +1 -0
  115. package/src/test/mock_archiver.ts +2 -2
  116. package/src/test/mock_l1_to_l2_message_source.ts +10 -4
  117. package/src/test/mock_l2_block_source.ts +168 -52
  118. package/src/test/mock_structs.ts +247 -2
  119. package/dest/archiver/archiver.d.ts +0 -304
  120. package/dest/archiver/archiver.d.ts.map +0 -1
  121. package/dest/archiver/archiver.js +0 -1645
  122. package/dest/archiver/archiver_store.d.ts.map +0 -1
  123. package/dest/archiver/archiver_store.js +0 -4
  124. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  125. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  126. package/dest/archiver/archiver_store_test_suite.js +0 -2770
  127. package/dest/archiver/config.d.ts.map +0 -1
  128. package/dest/archiver/errors.d.ts.map +0 -1
  129. package/dest/archiver/index.d.ts +0 -7
  130. package/dest/archiver/index.d.ts.map +0 -1
  131. package/dest/archiver/index.js +0 -4
  132. package/dest/archiver/instrumentation.d.ts +0 -37
  133. package/dest/archiver/instrumentation.d.ts.map +0 -1
  134. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  135. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  136. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  137. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  138. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  139. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -158
  140. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  141. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  142. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  143. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
  144. package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
  145. package/dest/archiver/l1/data_retrieval.d.ts +0 -90
  146. package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
  147. package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
  148. package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
  149. package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
  150. package/dest/archiver/l1/types.d.ts +0 -12
  151. package/dest/archiver/l1/types.d.ts.map +0 -1
  152. package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
  153. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  154. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  155. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  156. package/dest/archiver/structs/published.d.ts.map +0 -1
  157. package/dest/archiver/validation.d.ts +0 -17
  158. package/dest/archiver/validation.d.ts.map +0 -1
  159. package/dest/rpc/index.d.ts +0 -9
  160. package/dest/rpc/index.d.ts.map +0 -1
  161. package/dest/rpc/index.js +0 -15
  162. package/src/archiver/archiver.ts +0 -2157
  163. package/src/archiver/archiver_store.ts +0 -372
  164. package/src/archiver/archiver_store_test_suite.ts +0 -2843
  165. package/src/archiver/index.ts +0 -6
  166. package/src/rpc/index.ts +0 -16
  167. /package/dest/{archiver/errors.js → errors.js} +0 -0
  168. /package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.js +0 -0
  169. /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
  170. /package/dest/{archiver/l1 → l1}/spire_proposer.js +0 -0
  171. /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
  172. /package/dest/{archiver/l1 → l1}/types.js +0 -0
  173. /package/dest/{archiver/kv_archiver_store → store}/message_store.js +0 -0
  174. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  175. /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
  176. /package/dest/{archiver/structs → structs}/published.js +0 -0
  177. /package/src/{archiver/errors.ts → errors.ts} +0 -0
  178. /package/src/{archiver/l1 → l1}/README.md +0 -0
  179. /package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +0 -0
  180. /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
  181. /package/src/{archiver/l1 → l1}/spire_proposer.ts +0 -0
  182. /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
  183. /package/src/{archiver/l1 → l1}/types.ts +0 -0
  184. /package/src/{archiver/kv_archiver_store → store}/message_store.ts +0 -0
  185. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
  186. /package/src/{archiver/structs → structs}/inbox_message.ts +0 -0
  187. /package/src/{archiver/structs → structs}/published.ts +0 -0
@@ -0,0 +1,17 @@
1
+ import type { EpochCache } from '@aztec/epoch-cache';
2
+ import type { Logger } from '@aztec/foundation/log';
3
+ import { type AttestationInfo, type ValidateCheckpointResult } from '@aztec/stdlib/block';
4
+ import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
5
+ import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
6
+ export type { ValidateCheckpointResult };
7
+ /**
8
+ * Extracts attestation information from a published checkpoint.
9
+ * Returns info for each attestation, preserving array indices.
10
+ */
11
+ export declare function getAttestationInfoFromPublishedCheckpoint({ checkpoint, attestations }: PublishedCheckpoint): AttestationInfo[];
12
+ /**
13
+ * Validates the attestations submitted for the given checkpoint.
14
+ * Returns true if the attestations are valid and sufficient, false otherwise.
15
+ */
16
+ export declare function validateCheckpointAttestations(publishedCheckpoint: PublishedCheckpoint, epochCache: EpochCache, constants: Pick<L1RollupConstants, 'epochDuration'>, logger?: Logger): Promise<ValidateCheckpointResult>;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZXMvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBRXBCLEtBQUssd0JBQXdCLEVBRTlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUdyRixZQUFZLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCx3QkFBZ0IseUNBQXlDLENBQUMsRUFDeEQsVUFBVSxFQUNWLFlBQVksRUFDYixFQUFFLG1CQUFtQixHQUFHLGVBQWUsRUFBRSxDQUd6QztBQUVEOzs7R0FHRztBQUNILHdCQUFzQiw4QkFBOEIsQ0FDbEQsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQ25ELE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FDZCxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0EyRm5DIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/modules/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,wBAAwB,EAE9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AAGrF,YAAY,EAAE,wBAAwB,EAAE,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,yCAAyC,CAAC,EACxD,UAAU,EACV,YAAY,EACb,EAAE,mBAAmB,GAAG,eAAe,EAAE,CAGzC;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EACnD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CA2FnC"}
@@ -40,11 +40,17 @@ import { ConsensusPayload } from '@aztec/stdlib/p2p';
40
40
  valid: true
41
41
  };
42
42
  }
43
+ if (await epochCache.isEscapeHatchOpen(epoch)) {
44
+ logger?.warn(`Escape hatch open for epoch ${epoch} at slot ${slot}, skipping checkpoint validation`);
45
+ return {
46
+ valid: true
47
+ };
48
+ }
43
49
  const requiredAttestationCount = Math.floor(committee.length * 2 / 3) + 1;
44
50
  const failedValidationResult = (reason)=>({
45
51
  valid: false,
46
52
  reason,
47
- block: checkpoint.blocks[0].toBlockInfo(),
53
+ checkpoint: checkpoint.toCheckpointInfo(),
48
54
  committee,
49
55
  seed,
50
56
  epoch,
@@ -1,8 +1,8 @@
1
- import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
1
+ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
- import { CheckpointedL2Block, L2BlockHash, L2BlockNew, type ValidateBlockResult } from '@aztec/stdlib/block';
5
+ import { CheckpointedL2Block, L2BlockHash, L2BlockNew, type ValidateCheckpointResult } from '@aztec/stdlib/block';
6
6
  import { L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
7
7
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
8
8
  import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
@@ -18,7 +18,7 @@ export type CheckpointData = {
18
18
  attestations: Buffer[];
19
19
  };
20
20
  /**
21
- * LMDB implementation of the ArchiverDataStore interface.
21
+ * LMDB-based block storage for the archiver.
22
22
  */
23
23
  export declare class BlockStore {
24
24
  #private;
@@ -41,6 +41,7 @@ export declare class BlockStore {
41
41
  force?: boolean;
42
42
  }): Promise<boolean>;
43
43
  private addBlockToDatabase;
44
+ private deleteBlock;
44
45
  /**
45
46
  * Unwinds checkpoints from the database
46
47
  * @param from - The tip of the chain, passed for verification purposes,
@@ -53,10 +54,30 @@ export declare class BlockStore {
53
54
  getRangeOfCheckpoints(from: CheckpointNumber, limit: number): Promise<CheckpointData[]>;
54
55
  private checkpointDataFromCheckpointStorage;
55
56
  getBlocksForCheckpoint(checkpointNumber: CheckpointNumber): Promise<L2BlockNew[] | undefined>;
57
+ /**
58
+ * Gets all blocks that have the given slot number.
59
+ * Iterates backwards through blocks for efficiency since we usually query for the last slot.
60
+ * @param slotNumber - The slot number to search for.
61
+ * @returns All blocks with the given slot number, in ascending block number order.
62
+ */
63
+ getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]>;
64
+ /**
65
+ * Removes all blocks with block number > blockNumber.
66
+ * @param blockNumber - The block number to remove after.
67
+ * @returns The removed blocks (for event emission).
68
+ */
69
+ unwindBlocksAfter(blockNumber: BlockNumber): Promise<L2BlockNew[]>;
56
70
  getProvenBlockNumber(): Promise<BlockNumber>;
57
71
  getLatestBlockNumber(): Promise<BlockNumber>;
58
72
  getLatestCheckpointNumber(): Promise<CheckpointNumber>;
59
73
  getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
74
+ /**
75
+ * Gets up to `limit` amount of Checkpointed L2 blocks starting from `from`.
76
+ * @param start - Number of the first block to return (inclusive).
77
+ * @param limit - The number of blocks to return.
78
+ * @returns The requested L2 blocks
79
+ */
80
+ getCheckpointedBlocks(start: BlockNumber, limit: number): AsyncIterableIterator<CheckpointedL2Block>;
60
81
  getCheckpointedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined>;
61
82
  getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
62
83
  /**
@@ -147,11 +168,11 @@ export declare class BlockStore {
147
168
  * Gets the pending chain validation status.
148
169
  * @returns The validation status or undefined if not set.
149
170
  */
150
- getPendingChainValidationStatus(): Promise<ValidateBlockResult | undefined>;
171
+ getPendingChainValidationStatus(): Promise<ValidateCheckpointResult | undefined>;
151
172
  /**
152
173
  * Sets the pending chain validation status.
153
174
  * @param status - The validation status to store.
154
175
  */
155
- setPendingChainValidationStatus(status: ValidateBlockResult | undefined): Promise<void>;
176
+ setPendingChainValidationStatus(status: ValidateCheckpointResult | undefined): Promise<void>;
156
177
  }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9rdl9hcmNoaXZlcl9zdG9yZS9ibG9ja19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTXBELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUE2QyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BHLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxtQkFBbUIsRUFFbkIsV0FBVyxFQUNYLFVBQVUsRUFDVixLQUFLLG1CQUFtQixFQUd6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLEtBQUssZUFBZSxFQUVwQixNQUFNLEVBQ04sU0FBUyxFQUdWLE1BQU0sa0JBQWtCLENBQUM7QUFjMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBc0J6RSxNQUFNLE1BQU0sY0FBYyxHQUFHO0lBQzNCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO0lBQ25DLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQztJQUN6QixPQUFPLEVBQUUsc0JBQXNCLENBQUM7SUFDaEMsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLEVBQUUs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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS9ibG9ja19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQTZDLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUVMLG1CQUFtQixFQUVuQixXQUFXLEVBQ1gsVUFBVSxFQUNWLEtBQUssd0JBQXdCLEVBRzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFDTCxXQUFXLEVBQ1gsS0FBSyxlQUFlLEVBRXBCLE1BQU0sRUFDTixTQUFTLEVBR1YsTUFBTSxrQkFBa0IsQ0FBQztBQWMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFzQnpFLE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFDM0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsTUFBTSxFQUFFLGdCQUFnQixDQUFDO0lBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQztJQUNoQyxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsRUFBRSxFQUFFLGVBQWUsQ0FB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { INITIAL_CHECKPOINT_NUMBER, INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
- import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
+ import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
4
  import { toArray } from '@aztec/foundation/iterable';
4
5
  import { createLogger } from '@aztec/foundation/log';
5
6
  import { BufferReader } from '@aztec/foundation/serialize';
6
7
  import { bufferToHex } from '@aztec/foundation/string';
7
8
  import { isDefined } from '@aztec/foundation/types';
8
- import { Body, CheckpointedL2Block, CommitteeAttestation, L2BlockHash, L2BlockNew, deserializeValidateBlockResult, serializeValidateBlockResult } from '@aztec/stdlib/block';
9
+ import { Body, CheckpointedL2Block, CommitteeAttestation, L2BlockHash, L2BlockNew, deserializeValidateCheckpointResult, serializeValidateCheckpointResult } from '@aztec/stdlib/block';
9
10
  import { L1PublishedData } from '@aztec/stdlib/checkpoint';
10
11
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
11
12
  import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
@@ -13,7 +14,7 @@ import { BlockHeader, TxHash, TxReceipt, deserializeIndexedTxEffect, serializeIn
13
14
  import { BlockArchiveNotConsistentError, BlockIndexNotSequentialError, BlockNotFoundError, BlockNumberNotSequentialError, CheckpointNotFoundError, CheckpointNumberNotConsistentError, CheckpointNumberNotSequentialError, InitialBlockNumberNotSequentialError, InitialCheckpointNumberNotSequentialError } from '../errors.js';
14
15
  export { TxReceipt } from '@aztec/stdlib/tx';
15
16
  /**
16
- * LMDB implementation of the ArchiverDataStore interface.
17
+ * LMDB-based block storage for the archiver.
17
18
  */ export class BlockStore {
18
19
  db;
19
20
  /** Map block number to block data */ #blocks;
@@ -214,6 +215,18 @@ export { TxReceipt } from '@aztec/stdlib/tx';
214
215
  await this.#blockHashIndex.set(blockHash.toString(), block.number);
215
216
  await this.#blockArchiveIndex.set(block.archive.root.toString(), block.number);
216
217
  }
218
+ /** Deletes a block and all associated data (tx effects, indices). */ async deleteBlock(block) {
219
+ // Delete the block from the main blocks map
220
+ await this.#blocks.delete(block.number);
221
+ // Delete all tx effects for this block
222
+ await Promise.all(block.body.txEffects.map((tx)=>this.#txEffects.delete(tx.txHash.toString())));
223
+ // Delete block txs mapping
224
+ const blockHash = (await block.hash()).toString();
225
+ await this.#blockTxs.delete(blockHash);
226
+ // Clean up indices
227
+ await this.#blockHashIndex.delete(blockHash);
228
+ await this.#blockArchiveIndex.delete(block.archive.root.toString());
229
+ }
217
230
  /**
218
231
  * Unwinds checkpoints from the database
219
232
  * @param from - The tip of the chain, passed for verification purposes,
@@ -245,14 +258,8 @@ export { TxReceipt } from '@aztec/stdlib/tx';
245
258
  this.#log.warn(`Cannot remove block ${blockNumber} from the store since we don't have it`);
246
259
  continue;
247
260
  }
248
- await this.#blocks.delete(block.number);
249
- await Promise.all(block.body.txEffects.map((tx)=>this.#txEffects.delete(tx.txHash.toString())));
250
- const blockHash = (await block.hash()).toString();
251
- await this.#blockTxs.delete(blockHash);
252
- // Clean up indices
253
- await this.#blockHashIndex.delete(blockHash);
254
- await this.#blockArchiveIndex.delete(block.archive.root.toString());
255
- this.#log.debug(`Unwound block ${blockNumber} ${blockHash} for checkpoint ${checkpointNumber}`);
261
+ await this.deleteBlock(block);
262
+ this.#log.debug(`Unwound block ${blockNumber} ${(await block.hash()).toString()} for checkpoint ${checkpointNumber}`);
256
263
  }
257
264
  }
258
265
  return true;
@@ -300,6 +307,52 @@ export { TxReceipt } from '@aztec/stdlib/tx';
300
307
  const converted = await Promise.all(blocksForCheckpoint.map((x)=>this.getBlockFromBlockStorage(x[0], x[1])));
301
308
  return converted.filter(isDefined);
302
309
  }
310
+ /**
311
+ * Gets all blocks that have the given slot number.
312
+ * Iterates backwards through blocks for efficiency since we usually query for the last slot.
313
+ * @param slotNumber - The slot number to search for.
314
+ * @returns All blocks with the given slot number, in ascending block number order.
315
+ */ async getBlocksForSlot(slotNumber) {
316
+ const blocks = [];
317
+ // Iterate backwards through all blocks and filter by slot number
318
+ // This is more efficient since we usually query for the most recent slot
319
+ for await (const [blockNumber, blockStorage] of this.#blocks.entriesAsync({
320
+ reverse: true
321
+ })){
322
+ const block = await this.getBlockFromBlockStorage(blockNumber, blockStorage);
323
+ const blockSlot = block?.header.globalVariables.slotNumber;
324
+ if (block && blockSlot === slotNumber) {
325
+ blocks.push(block);
326
+ } else if (blockSlot && blockSlot < slotNumber) {
327
+ break; // Blocks are stored in slot ascending order, so we can stop searching
328
+ }
329
+ }
330
+ // Reverse to return blocks in ascending order (block number order)
331
+ return blocks.reverse();
332
+ }
333
+ /**
334
+ * Removes all blocks with block number > blockNumber.
335
+ * @param blockNumber - The block number to remove after.
336
+ * @returns The removed blocks (for event emission).
337
+ */ async unwindBlocksAfter(blockNumber) {
338
+ return await this.db.transactionAsync(async ()=>{
339
+ const removedBlocks = [];
340
+ // Get the latest block number to determine the range
341
+ const latestBlockNumber = await this.getLatestBlockNumber();
342
+ // Iterate from blockNumber + 1 to latestBlockNumber
343
+ for(let bn = blockNumber + 1; bn <= latestBlockNumber; bn++){
344
+ const block = await this.getBlock(BlockNumber(bn));
345
+ if (block === undefined) {
346
+ this.#log.warn(`Cannot remove block ${bn} from the store since we don't have it`);
347
+ continue;
348
+ }
349
+ removedBlocks.push(block);
350
+ await this.deleteBlock(block);
351
+ this.#log.debug(`Removed block ${bn} ${(await block.hash()).toString()}`);
352
+ }
353
+ return removedBlocks;
354
+ });
355
+ }
303
356
  async getProvenBlockNumber() {
304
357
  const provenCheckpointNumber = await this.getProvenCheckpointNumber();
305
358
  if (provenCheckpointNumber === INITIAL_CHECKPOINT_NUMBER - 1) {
@@ -344,6 +397,25 @@ export { TxReceipt } from '@aztec/stdlib/tx';
344
397
  }
345
398
  return new CheckpointedL2Block(CheckpointNumber(checkpoint.checkpointNumber), block, L1PublishedData.fromBuffer(checkpoint.l1), checkpoint.attestations.map((buf)=>CommitteeAttestation.fromBuffer(buf)));
346
399
  }
400
+ /**
401
+ * Gets up to `limit` amount of Checkpointed L2 blocks starting from `from`.
402
+ * @param start - Number of the first block to return (inclusive).
403
+ * @param limit - The number of blocks to return.
404
+ * @returns The requested L2 blocks
405
+ */ async *getCheckpointedBlocks(start, limit) {
406
+ const checkpointCache = new Map();
407
+ for await (const [blockNumber, blockStorage] of this.getBlockStorages(start, limit)){
408
+ const block = await this.getBlockFromBlockStorage(blockNumber, blockStorage);
409
+ if (block) {
410
+ const checkpoint = checkpointCache.get(CheckpointNumber(blockStorage.checkpointNumber)) ?? await this.#checkpoints.getAsync(blockStorage.checkpointNumber);
411
+ if (checkpoint) {
412
+ checkpointCache.set(CheckpointNumber(blockStorage.checkpointNumber), checkpoint);
413
+ const checkpointedBlock = new CheckpointedL2Block(CheckpointNumber(checkpoint.checkpointNumber), block, L1PublishedData.fromBuffer(checkpoint.l1), checkpoint.attestations.map((buf)=>CommitteeAttestation.fromBuffer(buf)));
414
+ yield checkpointedBlock;
415
+ }
416
+ }
417
+ }
418
+ }
347
419
  async getCheckpointedBlockByHash(blockHash) {
348
420
  const blockNumber = await this.#blockHashIndex.getAsync(blockHash.toString());
349
421
  if (blockNumber === undefined) {
@@ -465,6 +537,7 @@ export { TxReceipt } from '@aztec/stdlib/tx';
465
537
  const header = BlockHeader.fromBuffer(blockStorage.header);
466
538
  const archive = AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive);
467
539
  const blockHash = blockStorage.blockHash;
540
+ header.setHash(Fr.fromBuffer(blockHash));
468
541
  const blockHashString = bufferToHex(blockHash);
469
542
  const blockTxsBuffer = await this.#blockTxs.getAsync(blockHashString);
470
543
  if (blockTxsBuffer === undefined) {
@@ -483,7 +556,7 @@ export { TxReceipt } from '@aztec/stdlib/tx';
483
556
  txEffects.push(deserializeIndexedTxEffect(txEffect).data);
484
557
  }
485
558
  const body = new Body(txEffects);
486
- const block = new L2BlockNew(archive, header, body, CheckpointNumber(blockStorage.checkpointNumber), blockStorage.indexWithinCheckpoint);
559
+ const block = new L2BlockNew(archive, header, body, CheckpointNumber(blockStorage.checkpointNumber), IndexWithinCheckpoint(blockStorage.indexWithinCheckpoint));
487
560
  if (block.number !== blockNumber) {
488
561
  throw new Error(`Block number mismatch when retrieving block from archive (expected ${blockNumber} but got ${block.number} with hash ${blockHashString})`);
489
562
  }
@@ -591,14 +664,14 @@ export { TxReceipt } from '@aztec/stdlib/tx';
591
664
  if (!buffer) {
592
665
  return undefined;
593
666
  }
594
- return deserializeValidateBlockResult(buffer);
667
+ return deserializeValidateCheckpointResult(buffer);
595
668
  }
596
669
  /**
597
670
  * Sets the pending chain validation status.
598
671
  * @param status - The validation status to store.
599
672
  */ async setPendingChainValidationStatus(status) {
600
673
  if (status) {
601
- const buffer = serializeValidateBlockResult(status);
674
+ const buffer = serializeValidateCheckpointResult(status);
602
675
  await this.#pendingChainValidationStatus.set(buffer);
603
676
  } else {
604
677
  await this.#pendingChainValidationStatus.delete();
@@ -0,0 +1,18 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
+ import type { ContractClassPublic, ExecutablePrivateFunctionWithMembershipProof, UtilityFunctionWithMembershipProof } from '@aztec/stdlib/contract';
4
+ /**
5
+ * LMDB-based contract class storage for the archiver.
6
+ */
7
+ export declare class ContractClassStore {
8
+ #private;
9
+ private db;
10
+ constructor(db: AztecAsyncKVStore);
11
+ addContractClass(contractClass: ContractClassPublic, bytecodeCommitment: Fr, blockNumber: number): Promise<void>;
12
+ deleteContractClasses(contractClass: ContractClassPublic, blockNumber: number): Promise<void>;
13
+ getContractClass(id: Fr): Promise<ContractClassPublic | undefined>;
14
+ getBytecodeCommitment(id: Fr): Promise<Fr | undefined>;
15
+ getContractClassIds(): Promise<Fr[]>;
16
+ addFunctions(contractClassId: Fr, newPrivateFunctions: ExecutablePrivateFunctionWithMembershipProof[], newUtilityFunctions: UtilityFunctionWithMembershipProof[]): Promise<boolean>;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfY2xhc3Nfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS9jb250cmFjdF9jbGFzc19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxLQUFLLEVBQ1YsbUJBQW1CLEVBRW5CLDRDQUE0QyxFQUM1QyxrQ0FBa0MsRUFDbkMsTUFBTSx3QkFBd0IsQ0FBQztBQUdoQzs7R0FFRztBQUNILHFCQUFhLGtCQUFrQjs7SUFJakIsT0FBTyxDQUFDLEVBQUU7SUFBdEIsWUFBb0IsRUFBRSxFQUFFLGlCQUFpQixFQUd4QztJQUVLLGdCQUFnQixDQUNwQixhQUFhLEVBQUUsbUJBQW1CLEVBQ2xDLGtCQUFrQixFQUFFLEVBQUUsRUFDdEIsV0FBVyxFQUFFLE1BQU0sR0FDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU1mO0lBRUsscUJBQXFCLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU1sRztJQUVLLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQUd2RTtJQUVLLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FHM0Q7SUFFSyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FFekM7SUFFSyxZQUFZLENBQ2hCLGVBQWUsRUFBRSxFQUFFLEVBQ25CLG1CQUFtQixFQUFFLDRDQUE0QyxFQUFFLEVBQ25FLG1CQUFtQixFQUFFLGtDQUFrQyxFQUFFLEdBQ3hELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0F5QmxCO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract_class_store.d.ts","sourceRoot":"","sources":["../../src/store/contract_class_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAExE,OAAO,KAAK,EACV,mBAAmB,EAEnB,4CAA4C,EAC5C,kCAAkC,EACnC,MAAM,wBAAwB,CAAC;AAGhC;;GAEG;AACH,qBAAa,kBAAkB;;IAIjB,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,iBAAiB,EAGxC;IAEK,gBAAgB,CACpB,aAAa,EAAE,mBAAmB,EAClC,kBAAkB,EAAE,EAAE,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAMf;IAEK,qBAAqB,CAAC,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlG;IAEK,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAGvE;IAEK,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAG3D;IAEK,mBAAmB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAEzC;IAEK,YAAY,CAChB,eAAe,EAAE,EAAE,EACnB,mBAAmB,EAAE,4CAA4C,EAAE,EACnE,mBAAmB,EAAE,kCAAkC,EAAE,GACxD,OAAO,CAAC,OAAO,CAAC,CAyBlB;CACF"}
@@ -4,7 +4,7 @@ import { BufferReader, numToUInt8, serializeToBuffer } from '@aztec/foundation/s
4
4
  import { FunctionSelector } from '@aztec/stdlib/abi';
5
5
  import { Vector } from '@aztec/stdlib/types';
6
6
  /**
7
- * LMDB implementation of the ArchiverDataStore interface.
7
+ * LMDB-based contract class storage for the archiver.
8
8
  */ export class ContractClassStore {
9
9
  db;
10
10
  #contractClasses;
@@ -0,0 +1,24 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import { type ContractInstanceUpdateWithAddress, type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
5
+ import type { UInt64 } from '@aztec/stdlib/types';
6
+ type ContractInstanceUpdateKey = [string, string] | [string, string, number];
7
+ /**
8
+ * LMDB-based contract instance storage for the archiver.
9
+ */
10
+ export declare class ContractInstanceStore {
11
+ #private;
12
+ private db;
13
+ constructor(db: AztecAsyncKVStore);
14
+ addContractInstance(contractInstance: ContractInstanceWithAddress, blockNumber: number): Promise<void>;
15
+ deleteContractInstance(contractInstance: ContractInstanceWithAddress): Promise<void>;
16
+ getUpdateKey(contractAddress: AztecAddress, timestamp: UInt64, logIndex?: number): ContractInstanceUpdateKey;
17
+ addContractInstanceUpdate(contractInstanceUpdate: ContractInstanceUpdateWithAddress, timestamp: UInt64, logIndex: number): Promise<void>;
18
+ deleteContractInstanceUpdate(contractInstanceUpdate: ContractInstanceUpdateWithAddress, timestamp: UInt64, logIndex: number): Promise<void>;
19
+ getCurrentContractInstanceClassId(address: AztecAddress, timestamp: UInt64, originalClassId: Fr): Promise<Fr>;
20
+ getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
21
+ getContractInstanceDeploymentBlockNumber(address: AztecAddress): Promise<number | undefined>;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfaW5zdGFuY2Vfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS9jb250cmFjdF9pbnN0YW5jZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxpQ0FBaUMsRUFDdEMsS0FBSywyQkFBMkIsRUFHakMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxLQUFLLHlCQUF5QixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUU3RTs7R0FFRztBQUNILHFCQUFhLHFCQUFxQjs7SUFLcEIsT0FBTyxDQUFDLEVBQUU7SUFBdEIsWUFBb0IsRUFBRSxFQUFFLGlCQUFpQixFQUl4QztJQUVELG1CQUFtQixDQUFDLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVFyRztJQUVELHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLbkY7SUFFRCxZQUFZLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sR0FBRyx5QkFBeUIsQ0FNM0c7SUFFRCx5QkFBeUIsQ0FDdkIsc0JBQXNCLEVBQUUsaUNBQWlDLEVBQ3pELFNBQVMsRUFBRSxNQUFNLEVBQ2pCLFFBQVEsRUFBRSxNQUFNLEdBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUtmO0lBRUQsNEJBQTRCLENBQzFCLHNCQUFzQixFQUFFLGlDQUFpQyxFQUN6RCxTQUFTLEVBQUUsTUFBTSxFQUNqQixRQUFRLEVBQUUsTUFBTSxHQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFZjtJQUVLLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FvQmxIO0lBRUssbUJBQW1CLENBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLFNBQVMsRUFBRSxNQUFNLEdBQ2hCLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUMsQ0FhbEQ7SUFFRCx3Q0FBd0MsQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRTNGO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract_instance_store.d.ts","sourceRoot":"","sources":["../../src/store/contract_instance_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAGjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,KAAK,yBAAyB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7E;;GAEG;AACH,qBAAa,qBAAqB;;IAKpB,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,iBAAiB,EAIxC;IAED,mBAAmB,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQrG;IAED,sBAAsB,CAAC,gBAAgB,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnF;IAED,YAAY,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAM3G;IAED,yBAAyB,CACvB,sBAAsB,EAAE,iCAAiC,EACzD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAKf;IAED,4BAA4B,CAC1B,sBAAsB,EAAE,iCAAiC,EACzD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAEf;IAEK,iCAAiC,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAoBlH;IAEK,mBAAmB,CACvB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAalD;IAED,wCAAwC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3F;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { SerializableContractInstance, SerializableContractInstanceUpdate } from '@aztec/stdlib/contract';
2
2
  /**
3
- * LMDB implementation of the ArchiverDataStore interface.
3
+ * LMDB-based contract instance storage for the archiver.
4
4
  */ export class ContractInstanceStore {
5
5
  db;
6
6
  #contractInstances;