@aztec/archiver 0.0.1-commit.181e2d196 → 0.0.1-commit.189eedb3

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 (125) hide show
  1. package/README.md +19 -11
  2. package/dest/archiver.d.ts +55 -18
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +276 -79
  5. package/dest/config.d.ts +4 -1
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +21 -14
  8. package/dest/errors.d.ts +55 -9
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +81 -14
  11. package/dest/factory.d.ts +14 -9
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +51 -37
  14. package/dest/index.d.ts +11 -3
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +10 -2
  17. package/dest/l1/calldata_retriever.d.ts +2 -1
  18. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  19. package/dest/l1/calldata_retriever.js +15 -5
  20. package/dest/l1/data_retrieval.d.ts +19 -10
  21. package/dest/l1/data_retrieval.d.ts.map +1 -1
  22. package/dest/l1/data_retrieval.js +25 -32
  23. package/dest/l1/trace_tx.d.ts +12 -66
  24. package/dest/l1/trace_tx.d.ts.map +1 -1
  25. package/dest/l1/validate_historical_logs.d.ts +23 -0
  26. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  27. package/dest/l1/validate_historical_logs.js +108 -0
  28. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  29. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  30. package/dest/modules/contract_data_source_adapter.js +40 -0
  31. package/dest/modules/data_source_base.d.ts +73 -49
  32. package/dest/modules/data_source_base.d.ts.map +1 -1
  33. package/dest/modules/data_source_base.js +269 -137
  34. package/dest/modules/data_store_updater.d.ts +42 -17
  35. package/dest/modules/data_store_updater.d.ts.map +1 -1
  36. package/dest/modules/data_store_updater.js +191 -122
  37. package/dest/modules/instrumentation.d.ts +7 -2
  38. package/dest/modules/instrumentation.d.ts.map +1 -1
  39. package/dest/modules/instrumentation.js +25 -7
  40. package/dest/modules/l1_synchronizer.d.ts +12 -6
  41. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  42. package/dest/modules/l1_synchronizer.js +432 -205
  43. package/dest/modules/outbox_trees_resolver.d.ts +62 -0
  44. package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
  45. package/dest/modules/outbox_trees_resolver.js +162 -0
  46. package/dest/modules/validation.d.ts +4 -3
  47. package/dest/modules/validation.d.ts.map +1 -1
  48. package/dest/modules/validation.js +6 -6
  49. package/dest/store/block_store.d.ts +174 -76
  50. package/dest/store/block_store.d.ts.map +1 -1
  51. package/dest/store/block_store.js +692 -277
  52. package/dest/store/contract_class_store.d.ts +17 -4
  53. package/dest/store/contract_class_store.d.ts.map +1 -1
  54. package/dest/store/contract_class_store.js +24 -68
  55. package/dest/store/contract_instance_store.d.ts +28 -1
  56. package/dest/store/contract_instance_store.d.ts.map +1 -1
  57. package/dest/store/contract_instance_store.js +37 -2
  58. package/dest/store/data_stores.d.ts +68 -0
  59. package/dest/store/data_stores.d.ts.map +1 -0
  60. package/dest/store/data_stores.js +54 -0
  61. package/dest/store/function_names_cache.d.ts +17 -0
  62. package/dest/store/function_names_cache.d.ts.map +1 -0
  63. package/dest/store/function_names_cache.js +30 -0
  64. package/dest/store/l2_tips_cache.d.ts +13 -7
  65. package/dest/store/l2_tips_cache.d.ts.map +1 -1
  66. package/dest/store/l2_tips_cache.js +13 -76
  67. package/dest/store/log_store.d.ts +42 -37
  68. package/dest/store/log_store.d.ts.map +1 -1
  69. package/dest/store/log_store.js +262 -408
  70. package/dest/store/log_store_codec.d.ts +70 -0
  71. package/dest/store/log_store_codec.d.ts.map +1 -0
  72. package/dest/store/log_store_codec.js +101 -0
  73. package/dest/store/message_store.d.ts +11 -1
  74. package/dest/store/message_store.d.ts.map +1 -1
  75. package/dest/store/message_store.js +51 -9
  76. package/dest/test/fake_l1_state.d.ts +20 -1
  77. package/dest/test/fake_l1_state.d.ts.map +1 -1
  78. package/dest/test/fake_l1_state.js +114 -18
  79. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  80. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  81. package/dest/test/mock_l1_to_l2_message_source.js +2 -1
  82. package/dest/test/mock_l2_block_source.d.ts +54 -52
  83. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  84. package/dest/test/mock_l2_block_source.js +248 -182
  85. package/dest/test/mock_structs.d.ts +4 -1
  86. package/dest/test/mock_structs.d.ts.map +1 -1
  87. package/dest/test/mock_structs.js +13 -1
  88. package/dest/test/noop_l1_archiver.d.ts +13 -6
  89. package/dest/test/noop_l1_archiver.d.ts.map +1 -1
  90. package/dest/test/noop_l1_archiver.js +27 -10
  91. package/package.json +14 -14
  92. package/src/archiver.ts +347 -88
  93. package/src/config.ts +24 -11
  94. package/src/errors.ts +122 -21
  95. package/src/factory.ts +58 -31
  96. package/src/index.ts +18 -2
  97. package/src/l1/calldata_retriever.ts +16 -5
  98. package/src/l1/data_retrieval.ts +36 -45
  99. package/src/l1/validate_historical_logs.ts +140 -0
  100. package/src/modules/contract_data_source_adapter.ts +55 -0
  101. package/src/modules/data_source_base.ts +343 -176
  102. package/src/modules/data_store_updater.ts +224 -154
  103. package/src/modules/instrumentation.ts +28 -8
  104. package/src/modules/l1_synchronizer.ts +572 -248
  105. package/src/modules/outbox_trees_resolver.ts +199 -0
  106. package/src/modules/validation.ts +10 -9
  107. package/src/store/block_store.ts +858 -333
  108. package/src/store/contract_class_store.ts +31 -103
  109. package/src/store/contract_instance_store.ts +51 -5
  110. package/src/store/data_stores.ts +104 -0
  111. package/src/store/function_names_cache.ts +37 -0
  112. package/src/store/l2_tips_cache.ts +16 -70
  113. package/src/store/log_store.ts +301 -559
  114. package/src/store/log_store_codec.ts +132 -0
  115. package/src/store/message_store.ts +60 -10
  116. package/src/structs/inbox_message.ts +1 -1
  117. package/src/test/fake_l1_state.ts +142 -29
  118. package/src/test/mock_l1_to_l2_message_source.ts +1 -0
  119. package/src/test/mock_l2_block_source.ts +306 -227
  120. package/src/test/mock_structs.ts +20 -6
  121. package/src/test/noop_l1_archiver.ts +49 -10
  122. package/dest/store/kv_archiver_store.d.ts +0 -354
  123. package/dest/store/kv_archiver_store.d.ts.map +0 -1
  124. package/dest/store/kv_archiver_store.js +0 -464
  125. package/src/store/kv_archiver_store.ts +0 -671
@@ -1,216 +1,348 @@
1
- import { range } from '@aztec/foundation/array';
2
- import { BlockNumber } from '@aztec/foundation/branded-types';
3
- import { isDefined } from '@aztec/foundation/types';
1
+ import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
+ import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
3
+ import { Body, L2Block } from '@aztec/stdlib/block';
4
4
  import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
5
- import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
5
+ import { getEpochAtSlot, getEpochNumberAtTimestamp, getLastL1SlotTimestampForL2Slot, getProofSubmissionDeadlineEpoch, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
6
+ import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
6
7
  /**
7
- * Abstract base class implementing ArchiverDataSource using a KVArchiverDataStore.
8
- * Provides implementations for all store-delegating methods and declares abstract methods
9
- * for L1-dependent functionality that subclasses must implement.
8
+ * Abstract base class implementing ArchiverDataSource using a bundle of archiver substores.
9
+ * Provides implementations for all read-side methods and declares abstract methods for
10
+ * L1-dependent functionality that subclasses must implement.
10
11
  */ export class ArchiverDataSourceBase {
11
- store;
12
+ stores;
12
13
  l1Constants;
13
- constructor(store, l1Constants){
14
- this.store = store;
14
+ /** The injected genesis block header. */ initialHeader;
15
+ /** Precomputed hash of the initial header, exposed via {@link getGenesisBlockHash}. */ initialBlockHash;
16
+ /** Archive root after block 0 was appended — read from L1 (`Rollup.getGenesisArchiveTreeRoot`). */ genesisArchiveRoot;
17
+ /** Memoized synthetic genesis block — callers rely on referential identity for caching. */ genesisBlock;
18
+ /** Memoized synthetic genesis block data — kept consistent with {@link genesisBlock}. */ genesisBlockData;
19
+ constructor(stores, l1Constants, initialHeader, initialBlockHash, genesisArchiveRoot){
20
+ this.stores = stores;
15
21
  this.l1Constants = l1Constants;
22
+ this.initialHeader = initialHeader;
23
+ this.initialBlockHash = initialBlockHash;
24
+ this.genesisArchiveRoot = genesisArchiveRoot;
25
+ const genesisArchive = new AppendOnlyTreeSnapshot(genesisArchiveRoot, 1);
26
+ this.genesisBlock = new L2Block(genesisArchive, initialHeader, Body.empty(), CheckpointNumber.ZERO, IndexWithinCheckpoint(0));
27
+ this.genesisBlockData = {
28
+ header: initialHeader,
29
+ archive: genesisArchive,
30
+ blockHash: initialBlockHash,
31
+ checkpointNumber: CheckpointNumber.ZERO,
32
+ indexWithinCheckpoint: IndexWithinCheckpoint(0)
33
+ };
16
34
  }
17
- getCheckpointNumber() {
18
- return this.store.getSynchedCheckpointNumber();
19
- }
20
- getSynchedCheckpointNumber() {
21
- return this.store.getSynchedCheckpointNumber();
35
+ /** Returns the precomputed hash of the genesis block header. */ getGenesisBlockHash() {
36
+ return this.initialBlockHash;
22
37
  }
23
- getProvenCheckpointNumber() {
24
- return this.store.getProvenCheckpointNumber();
38
+ /** Returns the synthetic genesis L2Block (memoized — same instance across calls). */ getGenesisBlock() {
39
+ return this.genesisBlock;
25
40
  }
26
- getBlockNumber() {
27
- return this.store.getLatestBlockNumber();
41
+ /** Returns genesis block data (memoized — same instance across calls). */ getGenesisBlockData() {
42
+ return this.genesisBlockData;
28
43
  }
29
- getProvenBlockNumber() {
30
- return this.store.getProvenBlockNumber();
44
+ /**
45
+ * Type guard distinguishing the genesis sentinel from a {@link ResolvedBlockQuery}.
46
+ * `resolveBlockQuery` already rewrites every genesis-matching shape to the sentinel,
47
+ * so callers only need this single sync check.
48
+ */ isGenesisBlockQuery(query) {
49
+ return 'genesis' in query;
31
50
  }
32
- async getBlockHeader(number) {
33
- const blockNumber = number === 'latest' ? await this.store.getLatestBlockNumber() : number;
34
- if (blockNumber === 0) {
35
- return undefined;
51
+ async isPruneDueAtSlot(slot) {
52
+ if (!this.l1Constants) {
53
+ throw new Error('isPruneDueAtSlot requires l1Constants');
36
54
  }
37
- const headers = await this.store.getBlockHeaders(blockNumber, 1);
38
- return headers.length === 0 ? undefined : headers[0];
39
- }
40
- getCheckpointedBlock(number) {
41
- return this.store.getCheckpointedBlock(number);
55
+ const tips = await this.getL2Tips();
56
+ const proven = tips.proven.checkpoint.number;
57
+ const pending = tips.checkpointed.checkpoint.number;
58
+ if (pending === proven) {
59
+ return false;
60
+ }
61
+ const oldestUnproven = await this.getCheckpointData({
62
+ number: CheckpointNumber(Number(proven) + 1)
63
+ });
64
+ if (!oldestUnproven) {
65
+ return false;
66
+ }
67
+ const slotTs = getLastL1SlotTimestampForL2Slot(slot, this.l1Constants);
68
+ const slotEpoch = getEpochNumberAtTimestamp(slotTs, this.l1Constants);
69
+ const oldestUnprovenEpoch = getEpochAtSlot(oldestUnproven.header.slotNumber, this.l1Constants);
70
+ const deadlineEpoch = getProofSubmissionDeadlineEpoch(oldestUnprovenEpoch, this.l1Constants);
71
+ return slotEpoch >= deadlineEpoch;
42
72
  }
43
- getCheckpointedL2BlockNumber() {
44
- return this.store.getCheckpointedL2BlockNumber();
73
+ getCheckpointNumber() {
74
+ return this.stores.blocks.getLatestCheckpointNumber();
45
75
  }
46
- getFinalizedL2BlockNumber() {
47
- return this.store.getFinalizedL2BlockNumber();
76
+ getProvenCheckpointNumber() {
77
+ return this.stores.blocks.getProvenCheckpointNumber();
48
78
  }
49
- async getCheckpointHeader(number) {
50
- if (number === 'latest') {
51
- number = await this.store.getSynchedCheckpointNumber();
79
+ async getBlockNumber(query) {
80
+ if (!query) {
81
+ return this.stores.blocks.getLatestL2BlockNumber();
52
82
  }
53
- if (number === 0) {
83
+ const resolved = await this.resolveBlockQuery(query);
84
+ if (resolved === undefined) {
54
85
  return undefined;
55
86
  }
56
- const checkpoint = await this.store.getCheckpointData(number);
57
- if (!checkpoint) {
58
- return undefined;
87
+ if (this.isGenesisBlockQuery(resolved)) {
88
+ return BlockNumber.ZERO;
89
+ }
90
+ return this.stores.blocks.getBlockNumber(resolved);
91
+ }
92
+ /**
93
+ * Resolves a {@link CheckpointQuery} to a concrete `CheckpointNumber`, or undefined when the
94
+ * query refers to a position that has no checkpoint yet (e.g. `{ slot }` not found).
95
+ */ resolveCheckpointQuery(query) {
96
+ if ('number' in query) {
97
+ return Promise.resolve(query.number);
98
+ }
99
+ if ('slot' in query) {
100
+ return this.stores.blocks.getCheckpointNumberBySlot(query.slot);
101
+ }
102
+ // tag variant
103
+ switch(query.tag){
104
+ case 'checkpointed':
105
+ return this.stores.blocks.getLatestCheckpointNumber();
106
+ case 'proven':
107
+ return this.stores.blocks.getProvenCheckpointNumber();
108
+ case 'finalized':
109
+ return this.stores.blocks.getFinalizedCheckpointNumber();
59
110
  }
60
- return checkpoint.header;
61
111
  }
62
- async getLastBlockNumberInCheckpoint(checkpointNumber) {
63
- const checkpointData = await this.store.getCheckpointData(checkpointNumber);
64
- if (!checkpointData) {
112
+ /**
113
+ * Resolves a {@link CheckpointsQuery} to a concrete `{from, limit}` pair used by BlockStore,
114
+ * or undefined when the epoch has no checkpoints.
115
+ */ async resolveCheckpointsQuery(query) {
116
+ if ('from' in query) {
117
+ return query;
118
+ }
119
+ const numbers = await this.getCheckpointNumbersForEpoch(query.epoch);
120
+ if (numbers.length === 0) {
65
121
  return undefined;
66
122
  }
67
- return BlockNumber(checkpointData.startBlock + checkpointData.blockCount - 1);
68
- }
69
- getCheckpointedBlocks(from, limit) {
70
- return this.store.getCheckpointedBlocks(from, limit);
123
+ return {
124
+ from: numbers[0],
125
+ limit: numbers.length
126
+ };
71
127
  }
72
- getBlockHeaderByHash(blockHash) {
73
- return this.store.getBlockHeaderByHash(blockHash);
128
+ async getCheckpoint(query) {
129
+ const number = await this.resolveCheckpointQuery(query);
130
+ if (number === undefined || number === 0) {
131
+ return undefined;
132
+ }
133
+ const data = await this.stores.blocks.getCheckpointData(number);
134
+ if (!data) {
135
+ return undefined;
136
+ }
137
+ return this.getPublishedCheckpointFromCheckpointData(data);
74
138
  }
75
- getBlockHeaderByArchive(archive) {
76
- return this.store.getBlockHeaderByArchive(archive);
139
+ async getCheckpoints(query) {
140
+ const resolved = await this.resolveCheckpointsQuery(query);
141
+ if (!resolved) {
142
+ return [];
143
+ }
144
+ const checkpoints = await this.stores.blocks.getRangeOfCheckpoints(resolved.from, resolved.limit);
145
+ return Promise.all(checkpoints.map((ch)=>this.getPublishedCheckpointFromCheckpointData(ch)));
77
146
  }
78
- getBlockData(number) {
79
- return this.store.getBlockData(number);
147
+ async getCheckpointData(query) {
148
+ const number = await this.resolveCheckpointQuery(query);
149
+ if (number === undefined || number === 0) {
150
+ return undefined;
151
+ }
152
+ return this.stores.blocks.getCheckpointData(number);
80
153
  }
81
- getBlockDataByArchive(archive) {
82
- return this.store.getBlockDataByArchive(archive);
154
+ async getCheckpointsData(query) {
155
+ const resolved = await this.resolveCheckpointsQuery(query);
156
+ if (!resolved) {
157
+ return [];
158
+ }
159
+ return this.stores.blocks.getRangeOfCheckpoints(resolved.from, resolved.limit);
83
160
  }
84
- async getL2Block(number) {
85
- // If the number provided is -ve, then return the latest block.
86
- if (number < 0) {
87
- number = await this.store.getLatestBlockNumber();
161
+ getProposedCheckpointData(query) {
162
+ if (!query || 'tag' in query) {
163
+ return this.stores.blocks.getLastProposedCheckpoint();
88
164
  }
89
- if (number === 0) {
90
- return undefined;
165
+ if ('number' in query) {
166
+ return this.stores.blocks.getProposedCheckpointByNumber(query.number);
91
167
  }
92
- const publishedBlock = await this.store.getBlock(number);
93
- return publishedBlock;
168
+ return this.stores.blocks.getProposedCheckpointBySlot(query.slot);
94
169
  }
95
170
  getTxEffect(txHash) {
96
- return this.store.getTxEffect(txHash);
97
- }
98
- getSettledTxReceipt(txHash) {
99
- return this.store.getSettledTxReceipt(txHash);
171
+ return this.stores.blocks.getTxEffect(txHash);
100
172
  }
101
173
  isPendingChainInvalid() {
102
174
  return this.getPendingChainValidationStatus().then((status)=>!status.valid);
103
175
  }
104
176
  async getPendingChainValidationStatus() {
105
- return await this.store.getPendingChainValidationStatus() ?? {
177
+ return await this.stores.blocks.getPendingChainValidationStatus() ?? {
106
178
  valid: true
107
179
  };
108
180
  }
109
- getPrivateLogsByTags(tags, page) {
110
- return this.store.getPrivateLogsByTags(tags, page);
111
- }
112
- getPublicLogsByTagsFromContract(contractAddress, tags, page) {
113
- return this.store.getPublicLogsByTagsFromContract(contractAddress, tags, page);
181
+ getPrivateLogsByTags(query) {
182
+ return this.stores.logs.getPrivateLogsByTags(query);
114
183
  }
115
- getPublicLogs(filter) {
116
- return this.store.getPublicLogs(filter);
117
- }
118
- getContractClassLogs(filter) {
119
- return this.store.getContractClassLogs(filter);
184
+ getPublicLogsByTags(query) {
185
+ return this.stores.logs.getPublicLogsByTags(query);
120
186
  }
121
187
  getContractClass(id) {
122
- return this.store.getContractClass(id);
188
+ return this.stores.contractClasses.getContractClass(id);
123
189
  }
124
190
  getBytecodeCommitment(id) {
125
- return this.store.getBytecodeCommitment(id);
191
+ return this.stores.contractClasses.getBytecodeCommitment(id);
126
192
  }
127
193
  async getContract(address, maybeTimestamp) {
128
194
  let timestamp;
129
195
  if (maybeTimestamp === undefined) {
130
- const latestBlockHeader = await this.getBlockHeader('latest');
131
- // If we get undefined block header, it means that the archiver has not yet synced any block so we default to 0.
132
- timestamp = latestBlockHeader ? latestBlockHeader.globalVariables.timestamp : 0n;
196
+ const latestBlockData = await this.getBlockData({
197
+ tag: 'proposed'
198
+ });
199
+ timestamp = latestBlockData ? latestBlockData.header.globalVariables.timestamp : 0n;
133
200
  } else {
134
201
  timestamp = maybeTimestamp;
135
202
  }
136
- return this.store.getContractInstance(address, timestamp);
203
+ return this.stores.contractInstances.getContractInstance(address, timestamp);
137
204
  }
138
205
  getContractClassIds() {
139
- return this.store.getContractClassIds();
206
+ return this.stores.contractClasses.getContractClassIds();
140
207
  }
141
- getDebugFunctionName(address, selector) {
142
- return this.store.getDebugFunctionName(address, selector);
208
+ /** Looks up a public function name given a selector. */ getDebugFunctionName(_address, selector) {
209
+ return Promise.resolve(this.stores.functionNames.get(selector));
143
210
  }
144
- registerContractFunctionSignatures(signatures) {
145
- return this.store.registerContractFunctionSignatures(signatures);
211
+ /** Register public function signatures so they can be looked up by selector. */ registerContractFunctionSignatures(signatures) {
212
+ return this.stores.functionNames.register(signatures);
146
213
  }
147
214
  getL1ToL2Messages(checkpointNumber) {
148
- return this.store.getL1ToL2Messages(checkpointNumber);
215
+ return this.stores.messages.getL1ToL2Messages(checkpointNumber);
149
216
  }
150
217
  getL1ToL2MessageIndex(l1ToL2Message) {
151
- return this.store.getL1ToL2MessageIndex(l1ToL2Message);
152
- }
153
- async getCheckpoints(checkpointNumber, limit) {
154
- const checkpoints = await this.store.getRangeOfCheckpoints(checkpointNumber, limit);
155
- return Promise.all(checkpoints.map((ch)=>this.getPublishedCheckpointFromCheckpointData(ch)));
218
+ return this.stores.messages.getL1ToL2MessageIndex(l1ToL2Message);
156
219
  }
157
220
  async getPublishedCheckpointFromCheckpointData(checkpoint) {
158
- const blocksForCheckpoint = await this.store.getBlocksForCheckpoint(checkpoint.checkpointNumber);
221
+ const blocksForCheckpoint = await this.stores.blocks.getBlocksForCheckpoint(checkpoint.checkpointNumber);
159
222
  if (!blocksForCheckpoint) {
160
223
  throw new Error(`Blocks for checkpoint ${checkpoint.checkpointNumber} not found`);
161
224
  }
162
- const fullCheckpoint = new Checkpoint(checkpoint.archive, checkpoint.header, blocksForCheckpoint, checkpoint.checkpointNumber);
225
+ const fullCheckpoint = new Checkpoint(checkpoint.archive, checkpoint.header, blocksForCheckpoint, checkpoint.checkpointNumber, checkpoint.feeAssetPriceModifier);
163
226
  return new PublishedCheckpoint(fullCheckpoint, checkpoint.l1, checkpoint.attestations);
164
227
  }
165
228
  getBlocksForSlot(slotNumber) {
166
- return this.store.getBlocksForSlot(slotNumber);
167
- }
168
- async getCheckpointedBlocksForEpoch(epochNumber) {
169
- const checkpointsData = await this.getCheckpointsDataForEpoch(epochNumber);
170
- const blocks = await Promise.all(checkpointsData.flatMap((checkpoint)=>range(checkpoint.blockCount, checkpoint.startBlock).map((blockNumber)=>this.getCheckpointedBlock(BlockNumber(blockNumber)))));
171
- return blocks.filter(isDefined);
172
- }
173
- async getCheckpointedBlockHeadersForEpoch(epochNumber) {
174
- const checkpointsData = await this.getCheckpointsDataForEpoch(epochNumber);
175
- const blocks = await Promise.all(checkpointsData.flatMap((checkpoint)=>range(checkpoint.blockCount, checkpoint.startBlock).map((blockNumber)=>this.getBlockHeader(BlockNumber(blockNumber)))));
176
- return blocks.filter(isDefined);
229
+ return this.stores.blocks.getBlocksForSlot(slotNumber);
177
230
  }
178
- async getCheckpointsForEpoch(epochNumber) {
179
- const checkpointsData = await this.getCheckpointsDataForEpoch(epochNumber);
180
- return Promise.all(checkpointsData.map((data)=>this.getPublishedCheckpointFromCheckpointData(data).then((p)=>p.checkpoint)));
181
- }
182
- /** Returns checkpoint data for all checkpoints whose slot falls within the given epoch. */ getCheckpointsDataForEpoch(epochNumber) {
231
+ /** Returns just the checkpoint numbers for all checkpoints whose slot falls within the given epoch. */ getCheckpointNumbersForEpoch(epochNumber) {
183
232
  if (!this.l1Constants) {
184
233
  throw new Error('L1 constants not set');
185
234
  }
186
235
  const [start, end] = getSlotRangeForEpoch(epochNumber, this.l1Constants);
187
- return this.store.getCheckpointDataForSlotRange(start, end);
236
+ return this.stores.blocks.getCheckpointNumbersForSlotRange(start, end);
188
237
  }
189
- async getBlock(number) {
190
- // If the number provided is -ve, then return the latest block.
191
- if (number < 0) {
192
- number = await this.store.getLatestBlockNumber();
238
+ async getBlock(query) {
239
+ const resolved = await this.resolveBlockQuery(query);
240
+ if (resolved === undefined) {
241
+ return undefined;
193
242
  }
194
- if (number === 0) {
243
+ if (this.isGenesisBlockQuery(resolved)) {
244
+ return this.getGenesisBlock();
245
+ }
246
+ return this.stores.blocks.getBlock(resolved);
247
+ }
248
+ /**
249
+ * Range queries iterate physical blocks only; the genesis block is NOT prepended.
250
+ * `L2BlockStream` consumers (`world-state.handleL2Blocks`, etc.) emit `blocks-added` events for
251
+ * real blocks and would be surprised by a synthetic block 0. Use {@link getBlock} or
252
+ * {@link getBlockData} for genesis-aware single-block lookups.
253
+ */ async getBlocks(query) {
254
+ const resolved = await this.resolveBlocksQuery(query);
255
+ return resolved ? this.stores.blocks.getBlocks(resolved) : [];
256
+ }
257
+ async getBlockData(query) {
258
+ const resolved = await this.resolveBlockQuery(query);
259
+ if (resolved === undefined) {
195
260
  return undefined;
196
261
  }
197
- return this.store.getBlock(number);
198
- }
199
- getBlocks(from, limit) {
200
- return this.store.getBlocks(from, limit);
201
- }
202
- getCheckpointedBlockByHash(blockHash) {
203
- return this.store.getCheckpointedBlockByHash(blockHash);
204
- }
205
- getCheckpointedBlockByArchive(archive) {
206
- return this.store.getCheckpointedBlockByArchive(archive);
262
+ if (this.isGenesisBlockQuery(resolved)) {
263
+ return this.getGenesisBlockData();
264
+ }
265
+ return this.stores.blocks.getBlockData(resolved);
266
+ }
267
+ /** See {@link getBlocks} — range queries do not prepend the genesis block. */ async getBlocksData(query) {
268
+ const resolved = await this.resolveBlocksQuery(query);
269
+ return resolved ? this.stores.blocks.getBlocksData(resolved) : [];
270
+ }
271
+ /**
272
+ * Resolves a {@link BlockQuery} to either the genesis sentinel or a {@link ResolvedBlockQuery}
273
+ * understood by BlockStore. Detects every shape that points at block 0 — `{number:0}`,
274
+ * `{hash}` matching the initial header, `{archive}` matching the post-genesis archive root,
275
+ * and `{tag}` resolving to 0 — and rewrites them to the sentinel so callers branch once.
276
+ */ async resolveBlockQuery(query) {
277
+ if ('number' in query) {
278
+ return query.number === BlockNumber.ZERO ? {
279
+ genesis: true
280
+ } : query;
281
+ }
282
+ if ('hash' in query) {
283
+ return query.hash.equals(this.initialBlockHash) ? {
284
+ genesis: true
285
+ } : query;
286
+ }
287
+ if ('archive' in query) {
288
+ return query.archive.equals(this.genesisArchiveRoot) ? {
289
+ genesis: true
290
+ } : query;
291
+ }
292
+ const number = await this.resolveBlockTag(query.tag);
293
+ if (number === BlockNumber.ZERO) {
294
+ return {
295
+ genesis: true
296
+ };
297
+ }
298
+ return {
299
+ number
300
+ };
207
301
  }
208
- async getL2BlockByHash(blockHash) {
209
- const checkpointedBlock = await this.store.getCheckpointedBlockByHash(blockHash);
210
- return checkpointedBlock?.block;
302
+ /** Maps a {@link BlockTag} to the matching block number for the current chain state. */ resolveBlockTag(tag) {
303
+ switch(tag){
304
+ case 'latest':
305
+ case 'proposed':
306
+ return this.stores.blocks.getLatestL2BlockNumber();
307
+ case 'checkpointed':
308
+ return this.stores.blocks.getCheckpointedL2BlockNumber();
309
+ case 'proven':
310
+ return this.stores.blocks.getProvenBlockNumber();
311
+ case 'finalized':
312
+ return this.stores.blocks.getFinalizedL2BlockNumber();
313
+ }
211
314
  }
212
- async getL2BlockByArchive(archive) {
213
- const checkpointedBlock = await this.store.getCheckpointedBlockByArchive(archive);
214
- return checkpointedBlock?.block;
315
+ /**
316
+ * Converts an epoch-based BlocksQuery to a from/limit query using l1Constants.
317
+ * Returns undefined when the epoch has no checkpoints, so callers can return [] without
318
+ * entering BlockStore. Reads only the two endpoint checkpoints rather than the whole epoch.
319
+ */ async resolveBlocksQuery(query) {
320
+ if (!('epoch' in query)) {
321
+ if (query.from < INITIAL_L2_BLOCK_NUM) {
322
+ throw new Error(`getBlocks/getBlocksData: 'from' must be >= ${INITIAL_L2_BLOCK_NUM}, got ${query.from}. ` + `Use getBlock({number:0})/getBlockData({number:0}) for genesis-aware single-block lookups.`);
323
+ }
324
+ return query;
325
+ }
326
+ const checkpointNumbers = await this.getCheckpointNumbersForEpoch(query.epoch);
327
+ if (checkpointNumbers.length === 0) {
328
+ return undefined;
329
+ }
330
+ const firstNumber = checkpointNumbers[0];
331
+ const lastNumber = checkpointNumbers[checkpointNumbers.length - 1];
332
+ const first = await this.stores.blocks.getCheckpointData(firstNumber);
333
+ if (!first) {
334
+ return undefined;
335
+ }
336
+ const last = firstNumber === lastNumber ? first : await this.stores.blocks.getCheckpointData(lastNumber);
337
+ if (!last) {
338
+ return undefined;
339
+ }
340
+ const from = BlockNumber(first.startBlock);
341
+ const limit = last.startBlock + last.blockCount - first.startBlock;
342
+ return {
343
+ from,
344
+ limit,
345
+ onlyCheckpointed: true
346
+ };
215
347
  }
216
348
  }
@@ -1,7 +1,7 @@
1
1
  import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
- import type { L2Block, ValidateCheckpointResult } from '@aztec/stdlib/block';
3
- import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
4
- import type { KVArchiverDataStore } from '../store/kv_archiver_store.js';
2
+ import type { CommitteeAttestation, L2Block, ValidateCheckpointResult } from '@aztec/stdlib/block';
3
+ import { type L1PublishedData, type ProposedCheckpointInput, type PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
4
+ import type { ArchiverDataStores } from '../store/data_stores.js';
5
5
  import type { L2TipsCache } from '../store/l2_tips_cache.js';
6
6
  /** Result of adding checkpoints with information about any pruned blocks. */
7
7
  type ReconcileCheckpointsResult = {
@@ -12,33 +12,42 @@ type ReconcileCheckpointsResult = {
12
12
  };
13
13
  /** Archiver helper module to handle updates to the data store. */
14
14
  export declare class ArchiverDataStoreUpdater {
15
- private store;
15
+ private stores;
16
16
  private l2TipsCache?;
17
+ private opts;
17
18
  private readonly log;
18
- constructor(store: KVArchiverDataStore, l2TipsCache?: L2TipsCache | undefined);
19
+ constructor(stores: ArchiverDataStores, l2TipsCache?: L2TipsCache | undefined, opts?: {
20
+ rollupManaLimit?: number;
21
+ });
19
22
  /**
20
- * Adds proposed blocks to the store with contract class/instance extraction from logs.
21
- * These are uncheckpointed blocks that have been proposed by the sequencer but not yet included in a checkpoint on L1.
22
- * Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
23
- * and individually broadcasted functions from the block logs.
23
+ * Adds a proposed block to the store with contract class/instance extraction from logs.
24
+ * This is an uncheckpointed block that has been proposed by the sequencer but not yet included in a checkpoint on L1.
25
+ * Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events from the block logs.
24
26
  *
25
- * @param blocks - The proposed L2 blocks to add.
27
+ * @param block - The proposed L2 block to add.
26
28
  * @param pendingChainValidationStatus - Optional validation status to set.
27
29
  * @returns True if the operation is successful.
28
30
  */
29
- addProposedBlocks(blocks: L2Block[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<boolean>;
31
+ addProposedBlock(block: L2Block, pendingChainValidationStatus?: ValidateCheckpointResult): Promise<boolean>;
30
32
  /**
31
33
  * Reconciles local blocks with incoming checkpoints from L1.
32
34
  * Adds new checkpoints to the store with contract class/instance extraction from logs.
33
35
  * Prunes any local blocks that conflict with checkpoint data (by comparing archive roots).
34
- * Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
35
- * and individually broadcasted functions from the checkpoint block logs.
36
+ * Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events from the checkpoint block logs.
37
+ * If `promoteProposed` is supplied, the proposed-checkpoint promotion runs inside the same transaction
38
+ * as the added checkpoints so both updates are applied atomically.
36
39
  *
37
- * @param checkpoints - The published checkpoints to add.
40
+ * @param checkpoints - The published checkpoints to add (excluding any being promoted from proposed).
38
41
  * @param pendingChainValidationStatus - Optional validation status to set.
42
+ * @param promoteProposed - Optional promotion of the current proposed checkpoint (fast path when blocks are already local).
39
43
  * @returns Result with information about any pruned blocks.
40
44
  */
41
- addCheckpoints(checkpoints: PublishedCheckpoint[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<ReconcileCheckpointsResult>;
45
+ addCheckpoints(checkpoints: PublishedCheckpoint[], pendingChainValidationStatus?: ValidateCheckpointResult, promoteProposed?: {
46
+ l1: L1PublishedData;
47
+ attestations: CommitteeAttestation[];
48
+ checkpoint: PublishedCheckpoint;
49
+ }, evictProposedFrom?: CheckpointNumber): Promise<ReconcileCheckpointsResult>;
50
+ addProposedCheckpoint(proposedCheckpoint: ProposedCheckpointInput): Promise<void>;
42
51
  private pruneMismatchingLocalBlocks;
43
52
  /**
44
53
  * Removes all uncheckpointed blocks strictly after the specified block number and cleans up associated contract data.
@@ -50,6 +59,18 @@ export declare class ArchiverDataStoreUpdater {
50
59
  * @throws Error if any block to be removed is checkpointed.
51
60
  */
52
61
  removeUncheckpointedBlocksAfter(blockNumber: BlockNumber): Promise<L2Block[]>;
62
+ /**
63
+ * Removes all blocks without a proposed checkpoint strictly after the specified block number and cleans up associated contract data.
64
+ * This handles removal of provisionally added blocks along with their contract classes/instances.
65
+ * Verifies that each block being removed is not part of a stored checkpoint (proposed or not).
66
+ * This differs from `removeUncheckpointedBlocksAfter` in that it also checks proposed checkpoints.
67
+ *
68
+ * @param blockNumber - Remove all blocks with number greater than this.
69
+ * @returns The removed blocks.
70
+ * @throws Error if any block to be removed is checkpointed.
71
+ */
72
+ removeBlocksWithoutProposedCheckpointAfter(blockNumber: BlockNumber): Promise<L2Block[]>;
73
+ private evictProposedCheckpointsForPrunedBlocks;
53
74
  private removeBlocksAfter;
54
75
  /**
55
76
  * Removes all checkpoints after the given checkpoint number.
@@ -66,6 +87,11 @@ export declare class ArchiverDataStoreUpdater {
66
87
  * @param checkpointNumber - The checkpoint number to set as proven.
67
88
  */
68
89
  setProvenCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<void>;
90
+ /**
91
+ * Updates the finalized checkpoint number and refreshes the L2 tips cache.
92
+ * @param checkpointNumber - The checkpoint number to set as finalized.
93
+ */
94
+ setFinalizedCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<void>;
69
95
  /** Extracts and stores contract data from a single block. */
70
96
  private addContractDataToDb;
71
97
  /** Removes contract data associated with a block. */
@@ -74,7 +100,6 @@ export declare class ArchiverDataStoreUpdater {
74
100
  private updatePublishedContractClasses;
75
101
  private updateDeployedContractInstances;
76
102
  private updateUpdatedContractInstances;
77
- private storeBroadcastedIndividualFunctions;
78
103
  }
79
104
  export {};
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZV91cGRhdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9kYXRhX3N0b3JlX3VwZGF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBWWhGLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFhcEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVE3RCw2RUFBNkU7QUFDN0UsS0FBSywwQkFBMEIsR0FBRztJQUNoQyxtRUFBbUU7SUFDbkUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUNwQyxpRkFBaUY7SUFDakYsOEJBQThCLEVBQUUsV0FBVyxHQUFHLFNBQVMsQ0FBQztDQUN6RCxDQUFDO0FBRUYsa0VBQWtFO0FBQ2xFLHFCQUFhLHdCQUF3QjtJQUlqQyxPQUFPLENBQUMsS0FBSztJQUNiLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFKdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQTBDO0lBRTlELFlBQ1UsS0FBSyxFQUFFLG1CQUFtQixFQUMxQixXQUFXLENBQUMseUJBQWEsRUFDL0I7SUFFSjs7Ozs7Ozs7O09BU0c7SUFDVSxpQkFBaUIsQ0FDNUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUNqQiw0QkFBNEIsQ0FBQyxFQUFFLHdCQUF3QixHQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBaUJsQjtJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDVSxjQUFjLENBQ3pCLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxFQUNsQyw0QkFBNEIsQ0FBQyxFQUFFLHdCQUF3QixHQUN0RCxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0F5QnJDO1lBUWEsMkJBQTJCO0lBbUV6Qzs7Ozs7Ozs7T0FRRztJQUNVLCtCQUErQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBZXpGO1lBTWEsaUJBQWlCO0lBYS9COzs7Ozs7OztPQVFHO0lBQ1Usc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWV4RjtJQUVEOzs7T0FHRztJQUNVLHlCQUF5QixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLeEY7SUFFRCw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLG1CQUFtQjtJQUkzQixxREFBcUQ7SUFDckQsT0FBTyxDQUFDLHdCQUF3QjtZQUtsQixzQkFBc0I7WUFvQnRCLDhCQUE4QjtZQTRCOUIsK0JBQStCO1lBeUIvQiw4QkFBOEI7WUE2QjlCLG1DQUFtQztDQXdEbEQifQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZV91cGRhdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9kYXRhX3N0b3JlX3VwZGF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBUWhGLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25HLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxtQkFBbUIsRUFFekIsTUFBTSwwQkFBMEIsQ0FBQztBQVNsQyxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBUTdELDZFQUE2RTtBQUM3RSxLQUFLLDBCQUEwQixHQUFHO0lBQ2hDLG1FQUFtRTtJQUNuRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLGlGQUFpRjtJQUNqRiw4QkFBOEIsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDO0NBQ3pELENBQUM7QUFFRixrRUFBa0U7QUFDbEUscUJBQWEsd0JBQXdCO0lBSWpDLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNwQixPQUFPLENBQUMsSUFBSTtJQUxkLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUEwQztJQUU5RCxZQUNVLE1BQU0sRUFBRSxrQkFBa0IsRUFDMUIsV0FBVyxDQUFDLHlCQUFhLEVBQ3pCLElBQUksR0FBRTtRQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFPLEVBQzdDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDVSxnQkFBZ0IsQ0FDM0IsS0FBSyxFQUFFLE9BQU8sRUFDZCw0QkFBNEIsQ0FBQyxFQUFFLHdCQUF3QixHQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBa0JsQjtJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNVLGNBQWMsQ0FDekIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEVBQ2xDLDRCQUE0QixDQUFDLEVBQUUsd0JBQXdCLEVBQ3ZELGVBQWUsQ0FBQyxFQUFFO1FBQ2hCLEVBQUUsRUFBRSxlQUFlLENBQUM7UUFDcEIsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7UUFDckMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0tBQ2pDLEVBQ0QsaUJBQWlCLENBQUMsRUFBRSxnQkFBZ0IsR0FDbkMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBOENyQztJQUVZLHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixpQkFNN0U7WUFnQmEsMkJBQTJCO0lBdUV6Qzs7Ozs7Ozs7T0FRRztJQUNVLCtCQUErQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBaUJ6RjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNVLDBDQUEwQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBY3BHO1lBT2EsdUNBQXVDO1lBWXZDLGlCQUFpQjtJQWEvQjs7Ozs7Ozs7T0FRRztJQUNVLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FnQnhGO0lBRUQ7OztPQUdHO0lBQ1UseUJBQXlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUt4RjtJQUVEOzs7T0FHRztJQUNVLDRCQUE0QixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLM0Y7SUFFRCw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLG1CQUFtQjtJQUkzQixxREFBcUQ7SUFDckQsT0FBTyxDQUFDLHdCQUF3QjtZQUtsQixzQkFBc0I7WUFpQnRCLDhCQUE4QjtZQStDOUIsK0JBQStCO1lBMEMvQiw4QkFBOEI7Q0FzQjdDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAYhF,OAAO,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAapE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,6EAA6E;AAC7E,KAAK,0BAA0B,GAAG;IAChC,mEAAmE;IACnE,YAAY,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACpC,iFAAiF;IACjF,8BAA8B,EAAE,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kEAAkE;AAClE,qBAAa,wBAAwB;IAIjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,WAAW,CAAC;IAJtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0C;IAE9D,YACU,KAAK,EAAE,mBAAmB,EAC1B,WAAW,CAAC,yBAAa,EAC/B;IAEJ;;;;;;;;;OASG;IACU,iBAAiB,CAC5B,MAAM,EAAE,OAAO,EAAE,EACjB,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,OAAO,CAAC,CAiBlB;IAED;;;;;;;;;;OAUG;IACU,cAAc,CACzB,WAAW,EAAE,mBAAmB,EAAE,EAClC,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,0BAA0B,CAAC,CAyBrC;YAQa,2BAA2B;IAmEzC;;;;;;;;OAQG;IACU,+BAA+B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAezF;YAMa,iBAAiB;IAa/B;;;;;;;;OAQG;IACU,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAexF;IAED;;;OAGG;IACU,yBAAyB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF;IAED,6DAA6D;IAC7D,OAAO,CAAC,mBAAmB;IAI3B,qDAAqD;IACrD,OAAO,CAAC,wBAAwB;YAKlB,sBAAsB;YAoBtB,8BAA8B;YA4B9B,+BAA+B;YAyB/B,8BAA8B;YA6B9B,mCAAmC;CAwDlD"}
1
+ {"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQhF,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,0BAA0B,CAAC;AASlC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,6EAA6E;AAC7E,KAAK,0BAA0B,GAAG;IAChC,mEAAmE;IACnE,YAAY,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACpC,iFAAiF;IACjF,8BAA8B,EAAE,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kEAAkE;AAClE,qBAAa,wBAAwB;IAIjC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI;IALd,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0C;IAE9D,YACU,MAAM,EAAE,kBAAkB,EAC1B,WAAW,CAAC,yBAAa,EACzB,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAO,EAC7C;IAEJ;;;;;;;;OAQG;IACU,gBAAgB,CAC3B,KAAK,EAAE,OAAO,EACd,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,OAAO,CAAC,CAkBlB;IAED;;;;;;;;;;;;OAYG;IACU,cAAc,CACzB,WAAW,EAAE,mBAAmB,EAAE,EAClC,4BAA4B,CAAC,EAAE,wBAAwB,EACvD,eAAe,CAAC,EAAE;QAChB,EAAE,EAAE,eAAe,CAAC;QACpB,YAAY,EAAE,oBAAoB,EAAE,CAAC;QACrC,UAAU,EAAE,mBAAmB,CAAC;KACjC,EACD,iBAAiB,CAAC,EAAE,gBAAgB,GACnC,OAAO,CAAC,0BAA0B,CAAC,CA8CrC;IAEY,qBAAqB,CAAC,kBAAkB,EAAE,uBAAuB,iBAM7E;YAgBa,2BAA2B;IAuEzC;;;;;;;;OAQG;IACU,+BAA+B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAiBzF;IAED;;;;;;;;;OASG;IACU,0CAA0C,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAcpG;YAOa,uCAAuC;YAYvC,iBAAiB;IAa/B;;;;;;;;OAQG;IACU,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBxF;IAED;;;OAGG;IACU,yBAAyB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF;IAED;;;OAGG;IACU,4BAA4B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3F;IAED,6DAA6D;IAC7D,OAAO,CAAC,mBAAmB;IAI3B,qDAAqD;IACrD,OAAO,CAAC,wBAAwB;YAKlB,sBAAsB;YAiBtB,8BAA8B;YA+C9B,+BAA+B;YA0C/B,8BAA8B;CAsB7C"}