@aztec/archiver 0.0.1-commit.fffb133c → 0.0.1-dev
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 +9 -5
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +87 -111
- package/dest/errors.d.ts +7 -9
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +9 -14
- package/dest/factory.d.ts +4 -3
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +32 -26
- 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 +13 -8
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +29 -73
- package/dest/modules/data_store_updater.d.ts +22 -7
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +114 -40
- package/dest/modules/instrumentation.d.ts +4 -2
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +26 -12
- package/dest/modules/l1_synchronizer.d.ts +5 -8
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +42 -13
- package/dest/store/block_store.d.ts +38 -29
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +294 -85
- 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 +27 -7
- package/dest/store/contract_instance_store.d.ts +1 -1
- package/dest/store/contract_instance_store.d.ts.map +1 -1
- package/dest/store/contract_instance_store.js +17 -2
- package/dest/store/kv_archiver_store.d.ts +40 -18
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +44 -16
- package/dest/store/l2_tips_cache.d.ts +18 -0
- package/dest/store/l2_tips_cache.d.ts.map +1 -0
- package/dest/store/l2_tips_cache.js +20 -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 +125 -56
- package/dest/store/message_store.js +1 -1
- package/dest/test/fake_l1_state.d.ts +20 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +97 -20
- 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 +25 -9
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +133 -87
- package/dest/test/mock_structs.d.ts +6 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +20 -6
- package/dest/test/noop_l1_archiver.d.ts +26 -0
- package/dest/test/noop_l1_archiver.d.ts.map +1 -0
- package/dest/test/noop_l1_archiver.js +72 -0
- package/package.json +14 -13
- package/src/archiver.ts +110 -132
- package/src/errors.ts +10 -24
- package/src/factory.ts +47 -23
- 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 +59 -98
- package/src/modules/data_store_updater.ts +124 -43
- package/src/modules/instrumentation.ts +24 -12
- package/src/modules/l1_synchronizer.ts +49 -17
- package/src/store/block_store.ts +359 -115
- package/src/store/contract_class_store.ts +27 -7
- package/src/store/contract_instance_store.ts +19 -5
- package/src/store/kv_archiver_store.ts +71 -25
- package/src/store/l2_tips_cache.ts +27 -0
- package/src/store/log_store.ts +186 -57
- package/src/store/message_store.ts +1 -1
- package/src/test/fake_l1_state.ts +125 -21
- package/src/test/index.ts +3 -0
- package/src/test/mock_archiver.ts +3 -2
- package/src/test/mock_l2_block_source.ts +179 -87
- package/src/test/mock_structs.ts +42 -12
- package/src/test/noop_l1_archiver.ts +115 -0
|
@@ -380,7 +380,7 @@ import { count } from '@aztec/foundation/string';
|
|
|
380
380
|
import { Timer, elapsed } from '@aztec/foundation/timer';
|
|
381
381
|
import { isDefined } from '@aztec/foundation/types';
|
|
382
382
|
import { L2BlockSourceEvents } from '@aztec/stdlib/block';
|
|
383
|
-
import { getEpochAtSlot,
|
|
383
|
+
import { getEpochAtSlot, getSlotAtNextL1Block } from '@aztec/stdlib/epoch-helpers';
|
|
384
384
|
import { computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
|
|
385
385
|
import { execInSpan, trackSpan } from '@aztec/telemetry-client';
|
|
386
386
|
import { InitialCheckpointNumberNotSequentialError } from '../errors.js';
|
|
@@ -396,7 +396,6 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
396
396
|
debugClient;
|
|
397
397
|
rollup;
|
|
398
398
|
inbox;
|
|
399
|
-
l1Addresses;
|
|
400
399
|
store;
|
|
401
400
|
config;
|
|
402
401
|
blobClient;
|
|
@@ -435,12 +434,11 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
435
434
|
l1Timestamp;
|
|
436
435
|
updater;
|
|
437
436
|
tracer;
|
|
438
|
-
constructor(publicClient, debugClient, rollup, inbox,
|
|
437
|
+
constructor(publicClient, debugClient, rollup, inbox, store, config, blobClient, epochCache, dateProvider, instrumentation, l1Constants, events, tracer, l2TipsCache, log = createLogger('archiver:l1-sync')){
|
|
439
438
|
this.publicClient = publicClient;
|
|
440
439
|
this.debugClient = debugClient;
|
|
441
440
|
this.rollup = rollup;
|
|
442
441
|
this.inbox = inbox;
|
|
443
|
-
this.l1Addresses = l1Addresses;
|
|
444
442
|
this.store = store;
|
|
445
443
|
this.config = config;
|
|
446
444
|
this.blobClient = blobClient;
|
|
@@ -451,7 +449,9 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
451
449
|
this.events = events;
|
|
452
450
|
this.log = log;
|
|
453
451
|
_initProto(this);
|
|
454
|
-
this.updater = new ArchiverDataStoreUpdater(this.store
|
|
452
|
+
this.updater = new ArchiverDataStoreUpdater(this.store, l2TipsCache, {
|
|
453
|
+
rollupManaLimit: l1Constants.rollupManaLimit
|
|
454
|
+
});
|
|
455
455
|
this.tracer = tracer;
|
|
456
456
|
}
|
|
457
457
|
/** Sets new config */ setConfig(newConfig) {
|
|
@@ -555,6 +555,8 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
555
555
|
}
|
|
556
556
|
this.instrumentation.updateL1BlockHeight(currentL1BlockNumber);
|
|
557
557
|
}
|
|
558
|
+
// Update the finalized L2 checkpoint based on L1 finality.
|
|
559
|
+
await this.updateFinalizedCheckpoint();
|
|
558
560
|
// After syncing has completed, update the current l1 block number and timestamp,
|
|
559
561
|
// otherwise we risk announcing to the world that we've synced to a given point,
|
|
560
562
|
// but the corresponding blocks have not been processed (see #12631).
|
|
@@ -568,6 +570,34 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
568
570
|
l1BlockNumberAtEnd
|
|
569
571
|
});
|
|
570
572
|
}
|
|
573
|
+
/** Query L1 for its finalized block and update the finalized checkpoint accordingly. */ async updateFinalizedCheckpoint() {
|
|
574
|
+
try {
|
|
575
|
+
const finalizedL1Block = await this.publicClient.getBlock({
|
|
576
|
+
blockTag: 'finalized',
|
|
577
|
+
includeTransactions: false
|
|
578
|
+
});
|
|
579
|
+
const finalizedL1BlockNumber = finalizedL1Block.number;
|
|
580
|
+
const finalizedCheckpointNumber = await this.rollup.getProvenCheckpointNumber({
|
|
581
|
+
blockNumber: finalizedL1BlockNumber
|
|
582
|
+
});
|
|
583
|
+
const localFinalizedCheckpointNumber = await this.store.getFinalizedCheckpointNumber();
|
|
584
|
+
if (localFinalizedCheckpointNumber !== finalizedCheckpointNumber) {
|
|
585
|
+
await this.updater.setFinalizedCheckpointNumber(finalizedCheckpointNumber);
|
|
586
|
+
const finalizedL2BlockNumber = await this.store.getFinalizedL2BlockNumber();
|
|
587
|
+
this.log.info(`Updated finalized chain to checkpoint ${finalizedCheckpointNumber} (L2 block ${finalizedL2BlockNumber})`, {
|
|
588
|
+
finalizedCheckpointNumber,
|
|
589
|
+
previousFinalizedCheckpointNumber: localFinalizedCheckpointNumber,
|
|
590
|
+
finalizedL2BlockNumber,
|
|
591
|
+
finalizedL1BlockNumber
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
} catch (err) {
|
|
595
|
+
// The rollup contract may not exist at the finalized L1 block right after deployment.
|
|
596
|
+
if (!err?.message?.includes('returned no data')) {
|
|
597
|
+
this.log.warn(`Failed to update finalized checkpoint: ${err}`);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}
|
|
571
601
|
/** Prune all proposed local blocks that should have been checkpointed by now. */ async pruneUncheckpointedBlocks(currentL1Timestamp) {
|
|
572
602
|
const [lastCheckpointedBlockNumber, lastProposedBlockNumber] = await Promise.all([
|
|
573
603
|
this.store.getCheckpointedL2BlockNumber(),
|
|
@@ -583,8 +613,7 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
583
613
|
const [firstUncheckpointedBlockHeader] = await this.store.getBlockHeaders(firstUncheckpointedBlockNumber, 1);
|
|
584
614
|
const firstUncheckpointedBlockSlot = firstUncheckpointedBlockHeader?.getSlot();
|
|
585
615
|
// What's the slot at the next L1 block? All blocks for slots strictly before this one should've been checkpointed by now.
|
|
586
|
-
const
|
|
587
|
-
const slotAtNextL1Block = getSlotAtTimestamp(nextL1BlockTimestamp, this.l1Constants);
|
|
616
|
+
const slotAtNextL1Block = getSlotAtNextL1Block(currentL1Timestamp, this.l1Constants);
|
|
588
617
|
// Prune provisional blocks from slots that have ended without being checkpointed
|
|
589
618
|
if (firstUncheckpointedBlockSlot !== undefined && firstUncheckpointedBlockSlot < slotAtNextL1Block) {
|
|
590
619
|
this.log.warn(`Pruning blocks after block ${lastCheckpointedBlockNumber} due to slot ${firstUncheckpointedBlockSlot} not being checkpointed`, {
|
|
@@ -838,7 +867,7 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
838
867
|
if (provenCheckpointNumber === 0) {
|
|
839
868
|
const localProvenCheckpointNumber = await this.store.getProvenCheckpointNumber();
|
|
840
869
|
if (localProvenCheckpointNumber !== provenCheckpointNumber) {
|
|
841
|
-
await this.
|
|
870
|
+
await this.updater.setProvenCheckpointNumber(provenCheckpointNumber);
|
|
842
871
|
this.log.info(`Rolled back proven chain to checkpoint ${provenCheckpointNumber}`, {
|
|
843
872
|
provenCheckpointNumber
|
|
844
873
|
});
|
|
@@ -855,20 +884,20 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
855
884
|
if (localCheckpointForDestinationProvenCheckpointNumber && provenArchive.equals(localCheckpointForDestinationProvenCheckpointNumber.archive.root)) {
|
|
856
885
|
const localProvenCheckpointNumber = await this.store.getProvenCheckpointNumber();
|
|
857
886
|
if (localProvenCheckpointNumber !== provenCheckpointNumber) {
|
|
858
|
-
await this.
|
|
887
|
+
await this.updater.setProvenCheckpointNumber(provenCheckpointNumber);
|
|
859
888
|
this.log.info(`Updated proven chain to checkpoint ${provenCheckpointNumber}`, {
|
|
860
889
|
provenCheckpointNumber
|
|
861
890
|
});
|
|
862
891
|
const provenSlotNumber = localCheckpointForDestinationProvenCheckpointNumber.header.slotNumber;
|
|
863
892
|
const provenEpochNumber = getEpochAtSlot(provenSlotNumber, this.l1Constants);
|
|
864
|
-
const lastBlockNumberInCheckpoint = localCheckpointForDestinationProvenCheckpointNumber.startBlock + localCheckpointForDestinationProvenCheckpointNumber.
|
|
893
|
+
const lastBlockNumberInCheckpoint = localCheckpointForDestinationProvenCheckpointNumber.startBlock + localCheckpointForDestinationProvenCheckpointNumber.blockCount - 1;
|
|
865
894
|
this.events.emit(L2BlockSourceEvents.L2BlockProven, {
|
|
866
895
|
type: L2BlockSourceEvents.L2BlockProven,
|
|
867
896
|
blockNumber: BlockNumber(lastBlockNumberInCheckpoint),
|
|
868
897
|
slotNumber: provenSlotNumber,
|
|
869
898
|
epochNumber: provenEpochNumber
|
|
870
899
|
});
|
|
871
|
-
this.instrumentation.
|
|
900
|
+
this.instrumentation.updateLastProvenCheckpoint(localCheckpointForDestinationProvenCheckpointNumber);
|
|
872
901
|
} else {
|
|
873
902
|
this.log.trace(`Proven checkpoint ${provenCheckpointNumber} already stored.`);
|
|
874
903
|
}
|
|
@@ -946,7 +975,7 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
946
975
|
[searchStartBlock, searchEndBlock] = this.nextRange(searchEndBlock, currentL1BlockNumber);
|
|
947
976
|
this.log.trace(`Retrieving checkpoints from L1 block ${searchStartBlock} to ${searchEndBlock}`);
|
|
948
977
|
// TODO(md): Retrieve from blob client then from consensus client, then from peers
|
|
949
|
-
const retrievedCheckpoints = await execInSpan(this.tracer, 'Archiver.retrieveCheckpointsFromRollup', ()=>retrieveCheckpointsFromRollup(this.rollup, this.publicClient, this.debugClient, this.blobClient, searchStartBlock, searchEndBlock, this.
|
|
978
|
+
const retrievedCheckpoints = await execInSpan(this.tracer, 'Archiver.retrieveCheckpointsFromRollup', ()=>retrieveCheckpointsFromRollup(this.rollup, this.publicClient, this.debugClient, this.blobClient, searchStartBlock, searchEndBlock, this.instrumentation, this.log, !initialSyncComplete));
|
|
950
979
|
if (retrievedCheckpoints.length === 0) {
|
|
951
980
|
// We are not calling `setBlockSynchedL1BlockNumber` because it may cause sync issues if based off infura.
|
|
952
981
|
// See further details in earlier comments.
|
|
@@ -1017,7 +1046,7 @@ _dec = trackSpan('Archiver.syncFromL1'), _dec1 = trackSpan('Archiver.handleEpoch
|
|
|
1017
1046
|
if (result.prunedBlocks && result.prunedBlocks.length > 0) {
|
|
1018
1047
|
const prunedCheckpointNumber = result.prunedBlocks[0].checkpointNumber;
|
|
1019
1048
|
const prunedSlotNumber = result.prunedBlocks[0].header.globalVariables.slotNumber;
|
|
1020
|
-
this.log.
|
|
1049
|
+
this.log.info(`Pruned ${result.prunedBlocks.length} mismatching blocks for checkpoint ${prunedCheckpointNumber}`, {
|
|
1021
1050
|
prunedBlocks: result.prunedBlocks.map((b)=>b.toBlockInfo()),
|
|
1022
1051
|
prunedSlotNumber,
|
|
1023
1052
|
prunedCheckpointNumber
|
|
@@ -2,22 +2,11 @@ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/bra
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import { CheckpointedL2Block, L2Block,
|
|
6
|
-
import {
|
|
7
|
-
import type
|
|
8
|
-
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
9
|
-
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
5
|
+
import { type BlockData, BlockHash, CheckpointedL2Block, L2Block, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
6
|
+
import { type CheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
7
|
+
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
10
8
|
import { BlockHeader, type IndexedTxEffect, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
11
9
|
export { TxReceipt, type TxEffect, type TxHash } from '@aztec/stdlib/tx';
|
|
12
|
-
export type CheckpointData = {
|
|
13
|
-
checkpointNumber: CheckpointNumber;
|
|
14
|
-
header: CheckpointHeader;
|
|
15
|
-
archive: AppendOnlyTreeSnapshot;
|
|
16
|
-
startBlock: number;
|
|
17
|
-
numBlocks: number;
|
|
18
|
-
l1: L1PublishedData;
|
|
19
|
-
attestations: Buffer[];
|
|
20
|
-
};
|
|
21
10
|
export type RemoveCheckpointsResult = {
|
|
22
11
|
blocksRemoved: L2Block[] | undefined;
|
|
23
12
|
};
|
|
@@ -27,24 +16,21 @@ export type RemoveCheckpointsResult = {
|
|
|
27
16
|
export declare class BlockStore {
|
|
28
17
|
#private;
|
|
29
18
|
private db;
|
|
30
|
-
|
|
31
|
-
constructor(db: AztecAsyncKVStore, l1Constants: Pick<L1RollupConstants, 'epochDuration'>);
|
|
19
|
+
constructor(db: AztecAsyncKVStore);
|
|
32
20
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* TODO(#13569): Compute proper finalized block number based on L1 finalized block.
|
|
36
|
-
* TODO(palla/mbps): Even the provisional computation is wrong, since it should subtract checkpoints, not blocks
|
|
21
|
+
* Returns the finalized L2 block number. An L2 block is finalized when it was proven
|
|
22
|
+
* in an L1 block that has itself been finalized on Ethereum.
|
|
37
23
|
* @returns The finalized block number.
|
|
38
24
|
*/
|
|
39
25
|
getFinalizedL2BlockNumber(): Promise<BlockNumber>;
|
|
40
26
|
/**
|
|
41
|
-
* Append new proposed
|
|
42
|
-
*
|
|
27
|
+
* Append a new proposed block to the store.
|
|
28
|
+
* This is an uncheckpointed block that has been proposed by the sequencer but not yet included in a checkpoint on L1.
|
|
43
29
|
* For checkpointed blocks (already published to L1), use addCheckpoints() instead.
|
|
44
|
-
* @param
|
|
30
|
+
* @param block - The proposed L2 block to be added to the store.
|
|
45
31
|
* @returns True if the operation is successful.
|
|
46
32
|
*/
|
|
47
|
-
|
|
33
|
+
addProposedBlock(block: L2Block, opts?: {
|
|
48
34
|
force?: boolean;
|
|
49
35
|
}): Promise<boolean>;
|
|
50
36
|
/**
|
|
@@ -55,6 +41,7 @@ export declare class BlockStore {
|
|
|
55
41
|
addCheckpoints(checkpoints: PublishedCheckpoint[], opts?: {
|
|
56
42
|
force?: boolean;
|
|
57
43
|
}): Promise<boolean>;
|
|
44
|
+
private skipOrUpdateAlreadyStoredCheckpoints;
|
|
58
45
|
private addBlockToDatabase;
|
|
59
46
|
private deleteBlock;
|
|
60
47
|
/**
|
|
@@ -65,6 +52,8 @@ export declare class BlockStore {
|
|
|
65
52
|
removeCheckpointsAfter(checkpointNumber: CheckpointNumber): Promise<RemoveCheckpointsResult>;
|
|
66
53
|
getCheckpointData(checkpointNumber: CheckpointNumber): Promise<CheckpointData | undefined>;
|
|
67
54
|
getRangeOfCheckpoints(from: CheckpointNumber, limit: number): Promise<CheckpointData[]>;
|
|
55
|
+
/** Returns checkpoint data for all checkpoints whose slot falls within the given range (inclusive). */
|
|
56
|
+
getCheckpointDataForSlotRange(startSlot: SlotNumber, endSlot: SlotNumber): Promise<CheckpointData[]>;
|
|
68
57
|
private checkpointDataFromCheckpointStorage;
|
|
69
58
|
getBlocksForCheckpoint(checkpointNumber: CheckpointNumber): Promise<L2Block[] | undefined>;
|
|
70
59
|
/**
|
|
@@ -83,6 +72,11 @@ export declare class BlockStore {
|
|
|
83
72
|
removeBlocksAfter(blockNumber: BlockNumber): Promise<L2Block[]>;
|
|
84
73
|
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
85
74
|
getLatestBlockNumber(): Promise<BlockNumber>;
|
|
75
|
+
/**
|
|
76
|
+
* Resolves all L2 chain tips in a single read transaction so the snapshot is internally consistent.
|
|
77
|
+
* The result is guaranteed to satisfy finalized <= proven <= checkpointed <= proposed by block number.
|
|
78
|
+
*/
|
|
79
|
+
getL2TipsData(genesisBlockHash: Fr): Promise<L2Tips>;
|
|
86
80
|
getLatestCheckpointNumber(): Promise<CheckpointNumber>;
|
|
87
81
|
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
88
82
|
/**
|
|
@@ -92,7 +86,7 @@ export declare class BlockStore {
|
|
|
92
86
|
* @returns The requested L2 blocks
|
|
93
87
|
*/
|
|
94
88
|
getCheckpointedBlocks(start: BlockNumber, limit: number): AsyncIterableIterator<CheckpointedL2Block>;
|
|
95
|
-
getCheckpointedBlockByHash(blockHash:
|
|
89
|
+
getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined>;
|
|
96
90
|
getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
97
91
|
/**
|
|
98
92
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
@@ -101,6 +95,18 @@ export declare class BlockStore {
|
|
|
101
95
|
* @returns The requested L2 blocks
|
|
102
96
|
*/
|
|
103
97
|
getBlocks(start: BlockNumber, limit: number): AsyncIterableIterator<L2Block>;
|
|
98
|
+
/**
|
|
99
|
+
* Gets block metadata (without tx data) by block number.
|
|
100
|
+
* @param blockNumber - The number of the block to return.
|
|
101
|
+
* @returns The requested block data.
|
|
102
|
+
*/
|
|
103
|
+
getBlockData(blockNumber: BlockNumber): Promise<BlockData | undefined>;
|
|
104
|
+
/**
|
|
105
|
+
* Gets block metadata (without tx data) by archive root.
|
|
106
|
+
* @param archive - The archive root of the block to return.
|
|
107
|
+
* @returns The requested block data.
|
|
108
|
+
*/
|
|
109
|
+
getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
|
|
104
110
|
/**
|
|
105
111
|
* Gets an L2 block.
|
|
106
112
|
* @param blockNumber - The number of the block to return.
|
|
@@ -112,7 +118,7 @@ export declare class BlockStore {
|
|
|
112
118
|
* @param blockHash - The hash of the block to return.
|
|
113
119
|
* @returns The requested L2 block.
|
|
114
120
|
*/
|
|
115
|
-
getBlockByHash(blockHash:
|
|
121
|
+
getBlockByHash(blockHash: BlockHash): Promise<L2Block | undefined>;
|
|
116
122
|
/**
|
|
117
123
|
* Gets an L2 block by its archive root.
|
|
118
124
|
* @param archive - The archive root of the block to return.
|
|
@@ -124,7 +130,7 @@ export declare class BlockStore {
|
|
|
124
130
|
* @param blockHash - The hash of the block to return.
|
|
125
131
|
* @returns The requested block header.
|
|
126
132
|
*/
|
|
127
|
-
getBlockHeaderByHash(blockHash:
|
|
133
|
+
getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
|
|
128
134
|
/**
|
|
129
135
|
* Gets a block header by its archive root.
|
|
130
136
|
* @param archive - The archive root of the block to return.
|
|
@@ -139,6 +145,7 @@ export declare class BlockStore {
|
|
|
139
145
|
*/
|
|
140
146
|
getBlockHeaders(start: BlockNumber, limit: number): AsyncIterableIterator<BlockHeader>;
|
|
141
147
|
private getBlockStorages;
|
|
148
|
+
private getBlockDataFromBlockStorage;
|
|
142
149
|
private getBlockFromBlockStorage;
|
|
143
150
|
/**
|
|
144
151
|
* Gets a tx effect.
|
|
@@ -151,7 +158,7 @@ export declare class BlockStore {
|
|
|
151
158
|
* @param txHash - The hash of a tx we try to get the receipt for.
|
|
152
159
|
* @returns The requested tx receipt (or undefined if not found).
|
|
153
160
|
*/
|
|
154
|
-
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
161
|
+
getSettledTxReceipt(txHash: TxHash, l1Constants?: Pick<L1RollupConstants, 'epochDuration'>): Promise<TxReceipt | undefined>;
|
|
155
162
|
/**
|
|
156
163
|
* Looks up which block included the requested tx effect.
|
|
157
164
|
* @param txHash - The txHash of the tx.
|
|
@@ -178,6 +185,8 @@ export declare class BlockStore {
|
|
|
178
185
|
setSynchedL1BlockNumber(l1BlockNumber: bigint): Promise<boolean>;
|
|
179
186
|
getProvenCheckpointNumber(): Promise<CheckpointNumber>;
|
|
180
187
|
setProvenCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<boolean>;
|
|
188
|
+
getFinalizedCheckpointNumber(): Promise<CheckpointNumber>;
|
|
189
|
+
setFinalizedCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<boolean>;
|
|
181
190
|
/**
|
|
182
191
|
* Gets the pending chain validation status.
|
|
183
192
|
* @returns The validation status or undefined if not set.
|
|
@@ -189,4 +198,4 @@ export declare class BlockStore {
|
|
|
189
198
|
*/
|
|
190
199
|
setPendingChainValidationStatus(status: ValidateCheckpointResult | undefined): Promise<void>;
|
|
191
200
|
}
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS9ibG9ja19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQTZDLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLFNBQVMsRUFFVCxtQkFBbUIsRUFHbkIsT0FBTyxFQUVQLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBRzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBR3JGLE9BQU8sRUFDTCxXQUFXLEVBQ1gsS0FBSyxlQUFlLEVBRXBCLE1BQU0sRUFDTixTQUFTLEVBSVYsTUFBTSxrQkFBa0IsQ0FBQztBQWMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUF1QnpFLE1BQU0sTUFBTSx1QkFBdUIsR0FBRztJQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUE7Q0FBRSxDQUFDO0FBRS9FOztHQUVHO0FBQ0gscUJBQWEsVUFBVTs7SUF1Q1QsT0FBTyxDQUFDLEVBQUU7SUFBdEIsWUFBb0IsRUFBRSxFQUFFLGlCQUFpQixFQWF4QztJQUVEOzs7O09BSUc7SUFDRyx5QkFBeUIsSUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAyB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAMpD,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"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"}
|