@aztec/archiver 0.0.1-commit.0dc957cde → 0.0.1-commit.0ec55a70b
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 +15 -9
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +85 -53
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/errors.d.ts +16 -5
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +29 -6
- package/dest/factory.d.ts +4 -4
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +11 -9
- package/dest/index.d.ts +8 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +7 -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 +9 -4
- 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 +42 -0
- package/dest/modules/data_source_base.d.ts +16 -10
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +71 -60
- package/dest/modules/data_store_updater.d.ts +6 -6
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +42 -40
- package/dest/modules/l1_synchronizer.d.ts +5 -4
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +79 -54
- 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 +58 -27
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +152 -75
- 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 +50 -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.js +1 -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 +12 -3
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +24 -2
- package/dest/test/noop_l1_archiver.d.ts +4 -4
- package/dest/test/noop_l1_archiver.d.ts.map +1 -1
- package/dest/test/noop_l1_archiver.js +5 -5
- package/package.json +13 -13
- package/src/archiver.ts +91 -49
- package/src/config.ts +2 -1
- package/src/errors.ts +41 -8
- package/src/factory.ts +10 -10
- package/src/index.ts +15 -1
- package/src/l1/calldata_retriever.ts +15 -4
- package/src/modules/contract_data_source_adapter.ts +59 -0
- package/src/modules/data_source_base.ts +75 -57
- package/src/modules/data_store_updater.ts +46 -38
- package/src/modules/l1_synchronizer.ts +92 -60
- package/src/modules/validation.ts +8 -7
- package/src/store/block_store.ts +159 -80
- package/src/store/contract_class_store.ts +28 -2
- package/src/store/contract_instance_store.ts +43 -0
- package/src/store/data_stores.ts +108 -0
- package/src/store/function_names_cache.ts +37 -0
- package/src/store/l2_tips_cache.ts +1 -1
- package/src/test/fake_l1_state.ts +24 -14
- package/src/test/mock_l2_block_source.ts +23 -2
- package/src/test/noop_l1_archiver.ts +6 -6
- 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
package/dest/archiver.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { type ArchiverConfig } from './config.js';
|
|
|
18
18
|
import { ArchiverDataSourceBase } from './modules/data_source_base.js';
|
|
19
19
|
import type { ArchiverInstrumentation } from './modules/instrumentation.js';
|
|
20
20
|
import type { ArchiverL1Synchronizer } from './modules/l1_synchronizer.js';
|
|
21
|
-
import type
|
|
21
|
+
import { type ArchiverDataStores } from './store/data_stores.js';
|
|
22
22
|
import { L2TipsCache } from './store/l2_tips_cache.js';
|
|
23
23
|
/** Export ArchiverEmitter for use in factory and tests. */
|
|
24
24
|
export type { ArchiverEmitter };
|
|
@@ -38,7 +38,7 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
38
38
|
private readonly debugClient;
|
|
39
39
|
private readonly rollup;
|
|
40
40
|
private readonly l1Addresses;
|
|
41
|
-
readonly
|
|
41
|
+
readonly dataStores: ArchiverDataStores;
|
|
42
42
|
private config;
|
|
43
43
|
private readonly blobClient;
|
|
44
44
|
protected readonly l1Constants: L1RollupConstants & {
|
|
@@ -54,8 +54,8 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
54
54
|
private readonly synchronizer;
|
|
55
55
|
private initialSyncComplete;
|
|
56
56
|
private initialSyncPromise;
|
|
57
|
-
/** Queue of blocks to be added to the store, processed by the sync loop. */
|
|
58
|
-
private
|
|
57
|
+
/** Queue of blocks and checkpoints to be added to the store, processed by the sync loop. */
|
|
58
|
+
private inboundQueue;
|
|
59
59
|
/** Helper to handle updates to the store */
|
|
60
60
|
private readonly updater;
|
|
61
61
|
/** In-memory cache for L2 chain tips. */
|
|
@@ -69,7 +69,7 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
69
69
|
* @param rollup - Rollup contract instance.
|
|
70
70
|
* @param inbox - Inbox contract instance.
|
|
71
71
|
* @param l1Addresses - L1 contract addresses (registry, governance proposer, slashing proposer).
|
|
72
|
-
* @param
|
|
72
|
+
* @param dataStores - Archiver substores for storage & retrieval of blocks, encrypted logs & contract data.
|
|
73
73
|
* @param config - Archiver configuration options.
|
|
74
74
|
* @param blobClient - Client for retrieving blob data.
|
|
75
75
|
* @param dateProvider - Provider for current date/time.
|
|
@@ -79,7 +79,7 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
79
79
|
*/
|
|
80
80
|
constructor(publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, rollup: RollupContract, l1Addresses: Pick<L1ContractAddresses, 'rollupAddress' | 'registryAddress' | 'inboxAddress' | 'governanceProposerAddress'> & {
|
|
81
81
|
slashingProposerAddress: EthAddress;
|
|
82
|
-
},
|
|
82
|
+
}, dataStores: ArchiverDataStores, config: {
|
|
83
83
|
pollingIntervalMs: number;
|
|
84
84
|
batchSize: number;
|
|
85
85
|
skipValidateCheckpointAttestations?: boolean;
|
|
@@ -98,6 +98,7 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
98
98
|
*/
|
|
99
99
|
start(blockUntilSynced: boolean): Promise<void>;
|
|
100
100
|
syncImmediate(): Promise<void>;
|
|
101
|
+
trySyncImmediate(): Promise<void> | undefined;
|
|
101
102
|
/**
|
|
102
103
|
* Queues a block to be added to the archiver store and triggers processing.
|
|
103
104
|
* The block will be processed by the sync loop.
|
|
@@ -106,8 +107,13 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
106
107
|
* @returns A promise that resolves when the block has been added to the store, or rejects on error.
|
|
107
108
|
*/
|
|
108
109
|
addBlock(block: L2Block): Promise<void>;
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Queues a new proposed checkpoint into the archiver store.
|
|
112
|
+
* Checks that the checkpoint is not for an L2 slot already synced from L1.
|
|
113
|
+
* Resolves once the checkpoint has been processed.
|
|
114
|
+
*/
|
|
115
|
+
addProposedCheckpoint(pending: ProposedCheckpointInput): Promise<void>;
|
|
116
|
+
private processInboundQueue;
|
|
111
117
|
waitForInitialSync(): Promise<void>;
|
|
112
118
|
private sync;
|
|
113
119
|
private syncFromL1;
|
|
@@ -138,4 +144,4 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
138
144
|
getL2Tips(): Promise<L2Tips>;
|
|
139
145
|
rollbackTo(targetL2BlockNumber: BlockNumber): Promise<void>;
|
|
140
146
|
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hGLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBMkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUNwQixPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsS0FBSyxpQkFBaUIsRUFNdkIs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
|
package/dest/archiver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../src/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAuB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,cAAc,EAA2B,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,KAAK,eAAe,EACpB,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EACL,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../src/archiver.ts"],"names":[],"mappings":"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"}
|
package/dest/archiver.js
CHANGED
|
@@ -380,14 +380,15 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
380
380
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
381
381
|
import { RunningPromise, makeLoggingErrorHandler } from '@aztec/foundation/running-promise';
|
|
382
382
|
import { elapsed } from '@aztec/foundation/timer';
|
|
383
|
-
import { getEpochAtSlot, getSlotAtNextL1Block, getSlotRangeForEpoch, getTimestampRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
383
|
+
import { getEpochAtSlot, getSlotAtNextL1Block, getSlotRangeForEpoch, getTimestampForSlot, getTimestampRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
384
384
|
import { trackSpan } from '@aztec/telemetry-client';
|
|
385
385
|
import { mapArchiverConfig } from './config.js';
|
|
386
|
-
import { BlockAlreadyCheckpointedError, NoBlobBodiesFoundError } from './errors.js';
|
|
386
|
+
import { BlockAlreadyCheckpointedError, BlockOrCheckpointSlotExpiredError, NoBlobBodiesFoundError } from './errors.js';
|
|
387
387
|
import { validateAndLogHistoricalLogsAvailability } from './l1/validate_historical_logs.js';
|
|
388
388
|
import { validateAndLogTraceAvailability } from './l1/validate_trace.js';
|
|
389
389
|
import { ArchiverDataSourceBase } from './modules/data_source_base.js';
|
|
390
390
|
import { ArchiverDataStoreUpdater } from './modules/data_store_updater.js';
|
|
391
|
+
import { backupArchiverDataStores, getArchiverSynchPoint } from './store/data_stores.js';
|
|
391
392
|
import { L2TipsCache } from './store/l2_tips_cache.js';
|
|
392
393
|
_dec = trackSpan('Archiver.sync');
|
|
393
394
|
/**
|
|
@@ -399,7 +400,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
399
400
|
debugClient;
|
|
400
401
|
rollup;
|
|
401
402
|
l1Addresses;
|
|
402
|
-
|
|
403
|
+
dataStores;
|
|
403
404
|
config;
|
|
404
405
|
blobClient;
|
|
405
406
|
l1Constants;
|
|
@@ -418,7 +419,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
418
419
|
/** L1 synchronizer that handles fetching checkpoints and messages from L1. */ synchronizer;
|
|
419
420
|
initialSyncComplete;
|
|
420
421
|
initialSyncPromise;
|
|
421
|
-
/** Queue of blocks to be added to the store, processed by the sync loop. */
|
|
422
|
+
/** Queue of blocks and checkpoints to be added to the store, processed by the sync loop. */ inboundQueue;
|
|
422
423
|
/** Helper to handle updates to the store */ updater;
|
|
423
424
|
/** In-memory cache for L2 chain tips. */ l2TipsCache;
|
|
424
425
|
tracer;
|
|
@@ -430,22 +431,22 @@ _dec = trackSpan('Archiver.sync');
|
|
|
430
431
|
* @param rollup - Rollup contract instance.
|
|
431
432
|
* @param inbox - Inbox contract instance.
|
|
432
433
|
* @param l1Addresses - L1 contract addresses (registry, governance proposer, slashing proposer).
|
|
433
|
-
* @param
|
|
434
|
+
* @param dataStores - Archiver substores for storage & retrieval of blocks, encrypted logs & contract data.
|
|
434
435
|
* @param config - Archiver configuration options.
|
|
435
436
|
* @param blobClient - Client for retrieving blob data.
|
|
436
437
|
* @param dateProvider - Provider for current date/time.
|
|
437
438
|
* @param instrumentation - Instrumentation for metrics and tracing.
|
|
438
439
|
* @param l1Constants - L1 rollup constants.
|
|
439
440
|
* @param log - A logger.
|
|
440
|
-
*/ constructor(publicClient, debugClient, rollup, l1Addresses,
|
|
441
|
-
super(
|
|
441
|
+
*/ constructor(publicClient, debugClient, rollup, l1Addresses, dataStores, config, blobClient, instrumentation, l1Constants, synchronizer, events, l2TipsCache, log = createLogger('archiver')){
|
|
442
|
+
super(dataStores, l1Constants), this.publicClient = publicClient, this.debugClient = debugClient, this.rollup = rollup, this.l1Addresses = l1Addresses, this.dataStores = dataStores, this.config = config, this.blobClient = blobClient, this.l1Constants = l1Constants, this.log = log, this.initialSyncComplete = (_initProto(this), false), this.inboundQueue = [];
|
|
442
443
|
this.tracer = instrumentation.tracer;
|
|
443
444
|
this.instrumentation = instrumentation;
|
|
444
445
|
this.initialSyncPromise = promiseWithResolvers();
|
|
445
446
|
this.synchronizer = synchronizer;
|
|
446
447
|
this.events = events;
|
|
447
|
-
this.l2TipsCache = l2TipsCache ?? new L2TipsCache(this.
|
|
448
|
-
this.updater = new ArchiverDataStoreUpdater(this.
|
|
448
|
+
this.l2TipsCache = l2TipsCache ?? new L2TipsCache(this.dataStores.blocks);
|
|
449
|
+
this.updater = new ArchiverDataStoreUpdater(this.dataStores, this.l2TipsCache, {
|
|
449
450
|
rollupManaLimit: l1Constants.rollupManaLimit
|
|
450
451
|
});
|
|
451
452
|
// Running promise starts with a small interval inbetween runs, so all iterations needed for the initial sync
|
|
@@ -474,7 +475,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
474
475
|
}, this.config.skipHistoricalLogsCheck ?? false, this.log.getBindings());
|
|
475
476
|
// Log initial state for the archiver
|
|
476
477
|
const { l1StartBlock } = this.l1Constants;
|
|
477
|
-
const { blocksSynchedTo = l1StartBlock, messagesSynchedTo = l1StartBlock } = await this.
|
|
478
|
+
const { blocksSynchedTo = l1StartBlock, messagesSynchedTo = l1StartBlock } = await getArchiverSynchPoint(this.stores);
|
|
478
479
|
const currentL2Checkpoint = await this.getSynchedCheckpointNumber();
|
|
479
480
|
this.log.info(`Starting archiver sync to rollup contract ${this.rollup.address} from L1 block ${blocksSynchedTo} and L2 checkpoint ${currentL2Checkpoint}`, {
|
|
480
481
|
blocksSynchedTo,
|
|
@@ -490,6 +491,13 @@ _dec = trackSpan('Archiver.sync');
|
|
|
490
491
|
syncImmediate() {
|
|
491
492
|
return this.runningPromise.trigger();
|
|
492
493
|
}
|
|
494
|
+
trySyncImmediate() {
|
|
495
|
+
try {
|
|
496
|
+
return this.syncImmediate();
|
|
497
|
+
} catch (err) {
|
|
498
|
+
this.log.error(`Failed to trigger immediate archiver sync: ${err}`, err);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
493
501
|
/**
|
|
494
502
|
* Queues a block to be added to the archiver store and triggers processing.
|
|
495
503
|
* The block will be processed by the sync loop.
|
|
@@ -497,60 +505,84 @@ _dec = trackSpan('Archiver.sync');
|
|
|
497
505
|
* @param block - The L2 block to add.
|
|
498
506
|
* @returns A promise that resolves when the block has been added to the store, or rejects on error.
|
|
499
507
|
*/ addBlock(block) {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
});
|
|
506
|
-
this.log.debug(`Queued block ${block.number} for processing`);
|
|
507
|
-
// Trigger an immediate sync, but don't wait for it - the promise resolves when the block is processed
|
|
508
|
-
this.syncImmediate().catch((err)=>{
|
|
509
|
-
this.log.error(`Sync immediate call failed: ${err}`);
|
|
510
|
-
});
|
|
508
|
+
const promise = promiseWithResolvers();
|
|
509
|
+
this.inboundQueue.push({
|
|
510
|
+
block,
|
|
511
|
+
...promise,
|
|
512
|
+
type: 'block'
|
|
511
513
|
});
|
|
514
|
+
this.log.debug(`Queued block ${block.number} for processing`);
|
|
515
|
+
void this.trySyncImmediate();
|
|
516
|
+
return promise.promise;
|
|
512
517
|
}
|
|
513
|
-
|
|
514
|
-
|
|
518
|
+
/**
|
|
519
|
+
* Queues a new proposed checkpoint into the archiver store.
|
|
520
|
+
* Checks that the checkpoint is not for an L2 slot already synced from L1.
|
|
521
|
+
* Resolves once the checkpoint has been processed.
|
|
522
|
+
*/ addProposedCheckpoint(pending) {
|
|
523
|
+
const promise = promiseWithResolvers();
|
|
524
|
+
this.inboundQueue.push({
|
|
525
|
+
checkpoint: pending,
|
|
526
|
+
...promise,
|
|
527
|
+
type: 'checkpoint'
|
|
528
|
+
});
|
|
529
|
+
this.log.debug(`Queued checkpoint ${pending.checkpointNumber} for processing`);
|
|
530
|
+
void this.trySyncImmediate();
|
|
531
|
+
return promise.promise;
|
|
515
532
|
}
|
|
516
533
|
/**
|
|
517
|
-
* Processes all queued blocks, adding them to the store.
|
|
534
|
+
* Processes all queued blocks and checkpoints, adding them to the store.
|
|
518
535
|
* Called at the beginning of each sync iteration.
|
|
519
|
-
*
|
|
520
|
-
*/ async
|
|
521
|
-
if (this.
|
|
536
|
+
* Items are processed in the order they were queued.
|
|
537
|
+
*/ async processInboundQueue() {
|
|
538
|
+
if (this.inboundQueue.length === 0) {
|
|
522
539
|
return;
|
|
523
540
|
}
|
|
524
|
-
// Take all
|
|
525
|
-
const queuedItems = this.
|
|
526
|
-
this.log.debug(`Processing ${queuedItems.length} queued
|
|
541
|
+
// Take all items from the queue
|
|
542
|
+
const queuedItems = this.inboundQueue.splice(0, this.inboundQueue.length);
|
|
543
|
+
this.log.debug(`Processing ${queuedItems.length} queued inbound items`);
|
|
527
544
|
// Calculate slot threshold for validation
|
|
528
545
|
const l1Timestamp = this.synchronizer.getL1Timestamp();
|
|
529
546
|
const slotAtNextL1Block = l1Timestamp === undefined ? undefined : getSlotAtNextL1Block(l1Timestamp, this.l1Constants);
|
|
530
|
-
//
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
547
|
+
// Helpers for manipulating blocks and checkpoints in the queue
|
|
548
|
+
const getSlot = (item)=>item.type === 'block' ? item.block.header.globalVariables.slotNumber : item.checkpoint.header.slotNumber;
|
|
549
|
+
const getNumber = (item)=>item.type === 'block' ? item.block.number : item.checkpoint.checkpointNumber;
|
|
550
|
+
// Process each item individually to properly resolve/reject each promise
|
|
551
|
+
for (const item of queuedItems){
|
|
552
|
+
const { resolve, reject, type } = item;
|
|
553
|
+
const itemSlot = getSlot(item);
|
|
554
|
+
const itemNumber = getNumber(item);
|
|
555
|
+
if (slotAtNextL1Block !== undefined && itemSlot < slotAtNextL1Block) {
|
|
556
|
+
const nextSlotTimestamp = getTimestampForSlot(slotAtNextL1Block, this.l1Constants);
|
|
557
|
+
this.log.warn(`Rejecting proposed ${type} ${itemNumber} for past slot ${itemSlot} (current ${slotAtNextL1Block})`, {
|
|
558
|
+
number: itemNumber,
|
|
559
|
+
type,
|
|
536
560
|
l1Timestamp,
|
|
537
|
-
slotAtNextL1Block
|
|
561
|
+
slotAtNextL1Block,
|
|
562
|
+
nextSlotTimestamp
|
|
538
563
|
});
|
|
539
|
-
reject(new
|
|
564
|
+
reject(new BlockOrCheckpointSlotExpiredError(itemSlot, nextSlotTimestamp, l1Timestamp));
|
|
540
565
|
continue;
|
|
541
566
|
}
|
|
542
567
|
try {
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
568
|
+
if (type === 'block') {
|
|
569
|
+
const [durationMs] = await elapsed(()=>this.updater.addProposedBlock(item.block));
|
|
570
|
+
this.instrumentation.processNewProposedBlock(durationMs, item.block);
|
|
571
|
+
} else {
|
|
572
|
+
await this.updater.addProposedCheckpoint(item.checkpoint);
|
|
573
|
+
}
|
|
574
|
+
this.log.debug(`Added ${type} ${itemNumber} to store`);
|
|
546
575
|
resolve();
|
|
547
576
|
} catch (err) {
|
|
548
577
|
if (err instanceof BlockAlreadyCheckpointedError) {
|
|
549
|
-
this.log.debug(`Proposed block ${
|
|
578
|
+
this.log.debug(`Proposed block ${itemNumber} matches already checkpointed block, ignoring late proposal`);
|
|
550
579
|
resolve();
|
|
551
580
|
continue;
|
|
552
581
|
}
|
|
553
|
-
this.log.error(`Failed to add
|
|
582
|
+
this.log.error(`Failed to add ${type} ${itemNumber} to store: ${err.message}`, err, {
|
|
583
|
+
number: itemNumber,
|
|
584
|
+
type
|
|
585
|
+
});
|
|
554
586
|
reject(err);
|
|
555
587
|
}
|
|
556
588
|
}
|
|
@@ -562,7 +594,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
562
594
|
* Fetches logs from L1 contracts and processes them.
|
|
563
595
|
*/ async sync() {
|
|
564
596
|
// Process any queued blocks first, before doing L1 sync
|
|
565
|
-
await this.
|
|
597
|
+
await this.processInboundQueue();
|
|
566
598
|
// Now perform L1 sync
|
|
567
599
|
await this.syncFromL1();
|
|
568
600
|
}
|
|
@@ -576,7 +608,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
576
608
|
if (currentL1BlockNumber + 1n >= l1BlockNumberAtEnd) {
|
|
577
609
|
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete`, {
|
|
578
610
|
l1BlockNumber: currentL1BlockNumber,
|
|
579
|
-
syncPoint: await this.
|
|
611
|
+
syncPoint: await getArchiverSynchPoint(this.stores),
|
|
580
612
|
...await this.getL2Tips()
|
|
581
613
|
});
|
|
582
614
|
this.runningPromise.setPollingIntervalMS(this.config.pollingIntervalMs);
|
|
@@ -602,7 +634,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
602
634
|
return Promise.resolve();
|
|
603
635
|
}
|
|
604
636
|
backupTo(destPath) {
|
|
605
|
-
return this.
|
|
637
|
+
return backupArchiverDataStores(this.dataStores, destPath);
|
|
606
638
|
}
|
|
607
639
|
getL1Constants() {
|
|
608
640
|
return Promise.resolve(this.l1Constants);
|
|
@@ -637,9 +669,9 @@ _dec = trackSpan('Archiver.sync');
|
|
|
637
669
|
}
|
|
638
670
|
}
|
|
639
671
|
let slotFromCheckpoint;
|
|
640
|
-
const latestCheckpointNumber = await this.
|
|
672
|
+
const latestCheckpointNumber = await this.stores.blocks.getLatestCheckpointNumber();
|
|
641
673
|
if (latestCheckpointNumber > 0) {
|
|
642
|
-
const checkpointData = await this.
|
|
674
|
+
const checkpointData = await this.stores.blocks.getCheckpointData(latestCheckpointNumber);
|
|
643
675
|
if (checkpointData) {
|
|
644
676
|
slotFromCheckpoint = checkpointData.header.slotNumber;
|
|
645
677
|
}
|
|
@@ -711,13 +743,13 @@ _dec = trackSpan('Archiver.sync');
|
|
|
711
743
|
if (targetL2BlockNumber >= currentL2Block) {
|
|
712
744
|
throw new Error(`Target L2 block ${targetL2BlockNumber} must be less than current L2 block ${currentL2Block}`);
|
|
713
745
|
}
|
|
714
|
-
const targetL2Block = await this.
|
|
746
|
+
const targetL2Block = await this.stores.blocks.getCheckpointedBlock(targetL2BlockNumber);
|
|
715
747
|
if (!targetL2Block) {
|
|
716
748
|
throw new Error(`Target L2 block ${targetL2BlockNumber} not found`);
|
|
717
749
|
}
|
|
718
750
|
const targetCheckpointNumber = targetL2Block.checkpointNumber;
|
|
719
751
|
// Rollback operates at checkpoint granularity: the target block must be the last block of its checkpoint.
|
|
720
|
-
const checkpointData = await this.
|
|
752
|
+
const checkpointData = await this.stores.blocks.getCheckpointData(targetCheckpointNumber);
|
|
721
753
|
if (checkpointData) {
|
|
722
754
|
const lastBlockInCheckpoint = BlockNumber(checkpointData.startBlock + checkpointData.blockCount - 1);
|
|
723
755
|
if (targetL2BlockNumber !== lastBlockInCheckpoint) {
|
|
@@ -737,10 +769,10 @@ _dec = trackSpan('Archiver.sync');
|
|
|
737
769
|
this.log.info(`Removing checkpoints after checkpoint ${targetCheckpointNumber} (target block ${targetL2BlockNumber})`);
|
|
738
770
|
await this.updater.removeCheckpointsAfter(targetCheckpointNumber);
|
|
739
771
|
this.log.info(`Rolling back L1 to L2 messages to checkpoint ${targetCheckpointNumber}`);
|
|
740
|
-
await this.
|
|
772
|
+
await this.stores.messages.rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber);
|
|
741
773
|
this.log.info(`Setting L1 syncpoints to ${targetL1BlockNumber}`);
|
|
742
|
-
await this.
|
|
743
|
-
await this.
|
|
774
|
+
await this.stores.blocks.setSynchedL1BlockNumber(targetL1BlockNumber);
|
|
775
|
+
await this.stores.messages.setMessageSyncState({
|
|
744
776
|
l1BlockNumber: targetL1BlockNumber,
|
|
745
777
|
l1BlockHash: targetL1BlockHash
|
|
746
778
|
}, undefined);
|
package/dest/config.d.ts
CHANGED
|
@@ -29,4 +29,4 @@ export declare function mapArchiverConfig(config: Partial<ArchiverConfig>): {
|
|
|
29
29
|
ethereumAllowNoDebugHosts: boolean | undefined;
|
|
30
30
|
skipHistoricalLogsCheck: boolean | undefined;
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUEyQixNQUFNLGtDQUFrQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBRTNGLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RixPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsS0FBSyxXQUFXLEVBQ2hCLEtBQUssY0FBYyxFQUdwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsR0FDakQsY0FBYyxHQUNkLGlCQUFpQixHQUNqQixjQUFjLEdBQ2QsZ0JBQWdCLEdBQ2hCLFdBQVcsQ0FBQztBQUVkLGVBQU8sTUFBTSxzQkFBc0IsRUFBRSxrQkFBa0IsQ0FBQyxjQUFjLENBNERyRSxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHdCQUFnQix3QkFBd0IsSUFBSSxjQUFjLENBRXpEO0FBRUQsZ0ZBQWdGO0FBQ2hGLHdCQUFnQixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7RUFVaEUifQ==
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,wBAAwB,CAAC;AAE3F,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,wBAAwB,CAAC;AAE3F,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EAGpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,GACjD,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,gBAAgB,GAChB,WAAW,CAAC;AAEd,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CA4DrE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC;;;;;;;;EAUhE"}
|
package/dest/config.js
CHANGED
|
@@ -2,7 +2,7 @@ import { blobClientConfigMapping } from '@aztec/blob-client/client/config';
|
|
|
2
2
|
import { l1ContractsConfigMappings } from '@aztec/ethereum/config';
|
|
3
3
|
import { l1ContractAddressesMapping } from '@aztec/ethereum/l1-contract-addresses';
|
|
4
4
|
import { l1ReaderConfigMappings } from '@aztec/ethereum/l1-reader';
|
|
5
|
-
import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
5
|
+
import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper, optionalNumberConfigHelper } from '@aztec/foundation/config';
|
|
6
6
|
import { chainConfigMappings, pipelineConfigMappings } from '@aztec/stdlib/config';
|
|
7
7
|
export const archiverConfigMappings = {
|
|
8
8
|
...blobClientConfigMapping,
|
|
@@ -24,7 +24,7 @@ export const archiverConfigMappings = {
|
|
|
24
24
|
},
|
|
25
25
|
archiverStoreMapSizeKb: {
|
|
26
26
|
env: 'ARCHIVER_STORE_MAP_SIZE_KB',
|
|
27
|
-
|
|
27
|
+
...optionalNumberConfigHelper(),
|
|
28
28
|
description: 'The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb.'
|
|
29
29
|
},
|
|
30
30
|
skipValidateCheckpointAttestations: {
|
package/dest/errors.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import type { Fr } from '@aztec/foundation/schemas';
|
|
2
3
|
export declare class NoBlobBodiesFoundError extends Error {
|
|
3
4
|
constructor(l2BlockNum: number);
|
|
@@ -10,8 +11,11 @@ export declare class InitialCheckpointNumberNotSequentialError extends Error {
|
|
|
10
11
|
readonly previousCheckpointNumber: number | undefined;
|
|
11
12
|
constructor(newCheckpointNumber: number, previousCheckpointNumber: number | undefined);
|
|
12
13
|
}
|
|
14
|
+
export declare class BlockCheckpointNumberNotSequentialError extends Error {
|
|
15
|
+
constructor(blockNumber: BlockNumber, blockCheckpointNumber: CheckpointNumber, previous: CheckpointNumber | undefined);
|
|
16
|
+
}
|
|
13
17
|
export declare class CheckpointNumberNotSequentialError extends Error {
|
|
14
|
-
constructor(newCheckpointNumber:
|
|
18
|
+
constructor(newCheckpointNumber: CheckpointNumber, previous: CheckpointNumber | undefined);
|
|
15
19
|
}
|
|
16
20
|
export declare class BlockIndexNotSequentialError extends Error {
|
|
17
21
|
constructor(newBlockIndex: number, previousBlockIndex: number | undefined);
|
|
@@ -50,11 +54,18 @@ export declare class ProposedCheckpointStaleError extends Error {
|
|
|
50
54
|
readonly currentProposedNumber: number;
|
|
51
55
|
constructor(proposedCheckpointNumber: number, currentProposedNumber: number);
|
|
52
56
|
}
|
|
53
|
-
/** Thrown when a proposed checkpoint number is not the expected
|
|
57
|
+
/** Thrown when a proposed checkpoint number is not the expected latestTip + 1. */
|
|
54
58
|
export declare class ProposedCheckpointNotSequentialError extends Error {
|
|
55
59
|
readonly proposedCheckpointNumber: number;
|
|
56
|
-
readonly
|
|
57
|
-
constructor(proposedCheckpointNumber: number,
|
|
60
|
+
readonly latestTipNumber: number;
|
|
61
|
+
constructor(proposedCheckpointNumber: number, latestTipNumber: number);
|
|
62
|
+
}
|
|
63
|
+
/** Thrown when a proposed checkpoint or block L2 slot has already expired on L1. */
|
|
64
|
+
export declare class BlockOrCheckpointSlotExpiredError extends Error {
|
|
65
|
+
readonly slot: number;
|
|
66
|
+
readonly nextSlotStart: bigint;
|
|
67
|
+
readonly l1TimestampSynced: bigint | undefined;
|
|
68
|
+
constructor(slot: number, nextSlotStart: bigint, l1TimestampSynced: bigint | undefined);
|
|
58
69
|
}
|
|
59
70
|
/** Thrown when attempting to promote a proposed checkpoint but no proposed checkpoint exists in the store. */
|
|
60
71
|
export declare class NoProposedCheckpointToPromoteError extends Error {
|
|
@@ -78,4 +89,4 @@ export declare class CannotOverwriteCheckpointedBlockError extends Error {
|
|
|
78
89
|
readonly lastCheckpointedBlock: number;
|
|
79
90
|
constructor(blockNumber: number, lastCheckpointedBlock: number);
|
|
80
91
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBELHFCQUFhLHNCQUF1QixTQUFRLEtBQUs7SUFDL0MsWUFBWSxVQUFVLEVBQUUsTUFBTSxFQUc3QjtDQUNGO0FBRUQscUJBQWEsNkJBQThCLFNBQVEsS0FBSztJQUN0RCxZQUFZLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBRy9EO0NBQ0Y7QUFFRCxxQkFBYSx5Q0FBMEMsU0FBUSxLQUFLO2FBRWhELG1CQUFtQixFQUFFLE1BQU07YUFDM0Isd0JBQXdCLEVBQUUsTUFBTSxHQUFHLFNBQVM7SUFGOUQsWUFDa0IsbUJBQW1CLEVBQUUsTUFBTSxFQUMzQix3QkFBd0IsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQVE3RDtDQUNGO0FBRUQscUJBQWEsdUNBQXdDLFNBQVEsS0FBSztJQUNoRSxZQUNFLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLHFCQUFxQixFQUFFLGdCQUFnQixFQUN2QyxRQUFRLEVBQUUsZ0JBQWdCLEdBQUcsU0FBUyxFQU12QztDQUNGO0FBRUQscUJBQWEsa0NBQW1DLFNBQVEsS0FBSztJQUMzRCxZQUFZLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLEVBS3hGO0NBQ0Y7QUFFRCxxQkFBYSw0QkFBNkIsU0FBUSxLQUFLO0lBQ3JELFlBQVksYUFBYSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUt4RTtDQUNGO0FBRUQscUJBQWEsOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUNFLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLG1CQUFtQixFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQ3ZDLGVBQWUsRUFBRSxFQUFFLEVBQ25CLG9CQUFvQixFQUFFLEVBQUUsRUFNekI7Q0FDRjtBQUVELHFCQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxnQkFBZ0IsRUFBRSxNQUFNLEVBR25DO0NBQ0Y7QUFFRCxxQkFBYSxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksV0FBVyxFQUFFLE1BQU0sRUFHOUI7Q0FDRjtBQUVELHVIQUF1SDtBQUN2SCxxQkFBYSw2QkFBOEIsU0FBUSxLQUFLO2FBQzFCLFdBQVcsRUFBRSxNQUFNO0lBQS9DLFlBQTRCLFdBQVcsRUFBRSxNQUFNLEVBRzlDO0NBQ0Y7QUFFRCw2R0FBNkc7QUFDN0cscUJBQWEsMkJBQTRCLFNBQVEsS0FBSzthQUVsQyxPQUFPLEVBQUUsU0FBUyxHQUFHLFFBQVE7YUFDN0IsR0FBRyxFQUFFLE1BQU07YUFDWCxlQUFlLEVBQUUsTUFBTTthQUN2QixjQUFjLEVBQUUsTUFBTTtJQUp4QyxZQUNrQixPQUFPLEVBQUUsU0FBUyxHQUFHLFFBQVEsRUFDN0IsR0FBRyxFQUFFLE1BQU0sRUFDWCxlQUFlLEVBQUUsTUFBTSxFQUN2QixjQUFjLEVBQUUsTUFBTSxFQU92QztDQUNGO0FBRUQsOEdBQThHO0FBQzlHLHFCQUFhLDJCQUE0QixTQUFRLEtBQUs7YUFFbEMsZ0JBQWdCLEVBQUUsTUFBTTthQUN4QixtQkFBbUIsRUFBRSxNQUFNO0lBRjdDLFlBQ2tCLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsbUJBQW1CLEVBQUUsTUFBTSxFQU81QztDQUNGO0FBRUQsNkVBQTZFO0FBQzdFLHFCQUFhLDRCQUE2QixTQUFRLEtBQUs7YUFFbkMsd0JBQXdCLEVBQUUsTUFBTTthQUNoQyxxQkFBcUIsRUFBRSxNQUFNO0lBRi9DLFlBQ2tCLHdCQUF3QixFQUFFLE1BQU0sRUFDaEMscUJBQXFCLEVBQUUsTUFBTSxFQUk5QztDQUNGO0FBRUQsa0ZBQWtGO0FBQ2xGLHFCQUFhLG9DQUFxQyxTQUFRLEtBQUs7YUFFM0Msd0JBQXdCLEVBQUUsTUFBTTthQUNoQyxlQUFlLEVBQUUsTUFBTTtJQUZ6QyxZQUNrQix3QkFBd0IsRUFBRSxNQUFNLEVBQ2hDLGVBQWUsRUFBRSxNQUFNLEVBTXhDO0NBQ0Y7QUFFRCxvRkFBb0Y7QUFDcEYscUJBQWEsaUNBQWtDLFNBQVEsS0FBSzthQUV4QyxJQUFJLEVBQUUsTUFBTTthQUNaLGFBQWEsRUFBRSxNQUFNO2FBQ3JCLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxTQUFTO0lBSHZELFlBQ2tCLElBQUksRUFBRSxNQUFNLEVBQ1osYUFBYSxFQUFFLE1BQU0sRUFDckIsaUJBQWlCLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFPdEQ7Q0FDRjtBQUVELDhHQUE4RztBQUM5RyxxQkFBYSxrQ0FBbUMsU0FBUSxLQUFLO0lBQzNELGNBR0M7Q0FDRjtBQUVELCtGQUErRjtBQUMvRixxQkFBYSwwQ0FBMkMsU0FBUSxLQUFLO2FBRWpELG1CQUFtQixFQUFFLEVBQUU7YUFDdkIsaUJBQWlCLEVBQUUsRUFBRTtJQUZ2QyxZQUNrQixtQkFBbUIsRUFBRSxFQUFFLEVBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsRUFNdEM7Q0FDRjtBQUVELG9HQUFvRztBQUNwRyxxQkFBYSw2Q0FBOEMsU0FBUSxLQUFLO2FBRXBELHdCQUF3QixFQUFFLE1BQU07YUFDaEMsc0JBQXNCLEVBQUUsTUFBTTtJQUZoRCxZQUNrQix3QkFBd0IsRUFBRSxNQUFNLEVBQ2hDLHNCQUFzQixFQUFFLE1BQU0sRUFNL0M7Q0FDRjtBQUVELHFHQUFxRztBQUNyRyxxQkFBYSxxQ0FBc0MsU0FBUSxLQUFLO2FBRTVDLFdBQVcsRUFBRSxNQUFNO2FBQ25CLHFCQUFxQixFQUFFLE1BQU07SUFGL0MsWUFDa0IsV0FBVyxFQUFFLE1BQU0sRUFDbkIscUJBQXFCLEVBQUUsTUFBTSxFQU05QztDQUNGIn0=
|
package/dest/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AAEpD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dest/errors.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export class NoBlobBodiesFoundError extends Error {
|
|
2
2
|
constructor(l2BlockNum){
|
|
3
3
|
super(`No blob bodies found for block ${l2BlockNum}`);
|
|
4
|
+
this.name = 'NoBlobBodiesFoundError';
|
|
4
5
|
}
|
|
5
6
|
}
|
|
6
7
|
export class BlockNumberNotSequentialError extends Error {
|
|
7
8
|
constructor(newBlockNumber, previous){
|
|
8
9
|
super(`Cannot insert new block ${newBlockNumber} given previous block number is ${previous ?? 'undefined'}`);
|
|
10
|
+
this.name = 'BlockNumberNotSequentialError';
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
13
|
export class InitialCheckpointNumberNotSequentialError extends Error {
|
|
@@ -13,31 +15,43 @@ export class InitialCheckpointNumberNotSequentialError extends Error {
|
|
|
13
15
|
previousCheckpointNumber;
|
|
14
16
|
constructor(newCheckpointNumber, previousCheckpointNumber){
|
|
15
17
|
super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous checkpoint number in store is ${previousCheckpointNumber ?? 'undefined'}`), this.newCheckpointNumber = newCheckpointNumber, this.previousCheckpointNumber = previousCheckpointNumber;
|
|
18
|
+
this.name = 'InitialCheckpointNumberNotSequentialError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class BlockCheckpointNumberNotSequentialError extends Error {
|
|
22
|
+
constructor(blockNumber, blockCheckpointNumber, previous){
|
|
23
|
+
super(`Cannot insert new block ${blockNumber} for checkpoint ${blockCheckpointNumber} given previous checkpoint number is ${previous ?? 'undefined'}`);
|
|
24
|
+
this.name = 'BlockCheckpointNumberNotSequentialError';
|
|
16
25
|
}
|
|
17
26
|
}
|
|
18
27
|
export class CheckpointNumberNotSequentialError extends Error {
|
|
19
|
-
constructor(newCheckpointNumber, previous
|
|
20
|
-
super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous
|
|
28
|
+
constructor(newCheckpointNumber, previous){
|
|
29
|
+
super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous checkpoint number is ${previous ?? 'undefined'}`);
|
|
30
|
+
this.name = 'CheckpointNumberNotSequentialError';
|
|
21
31
|
}
|
|
22
32
|
}
|
|
23
33
|
export class BlockIndexNotSequentialError extends Error {
|
|
24
34
|
constructor(newBlockIndex, previousBlockIndex){
|
|
25
35
|
super(`Cannot insert new block at checkpoint index ${newBlockIndex} given previous block index is ${previousBlockIndex ?? 'undefined'}`);
|
|
36
|
+
this.name = 'BlockIndexNotSequentialError';
|
|
26
37
|
}
|
|
27
38
|
}
|
|
28
39
|
export class BlockArchiveNotConsistentError extends Error {
|
|
29
40
|
constructor(newBlockNumber, previousBlockNumber, newBlockArchive, previousBlockArchive){
|
|
30
41
|
super(`Cannot insert new block number ${newBlockNumber} with archive ${newBlockArchive.toString()} previous block number is ${previousBlockNumber ?? 'undefined'}, previous archive is ${previousBlockArchive?.toString() ?? 'undefined'}`);
|
|
42
|
+
this.name = 'BlockArchiveNotConsistentError';
|
|
31
43
|
}
|
|
32
44
|
}
|
|
33
45
|
export class CheckpointNotFoundError extends Error {
|
|
34
46
|
constructor(checkpointNumber){
|
|
35
47
|
super(`Failed to find expected checkpoint number ${checkpointNumber}`);
|
|
48
|
+
this.name = 'CheckpointNotFoundError';
|
|
36
49
|
}
|
|
37
50
|
}
|
|
38
51
|
export class BlockNotFoundError extends Error {
|
|
39
52
|
constructor(blockNumber){
|
|
40
53
|
super(`Failed to find expected block number ${blockNumber}`);
|
|
54
|
+
this.name = 'BlockNotFoundError';
|
|
41
55
|
}
|
|
42
56
|
}
|
|
43
57
|
/** Thrown when a proposed block matches a block that was already checkpointed. This is expected for late proposals. */ export class BlockAlreadyCheckpointedError extends Error {
|
|
@@ -73,14 +87,23 @@ export class BlockNotFoundError extends Error {
|
|
|
73
87
|
this.name = 'ProposedCheckpointStaleError';
|
|
74
88
|
}
|
|
75
89
|
}
|
|
76
|
-
/** Thrown when a proposed checkpoint number is not the expected
|
|
90
|
+
/** Thrown when a proposed checkpoint number is not the expected latestTip + 1. */ export class ProposedCheckpointNotSequentialError extends Error {
|
|
77
91
|
proposedCheckpointNumber;
|
|
78
|
-
|
|
79
|
-
constructor(proposedCheckpointNumber,
|
|
80
|
-
super(`Proposed checkpoint ${proposedCheckpointNumber} is not sequential: expected ${
|
|
92
|
+
latestTipNumber;
|
|
93
|
+
constructor(proposedCheckpointNumber, latestTipNumber){
|
|
94
|
+
super(`Proposed checkpoint ${proposedCheckpointNumber} is not sequential: expected ${latestTipNumber + 1} (latest tip + 1, where tip is highest of confirmed or pending)`), this.proposedCheckpointNumber = proposedCheckpointNumber, this.latestTipNumber = latestTipNumber;
|
|
81
95
|
this.name = 'ProposedCheckpointNotSequentialError';
|
|
82
96
|
}
|
|
83
97
|
}
|
|
98
|
+
/** Thrown when a proposed checkpoint or block L2 slot has already expired on L1. */ export class BlockOrCheckpointSlotExpiredError extends Error {
|
|
99
|
+
slot;
|
|
100
|
+
nextSlotStart;
|
|
101
|
+
l1TimestampSynced;
|
|
102
|
+
constructor(slot, nextSlotStart, l1TimestampSynced){
|
|
103
|
+
super(`Checkpoint or block for slot ${slot} is expired: L1 synced to ${l1TimestampSynced} which is past the next slot start ${nextSlotStart}. ` + `If the checkpoint still lands via a late L1 tx, the archiver will pick it up via normal L1-sync (not the pending-queue shortcut).`), this.slot = slot, this.nextSlotStart = nextSlotStart, this.l1TimestampSynced = l1TimestampSynced;
|
|
104
|
+
this.name = 'BlockOrCheckpointSlotExpiredError';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
84
107
|
/** Thrown when attempting to promote a proposed checkpoint but no proposed checkpoint exists in the store. */ export class NoProposedCheckpointToPromoteError extends Error {
|
|
85
108
|
constructor(){
|
|
86
109
|
super('Cannot promote proposed checkpoint: no proposed checkpoint exists');
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
2
2
|
import { Archiver, type ArchiverDeps } from './archiver.js';
|
|
3
3
|
import { type ArchiverConfig } from './config.js';
|
|
4
|
-
import {
|
|
4
|
+
import { type ArchiverDataStores } from './store/data_stores.js';
|
|
5
5
|
export declare const ARCHIVER_STORE_NAME = "archiver";
|
|
6
6
|
/** Creates an archiver store. */
|
|
7
|
-
export declare function createArchiverStore(userConfig: Pick<ArchiverConfig, 'archiverStoreMapSizeKb' | 'maxLogs'> & DataStoreConfig): Promise<
|
|
7
|
+
export declare function createArchiverStore(userConfig: Pick<ArchiverConfig, 'archiverStoreMapSizeKb' | 'maxLogs'> & DataStoreConfig): Promise<ArchiverDataStores>;
|
|
8
8
|
/**
|
|
9
9
|
* Creates a local archiver.
|
|
10
10
|
* @param config - The archiver configuration.
|
|
@@ -16,5 +16,5 @@ export declare function createArchiver(config: ArchiverConfig & DataStoreConfig,
|
|
|
16
16
|
blockUntilSync: boolean;
|
|
17
17
|
}): Promise<Archiver>;
|
|
18
18
|
/** Registers protocol contracts in the archiver store. Idempotent — skips contracts that already exist (e.g. on node restart). */
|
|
19
|
-
export declare function registerProtocolContracts(
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
export declare function registerProtocolContracts(stores: ArchiverDataStores): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTTlELE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUFxQixNQUFNLGFBQWEsQ0FBQztBQUdyRSxPQUFPLEVBQXVCLEtBQUssa0JBQWtCLEVBQTRCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEgsZUFBTyxNQUFNLG1CQUFtQixhQUFhLENBQUM7QUFFOUMsaUNBQWlDO0FBQ2pDLHdCQUFzQixtQkFBbUIsQ0FDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsd0JBQXdCLEdBQUcsU0FBUyxDQUFDLEdBQUcsZUFBZSxHQUN2RixPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPN0I7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBc0IsY0FBYyxDQUNsQyxNQUFNLEVBQUUsY0FBYyxHQUFHLGVBQWUsRUFDeEMsSUFBSSxFQUFFLFlBQVksRUFDbEIsSUFBSSxHQUFFO0lBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQTtDQUE2QixHQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBd0huQjtBQUVELG9JQUFrSTtBQUNsSSx3QkFBc0IseUJBQXlCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixpQkF5QnpFIn0=
|