@aztec/archiver 5.0.0-private.20260319 → 5.0.0-rc.2
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.
- package/README.md +19 -13
- package/dest/archiver.d.ts +71 -15
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +268 -74
- package/dest/config.d.ts +7 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +39 -16
- package/dest/errors.d.ts +44 -10
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +66 -12
- package/dest/factory.d.ts +12 -7
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +40 -25
- package/dest/index.d.ts +11 -3
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +10 -2
- package/dest/l1/calldata_retriever.d.ts +2 -1
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +15 -5
- package/dest/l1/data_retrieval.d.ts +19 -10
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +25 -32
- package/dest/l1/trace_tx.d.ts +12 -66
- package/dest/l1/trace_tx.d.ts.map +1 -1
- package/dest/l1/validate_historical_logs.d.ts +23 -0
- package/dest/l1/validate_historical_logs.d.ts.map +1 -0
- package/dest/l1/validate_historical_logs.js +108 -0
- package/dest/modules/contract_data_source_adapter.d.ts +25 -0
- package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
- package/dest/modules/contract_data_source_adapter.js +32 -0
- package/dest/modules/data_source_base.d.ts +72 -48
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +266 -143
- package/dest/modules/data_store_updater.d.ts +30 -13
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +172 -117
- package/dest/modules/instrumentation.d.ts +7 -2
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +25 -7
- package/dest/modules/l1_synchronizer.d.ts +11 -6
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +437 -217
- package/dest/modules/outbox_trees_resolver.d.ts +62 -0
- package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
- package/dest/modules/outbox_trees_resolver.js +162 -0
- package/dest/modules/validation.d.ts +24 -5
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +40 -15
- package/dest/store/block_store.d.ts +164 -66
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +638 -233
- package/dest/store/contract_class_store.d.ts +17 -4
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +36 -68
- package/dest/store/contract_instance_store.d.ts +28 -1
- package/dest/store/contract_instance_store.d.ts.map +1 -1
- package/dest/store/contract_instance_store.js +48 -2
- package/dest/store/data_stores.d.ts +68 -0
- package/dest/store/data_stores.d.ts.map +1 -0
- package/dest/store/data_stores.js +54 -0
- package/dest/store/function_names_cache.d.ts +17 -0
- package/dest/store/function_names_cache.d.ts.map +1 -0
- package/dest/store/function_names_cache.js +30 -0
- package/dest/store/l2_tips_cache.d.ts +13 -7
- package/dest/store/l2_tips_cache.d.ts.map +1 -1
- package/dest/store/l2_tips_cache.js +13 -76
- package/dest/store/log_store.d.ts +42 -40
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +257 -480
- package/dest/store/log_store_codec.d.ts +78 -0
- package/dest/store/log_store_codec.d.ts.map +1 -0
- package/dest/store/log_store_codec.js +110 -0
- package/dest/store/message_store.d.ts +9 -3
- package/dest/store/message_store.d.ts.map +1 -1
- package/dest/store/message_store.js +39 -10
- package/dest/test/fake_l1_state.d.ts +15 -3
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +80 -18
- package/dest/test/mock_l2_block_source.d.ts +48 -50
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +223 -179
- package/dest/test/mock_structs.d.ts +1 -1
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +2 -2
- package/dest/test/noop_l1_archiver.d.ts +14 -6
- package/dest/test/noop_l1_archiver.d.ts.map +1 -1
- package/dest/test/noop_l1_archiver.js +25 -9
- package/package.json +14 -14
- package/src/archiver.ts +353 -80
- package/src/config.ts +43 -20
- package/src/errors.ts +103 -18
- package/src/factory.ts +56 -24
- package/src/index.ts +18 -2
- package/src/l1/calldata_retriever.ts +16 -5
- package/src/l1/data_retrieval.ts +38 -46
- package/src/l1/validate_historical_logs.ts +140 -0
- package/src/modules/contract_data_source_adapter.ts +46 -0
- package/src/modules/data_source_base.ts +340 -189
- package/src/modules/data_store_updater.ts +211 -148
- package/src/modules/instrumentation.ts +28 -8
- package/src/modules/l1_synchronizer.ts +583 -255
- package/src/modules/outbox_trees_resolver.ts +199 -0
- package/src/modules/validation.ts +81 -21
- package/src/store/block_store.ts +792 -285
- package/src/store/contract_class_store.ts +43 -103
- package/src/store/contract_instance_store.ts +62 -5
- package/src/store/data_stores.ts +104 -0
- package/src/store/function_names_cache.ts +37 -0
- package/src/store/l2_tips_cache.ts +16 -70
- package/src/store/log_store.ts +296 -652
- package/src/store/log_store_codec.ts +143 -0
- package/src/store/message_store.ts +43 -12
- package/src/structs/inbox_message.ts +1 -1
- package/src/test/fake_l1_state.ts +99 -27
- package/src/test/mock_l2_block_source.ts +279 -233
- package/src/test/mock_structs.ts +5 -2
- package/src/test/noop_l1_archiver.ts +52 -9
- package/dest/store/kv_archiver_store.d.ts +0 -367
- package/dest/store/kv_archiver_store.d.ts.map +0 -1
- package/dest/store/kv_archiver_store.js +0 -481
- package/src/store/kv_archiver_store.ts +0 -697
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
2
2
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
3
|
-
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
5
5
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
-
import {
|
|
8
|
+
import { Body, GENESIS_BLOCK_HEADER_HASH, GENESIS_CHECKPOINT_HEADER_HASH, L2Block } from '@aztec/stdlib/block';
|
|
9
9
|
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
10
|
-
import { EmptyL1RollupConstants,
|
|
10
|
+
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
11
11
|
import { computeCheckpointOutHash } from '@aztec/stdlib/messaging';
|
|
12
12
|
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
13
|
-
import {
|
|
13
|
+
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
14
|
+
import { BlockHeader } from '@aztec/stdlib/tx';
|
|
14
15
|
/**
|
|
15
16
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
16
17
|
*/ export class MockL2BlockSource {
|
|
@@ -19,7 +20,47 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
19
20
|
provenBlockNumber = 0;
|
|
20
21
|
finalizedBlockNumber = 0;
|
|
21
22
|
checkpointedBlockNumber = 0;
|
|
23
|
+
initialHeader = BlockHeader.empty();
|
|
24
|
+
initialHeaderHash = GENESIS_BLOCK_HEADER_HASH;
|
|
25
|
+
genesisArchiveRoot;
|
|
26
|
+
genesisBlock;
|
|
22
27
|
log = createLogger('archiver:mock_l2_block_source');
|
|
28
|
+
/** Returns the initial header used to synthesize block 0. */ getInitialHeader() {
|
|
29
|
+
return this.initialHeader;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sets the initial header used to synthesize block 0. Tests that wire up a real
|
|
33
|
+
* world-state should call this with `worldState.getInitialHeader()` so the L2BlockStream
|
|
34
|
+
* agrees on the genesis hash on both sides. Precomputes and caches the header hash so
|
|
35
|
+
* `getGenesisBlockHash()` can return synchronously.
|
|
36
|
+
*/ async setInitialHeader(header) {
|
|
37
|
+
this.initialHeader = header;
|
|
38
|
+
this.initialHeaderHash = await header.hash();
|
|
39
|
+
this.genesisBlock = undefined;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns the precomputed hash of the genesis block header. Defaults to the static
|
|
43
|
+
* {@link GENESIS_BLOCK_HEADER_HASH} unless {@link setInitialHeader} has been called with a
|
|
44
|
+
* custom header.
|
|
45
|
+
*/ getGenesisBlockHash() {
|
|
46
|
+
return this.initialHeaderHash;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sets the post-genesis archive root used to synthesize block 0. Mirrors the real archiver,
|
|
50
|
+
* whose synthetic block 0 carries `new AppendOnlyTreeSnapshot(genesisArchiveRoot, 1)` rather
|
|
51
|
+
* than `AppendOnlyTreeSnapshot.empty()`. Tests wiring up a real world-state should set this so
|
|
52
|
+
* archive-based block lookups against the mock match production semantics.
|
|
53
|
+
*/ setGenesisArchiveRoot(root) {
|
|
54
|
+
this.genesisArchiveRoot = root;
|
|
55
|
+
this.genesisBlock = undefined;
|
|
56
|
+
}
|
|
57
|
+
getGenesisBlock() {
|
|
58
|
+
if (this.genesisBlock) {
|
|
59
|
+
return this.genesisBlock;
|
|
60
|
+
}
|
|
61
|
+
const archive = this.genesisArchiveRoot ? new AppendOnlyTreeSnapshot(this.genesisArchiveRoot, 1) : AppendOnlyTreeSnapshot.empty();
|
|
62
|
+
return this.genesisBlock = new L2Block(archive, this.initialHeader, Body.empty(), CheckpointNumber.ZERO, IndexWithinCheckpoint(0));
|
|
63
|
+
}
|
|
23
64
|
/** Creates blocks grouped into single-block checkpoints. */ async createBlocks(numBlocks) {
|
|
24
65
|
await this.createCheckpoints(numBlocks, 1);
|
|
25
66
|
}
|
|
@@ -109,176 +150,90 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
109
150
|
*/ getRegistryAddress() {
|
|
110
151
|
return Promise.resolve(EthAddress.random());
|
|
111
152
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
*/ getBlockNumber() {
|
|
116
|
-
return Promise.resolve(BlockNumber(this.l2Blocks.length));
|
|
117
|
-
}
|
|
118
|
-
getProvenBlockNumber() {
|
|
119
|
-
return Promise.resolve(BlockNumber(this.provenBlockNumber));
|
|
120
|
-
}
|
|
121
|
-
getCheckpointedL2BlockNumber() {
|
|
122
|
-
return Promise.resolve(BlockNumber(this.checkpointedBlockNumber));
|
|
123
|
-
}
|
|
124
|
-
getFinalizedL2BlockNumber() {
|
|
125
|
-
return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
|
|
126
|
-
}
|
|
127
|
-
getCheckpointedBlock(number) {
|
|
128
|
-
if (number > this.checkpointedBlockNumber) {
|
|
129
|
-
return Promise.resolve(undefined);
|
|
153
|
+
async getBlockNumber(query) {
|
|
154
|
+
if (!query) {
|
|
155
|
+
return BlockNumber(this.l2Blocks.length);
|
|
130
156
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return Promise.resolve(undefined);
|
|
157
|
+
if ('number' in query) {
|
|
158
|
+
return query.number;
|
|
134
159
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
async getCheckpointedBlocks(from, limit) {
|
|
138
|
-
const result = [];
|
|
139
|
-
for(let i = 0; i < limit; i++){
|
|
140
|
-
const blockNum = from + i;
|
|
141
|
-
if (blockNum > this.checkpointedBlockNumber) {
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
|
|
145
|
-
if (block) {
|
|
146
|
-
result.push(block);
|
|
147
|
-
}
|
|
160
|
+
if ('tag' in query) {
|
|
161
|
+
return BlockNumber(this.resolveBlockTag(query.tag));
|
|
148
162
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Gets an l2 block.
|
|
153
|
-
* @param number - The block number to return (inclusive).
|
|
154
|
-
* @returns The requested L2 block.
|
|
155
|
-
*/ getBlock(number) {
|
|
156
|
-
const block = this.l2Blocks[number - 1];
|
|
157
|
-
return Promise.resolve(block);
|
|
163
|
+
const block = await this.getBlock(query);
|
|
164
|
+
return block ? block.header.globalVariables.blockNumber : undefined;
|
|
158
165
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return Promise.resolve(block);
|
|
166
|
+
getCheckpoint(query) {
|
|
167
|
+
const checkpoint = this.resolveCheckpointQuery(query);
|
|
168
|
+
if (!checkpoint) {
|
|
169
|
+
return Promise.resolve(undefined);
|
|
170
|
+
}
|
|
171
|
+
return Promise.resolve(new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), []));
|
|
166
172
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
* @param from - Number of the first block to return (inclusive).
|
|
170
|
-
* @param limit - The maximum number of blocks to return.
|
|
171
|
-
* @returns The requested mocked L2 blocks.
|
|
172
|
-
*/ getBlocks(from, limit) {
|
|
173
|
-
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
|
|
174
|
-
}
|
|
175
|
-
getCheckpoints(from, limit) {
|
|
176
|
-
const checkpoints = this.checkpointList.slice(from - 1, from - 1 + limit);
|
|
173
|
+
getCheckpoints(query) {
|
|
174
|
+
const checkpoints = this.resolveCheckpointsQuery(query);
|
|
177
175
|
return Promise.resolve(checkpoints.map((checkpoint)=>new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), [])));
|
|
178
176
|
}
|
|
179
177
|
getCheckpointByArchive(archive) {
|
|
180
178
|
const checkpoint = this.checkpointList.find((c)=>c.archive.root.equals(archive));
|
|
181
179
|
return Promise.resolve(checkpoint);
|
|
182
180
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (hash.equals(blockHash)) {
|
|
187
|
-
return this.toCheckpointedBlock(block);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
getCheckpointedBlockByArchive(archive) {
|
|
193
|
-
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
194
|
-
if (!block) {
|
|
181
|
+
getCheckpointData(query) {
|
|
182
|
+
const checkpoint = this.resolveCheckpointQuery(query);
|
|
183
|
+
if (!checkpoint) {
|
|
195
184
|
return Promise.resolve(undefined);
|
|
196
185
|
}
|
|
197
|
-
return Promise.resolve(this.
|
|
186
|
+
return Promise.resolve(this.checkpointToData(checkpoint));
|
|
198
187
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if (hash.equals(blockHash)) {
|
|
203
|
-
return block;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
return undefined;
|
|
188
|
+
getCheckpointsData(query) {
|
|
189
|
+
const checkpoints = this.resolveCheckpointsQuery(query);
|
|
190
|
+
return Promise.resolve(checkpoints.map((c)=>this.checkpointToData(c)));
|
|
207
191
|
}
|
|
208
|
-
|
|
209
|
-
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
210
|
-
return Promise.resolve(block);
|
|
211
|
-
}
|
|
212
|
-
async getBlockHeaderByHash(blockHash) {
|
|
213
|
-
for (const block of this.l2Blocks){
|
|
214
|
-
const hash = await block.hash();
|
|
215
|
-
if (hash.equals(blockHash)) {
|
|
216
|
-
return block.header;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
return undefined;
|
|
220
|
-
}
|
|
221
|
-
getBlockHeaderByArchive(archive) {
|
|
222
|
-
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
223
|
-
return Promise.resolve(block?.header);
|
|
224
|
-
}
|
|
225
|
-
async getBlockData(number) {
|
|
226
|
-
const block = this.l2Blocks[number - 1];
|
|
227
|
-
if (!block) {
|
|
228
|
-
return undefined;
|
|
229
|
-
}
|
|
192
|
+
checkpointToData(checkpoint) {
|
|
230
193
|
return {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
194
|
+
checkpointNumber: checkpoint.number,
|
|
195
|
+
header: checkpoint.header,
|
|
196
|
+
archive: checkpoint.archive,
|
|
197
|
+
checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
|
|
198
|
+
startBlock: checkpoint.blocks[0].number,
|
|
199
|
+
blockCount: checkpoint.blocks.length,
|
|
200
|
+
feeAssetPriceModifier: checkpoint.feeAssetPriceModifier,
|
|
201
|
+
attestations: [],
|
|
202
|
+
l1: this.mockL1DataForCheckpoint(checkpoint)
|
|
236
203
|
};
|
|
237
204
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
205
|
+
resolveCheckpointQuery(query) {
|
|
206
|
+
if ('number' in query) {
|
|
207
|
+
return this.checkpointList[query.number - 1];
|
|
208
|
+
}
|
|
209
|
+
if ('slot' in query) {
|
|
210
|
+
return this.checkpointList.find((c)=>c.header.slotNumber === query.slot);
|
|
211
|
+
}
|
|
212
|
+
switch(query.tag){
|
|
213
|
+
case 'checkpointed':
|
|
214
|
+
return this.checkpointList[this.checkpointList.length - 1];
|
|
215
|
+
case 'proven':
|
|
216
|
+
{
|
|
217
|
+
const provenCheckpoint = this.checkpointList.filter((c)=>c.blocks.some((b)=>b.number <= this.provenBlockNumber));
|
|
218
|
+
return provenCheckpoint.at(-1);
|
|
219
|
+
}
|
|
220
|
+
case 'finalized':
|
|
221
|
+
{
|
|
222
|
+
const finalizedCheckpoint = this.checkpointList.filter((c)=>c.blocks.some((b)=>b.number <= this.finalizedBlockNumber));
|
|
223
|
+
return finalizedCheckpoint.at(-1);
|
|
224
|
+
}
|
|
242
225
|
}
|
|
243
|
-
return {
|
|
244
|
-
header: block.header,
|
|
245
|
-
archive: block.archive,
|
|
246
|
-
blockHash: await block.hash(),
|
|
247
|
-
checkpointNumber: block.checkpointNumber,
|
|
248
|
-
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
getBlockHeader(number) {
|
|
252
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
253
|
-
}
|
|
254
|
-
getCheckpointsForEpoch(epochNumber) {
|
|
255
|
-
return Promise.resolve(this.getCheckpointsInEpoch(epochNumber));
|
|
256
|
-
}
|
|
257
|
-
getCheckpointsDataForEpoch(epochNumber) {
|
|
258
|
-
const checkpoints = this.getCheckpointsInEpoch(epochNumber);
|
|
259
|
-
return Promise.resolve(checkpoints.map((checkpoint)=>({
|
|
260
|
-
checkpointNumber: checkpoint.number,
|
|
261
|
-
header: checkpoint.header,
|
|
262
|
-
archive: checkpoint.archive,
|
|
263
|
-
checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
|
|
264
|
-
startBlock: checkpoint.blocks[0].number,
|
|
265
|
-
blockCount: checkpoint.blocks.length,
|
|
266
|
-
attestations: [],
|
|
267
|
-
l1: this.mockL1DataForCheckpoint(checkpoint)
|
|
268
|
-
})));
|
|
269
226
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
227
|
+
resolveCheckpointsQuery(query) {
|
|
228
|
+
if ('from' in query) {
|
|
229
|
+
return this.checkpointList.slice(query.from - 1, query.from - 1 + query.limit);
|
|
230
|
+
}
|
|
231
|
+
return this.getCheckpointsInEpoch(query.epoch);
|
|
273
232
|
}
|
|
274
233
|
getBlocksForSlot(slotNumber) {
|
|
275
234
|
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
276
235
|
return Promise.resolve(blocks);
|
|
277
236
|
}
|
|
278
|
-
async getCheckpointedBlockHeadersForEpoch(epochNumber) {
|
|
279
|
-
const checkpointedBlocks = await this.getCheckpointedBlocksForEpoch(epochNumber);
|
|
280
|
-
return checkpointedBlocks.map((b)=>b.block.header);
|
|
281
|
-
}
|
|
282
237
|
/**
|
|
283
238
|
* Gets a tx effect.
|
|
284
239
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
@@ -296,28 +251,18 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
296
251
|
data: txEffect,
|
|
297
252
|
l2BlockNumber: block.number,
|
|
298
253
|
l2BlockHash: await block.hash(),
|
|
299
|
-
txIndexInBlock: block.body.txEffects.
|
|
254
|
+
txIndexInBlock: block.body.txEffects.findIndex((t)=>t.txHash.equals(txHash)),
|
|
255
|
+
slotNumber: block.header.globalVariables.slotNumber
|
|
300
256
|
};
|
|
301
257
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
* @returns The requested tx receipt (or undefined if not found).
|
|
306
|
-
*/ async getSettledTxReceipt(txHash) {
|
|
307
|
-
for (const block of this.l2Blocks){
|
|
308
|
-
for (const txEffect of block.body.txEffects){
|
|
309
|
-
if (txEffect.txHash.equals(txHash)) {
|
|
310
|
-
// In mock, assume all txs are checkpointed with successful execution
|
|
311
|
-
return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(), await block.hash(), block.number, getEpochAtSlot(block.slot, EmptyL1RollupConstants));
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
return undefined;
|
|
258
|
+
getL2ToL1MembershipWitness() {
|
|
259
|
+
// Mock does not back the L2-to-L1 message witness flow.
|
|
260
|
+
return Promise.resolve(undefined);
|
|
316
261
|
}
|
|
317
262
|
async getL2Tips() {
|
|
318
263
|
const [latest, proven, finalized, checkpointed] = [
|
|
319
264
|
await this.getBlockNumber(),
|
|
320
|
-
|
|
265
|
+
this.provenBlockNumber,
|
|
321
266
|
this.finalizedBlockNumber,
|
|
322
267
|
this.checkpointedBlockNumber
|
|
323
268
|
];
|
|
@@ -325,29 +270,45 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
325
270
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
326
271
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
327
272
|
const checkpointedBlock = this.l2Blocks[checkpointed - 1];
|
|
273
|
+
// For genesis tips (block number 0) report the dynamic initial header hash so consumers
|
|
274
|
+
// running L2BlockStream against this mock agree at block 0 with their local tip store.
|
|
275
|
+
const genesisHash = (await this.initialHeader.hash()).toString();
|
|
276
|
+
const tipHash = async (block, number)=>{
|
|
277
|
+
if (block) {
|
|
278
|
+
return (await block.hash()).toString();
|
|
279
|
+
}
|
|
280
|
+
return number === 0 ? genesisHash : '';
|
|
281
|
+
};
|
|
328
282
|
const latestBlockId = {
|
|
329
283
|
number: BlockNumber(latest),
|
|
330
|
-
hash:
|
|
284
|
+
hash: await tipHash(latestBlock, latest)
|
|
331
285
|
};
|
|
332
286
|
const provenBlockId = {
|
|
333
287
|
number: BlockNumber(proven),
|
|
334
|
-
hash:
|
|
288
|
+
hash: await tipHash(provenBlock, proven)
|
|
335
289
|
};
|
|
336
290
|
const finalizedBlockId = {
|
|
337
291
|
number: BlockNumber(finalized),
|
|
338
|
-
hash:
|
|
292
|
+
hash: await tipHash(finalizedBlock, finalized)
|
|
339
293
|
};
|
|
340
294
|
const checkpointedBlockId = {
|
|
341
295
|
number: BlockNumber(checkpointed),
|
|
342
|
-
hash:
|
|
296
|
+
hash: await tipHash(checkpointedBlock, checkpointed)
|
|
343
297
|
};
|
|
344
|
-
const makeTipId = (blockId)=>
|
|
298
|
+
const makeTipId = (blockId)=>{
|
|
299
|
+
const checkpointNumber = this.findCheckpointNumberForBlock(blockId.number) ?? CheckpointNumber(0);
|
|
300
|
+
// Match production semantics: checkpoint 0 is fully synthetic (no real checkpoint header
|
|
301
|
+
// exists at 0), so its hash stays at the protocol constant `GENESIS_CHECKPOINT_HEADER_HASH`
|
|
302
|
+
// even though the block-0 hash is dynamic. See L2TipsCache for the production path.
|
|
303
|
+
const hash = checkpointNumber === 0 ? GENESIS_CHECKPOINT_HEADER_HASH.toString() : blockId.hash;
|
|
304
|
+
return {
|
|
345
305
|
block: blockId,
|
|
346
306
|
checkpoint: {
|
|
347
|
-
number:
|
|
348
|
-
hash
|
|
307
|
+
number: checkpointNumber,
|
|
308
|
+
hash
|
|
349
309
|
}
|
|
350
|
-
}
|
|
310
|
+
};
|
|
311
|
+
};
|
|
351
312
|
return {
|
|
352
313
|
proposed: latestBlockId,
|
|
353
314
|
checkpointed: makeTipId(checkpointedBlockId),
|
|
@@ -367,9 +328,12 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
367
328
|
getL1Constants() {
|
|
368
329
|
return Promise.resolve(EmptyL1RollupConstants);
|
|
369
330
|
}
|
|
331
|
+
isPruneDueAtSlot(_slot) {
|
|
332
|
+
return Promise.resolve(false);
|
|
333
|
+
}
|
|
370
334
|
getGenesisValues() {
|
|
371
335
|
return Promise.resolve({
|
|
372
|
-
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
336
|
+
genesisArchiveRoot: this.genesisArchiveRoot ?? new Fr(GENESIS_ARCHIVE_ROOT)
|
|
373
337
|
});
|
|
374
338
|
}
|
|
375
339
|
getL1Timestamp() {
|
|
@@ -410,6 +374,88 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
410
374
|
syncImmediate() {
|
|
411
375
|
return Promise.resolve();
|
|
412
376
|
}
|
|
377
|
+
async getBlock(query) {
|
|
378
|
+
if ('number' in query) {
|
|
379
|
+
if (query.number === 0) {
|
|
380
|
+
return this.getGenesisBlock();
|
|
381
|
+
}
|
|
382
|
+
return this.l2Blocks[query.number - 1];
|
|
383
|
+
}
|
|
384
|
+
if ('hash' in query) {
|
|
385
|
+
const genesis = this.getGenesisBlock();
|
|
386
|
+
if ((await genesis.hash()).equals(query.hash)) {
|
|
387
|
+
return genesis;
|
|
388
|
+
}
|
|
389
|
+
for (const b of this.l2Blocks){
|
|
390
|
+
const hash = await b.hash();
|
|
391
|
+
if (hash.equals(query.hash)) {
|
|
392
|
+
return b;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return undefined;
|
|
396
|
+
}
|
|
397
|
+
if ('archive' in query) {
|
|
398
|
+
const genesis = this.getGenesisBlock();
|
|
399
|
+
if (genesis.archive.root.equals(query.archive)) {
|
|
400
|
+
return genesis;
|
|
401
|
+
}
|
|
402
|
+
return this.l2Blocks.find((b)=>b.archive.root.equals(query.archive));
|
|
403
|
+
}
|
|
404
|
+
const number = this.resolveBlockTag(query.tag);
|
|
405
|
+
if (number === 0) {
|
|
406
|
+
return this.getGenesisBlock();
|
|
407
|
+
}
|
|
408
|
+
return this.l2Blocks[number - 1];
|
|
409
|
+
}
|
|
410
|
+
resolveBlockTag(tag) {
|
|
411
|
+
switch(tag){
|
|
412
|
+
case 'latest':
|
|
413
|
+
case 'proposed':
|
|
414
|
+
return this.l2Blocks.length;
|
|
415
|
+
case 'checkpointed':
|
|
416
|
+
return this.checkpointedBlockNumber;
|
|
417
|
+
case 'proven':
|
|
418
|
+
return this.provenBlockNumber;
|
|
419
|
+
case 'finalized':
|
|
420
|
+
return this.finalizedBlockNumber;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
getBlocks(query) {
|
|
424
|
+
let blocks;
|
|
425
|
+
if ('from' in query) {
|
|
426
|
+
blocks = this.l2Blocks.slice(query.from - 1, query.from - 1 + query.limit);
|
|
427
|
+
} else {
|
|
428
|
+
const epochCheckpoints = this.getCheckpointsInEpoch(query.epoch);
|
|
429
|
+
blocks = epochCheckpoints.flatMap((c)=>c.blocks);
|
|
430
|
+
}
|
|
431
|
+
if (query.onlyCheckpointed) {
|
|
432
|
+
blocks = blocks.filter((b)=>b.header.globalVariables.blockNumber <= this.checkpointedBlockNumber);
|
|
433
|
+
}
|
|
434
|
+
return Promise.resolve(blocks);
|
|
435
|
+
}
|
|
436
|
+
async getBlockData(query) {
|
|
437
|
+
const block = await this.getBlock(query);
|
|
438
|
+
if (!block) {
|
|
439
|
+
return undefined;
|
|
440
|
+
}
|
|
441
|
+
return {
|
|
442
|
+
header: block.header,
|
|
443
|
+
archive: block.archive,
|
|
444
|
+
blockHash: await block.hash(),
|
|
445
|
+
checkpointNumber: block.checkpointNumber,
|
|
446
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
async getBlocksData(query) {
|
|
450
|
+
const blocks = await this.getBlocks(query);
|
|
451
|
+
return Promise.all(blocks.map(async (block)=>({
|
|
452
|
+
header: block.header,
|
|
453
|
+
archive: block.archive,
|
|
454
|
+
blockHash: await block.hash(),
|
|
455
|
+
checkpointNumber: block.checkpointNumber,
|
|
456
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
457
|
+
})));
|
|
458
|
+
}
|
|
413
459
|
isPendingChainInvalid() {
|
|
414
460
|
return Promise.resolve(false);
|
|
415
461
|
}
|
|
@@ -418,6 +464,9 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
418
464
|
valid: true
|
|
419
465
|
});
|
|
420
466
|
}
|
|
467
|
+
getProposedCheckpointData(_query) {
|
|
468
|
+
return Promise.resolve(undefined);
|
|
469
|
+
}
|
|
421
470
|
/** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
|
|
422
471
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
423
472
|
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
@@ -428,11 +477,6 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
428
477
|
/** Creates a mock L1PublishedData for a checkpoint. */ mockL1DataForCheckpoint(checkpoint) {
|
|
429
478
|
return new L1PublishedData(BigInt(checkpoint.number), BigInt(checkpoint.number), Buffer32.random().toString());
|
|
430
479
|
}
|
|
431
|
-
/** Creates a CheckpointedL2Block from a block using stored checkpoint info. */ toCheckpointedBlock(block) {
|
|
432
|
-
const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === block.number));
|
|
433
|
-
const checkpointNumber = checkpoint?.number ?? block.checkpointNumber;
|
|
434
|
-
return new CheckpointedL2Block(checkpointNumber, block, new L1PublishedData(BigInt(block.number), BigInt(block.number), `0x${block.number.toString(16).padStart(64, '0')}`), []);
|
|
435
|
-
}
|
|
436
480
|
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */ findCheckpointNumberForBlock(blockNumber) {
|
|
437
481
|
const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === blockNumber));
|
|
438
482
|
return checkpoint?.number;
|
|
@@ -85,4 +85,4 @@ export interface MockCheckpointWithLogsOptions {
|
|
|
85
85
|
}
|
|
86
86
|
/** Creates a checkpoint with specified logs on each tx effect. */
|
|
87
87
|
export declare function makeCheckpointWithLogs(blockNumber: number, options?: MockCheckpointWithLogsOptions): Promise<PublishedCheckpoint>;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBd0IsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUF5QixjQUFjLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFbkYsd0JBQWdCLGdCQUFnQixDQUM5QixtQkFBbUIsV0FBZ0IsRUFDbkMsU0FBUyxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0sR0FDcEMsWUFBWSxDQWdCZDtBQUVELHdCQUFnQixpQkFBaUIsQ0FDL0IsVUFBVSxFQUFFLE1BQU0sRUFDbEIsSUFBSSxHQUFFO0lBQ0osV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDM0MscUJBQXFCLENBQUMsRUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,13 +147,13 @@ export function makeInboxMessages(totalCount, opts = {}) {
|
|
|
147
147
|
/** Creates a deterministic Tag for public log testing. */ export function makePublicLogTag(blockNumber, txIndex, logIndex) {
|
|
148
148
|
return new Tag(blockNumber === 1 && txIndex === 0 && logIndex === 0 ? Fr.ZERO : new Fr((blockNumber * 100 + txIndex * 10 + logIndex) * 123));
|
|
149
149
|
}
|
|
150
|
-
/** Creates a PublicLog with fields derived from the tag. */ export function makePublicLog(tag, contractAddress = AztecAddress.
|
|
150
|
+
/** Creates a PublicLog with fields derived from the tag. */ export function makePublicLog(tag, contractAddress = AztecAddress.fromNumberUnsafe(543254)) {
|
|
151
151
|
return PublicLog.from({
|
|
152
152
|
contractAddress,
|
|
153
153
|
fields: new Array(10).fill(null).map((_, i)=>!i ? tag.value : new Fr(tag.value.toBigInt() + BigInt(i)))
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
|
-
/** Creates multiple public logs for a transaction. */ export function makePublicLogs(blockNumber, txIndex, numLogsPerTx, contractAddress = AztecAddress.
|
|
156
|
+
/** Creates multiple public logs for a transaction. */ export function makePublicLogs(blockNumber, txIndex, numLogsPerTx, contractAddress = AztecAddress.fromNumberUnsafe(543254)) {
|
|
157
157
|
return times(numLogsPerTx, (logIndex)=>{
|
|
158
158
|
const tag = makePublicLogTag(blockNumber, txIndex, logIndex);
|
|
159
159
|
return makePublicLog(tag, contractAddress);
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
4
|
+
import type { BlockHash } from '@aztec/stdlib/block';
|
|
3
5
|
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
6
|
+
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
4
7
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
8
|
import { Archiver } from '../archiver.js';
|
|
6
9
|
import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
7
|
-
import type {
|
|
10
|
+
import type { ArchiverDataStores } from '../store/data_stores.js';
|
|
11
|
+
import { L2TipsCache } from '../store/l2_tips_cache.js';
|
|
12
|
+
type NoopL1ArchiverConfigOverrides = Partial<{
|
|
13
|
+
skipOrphanProposedBlockPruning: boolean;
|
|
14
|
+
}>;
|
|
8
15
|
/**
|
|
9
16
|
* Archiver with mocked L1 connectivity for testing.
|
|
10
17
|
* Uses mock L1 clients and a noop synchronizer, enabling tests that
|
|
11
18
|
* don't require real Ethereum connectivity.
|
|
12
19
|
*/
|
|
13
20
|
export declare class NoopL1Archiver extends Archiver {
|
|
14
|
-
constructor(
|
|
21
|
+
constructor(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
|
|
15
22
|
genesisArchiveRoot: Fr;
|
|
16
|
-
}, instrumentation: ArchiverInstrumentation);
|
|
23
|
+
}, instrumentation: ArchiverInstrumentation, initialHeader: BlockHeader, initialBlockHash: BlockHash, l2TipsCache: L2TipsCache, dateProvider?: DateProvider, configOverrides?: NoopL1ArchiverConfigOverrides);
|
|
17
24
|
/** Override start to skip L1 validation checks. */
|
|
18
25
|
start(_blockUntilSynced?: boolean): Promise<void>;
|
|
19
26
|
/** Always reports as fully synced since there is no real L1 to sync from. */
|
|
20
27
|
getSyncedL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
21
28
|
}
|
|
22
29
|
/** Creates an archiver with mocked L1 connectivity for testing. */
|
|
23
|
-
export declare function createNoopL1Archiver(
|
|
30
|
+
export declare function createNoopL1Archiver(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
|
|
24
31
|
genesisArchiveRoot: Fr;
|
|
25
|
-
}, telemetry?:
|
|
26
|
-
|
|
32
|
+
}, telemetry: TelemetryClient | undefined, initialHeader: BlockHeader, dateProvider?: DateProvider, configOverrides?: NoopL1ArchiverConfigOverrides): Promise<NoopL1Archiver>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBbUIsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFLaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXhELEtBQUssNkJBQTZCLEdBQUcsT0FBTyxDQUFDO0lBQzNDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQztDQUN6QyxDQUFDLENBQUM7QUF5Qkg7Ozs7R0FJRztBQUNILHFCQUFhLGNBQWUsU0FBUSxRQUFRO0lBQzFDLFlBQ0UsVUFBVSxFQUFFLGtCQUFrQixFQUM5QixXQUFXLEVBQUUsaUJBQWlCLEdBQUc7UUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUE7S0FBRSxFQUMzRCxlQUFlLEVBQUUsdUJBQXVCLEVBQ3hDLGFBQWEsRUFBRSxXQUFXLEVBQzFCLGdCQUFnQixFQUFFLFNBQVMsRUFDM0IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsWUFBWSxHQUFFLFlBQWlDLEVBQy9DLGVBQWUsR0FBRSw2QkFBa0MsRUFvRHBEO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsNkJBQXdDLEVBQ2pELGFBQWEsRUFBRSxXQUFXLEVBQzFCLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFDM0IsZUFBZSxDQUFDLEVBQUUsNkJBQTZCLEdBQzlDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FrQnpCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,yBAAyB,CAAC;AAKhG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,KAAK,6BAA6B,GAAG,OAAO,CAAC;IAC3C,8BAA8B,EAAE,OAAO,CAAC;CACzC,CAAC,CAAC;AAyBH;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EACxC,aAAa,EAAE,WAAW,EAC1B,gBAAgB,EAAE,SAAS,EAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,GAAE,YAAiC,EAC/C,eAAe,GAAE,6BAAkC,EAoDpD;IAED,mDAAmD;IACnC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;IAED,6EAA6E;IAC7D,qBAAqB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAEvE;CACF;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,6BAAwC,EACjD,aAAa,EAAE,WAAW,EAC1B,YAAY,CAAC,EAAE,YAAY,EAC3B,eAAe,CAAC,EAAE,6BAA6B,GAC9C,OAAO,CAAC,cAAc,CAAC,CAkBzB"}
|