@aztec/archiver 0.0.1-commit.b2a5d0dd1 → 0.0.1-commit.b3d3157a
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 +7 -5
- package/dest/archiver.d.ts +49 -14
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +216 -68
- package/dest/config.d.ts +4 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -16
- package/dest/errors.d.ts +19 -13
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +32 -16
- package/dest/factory.d.ts +12 -6
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +31 -21
- package/dest/index.d.ts +9 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +8 -1
- 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 +13 -4
- package/dest/l1/trace_tx.d.ts +12 -66
- package/dest/l1/trace_tx.d.ts.map +1 -1
- 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 +40 -0
- package/dest/modules/data_source_base.d.ts +71 -49
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +269 -143
- package/dest/modules/data_store_updater.d.ts +18 -6
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +108 -59
- package/dest/modules/instrumentation.js +3 -1
- package/dest/modules/l1_synchronizer.d.ts +6 -5
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +203 -100
- 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 +4 -3
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +4 -4
- package/dest/store/block_store.d.ts +155 -98
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +473 -265
- package/dest/store/contract_class_store.d.ts +17 -3
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +17 -1
- 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 +31 -0
- 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 -8
- package/dest/store/l2_tips_cache.d.ts.map +1 -1
- package/dest/store/l2_tips_cache.js +13 -96
- 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 -478
- package/dest/store/log_store_codec.d.ts +70 -0
- package/dest/store/log_store_codec.d.ts.map +1 -0
- package/dest/store/log_store_codec.js +101 -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 +31 -1
- package/dest/test/fake_l1_state.d.ts +2 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +25 -8
- package/dest/test/mock_l2_block_source.d.ts +47 -51
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +223 -185
- package/dest/test/noop_l1_archiver.d.ts +10 -6
- package/dest/test/noop_l1_archiver.d.ts.map +1 -1
- package/dest/test/noop_l1_archiver.js +19 -8
- package/package.json +14 -14
- package/src/archiver.ts +265 -72
- package/src/config.ts +12 -19
- package/src/errors.ts +46 -23
- package/src/factory.ts +38 -20
- package/src/index.ts +16 -1
- package/src/l1/calldata_retriever.ts +14 -4
- package/src/modules/contract_data_source_adapter.ts +55 -0
- package/src/modules/data_source_base.ts +335 -187
- package/src/modules/data_store_updater.ts +118 -61
- package/src/modules/instrumentation.ts +1 -1
- package/src/modules/l1_synchronizer.ts +278 -120
- package/src/modules/outbox_trees_resolver.ts +199 -0
- package/src/modules/validation.ts +8 -7
- package/src/store/block_store.ts +566 -323
- package/src/store/contract_class_store.ts +28 -2
- package/src/store/contract_instance_store.ts +43 -0
- 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 -115
- package/src/store/log_store.ts +296 -650
- package/src/store/log_store_codec.ts +132 -0
- package/src/store/message_store.ts +35 -2
- package/src/test/fake_l1_state.ts +24 -14
- package/src/test/mock_l2_block_source.ts +271 -239
- package/src/test/noop_l1_archiver.ts +39 -8
- package/dest/store/kv_archiver_store.d.ts +0 -383
- package/dest/store/kv_archiver_store.d.ts.map +0 -1
- package/dest/store/kv_archiver_store.js +0 -501
- package/src/store/kv_archiver_store.ts +0 -728
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 {
|
|
@@ -20,7 +21,47 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
20
21
|
finalizedBlockNumber = 0;
|
|
21
22
|
checkpointedBlockNumber = 0;
|
|
22
23
|
proposedCheckpointBlockNumber = 0;
|
|
24
|
+
initialHeader = BlockHeader.empty();
|
|
25
|
+
initialHeaderHash = GENESIS_BLOCK_HEADER_HASH;
|
|
26
|
+
genesisArchiveRoot;
|
|
27
|
+
genesisBlock;
|
|
23
28
|
log = createLogger('archiver:mock_l2_block_source');
|
|
29
|
+
/** Returns the initial header used to synthesize block 0. */ getInitialHeader() {
|
|
30
|
+
return this.initialHeader;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sets the initial header used to synthesize block 0. Tests that wire up a real
|
|
34
|
+
* world-state should call this with `worldState.getInitialHeader()` so the L2BlockStream
|
|
35
|
+
* agrees on the genesis hash on both sides. Precomputes and caches the header hash so
|
|
36
|
+
* `getGenesisBlockHash()` can return synchronously.
|
|
37
|
+
*/ async setInitialHeader(header) {
|
|
38
|
+
this.initialHeader = header;
|
|
39
|
+
this.initialHeaderHash = await header.hash();
|
|
40
|
+
this.genesisBlock = undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns the precomputed hash of the genesis block header. Defaults to the static
|
|
44
|
+
* {@link GENESIS_BLOCK_HEADER_HASH} unless {@link setInitialHeader} has been called with a
|
|
45
|
+
* custom header.
|
|
46
|
+
*/ getGenesisBlockHash() {
|
|
47
|
+
return this.initialHeaderHash;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Sets the post-genesis archive root used to synthesize block 0. Mirrors the real archiver,
|
|
51
|
+
* whose synthetic block 0 carries `new AppendOnlyTreeSnapshot(genesisArchiveRoot, 1)` rather
|
|
52
|
+
* than `AppendOnlyTreeSnapshot.empty()`. Tests wiring up a real world-state should set this so
|
|
53
|
+
* archive-based block lookups against the mock match production semantics.
|
|
54
|
+
*/ setGenesisArchiveRoot(root) {
|
|
55
|
+
this.genesisArchiveRoot = root;
|
|
56
|
+
this.genesisBlock = undefined;
|
|
57
|
+
}
|
|
58
|
+
getGenesisBlock() {
|
|
59
|
+
if (this.genesisBlock) {
|
|
60
|
+
return this.genesisBlock;
|
|
61
|
+
}
|
|
62
|
+
const archive = this.genesisArchiveRoot ? new AppendOnlyTreeSnapshot(this.genesisArchiveRoot, 1) : AppendOnlyTreeSnapshot.empty();
|
|
63
|
+
return this.genesisBlock = new L2Block(archive, this.initialHeader, Body.empty(), CheckpointNumber.ZERO, IndexWithinCheckpoint(0));
|
|
64
|
+
}
|
|
24
65
|
/** Creates blocks grouped into single-block checkpoints. */ async createBlocks(numBlocks) {
|
|
25
66
|
await this.createCheckpoints(numBlocks, 1);
|
|
26
67
|
}
|
|
@@ -118,179 +159,93 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
118
159
|
*/ getRegistryAddress() {
|
|
119
160
|
return Promise.resolve(EthAddress.random());
|
|
120
161
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
getFinalizedL2BlockNumber() {
|
|
134
|
-
return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
|
|
162
|
+
async getBlockNumber(query) {
|
|
163
|
+
if (!query) {
|
|
164
|
+
return BlockNumber(this.l2Blocks.length);
|
|
165
|
+
}
|
|
166
|
+
if ('number' in query) {
|
|
167
|
+
return query.number;
|
|
168
|
+
}
|
|
169
|
+
if ('tag' in query) {
|
|
170
|
+
return BlockNumber(this.resolveBlockTag(query.tag));
|
|
171
|
+
}
|
|
172
|
+
const block = await this.getBlock(query);
|
|
173
|
+
return block ? block.header.globalVariables.blockNumber : undefined;
|
|
135
174
|
}
|
|
136
175
|
getProposedCheckpointL2BlockNumber() {
|
|
137
176
|
return Promise.resolve(BlockNumber(this.proposedCheckpointBlockNumber));
|
|
138
177
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
const block = this.l2Blocks[number - 1];
|
|
144
|
-
if (!block) {
|
|
178
|
+
getCheckpoint(query) {
|
|
179
|
+
const checkpoint = this.resolveCheckpointQuery(query);
|
|
180
|
+
if (!checkpoint) {
|
|
145
181
|
return Promise.resolve(undefined);
|
|
146
182
|
}
|
|
147
|
-
return Promise.resolve(this.
|
|
148
|
-
}
|
|
149
|
-
async getCheckpointedBlocks(from, limit) {
|
|
150
|
-
const result = [];
|
|
151
|
-
for(let i = 0; i < limit; i++){
|
|
152
|
-
const blockNum = from + i;
|
|
153
|
-
if (blockNum > this.checkpointedBlockNumber) {
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
|
|
157
|
-
if (block) {
|
|
158
|
-
result.push(block);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return result;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Gets an l2 block.
|
|
165
|
-
* @param number - The block number to return (inclusive).
|
|
166
|
-
* @returns The requested L2 block.
|
|
167
|
-
*/ getBlock(number) {
|
|
168
|
-
const block = this.l2Blocks[number - 1];
|
|
169
|
-
return Promise.resolve(block);
|
|
183
|
+
return Promise.resolve(new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), []));
|
|
170
184
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
* @param number - The block number to return.
|
|
174
|
-
* @returns The requested L2 block.
|
|
175
|
-
*/ getL2Block(number) {
|
|
176
|
-
const block = this.l2Blocks[number - 1];
|
|
177
|
-
return Promise.resolve(block);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
181
|
-
* @param from - Number of the first block to return (inclusive).
|
|
182
|
-
* @param limit - The maximum number of blocks to return.
|
|
183
|
-
* @returns The requested mocked L2 blocks.
|
|
184
|
-
*/ getBlocks(from, limit) {
|
|
185
|
-
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
|
|
186
|
-
}
|
|
187
|
-
getCheckpoints(from, limit) {
|
|
188
|
-
const checkpoints = this.checkpointList.slice(from - 1, from - 1 + limit);
|
|
185
|
+
getCheckpoints(query) {
|
|
186
|
+
const checkpoints = this.resolveCheckpointsQuery(query);
|
|
189
187
|
return Promise.resolve(checkpoints.map((checkpoint)=>new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), [])));
|
|
190
188
|
}
|
|
191
189
|
getCheckpointByArchive(archive) {
|
|
192
190
|
const checkpoint = this.checkpointList.find((c)=>c.archive.root.equals(archive));
|
|
193
191
|
return Promise.resolve(checkpoint);
|
|
194
192
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (hash.equals(blockHash)) {
|
|
199
|
-
return this.toCheckpointedBlock(block);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
return undefined;
|
|
203
|
-
}
|
|
204
|
-
getCheckpointedBlockByArchive(archive) {
|
|
205
|
-
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
206
|
-
if (!block) {
|
|
193
|
+
getCheckpointData(query) {
|
|
194
|
+
const checkpoint = this.resolveCheckpointQuery(query);
|
|
195
|
+
if (!checkpoint) {
|
|
207
196
|
return Promise.resolve(undefined);
|
|
208
197
|
}
|
|
209
|
-
return Promise.resolve(this.
|
|
210
|
-
}
|
|
211
|
-
async getL2BlockByHash(blockHash) {
|
|
212
|
-
for (const block of this.l2Blocks){
|
|
213
|
-
const hash = await block.hash();
|
|
214
|
-
if (hash.equals(blockHash)) {
|
|
215
|
-
return block;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return undefined;
|
|
198
|
+
return Promise.resolve(this.checkpointToData(checkpoint));
|
|
219
199
|
}
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
return Promise.resolve(
|
|
200
|
+
getCheckpointsData(query) {
|
|
201
|
+
const checkpoints = this.resolveCheckpointsQuery(query);
|
|
202
|
+
return Promise.resolve(checkpoints.map((c)=>this.checkpointToData(c)));
|
|
223
203
|
}
|
|
224
|
-
|
|
225
|
-
for (const block of this.l2Blocks){
|
|
226
|
-
const hash = await block.hash();
|
|
227
|
-
if (hash.equals(blockHash)) {
|
|
228
|
-
return block.header;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return undefined;
|
|
232
|
-
}
|
|
233
|
-
getBlockHeaderByArchive(archive) {
|
|
234
|
-
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
235
|
-
return Promise.resolve(block?.header);
|
|
236
|
-
}
|
|
237
|
-
async getBlockData(number) {
|
|
238
|
-
const block = this.l2Blocks[number - 1];
|
|
239
|
-
if (!block) {
|
|
240
|
-
return undefined;
|
|
241
|
-
}
|
|
204
|
+
checkpointToData(checkpoint) {
|
|
242
205
|
return {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
206
|
+
checkpointNumber: checkpoint.number,
|
|
207
|
+
header: checkpoint.header,
|
|
208
|
+
archive: checkpoint.archive,
|
|
209
|
+
checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
|
|
210
|
+
startBlock: checkpoint.blocks[0].number,
|
|
211
|
+
blockCount: checkpoint.blocks.length,
|
|
212
|
+
feeAssetPriceModifier: checkpoint.feeAssetPriceModifier,
|
|
213
|
+
attestations: [],
|
|
214
|
+
l1: this.mockL1DataForCheckpoint(checkpoint)
|
|
248
215
|
};
|
|
249
216
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
217
|
+
resolveCheckpointQuery(query) {
|
|
218
|
+
if ('number' in query) {
|
|
219
|
+
return this.checkpointList[query.number - 1];
|
|
220
|
+
}
|
|
221
|
+
if ('slot' in query) {
|
|
222
|
+
return this.checkpointList.find((c)=>c.header.slotNumber === query.slot);
|
|
223
|
+
}
|
|
224
|
+
switch(query.tag){
|
|
225
|
+
case 'checkpointed':
|
|
226
|
+
return this.checkpointList[this.checkpointList.length - 1];
|
|
227
|
+
case 'proven':
|
|
228
|
+
{
|
|
229
|
+
const provenCheckpoint = this.checkpointList.filter((c)=>c.blocks.some((b)=>b.number <= this.provenBlockNumber));
|
|
230
|
+
return provenCheckpoint.at(-1);
|
|
231
|
+
}
|
|
232
|
+
case 'finalized':
|
|
233
|
+
{
|
|
234
|
+
const finalizedCheckpoint = this.checkpointList.filter((c)=>c.blocks.some((b)=>b.number <= this.finalizedBlockNumber));
|
|
235
|
+
return finalizedCheckpoint.at(-1);
|
|
236
|
+
}
|
|
254
237
|
}
|
|
255
|
-
return {
|
|
256
|
-
header: block.header,
|
|
257
|
-
archive: block.archive,
|
|
258
|
-
blockHash: await block.hash(),
|
|
259
|
-
checkpointNumber: block.checkpointNumber,
|
|
260
|
-
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
getBlockHeader(number) {
|
|
264
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
265
|
-
}
|
|
266
|
-
getCheckpointsForEpoch(epochNumber) {
|
|
267
|
-
return Promise.resolve(this.getCheckpointsInEpoch(epochNumber));
|
|
268
|
-
}
|
|
269
|
-
getCheckpointsDataForEpoch(epochNumber) {
|
|
270
|
-
const checkpoints = this.getCheckpointsInEpoch(epochNumber);
|
|
271
|
-
return Promise.resolve(checkpoints.map((checkpoint)=>({
|
|
272
|
-
checkpointNumber: checkpoint.number,
|
|
273
|
-
header: checkpoint.header,
|
|
274
|
-
archive: checkpoint.archive,
|
|
275
|
-
checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
|
|
276
|
-
startBlock: checkpoint.blocks[0].number,
|
|
277
|
-
blockCount: checkpoint.blocks.length,
|
|
278
|
-
attestations: [],
|
|
279
|
-
l1: this.mockL1DataForCheckpoint(checkpoint)
|
|
280
|
-
})));
|
|
281
238
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
239
|
+
resolveCheckpointsQuery(query) {
|
|
240
|
+
if ('from' in query) {
|
|
241
|
+
return this.checkpointList.slice(query.from - 1, query.from - 1 + query.limit);
|
|
242
|
+
}
|
|
243
|
+
return this.getCheckpointsInEpoch(query.epoch);
|
|
285
244
|
}
|
|
286
245
|
getBlocksForSlot(slotNumber) {
|
|
287
246
|
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
288
247
|
return Promise.resolve(blocks);
|
|
289
248
|
}
|
|
290
|
-
async getCheckpointedBlockHeadersForEpoch(epochNumber) {
|
|
291
|
-
const checkpointedBlocks = await this.getCheckpointedBlocksForEpoch(epochNumber);
|
|
292
|
-
return checkpointedBlocks.map((b)=>b.block.header);
|
|
293
|
-
}
|
|
294
249
|
/**
|
|
295
250
|
* Gets a tx effect.
|
|
296
251
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
@@ -308,28 +263,18 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
308
263
|
data: txEffect,
|
|
309
264
|
l2BlockNumber: block.number,
|
|
310
265
|
l2BlockHash: await block.hash(),
|
|
311
|
-
txIndexInBlock: block.body.txEffects.
|
|
266
|
+
txIndexInBlock: block.body.txEffects.findIndex((t)=>t.txHash.equals(txHash)),
|
|
267
|
+
slotNumber: block.header.globalVariables.slotNumber
|
|
312
268
|
};
|
|
313
269
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
* @returns The requested tx receipt (or undefined if not found).
|
|
318
|
-
*/ async getSettledTxReceipt(txHash) {
|
|
319
|
-
for (const block of this.l2Blocks){
|
|
320
|
-
for (const txEffect of block.body.txEffects){
|
|
321
|
-
if (txEffect.txHash.equals(txHash)) {
|
|
322
|
-
// In mock, assume all txs are checkpointed with successful execution
|
|
323
|
-
return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(), await block.hash(), block.number, getEpochAtSlot(block.slot, EmptyL1RollupConstants));
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
return undefined;
|
|
270
|
+
getL2ToL1MembershipWitness() {
|
|
271
|
+
// Mock does not back the L2-to-L1 message witness flow.
|
|
272
|
+
return Promise.resolve(undefined);
|
|
328
273
|
}
|
|
329
274
|
async getL2Tips() {
|
|
330
275
|
const [latest, proven, finalized, checkpointed, proposedCheckpoint] = [
|
|
331
276
|
await this.getBlockNumber(),
|
|
332
|
-
|
|
277
|
+
this.provenBlockNumber,
|
|
333
278
|
this.finalizedBlockNumber,
|
|
334
279
|
this.checkpointedBlockNumber,
|
|
335
280
|
await this.getProposedCheckpointL2BlockNumber()
|
|
@@ -339,33 +284,49 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
339
284
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
340
285
|
const checkpointedBlock = this.l2Blocks[checkpointed - 1];
|
|
341
286
|
const proposedCheckpointBlock = this.l2Blocks[proposedCheckpoint - 1];
|
|
287
|
+
// For genesis tips (block number 0) report the dynamic initial header hash so consumers
|
|
288
|
+
// running L2BlockStream against this mock agree at block 0 with their local tip store.
|
|
289
|
+
const genesisHash = (await this.initialHeader.hash()).toString();
|
|
290
|
+
const tipHash = async (block, number)=>{
|
|
291
|
+
if (block) {
|
|
292
|
+
return (await block.hash()).toString();
|
|
293
|
+
}
|
|
294
|
+
return number === 0 ? genesisHash : '';
|
|
295
|
+
};
|
|
342
296
|
const latestBlockId = {
|
|
343
297
|
number: BlockNumber(latest),
|
|
344
|
-
hash:
|
|
298
|
+
hash: await tipHash(latestBlock, latest)
|
|
345
299
|
};
|
|
346
300
|
const provenBlockId = {
|
|
347
301
|
number: BlockNumber(proven),
|
|
348
|
-
hash:
|
|
302
|
+
hash: await tipHash(provenBlock, proven)
|
|
349
303
|
};
|
|
350
304
|
const finalizedBlockId = {
|
|
351
305
|
number: BlockNumber(finalized),
|
|
352
|
-
hash:
|
|
306
|
+
hash: await tipHash(finalizedBlock, finalized)
|
|
353
307
|
};
|
|
354
308
|
const checkpointedBlockId = {
|
|
355
309
|
number: BlockNumber(checkpointed),
|
|
356
|
-
hash:
|
|
310
|
+
hash: await tipHash(checkpointedBlock, checkpointed)
|
|
357
311
|
};
|
|
358
312
|
const proposedCheckpointBlockId = {
|
|
359
313
|
number: BlockNumber(proposedCheckpoint),
|
|
360
|
-
hash:
|
|
314
|
+
hash: await tipHash(proposedCheckpointBlock, proposedCheckpoint)
|
|
361
315
|
};
|
|
362
|
-
const makeTipId = (blockId)=>
|
|
316
|
+
const makeTipId = (blockId)=>{
|
|
317
|
+
const checkpointNumber = this.findCheckpointNumberForBlock(blockId.number) ?? CheckpointNumber(0);
|
|
318
|
+
// Match production semantics: checkpoint 0 is fully synthetic (no real checkpoint header
|
|
319
|
+
// exists at 0), so its hash stays at the protocol constant `GENESIS_CHECKPOINT_HEADER_HASH`
|
|
320
|
+
// even though the block-0 hash is dynamic. See L2TipsCache for the production path.
|
|
321
|
+
const hash = checkpointNumber === 0 ? GENESIS_CHECKPOINT_HEADER_HASH.toString() : blockId.hash;
|
|
322
|
+
return {
|
|
363
323
|
block: blockId,
|
|
364
324
|
checkpoint: {
|
|
365
|
-
number:
|
|
366
|
-
hash
|
|
325
|
+
number: checkpointNumber,
|
|
326
|
+
hash
|
|
367
327
|
}
|
|
368
|
-
}
|
|
328
|
+
};
|
|
329
|
+
};
|
|
369
330
|
return {
|
|
370
331
|
proposed: latestBlockId,
|
|
371
332
|
checkpointed: makeTipId(checkpointedBlockId),
|
|
@@ -386,9 +347,12 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
386
347
|
getL1Constants() {
|
|
387
348
|
return Promise.resolve(EmptyL1RollupConstants);
|
|
388
349
|
}
|
|
350
|
+
isPruneDueAtSlot(_slot) {
|
|
351
|
+
return Promise.resolve(false);
|
|
352
|
+
}
|
|
389
353
|
getGenesisValues() {
|
|
390
354
|
return Promise.resolve({
|
|
391
|
-
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
355
|
+
genesisArchiveRoot: this.genesisArchiveRoot ?? new Fr(GENESIS_ARCHIVE_ROOT)
|
|
392
356
|
});
|
|
393
357
|
}
|
|
394
358
|
getL1Timestamp() {
|
|
@@ -429,6 +393,88 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
429
393
|
syncImmediate() {
|
|
430
394
|
return Promise.resolve();
|
|
431
395
|
}
|
|
396
|
+
async getBlock(query) {
|
|
397
|
+
if ('number' in query) {
|
|
398
|
+
if (query.number === 0) {
|
|
399
|
+
return this.getGenesisBlock();
|
|
400
|
+
}
|
|
401
|
+
return this.l2Blocks[query.number - 1];
|
|
402
|
+
}
|
|
403
|
+
if ('hash' in query) {
|
|
404
|
+
const genesis = this.getGenesisBlock();
|
|
405
|
+
if ((await genesis.hash()).equals(query.hash)) {
|
|
406
|
+
return genesis;
|
|
407
|
+
}
|
|
408
|
+
for (const b of this.l2Blocks){
|
|
409
|
+
const hash = await b.hash();
|
|
410
|
+
if (hash.equals(query.hash)) {
|
|
411
|
+
return b;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return undefined;
|
|
415
|
+
}
|
|
416
|
+
if ('archive' in query) {
|
|
417
|
+
const genesis = this.getGenesisBlock();
|
|
418
|
+
if (genesis.archive.root.equals(query.archive)) {
|
|
419
|
+
return genesis;
|
|
420
|
+
}
|
|
421
|
+
return this.l2Blocks.find((b)=>b.archive.root.equals(query.archive));
|
|
422
|
+
}
|
|
423
|
+
const number = this.resolveBlockTag(query.tag);
|
|
424
|
+
if (number === 0) {
|
|
425
|
+
return this.getGenesisBlock();
|
|
426
|
+
}
|
|
427
|
+
return this.l2Blocks[number - 1];
|
|
428
|
+
}
|
|
429
|
+
resolveBlockTag(tag) {
|
|
430
|
+
switch(tag){
|
|
431
|
+
case 'latest':
|
|
432
|
+
case 'proposed':
|
|
433
|
+
return this.l2Blocks.length;
|
|
434
|
+
case 'checkpointed':
|
|
435
|
+
return this.checkpointedBlockNumber;
|
|
436
|
+
case 'proven':
|
|
437
|
+
return this.provenBlockNumber;
|
|
438
|
+
case 'finalized':
|
|
439
|
+
return this.finalizedBlockNumber;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
getBlocks(query) {
|
|
443
|
+
let blocks;
|
|
444
|
+
if ('from' in query) {
|
|
445
|
+
blocks = this.l2Blocks.slice(query.from - 1, query.from - 1 + query.limit);
|
|
446
|
+
} else {
|
|
447
|
+
const epochCheckpoints = this.getCheckpointsInEpoch(query.epoch);
|
|
448
|
+
blocks = epochCheckpoints.flatMap((c)=>c.blocks);
|
|
449
|
+
}
|
|
450
|
+
if (query.onlyCheckpointed) {
|
|
451
|
+
blocks = blocks.filter((b)=>b.header.globalVariables.blockNumber <= this.checkpointedBlockNumber);
|
|
452
|
+
}
|
|
453
|
+
return Promise.resolve(blocks);
|
|
454
|
+
}
|
|
455
|
+
async getBlockData(query) {
|
|
456
|
+
const block = await this.getBlock(query);
|
|
457
|
+
if (!block) {
|
|
458
|
+
return undefined;
|
|
459
|
+
}
|
|
460
|
+
return {
|
|
461
|
+
header: block.header,
|
|
462
|
+
archive: block.archive,
|
|
463
|
+
blockHash: await block.hash(),
|
|
464
|
+
checkpointNumber: block.checkpointNumber,
|
|
465
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
async getBlocksData(query) {
|
|
469
|
+
const blocks = await this.getBlocks(query);
|
|
470
|
+
return Promise.all(blocks.map(async (block)=>({
|
|
471
|
+
header: block.header,
|
|
472
|
+
archive: block.archive,
|
|
473
|
+
blockHash: await block.hash(),
|
|
474
|
+
checkpointNumber: block.checkpointNumber,
|
|
475
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
476
|
+
})));
|
|
477
|
+
}
|
|
432
478
|
isPendingChainInvalid() {
|
|
433
479
|
return Promise.resolve(false);
|
|
434
480
|
}
|
|
@@ -437,10 +483,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
437
483
|
valid: true
|
|
438
484
|
});
|
|
439
485
|
}
|
|
440
|
-
|
|
441
|
-
return Promise.resolve(undefined);
|
|
442
|
-
}
|
|
443
|
-
getProposedCheckpointOnly() {
|
|
486
|
+
getProposedCheckpointData(_query) {
|
|
444
487
|
return Promise.resolve(undefined);
|
|
445
488
|
}
|
|
446
489
|
/** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
|
|
@@ -453,11 +496,6 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
453
496
|
/** Creates a mock L1PublishedData for a checkpoint. */ mockL1DataForCheckpoint(checkpoint) {
|
|
454
497
|
return new L1PublishedData(BigInt(checkpoint.number), BigInt(checkpoint.number), Buffer32.random().toString());
|
|
455
498
|
}
|
|
456
|
-
/** Creates a CheckpointedL2Block from a block using stored checkpoint info. */ toCheckpointedBlock(block) {
|
|
457
|
-
const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === block.number));
|
|
458
|
-
const checkpointNumber = checkpoint?.number ?? block.checkpointNumber;
|
|
459
|
-
return new CheckpointedL2Block(checkpointNumber, block, new L1PublishedData(BigInt(block.number), BigInt(block.number), `0x${block.number.toString(16).padStart(64, '0')}`), []);
|
|
460
|
-
}
|
|
461
499
|
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */ findCheckpointNumberForBlock(blockNumber) {
|
|
462
500
|
const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === blockNumber));
|
|
463
501
|
return checkpoint?.number;
|
|
@@ -1,26 +1,30 @@
|
|
|
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';
|
|
8
12
|
/**
|
|
9
13
|
* Archiver with mocked L1 connectivity for testing.
|
|
10
14
|
* Uses mock L1 clients and a noop synchronizer, enabling tests that
|
|
11
15
|
* don't require real Ethereum connectivity.
|
|
12
16
|
*/
|
|
13
17
|
export declare class NoopL1Archiver extends Archiver {
|
|
14
|
-
constructor(
|
|
18
|
+
constructor(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
|
|
15
19
|
genesisArchiveRoot: Fr;
|
|
16
|
-
}, instrumentation: ArchiverInstrumentation);
|
|
20
|
+
}, instrumentation: ArchiverInstrumentation, initialHeader: BlockHeader, initialBlockHash: BlockHash, l2TipsCache: L2TipsCache, dateProvider?: DateProvider);
|
|
17
21
|
/** Override start to skip L1 validation checks. */
|
|
18
22
|
start(_blockUntilSynced?: boolean): Promise<void>;
|
|
19
23
|
/** Always reports as fully synced since there is no real L1 to sync from. */
|
|
20
24
|
getSyncedL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
21
25
|
}
|
|
22
26
|
/** Creates an archiver with mocked L1 connectivity for testing. */
|
|
23
|
-
export declare function createNoopL1Archiver(
|
|
27
|
+
export declare function createNoopL1Archiver(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
|
|
24
28
|
genesisArchiveRoot: Fr;
|
|
25
|
-
}, telemetry?:
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
}, telemetry: TelemetryClient | undefined, initialHeader: BlockHeader, dateProvider?: DateProvider): Promise<NoopL1Archiver>;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBbUIsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFLaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBeUJ4RDs7OztHQUlHO0FBQ0gscUJBQWEsY0FBZSxTQUFRLFFBQVE7SUFDMUMsWUFDRSxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztRQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQzNELGVBQWUsRUFBRSx1QkFBdUIsRUFDeEMsYUFBYSxFQUFFLFdBQVcsRUFDMUIsZ0JBQWdCLEVBQUUsU0FBUyxFQUMzQixXQUFXLEVBQUUsV0FBVyxFQUN4QixZQUFZLEdBQUUsWUFBaUMsRUFpRGhEO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsNkJBQXdDLEVBQ2pELGFBQWEsRUFBRSxXQUFXLEVBQzFCLFlBQVksQ0FBQyxFQUFFLFlBQVksR0FDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQWlCekIifQ==
|
|
@@ -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;AAyBxD;;;;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,EAiDhD;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,GAC1B,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
|