@aztec/archiver 0.0.1-commit.2ed92850 → 0.0.1-commit.358457c
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/dest/archiver.d.ts +7 -3
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +24 -93
- package/dest/factory.d.ts +3 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +11 -10
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/l1/bin/retrieve-calldata.js +36 -33
- package/dest/l1/calldata_retriever.d.ts +73 -50
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +190 -259
- package/dest/l1/data_retrieval.d.ts +4 -7
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +10 -14
- package/dest/l1/spire_proposer.d.ts +5 -5
- package/dest/l1/spire_proposer.d.ts.map +1 -1
- package/dest/l1/spire_proposer.js +9 -17
- package/dest/l1/validate_trace.d.ts +6 -3
- package/dest/l1/validate_trace.d.ts.map +1 -1
- package/dest/l1/validate_trace.js +13 -9
- package/dest/modules/data_source_base.d.ts +11 -6
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +28 -72
- package/dest/modules/data_store_updater.d.ts +9 -2
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +40 -19
- package/dest/modules/instrumentation.d.ts +15 -2
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +36 -12
- package/dest/modules/l1_synchronizer.d.ts +4 -8
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +16 -12
- package/dest/store/block_store.d.ts +21 -17
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +71 -19
- package/dest/store/contract_class_store.d.ts +1 -1
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +11 -7
- package/dest/store/kv_archiver_store.d.ts +21 -7
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +20 -3
- package/dest/store/l2_tips_cache.d.ts +19 -0
- package/dest/store/l2_tips_cache.d.ts.map +1 -0
- package/dest/store/l2_tips_cache.js +89 -0
- package/dest/store/log_store.d.ts +1 -1
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +57 -37
- package/dest/test/fake_l1_state.d.ts +6 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +56 -18
- package/dest/test/index.js +3 -1
- package/dest/test/mock_archiver.d.ts +1 -1
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +3 -2
- package/dest/test/mock_l2_block_source.d.ts +22 -7
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +127 -84
- package/dest/test/mock_structs.d.ts +3 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +7 -5
- package/dest/test/noop_l1_archiver.d.ts +23 -0
- package/dest/test/noop_l1_archiver.d.ts.map +1 -0
- package/dest/test/noop_l1_archiver.js +68 -0
- package/package.json +14 -13
- package/src/archiver.ts +32 -112
- package/src/factory.ts +26 -12
- package/src/index.ts +1 -0
- package/src/l1/README.md +25 -68
- package/src/l1/bin/retrieve-calldata.ts +46 -39
- package/src/l1/calldata_retriever.ts +249 -379
- package/src/l1/data_retrieval.ts +7 -17
- package/src/l1/spire_proposer.ts +7 -15
- package/src/l1/validate_trace.ts +24 -6
- package/src/modules/data_source_base.ts +56 -95
- package/src/modules/data_store_updater.ts +43 -18
- package/src/modules/instrumentation.ts +44 -12
- package/src/modules/l1_synchronizer.ts +17 -15
- package/src/store/block_store.ts +90 -41
- package/src/store/contract_class_store.ts +11 -7
- package/src/store/kv_archiver_store.ts +40 -8
- package/src/store/l2_tips_cache.ts +89 -0
- package/src/store/log_store.ts +98 -36
- package/src/test/fake_l1_state.ts +75 -17
- package/src/test/index.ts +3 -0
- package/src/test/mock_archiver.ts +3 -2
- package/src/test/mock_l2_block_source.ts +164 -84
- package/src/test/mock_structs.ts +22 -6
- package/src/test/noop_l1_archiver.ts +109 -0
|
@@ -5,27 +5,39 @@ 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 { CheckpointedL2Block
|
|
8
|
+
import { CheckpointedL2Block } from '@aztec/stdlib/block';
|
|
9
9
|
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
10
10
|
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
11
|
+
import { computeCheckpointOutHash } from '@aztec/stdlib/messaging';
|
|
12
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
11
13
|
import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
12
14
|
/**
|
|
13
15
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
14
16
|
*/ export class MockL2BlockSource {
|
|
15
17
|
l2Blocks = [];
|
|
18
|
+
checkpointList = [];
|
|
16
19
|
provenBlockNumber = 0;
|
|
17
20
|
finalizedBlockNumber = 0;
|
|
18
21
|
checkpointedBlockNumber = 0;
|
|
19
22
|
log = createLogger('archiver:mock_l2_block_source');
|
|
20
|
-
async createBlocks(numBlocks) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
/** Creates blocks grouped into single-block checkpoints. */ async createBlocks(numBlocks) {
|
|
24
|
+
await this.createCheckpoints(numBlocks, 1);
|
|
25
|
+
}
|
|
26
|
+
/** Creates checkpoints, each containing `blocksPerCheckpoint` blocks. */ async createCheckpoints(numCheckpoints, blocksPerCheckpoint = 1) {
|
|
27
|
+
for(let c = 0; c < numCheckpoints; c++){
|
|
28
|
+
const checkpointNum = CheckpointNumber(this.checkpointList.length + 1);
|
|
29
|
+
const startBlockNum = this.l2Blocks.length + 1;
|
|
30
|
+
const slotNumber = SlotNumber(Number(checkpointNum));
|
|
31
|
+
const checkpoint = await Checkpoint.random(checkpointNum, {
|
|
32
|
+
numBlocks: blocksPerCheckpoint,
|
|
33
|
+
startBlockNumber: startBlockNum,
|
|
34
|
+
slotNumber,
|
|
35
|
+
checkpointNumber: checkpointNum
|
|
25
36
|
});
|
|
26
|
-
this.
|
|
37
|
+
this.checkpointList.push(checkpoint);
|
|
38
|
+
this.l2Blocks.push(...checkpoint.blocks);
|
|
27
39
|
}
|
|
28
|
-
this.log.verbose(`Created ${
|
|
40
|
+
this.log.verbose(`Created ${numCheckpoints} checkpoints with ${blocksPerCheckpoint} blocks each in the mock L2 block source`);
|
|
29
41
|
}
|
|
30
42
|
addProposedBlocks(blocks) {
|
|
31
43
|
this.l2Blocks.push(...blocks);
|
|
@@ -33,6 +45,16 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
33
45
|
}
|
|
34
46
|
removeBlocks(numBlocks) {
|
|
35
47
|
this.l2Blocks = this.l2Blocks.slice(0, -numBlocks);
|
|
48
|
+
const maxBlockNum = this.l2Blocks.length;
|
|
49
|
+
// Remove any checkpoint whose last block is beyond the remaining blocks.
|
|
50
|
+
this.checkpointList = this.checkpointList.filter((c)=>{
|
|
51
|
+
const lastBlockNum = c.blocks[0].number + c.blocks.length - 1;
|
|
52
|
+
return lastBlockNum <= maxBlockNum;
|
|
53
|
+
});
|
|
54
|
+
// Keep tip numbers consistent with remaining blocks.
|
|
55
|
+
this.checkpointedBlockNumber = Math.min(this.checkpointedBlockNumber, maxBlockNum);
|
|
56
|
+
this.provenBlockNumber = Math.min(this.provenBlockNumber, maxBlockNum);
|
|
57
|
+
this.finalizedBlockNumber = Math.min(this.finalizedBlockNumber, maxBlockNum);
|
|
36
58
|
this.log.verbose(`Removed ${numBlocks} blocks from the mock L2 block source`);
|
|
37
59
|
}
|
|
38
60
|
setProvenBlockNumber(provenBlockNumber) {
|
|
@@ -45,7 +67,32 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
45
67
|
this.finalizedBlockNumber = finalizedBlockNumber;
|
|
46
68
|
}
|
|
47
69
|
setCheckpointedBlockNumber(checkpointedBlockNumber) {
|
|
70
|
+
const prevCheckpointed = this.checkpointedBlockNumber;
|
|
48
71
|
this.checkpointedBlockNumber = checkpointedBlockNumber;
|
|
72
|
+
// Auto-create single-block checkpoints for newly checkpointed blocks that don't have one yet.
|
|
73
|
+
// This handles blocks added via addProposedBlocks that are now being marked as checkpointed.
|
|
74
|
+
const newCheckpoints = [];
|
|
75
|
+
for(let blockNum = prevCheckpointed + 1; blockNum <= checkpointedBlockNumber; blockNum++){
|
|
76
|
+
const block = this.l2Blocks[blockNum - 1];
|
|
77
|
+
if (!block) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (this.checkpointList.some((c)=>c.blocks.some((b)=>b.number === block.number))) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const checkpointNum = CheckpointNumber(this.checkpointList.length + newCheckpoints.length + 1);
|
|
84
|
+
const checkpoint = new Checkpoint(block.archive, CheckpointHeader.random({
|
|
85
|
+
slotNumber: block.header.globalVariables.slotNumber
|
|
86
|
+
}), [
|
|
87
|
+
block
|
|
88
|
+
], checkpointNum);
|
|
89
|
+
newCheckpoints.push(checkpoint);
|
|
90
|
+
}
|
|
91
|
+
// Insert new checkpoints in order by number.
|
|
92
|
+
if (newCheckpoints.length > 0) {
|
|
93
|
+
this.checkpointList.push(...newCheckpoints);
|
|
94
|
+
this.checkpointList.sort((a, b)=>a.number - b.number);
|
|
95
|
+
}
|
|
49
96
|
}
|
|
50
97
|
/**
|
|
51
98
|
* Method to fetch the rollup contract address at the base-layer.
|
|
@@ -82,8 +129,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
82
129
|
if (!block) {
|
|
83
130
|
return Promise.resolve(undefined);
|
|
84
131
|
}
|
|
85
|
-
|
|
86
|
-
return Promise.resolve(checkpointedBlock);
|
|
132
|
+
return Promise.resolve(this.toCheckpointedBlock(block));
|
|
87
133
|
}
|
|
88
134
|
async getCheckpointedBlocks(from, limit) {
|
|
89
135
|
const result = [];
|
|
@@ -124,44 +170,18 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
124
170
|
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
|
|
125
171
|
}
|
|
126
172
|
getCheckpoints(from, limit) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return Promise.all(blocks.map(async (block)=>{
|
|
130
|
-
// Create a checkpoint from the block - manually construct since L2Block doesn't have toCheckpoint()
|
|
131
|
-
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
132
|
-
numBlocks: 1
|
|
133
|
-
});
|
|
134
|
-
checkpoint.blocks = [
|
|
135
|
-
block
|
|
136
|
-
];
|
|
137
|
-
return new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()), []);
|
|
138
|
-
}));
|
|
173
|
+
const checkpoints = this.checkpointList.slice(from - 1, from - 1 + limit);
|
|
174
|
+
return Promise.resolve(checkpoints.map((checkpoint)=>new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), [])));
|
|
139
175
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (!block) {
|
|
144
|
-
return undefined;
|
|
145
|
-
}
|
|
146
|
-
// Create a checkpoint from the block - manually construct since L2Block doesn't have toCheckpoint()
|
|
147
|
-
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
148
|
-
numBlocks: 1
|
|
149
|
-
});
|
|
150
|
-
checkpoint.blocks = [
|
|
151
|
-
block
|
|
152
|
-
];
|
|
153
|
-
return checkpoint;
|
|
176
|
+
getCheckpointByArchive(archive) {
|
|
177
|
+
const checkpoint = this.checkpointList.find((c)=>c.archive.root.equals(archive));
|
|
178
|
+
return Promise.resolve(checkpoint);
|
|
154
179
|
}
|
|
155
180
|
async getCheckpointedBlockByHash(blockHash) {
|
|
156
181
|
for (const block of this.l2Blocks){
|
|
157
182
|
const hash = await block.hash();
|
|
158
183
|
if (hash.equals(blockHash)) {
|
|
159
|
-
return
|
|
160
|
-
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
161
|
-
block,
|
|
162
|
-
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
163
|
-
attestations: []
|
|
164
|
-
});
|
|
184
|
+
return this.toCheckpointedBlock(block);
|
|
165
185
|
}
|
|
166
186
|
}
|
|
167
187
|
return undefined;
|
|
@@ -171,12 +191,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
171
191
|
if (!block) {
|
|
172
192
|
return Promise.resolve(undefined);
|
|
173
193
|
}
|
|
174
|
-
return Promise.resolve(
|
|
175
|
-
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
176
|
-
block,
|
|
177
|
-
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
178
|
-
attestations: []
|
|
179
|
-
}));
|
|
194
|
+
return Promise.resolve(this.toCheckpointedBlock(block));
|
|
180
195
|
}
|
|
181
196
|
async getL2BlockByHash(blockHash) {
|
|
182
197
|
for (const block of this.l2Blocks){
|
|
@@ -204,45 +219,54 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
204
219
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
205
220
|
return Promise.resolve(block?.header);
|
|
206
221
|
}
|
|
222
|
+
async getBlockData(number) {
|
|
223
|
+
const block = this.l2Blocks[number - 1];
|
|
224
|
+
if (!block) {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
header: block.header,
|
|
229
|
+
archive: block.archive,
|
|
230
|
+
blockHash: await block.hash(),
|
|
231
|
+
checkpointNumber: block.checkpointNumber,
|
|
232
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async getBlockDataByArchive(archive) {
|
|
236
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
237
|
+
if (!block) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
header: block.header,
|
|
242
|
+
archive: block.archive,
|
|
243
|
+
blockHash: await block.hash(),
|
|
244
|
+
checkpointNumber: block.checkpointNumber,
|
|
245
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
246
|
+
};
|
|
247
|
+
}
|
|
207
248
|
getBlockHeader(number) {
|
|
208
249
|
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
209
250
|
}
|
|
210
251
|
getCheckpointsForEpoch(epochNumber) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
});
|
|
225
|
-
checkpoint.blocks = [
|
|
226
|
-
block
|
|
227
|
-
];
|
|
228
|
-
return checkpoint;
|
|
229
|
-
}));
|
|
252
|
+
return Promise.resolve(this.getCheckpointsInEpoch(epochNumber));
|
|
253
|
+
}
|
|
254
|
+
getCheckpointsDataForEpoch(epochNumber) {
|
|
255
|
+
const checkpoints = this.getCheckpointsInEpoch(epochNumber);
|
|
256
|
+
return Promise.resolve(checkpoints.map((checkpoint)=>({
|
|
257
|
+
checkpointNumber: checkpoint.number,
|
|
258
|
+
header: checkpoint.header,
|
|
259
|
+
archive: checkpoint.archive,
|
|
260
|
+
checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
|
|
261
|
+
startBlock: checkpoint.blocks[0].number,
|
|
262
|
+
blockCount: checkpoint.blocks.length,
|
|
263
|
+
attestations: [],
|
|
264
|
+
l1: this.mockL1DataForCheckpoint(checkpoint)
|
|
265
|
+
})));
|
|
230
266
|
}
|
|
231
267
|
getCheckpointedBlocksForEpoch(epochNumber) {
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
epochDuration
|
|
235
|
-
});
|
|
236
|
-
const blocks = this.l2Blocks.filter((b)=>{
|
|
237
|
-
const slot = b.header.globalVariables.slotNumber;
|
|
238
|
-
return slot >= start && slot <= end;
|
|
239
|
-
});
|
|
240
|
-
return Promise.resolve(blocks.map((block)=>CheckpointedL2Block.fromFields({
|
|
241
|
-
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
242
|
-
block,
|
|
243
|
-
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
244
|
-
attestations: []
|
|
245
|
-
})));
|
|
268
|
+
const checkpoints = this.getCheckpointsInEpoch(epochNumber);
|
|
269
|
+
return Promise.resolve(checkpoints.flatMap((checkpoint)=>checkpoint.blocks.map((block)=>this.toCheckpointedBlock(block))));
|
|
246
270
|
}
|
|
247
271
|
getBlocksForSlot(slotNumber) {
|
|
248
272
|
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
@@ -268,7 +292,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
268
292
|
return {
|
|
269
293
|
data: txEffect,
|
|
270
294
|
l2BlockNumber: block.number,
|
|
271
|
-
l2BlockHash:
|
|
295
|
+
l2BlockHash: await block.hash(),
|
|
272
296
|
txIndexInBlock: block.body.txEffects.indexOf(txEffect)
|
|
273
297
|
};
|
|
274
298
|
}
|
|
@@ -281,7 +305,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
281
305
|
for (const txEffect of block.body.txEffects){
|
|
282
306
|
if (txEffect.txHash.equals(txHash)) {
|
|
283
307
|
// In mock, assume all txs are checkpointed with successful execution
|
|
284
|
-
return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(),
|
|
308
|
+
return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(), await block.hash(), block.number);
|
|
285
309
|
}
|
|
286
310
|
}
|
|
287
311
|
}
|
|
@@ -317,7 +341,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
317
341
|
const makeTipId = (blockId)=>({
|
|
318
342
|
block: blockId,
|
|
319
343
|
checkpoint: {
|
|
320
|
-
number:
|
|
344
|
+
number: this.findCheckpointNumberForBlock(blockId.number) ?? CheckpointNumber(0),
|
|
321
345
|
hash: blockId.hash
|
|
322
346
|
}
|
|
323
347
|
});
|
|
@@ -391,4 +415,23 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
391
415
|
valid: true
|
|
392
416
|
});
|
|
393
417
|
}
|
|
418
|
+
/** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
|
|
419
|
+
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
420
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
421
|
+
epochDuration
|
|
422
|
+
});
|
|
423
|
+
return this.checkpointList.filter((c)=>c.header.slotNumber >= start && c.header.slotNumber <= end);
|
|
424
|
+
}
|
|
425
|
+
/** Creates a mock L1PublishedData for a checkpoint. */ mockL1DataForCheckpoint(checkpoint) {
|
|
426
|
+
return new L1PublishedData(BigInt(checkpoint.number), BigInt(checkpoint.number), Buffer32.random().toString());
|
|
427
|
+
}
|
|
428
|
+
/** Creates a CheckpointedL2Block from a block using stored checkpoint info. */ toCheckpointedBlock(block) {
|
|
429
|
+
const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === block.number));
|
|
430
|
+
const checkpointNumber = checkpoint?.number ?? block.checkpointNumber;
|
|
431
|
+
return new CheckpointedL2Block(checkpointNumber, block, new L1PublishedData(BigInt(block.number), BigInt(block.number), `0x${block.number.toString(16).padStart(64, '0')}`), []);
|
|
432
|
+
}
|
|
433
|
+
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */ findCheckpointNumberForBlock(blockNumber) {
|
|
434
|
+
const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === blockNumber));
|
|
435
|
+
return checkpoint?.number;
|
|
436
|
+
}
|
|
394
437
|
}
|
|
@@ -9,9 +9,10 @@ import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
|
9
9
|
import { StateReference } from '@aztec/stdlib/tx';
|
|
10
10
|
import { type InboxMessage } from '../structs/inbox_message.js';
|
|
11
11
|
export declare function makeInboxMessage(previousRollingHash?: Buffer16, overrides?: Partial<InboxMessage>): InboxMessage;
|
|
12
|
-
export declare function makeInboxMessages(
|
|
12
|
+
export declare function makeInboxMessages(totalCount: number, opts?: {
|
|
13
13
|
initialHash?: Buffer16;
|
|
14
14
|
initialCheckpointNumber?: CheckpointNumber;
|
|
15
|
+
messagesPerCheckpoint?: number;
|
|
15
16
|
overrideFn?: (msg: InboxMessage, index: number) => InboxMessage;
|
|
16
17
|
}): InboxMessage[];
|
|
17
18
|
/** Creates inbox messages distributed across multiple blocks with proper checkpoint numbering. */
|
|
@@ -81,4 +82,4 @@ export interface MockCheckpointWithLogsOptions {
|
|
|
81
82
|
}
|
|
82
83
|
/** Creates a checkpoint with specified logs on each tx effect. */
|
|
83
84
|
export declare function makeCheckpointWithLogs(blockNumber: number, options?: MockCheckpointWithLogsOptions): Promise<PublishedCheckpoint>;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBeUIsY0FBYyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFFbkYsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBRW5GLHdCQUFnQixnQkFBZ0IsQ0FDOUIsbUJBQW1CLFdBQWdCLEVBQ25DLFNBQVMsR0FBRSxPQUFPLENBQUMsWUFBWSxDQUFNLEdBQ3BDLFlBQVksQ0FnQmQ7QUFFRCx3QkFBZ0IsaUJBQWlCLENBQy9CLFVBQVUsRUFBRSxNQUFNLEVBQ2xCLElBQUksR0FBRTtJQUNKLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUN2Qix1QkFBdUIsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzNDLHFCQUFxQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQy9CLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAK3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,cAAc,EAAY,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAEnF,wBAAgB,gBAAgB,CAC9B,mBAAmB,WAAgB,EACnC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,YAAY,CAgBd;AAED,wBAAgB,iBAAiB,CAC/B,
|
|
1
|
+
{"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,16 +32,18 @@ export function makeInboxMessage(previousRollingHash = Buffer16.ZERO, overrides
|
|
|
32
32
|
rollingHash
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
-
export function makeInboxMessages(
|
|
36
|
-
const { initialHash = Buffer16.ZERO, overrideFn = (msg)=>msg, initialCheckpointNumber = 1 } = opts;
|
|
35
|
+
export function makeInboxMessages(totalCount, opts = {}) {
|
|
36
|
+
const { initialHash = Buffer16.ZERO, overrideFn = (msg)=>msg, initialCheckpointNumber = CheckpointNumber(1), messagesPerCheckpoint = 1 } = opts;
|
|
37
37
|
const messages = [];
|
|
38
38
|
let rollingHash = initialHash;
|
|
39
|
-
for(let i = 0; i <
|
|
39
|
+
for(let i = 0; i < totalCount; i++){
|
|
40
|
+
const msgIndex = i % messagesPerCheckpoint;
|
|
41
|
+
const checkpointNumber = CheckpointNumber.fromBigInt(BigInt(initialCheckpointNumber) + BigInt(i) / BigInt(messagesPerCheckpoint));
|
|
40
42
|
const leaf = Fr.random();
|
|
41
|
-
const checkpointNumber = CheckpointNumber(i + initialCheckpointNumber);
|
|
42
43
|
const message = overrideFn(makeInboxMessage(rollingHash, {
|
|
43
44
|
leaf,
|
|
44
|
-
checkpointNumber
|
|
45
|
+
checkpointNumber,
|
|
46
|
+
index: InboxLeaf.smallestIndexForCheckpoint(checkpointNumber) + BigInt(msgIndex)
|
|
45
47
|
}), i);
|
|
46
48
|
rollingHash = message.rollingHash;
|
|
47
49
|
messages.push(message);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
3
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
|
+
import { Archiver } from '../archiver.js';
|
|
5
|
+
import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
6
|
+
import type { KVArchiverDataStore } from '../store/kv_archiver_store.js';
|
|
7
|
+
/**
|
|
8
|
+
* Archiver with mocked L1 connectivity for testing.
|
|
9
|
+
* Uses mock L1 clients and a noop synchronizer, enabling tests that
|
|
10
|
+
* don't require real Ethereum connectivity.
|
|
11
|
+
*/
|
|
12
|
+
export declare class NoopL1Archiver extends Archiver {
|
|
13
|
+
constructor(dataStore: KVArchiverDataStore, l1Constants: L1RollupConstants & {
|
|
14
|
+
genesisArchiveRoot: Fr;
|
|
15
|
+
}, instrumentation: ArchiverInstrumentation);
|
|
16
|
+
/** Override start to skip L1 validation checks. */
|
|
17
|
+
start(_blockUntilSynced?: boolean): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/** Creates an archiver with mocked L1 connectivity for testing. */
|
|
20
|
+
export declare function createNoopL1Archiver(dataStore: KVArchiverDataStore, l1Constants: L1RollupConstants & {
|
|
21
|
+
genesisArchiveRoot: Fr;
|
|
22
|
+
}, telemetry?: TelemetryClient): Promise<NoopL1Archiver>;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFLaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUF5QnpFOzs7O0dBSUc7QUFDSCxxQkFBYSxjQUFlLFNBQVEsUUFBUTtJQUMxQyxZQUNFLFNBQVMsRUFBRSxtQkFBbUIsRUFDOUIsV0FBVyxFQUFFLGlCQUFpQixHQUFHO1FBQUUsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0tBQUUsRUFDM0QsZUFBZSxFQUFFLHVCQUF1QixFQXVDekM7SUFFRCxtREFBbUQ7SUFDbkMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJaEU7Q0FDRjtBQUVELG1FQUFtRTtBQUNuRSx3QkFBc0Isb0JBQW9CLENBQ3hDLFNBQVMsRUFBRSxtQkFBbUIsRUFDOUIsV0FBVyxFQUFFLGlCQUFpQixHQUFHO0lBQUUsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0NBQUUsRUFDM0QsU0FBUyxHQUFFLGVBQXNDLEdBQ2hELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FHekIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,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,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAyBzE;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EAuCzC;IAED,mDAAmD;IACnC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;CACF;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
4
|
+
import { mock } from 'jest-mock-extended';
|
|
5
|
+
import { EventEmitter } from 'node:events';
|
|
6
|
+
import { Archiver } from '../archiver.js';
|
|
7
|
+
import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
8
|
+
/** Noop L1 synchronizer for testing without L1 connectivity. */ class NoopL1Synchronizer {
|
|
9
|
+
tracer;
|
|
10
|
+
constructor(tracer){
|
|
11
|
+
this.tracer = tracer;
|
|
12
|
+
}
|
|
13
|
+
setConfig(_config) {}
|
|
14
|
+
getL1BlockNumber() {
|
|
15
|
+
return 0n;
|
|
16
|
+
}
|
|
17
|
+
getL1Timestamp() {
|
|
18
|
+
return 0n;
|
|
19
|
+
}
|
|
20
|
+
testEthereumNodeSynced() {
|
|
21
|
+
return Promise.resolve();
|
|
22
|
+
}
|
|
23
|
+
syncFromL1(_initialSyncComplete) {
|
|
24
|
+
return Promise.resolve();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Archiver with mocked L1 connectivity for testing.
|
|
29
|
+
* Uses mock L1 clients and a noop synchronizer, enabling tests that
|
|
30
|
+
* don't require real Ethereum connectivity.
|
|
31
|
+
*/ export class NoopL1Archiver extends Archiver {
|
|
32
|
+
constructor(dataStore, l1Constants, instrumentation){
|
|
33
|
+
// Create mocks for L1 clients
|
|
34
|
+
const publicClient = mock();
|
|
35
|
+
const debugClient = mock();
|
|
36
|
+
const rollup = mock();
|
|
37
|
+
const blobClient = mock();
|
|
38
|
+
// Mock methods called during start()
|
|
39
|
+
blobClient.testSources.mockResolvedValue();
|
|
40
|
+
publicClient.getBlockNumber.mockResolvedValue(1n);
|
|
41
|
+
const events = new EventEmitter();
|
|
42
|
+
const synchronizer = new NoopL1Synchronizer(instrumentation.tracer);
|
|
43
|
+
super(publicClient, debugClient, rollup, {
|
|
44
|
+
registryAddress: EthAddress.ZERO,
|
|
45
|
+
governanceProposerAddress: EthAddress.ZERO,
|
|
46
|
+
slashFactoryAddress: EthAddress.ZERO,
|
|
47
|
+
slashingProposerAddress: EthAddress.ZERO
|
|
48
|
+
}, dataStore, {
|
|
49
|
+
pollingIntervalMs: 1000,
|
|
50
|
+
batchSize: 100,
|
|
51
|
+
skipValidateCheckpointAttestations: true,
|
|
52
|
+
maxAllowedEthClientDriftSeconds: 300,
|
|
53
|
+
ethereumAllowNoDebugHosts: true
|
|
54
|
+
}, blobClient, instrumentation, {
|
|
55
|
+
...l1Constants,
|
|
56
|
+
l1StartBlockHash: Buffer32.random()
|
|
57
|
+
}, synchronizer, events);
|
|
58
|
+
}
|
|
59
|
+
/** Override start to skip L1 validation checks. */ start(_blockUntilSynced) {
|
|
60
|
+
// Just start the running promise without L1 checks
|
|
61
|
+
this.runningPromise.start();
|
|
62
|
+
return Promise.resolve();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Creates an archiver with mocked L1 connectivity for testing. */ export async function createNoopL1Archiver(dataStore, l1Constants, telemetry = getTelemetryClient()) {
|
|
66
|
+
const instrumentation = await ArchiverInstrumentation.new(telemetry, ()=>dataStore.estimateSize());
|
|
67
|
+
return new NoopL1Archiver(dataStore, l1Constants, instrumentation);
|
|
68
|
+
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.358457c",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
7
|
"./test": "./dest/test/index.js",
|
|
8
|
+
"./test/noop-l1": "./dest/test/noop_l1_archiver.js",
|
|
8
9
|
"./config": "./dest/config.js"
|
|
9
10
|
},
|
|
10
11
|
"typedocOptions": {
|
|
@@ -64,18 +65,18 @@
|
|
|
64
65
|
]
|
|
65
66
|
},
|
|
66
67
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
68
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
69
|
-
"@aztec/constants": "0.0.1-commit.
|
|
70
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
71
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
72
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
73
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
74
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
75
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
76
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
77
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
78
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
68
|
+
"@aztec/blob-client": "0.0.1-commit.358457c",
|
|
69
|
+
"@aztec/blob-lib": "0.0.1-commit.358457c",
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.358457c",
|
|
71
|
+
"@aztec/epoch-cache": "0.0.1-commit.358457c",
|
|
72
|
+
"@aztec/ethereum": "0.0.1-commit.358457c",
|
|
73
|
+
"@aztec/foundation": "0.0.1-commit.358457c",
|
|
74
|
+
"@aztec/kv-store": "0.0.1-commit.358457c",
|
|
75
|
+
"@aztec/l1-artifacts": "0.0.1-commit.358457c",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.358457c",
|
|
77
|
+
"@aztec/protocol-contracts": "0.0.1-commit.358457c",
|
|
78
|
+
"@aztec/stdlib": "0.0.1-commit.358457c",
|
|
79
|
+
"@aztec/telemetry-client": "0.0.1-commit.358457c",
|
|
79
80
|
"lodash.groupby": "^4.6.0",
|
|
80
81
|
"lodash.omit": "^4.5.0",
|
|
81
82
|
"tslib": "^2.5.0",
|