@aztec/archiver 0.0.1-commit.2b2662070 → 0.0.1-commit.2c0ee1788
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 +17 -10
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +92 -53
- package/dest/config.d.ts +3 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +14 -3
- package/dest/errors.d.ts +32 -5
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +51 -6
- package/dest/factory.d.ts +4 -4
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +13 -10
- package/dest/index.d.ts +10 -3
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +9 -2
- package/dest/l1/calldata_retriever.d.ts +2 -1
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +9 -4
- package/dest/l1/data_retrieval.d.ts +18 -9
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +13 -19
- package/dest/l1/validate_historical_logs.d.ts +23 -0
- package/dest/l1/validate_historical_logs.d.ts.map +1 -0
- package/dest/l1/validate_historical_logs.js +108 -0
- package/dest/modules/contract_data_source_adapter.d.ts +25 -0
- package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
- package/dest/modules/contract_data_source_adapter.js +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 +16 -9
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +52 -40
- package/dest/modules/instrumentation.d.ts +4 -1
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +5 -0
- package/dest/modules/l1_synchronizer.d.ts +8 -4
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +182 -70
- 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 +59 -21
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +181 -66
- 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 +7 -3
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +42 -15
- 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 +9 -6
- package/package.json +13 -13
- package/src/archiver.ts +108 -50
- package/src/config.ts +15 -1
- package/src/errors.ts +75 -8
- package/src/factory.ts +11 -10
- package/src/index.ts +17 -2
- package/src/l1/calldata_retriever.ts +15 -4
- package/src/l1/data_retrieval.ts +30 -35
- package/src/l1/validate_historical_logs.ts +140 -0
- 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 +71 -39
- package/src/modules/instrumentation.ts +8 -0
- package/src/modules/l1_synchronizer.ts +241 -71
- package/src/modules/validation.ts +8 -7
- package/src/store/block_store.ts +204 -73
- 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 +47 -24
- package/src/test/mock_l2_block_source.ts +23 -2
- package/src/test/noop_l1_archiver.ts +9 -6
- package/dest/store/kv_archiver_store.d.ts +0 -377
- package/dest/store/kv_archiver_store.d.ts.map +0 -1
- package/dest/store/kv_archiver_store.js +0 -494
- package/src/store/kv_archiver_store.ts +0 -713
|
@@ -80,6 +80,15 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
80
80
|
getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
|
|
81
81
|
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
82
82
|
getBlockData(number: BlockNumber): Promise<BlockData | undefined>;
|
|
83
|
+
getCheckpointData(_n: CheckpointNumber): Promise<CheckpointData | undefined>;
|
|
84
|
+
getCheckpointDataRange(_from: CheckpointNumber, _limit: number): Promise<CheckpointData[]>;
|
|
85
|
+
getCheckpointNumberBySlot(_slot: SlotNumber): Promise<CheckpointNumber | undefined>;
|
|
86
|
+
getBlockDataWithCheckpointContext(number: BlockNumber): Promise<{
|
|
87
|
+
data: BlockData;
|
|
88
|
+
checkpoint: undefined;
|
|
89
|
+
l1: undefined;
|
|
90
|
+
attestations: never[];
|
|
91
|
+
} | undefined>;
|
|
83
92
|
getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
|
|
84
93
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
85
94
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
@@ -132,8 +141,8 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
132
141
|
syncImmediate(): Promise<void>;
|
|
133
142
|
isPendingChainInvalid(): Promise<boolean>;
|
|
134
143
|
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
135
|
-
|
|
136
|
-
|
|
144
|
+
getLastCheckpoint(): Promise<ProposedCheckpointData | undefined>;
|
|
145
|
+
getLastProposedCheckpoint(): Promise<ProposedCheckpointData | undefined>;
|
|
137
146
|
/** Returns checkpoints whose slot falls within the given epoch. */
|
|
138
147
|
private getCheckpointsInEpoch;
|
|
139
148
|
/** Creates a mock L1PublishedData for a checkpoint. */
|
|
@@ -143,4 +152,4 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
143
152
|
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */
|
|
144
153
|
private findCheckpointNumberForBlock;
|
|
145
154
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxTQUFTLEVBQ2QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLGNBQWMsRUFFbkIsS0FBSyxzQkFBc0IsRUFDM0IsbUJBQW1CLEVBQ3BCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuSCxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFHdkIsTUFBTSw2QkFBNkIsQ0FBQztBQUdyQyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRDs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLGFBQWEs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
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
|
|
@@ -247,6 +247,27 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
247
247
|
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
248
248
|
};
|
|
249
249
|
}
|
|
250
|
+
getCheckpointData(_n) {
|
|
251
|
+
return Promise.resolve(undefined);
|
|
252
|
+
}
|
|
253
|
+
getCheckpointDataRange(_from, _limit) {
|
|
254
|
+
return Promise.resolve([]);
|
|
255
|
+
}
|
|
256
|
+
getCheckpointNumberBySlot(_slot) {
|
|
257
|
+
return Promise.resolve(undefined);
|
|
258
|
+
}
|
|
259
|
+
async getBlockDataWithCheckpointContext(number) {
|
|
260
|
+
const data = await this.getBlockData(number);
|
|
261
|
+
if (!data) {
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
data,
|
|
266
|
+
checkpoint: undefined,
|
|
267
|
+
l1: undefined,
|
|
268
|
+
attestations: []
|
|
269
|
+
};
|
|
270
|
+
}
|
|
250
271
|
async getBlockDataByArchive(archive) {
|
|
251
272
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
252
273
|
if (!block) {
|
|
@@ -275,6 +296,7 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
275
296
|
checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
|
|
276
297
|
startBlock: checkpoint.blocks[0].number,
|
|
277
298
|
blockCount: checkpoint.blocks.length,
|
|
299
|
+
feeAssetPriceModifier: checkpoint.feeAssetPriceModifier,
|
|
278
300
|
attestations: [],
|
|
279
301
|
l1: this.mockL1DataForCheckpoint(checkpoint)
|
|
280
302
|
})));
|
|
@@ -437,10 +459,10 @@ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
437
459
|
valid: true
|
|
438
460
|
});
|
|
439
461
|
}
|
|
440
|
-
|
|
462
|
+
getLastCheckpoint() {
|
|
441
463
|
return Promise.resolve(undefined);
|
|
442
464
|
}
|
|
443
|
-
|
|
465
|
+
getLastProposedCheckpoint() {
|
|
444
466
|
return Promise.resolve(undefined);
|
|
445
467
|
}
|
|
446
468
|
/** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
|
|
@@ -4,14 +4,14 @@ import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
|
4
4
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
5
|
import { Archiver } from '../archiver.js';
|
|
6
6
|
import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { ArchiverDataStores } from '../store/data_stores.js';
|
|
8
8
|
/**
|
|
9
9
|
* Archiver with mocked L1 connectivity for testing.
|
|
10
10
|
* Uses mock L1 clients and a noop synchronizer, enabling tests that
|
|
11
11
|
* don't require real Ethereum connectivity.
|
|
12
12
|
*/
|
|
13
13
|
export declare class NoopL1Archiver extends Archiver {
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
|
|
15
15
|
genesisArchiveRoot: Fr;
|
|
16
16
|
}, instrumentation: ArchiverInstrumentation);
|
|
17
17
|
/** Override start to skip L1 validation checks. */
|
|
@@ -20,7 +20,7 @@ export declare class NoopL1Archiver extends Archiver {
|
|
|
20
20
|
getSyncedL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
21
21
|
}
|
|
22
22
|
/** Creates an archiver with mocked L1 connectivity for testing. */
|
|
23
|
-
export declare function createNoopL1Archiver(
|
|
23
|
+
export declare function createNoopL1Archiver(dataStores: ArchiverDataStores, l1Constants: L1RollupConstants & {
|
|
24
24
|
genesisArchiveRoot: Fr;
|
|
25
25
|
}, telemetry?: TelemetryClient): Promise<NoopL1Archiver>;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBS2hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBeUJsRTs7OztHQUlHO0FBQ0gscUJBQWEsY0FBZSxTQUFRLFFBQVE7SUFDMUMsWUFDRSxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztRQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQzNELGVBQWUsRUFBRSx1QkFBdUIsRUF5Q3pDO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsR0FBRSxlQUFzQyxHQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFDLENBR3pCIn0=
|
|
@@ -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;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,yBAAyB,CAAC;AAKhG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,
|
|
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;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,yBAAyB,CAAC;AAKhG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAyBlE;;;;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,EAyCzC;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,GAAE,eAAsC,GAChD,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
|
@@ -30,7 +30,7 @@ import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
|
30
30
|
* Uses mock L1 clients and a noop synchronizer, enabling tests that
|
|
31
31
|
* don't require real Ethereum connectivity.
|
|
32
32
|
*/ export class NoopL1Archiver extends Archiver {
|
|
33
|
-
constructor(
|
|
33
|
+
constructor(dataStores, l1Constants, instrumentation){
|
|
34
34
|
// Create mocks for L1 clients
|
|
35
35
|
const publicClient = mock();
|
|
36
36
|
const debugClient = mock();
|
|
@@ -42,15 +42,18 @@ import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
|
42
42
|
const events = new EventEmitter();
|
|
43
43
|
const synchronizer = new NoopL1Synchronizer(instrumentation.tracer);
|
|
44
44
|
super(publicClient, debugClient, rollup, {
|
|
45
|
+
rollupAddress: EthAddress.ZERO,
|
|
45
46
|
registryAddress: EthAddress.ZERO,
|
|
47
|
+
inboxAddress: EthAddress.ZERO,
|
|
46
48
|
governanceProposerAddress: EthAddress.ZERO,
|
|
47
49
|
slashingProposerAddress: EthAddress.ZERO
|
|
48
|
-
},
|
|
50
|
+
}, dataStores, {
|
|
49
51
|
pollingIntervalMs: 1000,
|
|
50
52
|
batchSize: 100,
|
|
51
53
|
skipValidateCheckpointAttestations: true,
|
|
52
54
|
maxAllowedEthClientDriftSeconds: 300,
|
|
53
|
-
ethereumAllowNoDebugHosts: true
|
|
55
|
+
ethereumAllowNoDebugHosts: true,
|
|
56
|
+
skipHistoricalLogsCheck: true
|
|
54
57
|
}, blobClient, instrumentation, {
|
|
55
58
|
...l1Constants,
|
|
56
59
|
l1StartBlockHash: Buffer32.random()
|
|
@@ -65,7 +68,7 @@ import { ArchiverInstrumentation } from '../modules/instrumentation.js';
|
|
|
65
68
|
return Promise.resolve(SlotNumber(Number.MAX_SAFE_INTEGER));
|
|
66
69
|
}
|
|
67
70
|
}
|
|
68
|
-
/** Creates an archiver with mocked L1 connectivity for testing. */ export async function createNoopL1Archiver(
|
|
69
|
-
const instrumentation = await ArchiverInstrumentation.new(telemetry, ()=>
|
|
70
|
-
return new NoopL1Archiver(
|
|
71
|
+
/** Creates an archiver with mocked L1 connectivity for testing. */ export async function createNoopL1Archiver(dataStores, l1Constants, telemetry = getTelemetryClient()) {
|
|
72
|
+
const instrumentation = await ArchiverInstrumentation.new(telemetry, ()=>dataStores.db.estimateSize());
|
|
73
|
+
return new NoopL1Archiver(dataStores, l1Constants, instrumentation);
|
|
71
74
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.2c0ee1788",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -65,18 +65,18 @@
|
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
69
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
70
|
-
"@aztec/constants": "0.0.1-commit.
|
|
71
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
72
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
73
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
74
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
75
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
77
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
78
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
79
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
68
|
+
"@aztec/blob-client": "0.0.1-commit.2c0ee1788",
|
|
69
|
+
"@aztec/blob-lib": "0.0.1-commit.2c0ee1788",
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.2c0ee1788",
|
|
71
|
+
"@aztec/epoch-cache": "0.0.1-commit.2c0ee1788",
|
|
72
|
+
"@aztec/ethereum": "0.0.1-commit.2c0ee1788",
|
|
73
|
+
"@aztec/foundation": "0.0.1-commit.2c0ee1788",
|
|
74
|
+
"@aztec/kv-store": "0.0.1-commit.2c0ee1788",
|
|
75
|
+
"@aztec/l1-artifacts": "0.0.1-commit.2c0ee1788",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.2c0ee1788",
|
|
77
|
+
"@aztec/protocol-contracts": "0.0.1-commit.2c0ee1788",
|
|
78
|
+
"@aztec/stdlib": "0.0.1-commit.2c0ee1788",
|
|
79
|
+
"@aztec/telemetry-client": "0.0.1-commit.2c0ee1788",
|
|
80
80
|
"lodash.groupby": "^4.6.0",
|
|
81
81
|
"lodash.omit": "^4.5.0",
|
|
82
82
|
"tslib": "^2.5.0",
|
package/src/archiver.ts
CHANGED
|
@@ -25,18 +25,20 @@ import {
|
|
|
25
25
|
getEpochAtSlot,
|
|
26
26
|
getSlotAtNextL1Block,
|
|
27
27
|
getSlotRangeForEpoch,
|
|
28
|
+
getTimestampForSlot,
|
|
28
29
|
getTimestampRangeForEpoch,
|
|
29
30
|
} from '@aztec/stdlib/epoch-helpers';
|
|
30
31
|
import { type TelemetryClient, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
|
|
31
32
|
|
|
32
33
|
import { type ArchiverConfig, mapArchiverConfig } from './config.js';
|
|
33
|
-
import { BlockAlreadyCheckpointedError, NoBlobBodiesFoundError } from './errors.js';
|
|
34
|
+
import { BlockAlreadyCheckpointedError, BlockOrCheckpointSlotExpiredError, NoBlobBodiesFoundError } from './errors.js';
|
|
35
|
+
import { validateAndLogHistoricalLogsAvailability } from './l1/validate_historical_logs.js';
|
|
34
36
|
import { validateAndLogTraceAvailability } from './l1/validate_trace.js';
|
|
35
37
|
import { ArchiverDataSourceBase } from './modules/data_source_base.js';
|
|
36
38
|
import { ArchiverDataStoreUpdater } from './modules/data_store_updater.js';
|
|
37
39
|
import type { ArchiverInstrumentation } from './modules/instrumentation.js';
|
|
38
40
|
import type { ArchiverL1Synchronizer } from './modules/l1_synchronizer.js';
|
|
39
|
-
import type
|
|
41
|
+
import { type ArchiverDataStores, backupArchiverDataStores, getArchiverSynchPoint } from './store/data_stores.js';
|
|
40
42
|
import { L2TipsCache } from './store/l2_tips_cache.js';
|
|
41
43
|
|
|
42
44
|
/** Export ArchiverEmitter for use in factory and tests. */
|
|
@@ -44,11 +46,20 @@ export type { ArchiverEmitter };
|
|
|
44
46
|
|
|
45
47
|
/** Request to add a block to the archiver, queued for processing by the sync loop. */
|
|
46
48
|
type AddBlockRequest = {
|
|
49
|
+
type: 'block';
|
|
47
50
|
block: L2Block;
|
|
48
51
|
resolve: () => void;
|
|
49
52
|
reject: (err: Error) => void;
|
|
50
53
|
};
|
|
51
54
|
|
|
55
|
+
/** Request to add a proposed checkpoint to the archiver, queued for processing by the sync loop. */
|
|
56
|
+
type AddProposedCheckpointRequest = {
|
|
57
|
+
type: 'checkpoint';
|
|
58
|
+
checkpoint: ProposedCheckpointInput;
|
|
59
|
+
resolve: () => void;
|
|
60
|
+
reject: (err: Error) => void;
|
|
61
|
+
};
|
|
62
|
+
|
|
52
63
|
export type ArchiverDeps = {
|
|
53
64
|
telemetry?: TelemetryClient;
|
|
54
65
|
blobClient: BlobClientInterface;
|
|
@@ -74,8 +85,8 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
74
85
|
private initialSyncComplete: boolean = false;
|
|
75
86
|
private initialSyncPromise: PromiseWithResolvers<void>;
|
|
76
87
|
|
|
77
|
-
/** Queue of blocks to be added to the store, processed by the sync loop. */
|
|
78
|
-
private
|
|
88
|
+
/** Queue of blocks and checkpoints to be added to the store, processed by the sync loop. */
|
|
89
|
+
private inboundQueue: (AddBlockRequest | AddProposedCheckpointRequest)[] = [];
|
|
79
90
|
|
|
80
91
|
/** Helper to handle updates to the store */
|
|
81
92
|
private readonly updater: ArchiverDataStoreUpdater;
|
|
@@ -94,7 +105,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
94
105
|
* @param rollup - Rollup contract instance.
|
|
95
106
|
* @param inbox - Inbox contract instance.
|
|
96
107
|
* @param l1Addresses - L1 contract addresses (registry, governance proposer, slashing proposer).
|
|
97
|
-
* @param
|
|
108
|
+
* @param dataStores - Archiver substores for storage & retrieval of blocks, encrypted logs & contract data.
|
|
98
109
|
* @param config - Archiver configuration options.
|
|
99
110
|
* @param blobClient - Client for retrieving blob data.
|
|
100
111
|
* @param dateProvider - Provider for current date/time.
|
|
@@ -106,16 +117,20 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
106
117
|
private readonly publicClient: ViemPublicClient,
|
|
107
118
|
private readonly debugClient: ViemPublicDebugClient,
|
|
108
119
|
private readonly rollup: RollupContract,
|
|
109
|
-
private readonly l1Addresses: Pick<
|
|
120
|
+
private readonly l1Addresses: Pick<
|
|
121
|
+
L1ContractAddresses,
|
|
122
|
+
'rollupAddress' | 'registryAddress' | 'inboxAddress' | 'governanceProposerAddress'
|
|
123
|
+
> & {
|
|
110
124
|
slashingProposerAddress: EthAddress;
|
|
111
125
|
},
|
|
112
|
-
readonly
|
|
126
|
+
readonly dataStores: ArchiverDataStores,
|
|
113
127
|
private config: {
|
|
114
128
|
pollingIntervalMs: number;
|
|
115
129
|
batchSize: number;
|
|
116
130
|
skipValidateCheckpointAttestations?: boolean;
|
|
117
131
|
maxAllowedEthClientDriftSeconds: number;
|
|
118
132
|
ethereumAllowNoDebugHosts?: boolean;
|
|
133
|
+
skipHistoricalLogsCheck?: boolean;
|
|
119
134
|
},
|
|
120
135
|
private readonly blobClient: BlobClientInterface,
|
|
121
136
|
instrumentation: ArchiverInstrumentation,
|
|
@@ -128,15 +143,15 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
128
143
|
l2TipsCache?: L2TipsCache,
|
|
129
144
|
private readonly log: Logger = createLogger('archiver'),
|
|
130
145
|
) {
|
|
131
|
-
super(
|
|
146
|
+
super(dataStores, l1Constants);
|
|
132
147
|
|
|
133
148
|
this.tracer = instrumentation.tracer;
|
|
134
149
|
this.instrumentation = instrumentation;
|
|
135
150
|
this.initialSyncPromise = promiseWithResolvers();
|
|
136
151
|
this.synchronizer = synchronizer;
|
|
137
152
|
this.events = events;
|
|
138
|
-
this.l2TipsCache = l2TipsCache ?? new L2TipsCache(this.
|
|
139
|
-
this.updater = new ArchiverDataStoreUpdater(this.
|
|
153
|
+
this.l2TipsCache = l2TipsCache ?? new L2TipsCache(this.dataStores.blocks);
|
|
154
|
+
this.updater = new ArchiverDataStoreUpdater(this.dataStores, this.l2TipsCache, {
|
|
140
155
|
rollupManaLimit: l1Constants.rollupManaLimit,
|
|
141
156
|
});
|
|
142
157
|
|
|
@@ -172,10 +187,23 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
172
187
|
this.config.ethereumAllowNoDebugHosts ?? false,
|
|
173
188
|
this.log.getBindings(),
|
|
174
189
|
);
|
|
190
|
+
await validateAndLogHistoricalLogsAvailability(
|
|
191
|
+
this.publicClient,
|
|
192
|
+
{
|
|
193
|
+
rollupAddress: this.l1Addresses.rollupAddress,
|
|
194
|
+
inboxAddress: this.l1Addresses.inboxAddress,
|
|
195
|
+
registryAddress: this.l1Addresses.registryAddress,
|
|
196
|
+
governanceProposerAddress: this.l1Addresses.governanceProposerAddress,
|
|
197
|
+
},
|
|
198
|
+
this.config.skipHistoricalLogsCheck ?? false,
|
|
199
|
+
this.log.getBindings(),
|
|
200
|
+
);
|
|
175
201
|
|
|
176
202
|
// Log initial state for the archiver
|
|
177
203
|
const { l1StartBlock } = this.l1Constants;
|
|
178
|
-
const { blocksSynchedTo = l1StartBlock, messagesSynchedTo = l1StartBlock } = await
|
|
204
|
+
const { blocksSynchedTo = l1StartBlock, messagesSynchedTo = l1StartBlock } = await getArchiverSynchPoint(
|
|
205
|
+
this.stores,
|
|
206
|
+
);
|
|
179
207
|
const currentL2Checkpoint = await this.getSynchedCheckpointNumber();
|
|
180
208
|
this.log.info(
|
|
181
209
|
`Starting archiver sync to rollup contract ${this.rollup.address} from L1 block ${blocksSynchedTo} and L2 checkpoint ${currentL2Checkpoint}`,
|
|
@@ -193,6 +221,14 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
193
221
|
return this.runningPromise.trigger();
|
|
194
222
|
}
|
|
195
223
|
|
|
224
|
+
public trySyncImmediate() {
|
|
225
|
+
try {
|
|
226
|
+
return this.syncImmediate();
|
|
227
|
+
} catch (err) {
|
|
228
|
+
this.log.error(`Failed to trigger immediate archiver sync: ${err}`, err);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
196
232
|
/**
|
|
197
233
|
* Queues a block to be added to the archiver store and triggers processing.
|
|
198
234
|
* The block will be processed by the sync loop.
|
|
@@ -201,63 +237,85 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
201
237
|
* @returns A promise that resolves when the block has been added to the store, or rejects on error.
|
|
202
238
|
*/
|
|
203
239
|
public addBlock(block: L2Block): Promise<void> {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
this.log.error(`Sync immediate call failed: ${err}`);
|
|
210
|
-
});
|
|
211
|
-
});
|
|
240
|
+
const promise = promiseWithResolvers<void>();
|
|
241
|
+
this.inboundQueue.push({ block, ...promise, type: 'block' });
|
|
242
|
+
this.log.debug(`Queued block ${block.number} for processing`);
|
|
243
|
+
void this.trySyncImmediate();
|
|
244
|
+
return promise.promise;
|
|
212
245
|
}
|
|
213
246
|
|
|
214
|
-
|
|
215
|
-
|
|
247
|
+
/**
|
|
248
|
+
* Queues a new proposed checkpoint into the archiver store.
|
|
249
|
+
* Checks that the checkpoint is not for an L2 slot already synced from L1.
|
|
250
|
+
* Resolves once the checkpoint has been processed.
|
|
251
|
+
*/
|
|
252
|
+
public addProposedCheckpoint(pending: ProposedCheckpointInput): Promise<void> {
|
|
253
|
+
const promise = promiseWithResolvers<void>();
|
|
254
|
+
this.inboundQueue.push({ checkpoint: pending, ...promise, type: 'checkpoint' });
|
|
255
|
+
this.log.debug(`Queued checkpoint ${pending.checkpointNumber} for processing`);
|
|
256
|
+
void this.trySyncImmediate();
|
|
257
|
+
return promise.promise;
|
|
216
258
|
}
|
|
217
259
|
|
|
218
260
|
/**
|
|
219
|
-
* Processes all queued blocks, adding them to the store.
|
|
261
|
+
* Processes all queued blocks and checkpoints, adding them to the store.
|
|
220
262
|
* Called at the beginning of each sync iteration.
|
|
221
|
-
*
|
|
263
|
+
* Items are processed in the order they were queued.
|
|
222
264
|
*/
|
|
223
|
-
private async
|
|
224
|
-
if (this.
|
|
265
|
+
private async processInboundQueue(): Promise<void> {
|
|
266
|
+
if (this.inboundQueue.length === 0) {
|
|
225
267
|
return;
|
|
226
268
|
}
|
|
227
269
|
|
|
228
|
-
// Take all
|
|
229
|
-
const queuedItems = this.
|
|
230
|
-
this.log.debug(`Processing ${queuedItems.length} queued
|
|
270
|
+
// Take all items from the queue
|
|
271
|
+
const queuedItems = this.inboundQueue.splice(0, this.inboundQueue.length);
|
|
272
|
+
this.log.debug(`Processing ${queuedItems.length} queued inbound items`);
|
|
231
273
|
|
|
232
274
|
// Calculate slot threshold for validation
|
|
233
275
|
const l1Timestamp = this.synchronizer.getL1Timestamp();
|
|
234
276
|
const slotAtNextL1Block =
|
|
235
277
|
l1Timestamp === undefined ? undefined : getSlotAtNextL1Block(l1Timestamp, this.l1Constants);
|
|
236
278
|
|
|
237
|
-
//
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
279
|
+
// Helpers for manipulating blocks and checkpoints in the queue
|
|
280
|
+
const getSlot: (item: AddBlockRequest | AddProposedCheckpointRequest) => SlotNumber = item =>
|
|
281
|
+
item.type === 'block' ? item.block.header.globalVariables.slotNumber : item.checkpoint.header.slotNumber;
|
|
282
|
+
const getNumber: (item: AddBlockRequest | AddProposedCheckpointRequest) => number = item =>
|
|
283
|
+
item.type === 'block' ? item.block.number : item.checkpoint.checkpointNumber;
|
|
284
|
+
|
|
285
|
+
// Process each item individually to properly resolve/reject each promise
|
|
286
|
+
for (const item of queuedItems) {
|
|
287
|
+
const { resolve, reject, type } = item;
|
|
288
|
+
const itemSlot = getSlot(item);
|
|
289
|
+
const itemNumber = getNumber(item);
|
|
290
|
+
if (slotAtNextL1Block !== undefined && itemSlot < slotAtNextL1Block) {
|
|
291
|
+
const nextSlotTimestamp = getTimestampForSlot(slotAtNextL1Block, this.l1Constants);
|
|
241
292
|
this.log.warn(
|
|
242
|
-
`Rejecting proposed
|
|
243
|
-
{
|
|
293
|
+
`Rejecting proposed ${type} ${itemNumber} for past slot ${itemSlot} (current ${slotAtNextL1Block})`,
|
|
294
|
+
{ number: itemNumber, type, l1Timestamp, slotAtNextL1Block, nextSlotTimestamp },
|
|
244
295
|
);
|
|
245
|
-
reject(new
|
|
296
|
+
reject(new BlockOrCheckpointSlotExpiredError(itemSlot, nextSlotTimestamp, l1Timestamp));
|
|
246
297
|
continue;
|
|
247
298
|
}
|
|
248
299
|
|
|
249
300
|
try {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
301
|
+
if (type === 'block') {
|
|
302
|
+
const [durationMs] = await elapsed(() => this.updater.addProposedBlock(item.block));
|
|
303
|
+
this.instrumentation.processNewProposedBlock(durationMs, item.block);
|
|
304
|
+
} else {
|
|
305
|
+
await this.updater.addProposedCheckpoint(item.checkpoint);
|
|
306
|
+
}
|
|
307
|
+
this.log.debug(`Added ${type} ${itemNumber} to store`);
|
|
253
308
|
resolve();
|
|
254
309
|
} catch (err: any) {
|
|
255
310
|
if (err instanceof BlockAlreadyCheckpointedError) {
|
|
256
|
-
this.log.debug(`Proposed block ${
|
|
311
|
+
this.log.debug(`Proposed block ${itemNumber} matches already checkpointed block, ignoring late proposal`);
|
|
257
312
|
resolve();
|
|
258
313
|
continue;
|
|
259
314
|
}
|
|
260
|
-
this.log.error(`Failed to add
|
|
315
|
+
this.log.error(`Failed to add ${type} ${itemNumber} to store: ${err.message}`, err, {
|
|
316
|
+
number: itemNumber,
|
|
317
|
+
type,
|
|
318
|
+
});
|
|
261
319
|
reject(err);
|
|
262
320
|
}
|
|
263
321
|
}
|
|
@@ -273,7 +331,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
273
331
|
@trackSpan('Archiver.sync')
|
|
274
332
|
private async sync() {
|
|
275
333
|
// Process any queued blocks first, before doing L1 sync
|
|
276
|
-
await this.
|
|
334
|
+
await this.processInboundQueue();
|
|
277
335
|
// Now perform L1 sync
|
|
278
336
|
await this.syncFromL1();
|
|
279
337
|
}
|
|
@@ -289,7 +347,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
289
347
|
if (currentL1BlockNumber + 1n >= l1BlockNumberAtEnd) {
|
|
290
348
|
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete`, {
|
|
291
349
|
l1BlockNumber: currentL1BlockNumber,
|
|
292
|
-
syncPoint: await this.
|
|
350
|
+
syncPoint: await getArchiverSynchPoint(this.stores),
|
|
293
351
|
...(await this.getL2Tips()),
|
|
294
352
|
});
|
|
295
353
|
this.runningPromise.setPollingIntervalMS(this.config.pollingIntervalMs);
|
|
@@ -321,7 +379,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
321
379
|
}
|
|
322
380
|
|
|
323
381
|
public backupTo(destPath: string): Promise<string> {
|
|
324
|
-
return this.
|
|
382
|
+
return backupArchiverDataStores(this.dataStores, destPath);
|
|
325
383
|
}
|
|
326
384
|
|
|
327
385
|
public getL1Constants(): Promise<L1RollupConstants> {
|
|
@@ -363,9 +421,9 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
363
421
|
}
|
|
364
422
|
|
|
365
423
|
let slotFromCheckpoint: SlotNumber | undefined;
|
|
366
|
-
const latestCheckpointNumber = await this.
|
|
424
|
+
const latestCheckpointNumber = await this.stores.blocks.getLatestCheckpointNumber();
|
|
367
425
|
if (latestCheckpointNumber > 0) {
|
|
368
|
-
const checkpointData = await this.
|
|
426
|
+
const checkpointData = await this.stores.blocks.getCheckpointData(latestCheckpointNumber);
|
|
369
427
|
if (checkpointData) {
|
|
370
428
|
slotFromCheckpoint = checkpointData.header.slotNumber;
|
|
371
429
|
}
|
|
@@ -454,14 +512,14 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
454
512
|
if (targetL2BlockNumber >= currentL2Block) {
|
|
455
513
|
throw new Error(`Target L2 block ${targetL2BlockNumber} must be less than current L2 block ${currentL2Block}`);
|
|
456
514
|
}
|
|
457
|
-
const targetL2Block = await this.
|
|
515
|
+
const targetL2Block = await this.stores.blocks.getCheckpointedBlock(targetL2BlockNumber);
|
|
458
516
|
if (!targetL2Block) {
|
|
459
517
|
throw new Error(`Target L2 block ${targetL2BlockNumber} not found`);
|
|
460
518
|
}
|
|
461
519
|
const targetCheckpointNumber = targetL2Block.checkpointNumber;
|
|
462
520
|
|
|
463
521
|
// Rollback operates at checkpoint granularity: the target block must be the last block of its checkpoint.
|
|
464
|
-
const checkpointData = await this.
|
|
522
|
+
const checkpointData = await this.stores.blocks.getCheckpointData(targetCheckpointNumber);
|
|
465
523
|
if (checkpointData) {
|
|
466
524
|
const lastBlockInCheckpoint = BlockNumber(checkpointData.startBlock + checkpointData.blockCount - 1);
|
|
467
525
|
if (targetL2BlockNumber !== lastBlockInCheckpoint) {
|
|
@@ -490,10 +548,10 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
490
548
|
);
|
|
491
549
|
await this.updater.removeCheckpointsAfter(targetCheckpointNumber);
|
|
492
550
|
this.log.info(`Rolling back L1 to L2 messages to checkpoint ${targetCheckpointNumber}`);
|
|
493
|
-
await this.
|
|
551
|
+
await this.stores.messages.rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber);
|
|
494
552
|
this.log.info(`Setting L1 syncpoints to ${targetL1BlockNumber}`);
|
|
495
|
-
await this.
|
|
496
|
-
await this.
|
|
553
|
+
await this.stores.blocks.setSynchedL1BlockNumber(targetL1BlockNumber);
|
|
554
|
+
await this.stores.messages.setMessageSyncState(
|
|
497
555
|
{ l1BlockNumber: targetL1BlockNumber, l1BlockHash: targetL1BlockHash },
|
|
498
556
|
undefined,
|
|
499
557
|
);
|
package/src/config.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
booleanConfigHelper,
|
|
8
8
|
getConfigFromMappings,
|
|
9
9
|
numberConfigHelper,
|
|
10
|
+
optionalNumberConfigHelper,
|
|
10
11
|
} from '@aztec/foundation/config';
|
|
11
12
|
import {
|
|
12
13
|
type ChainConfig,
|
|
@@ -50,13 +51,17 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
|
50
51
|
},
|
|
51
52
|
archiverStoreMapSizeKb: {
|
|
52
53
|
env: 'ARCHIVER_STORE_MAP_SIZE_KB',
|
|
53
|
-
|
|
54
|
+
...optionalNumberConfigHelper(),
|
|
54
55
|
description: 'The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb.',
|
|
55
56
|
},
|
|
56
57
|
skipValidateCheckpointAttestations: {
|
|
57
58
|
description: 'Skip validating checkpoint attestations (for testing purposes only)',
|
|
58
59
|
...booleanConfigHelper(false),
|
|
59
60
|
},
|
|
61
|
+
skipPromoteProposedCheckpointDuringL1Sync: {
|
|
62
|
+
description: 'Skip promoting proposed checkpoints during L1 sync (for testing purposes only)',
|
|
63
|
+
...booleanConfigHelper(false),
|
|
64
|
+
},
|
|
60
65
|
maxAllowedEthClientDriftSeconds: {
|
|
61
66
|
env: 'MAX_ALLOWED_ETH_CLIENT_DRIFT_SECONDS',
|
|
62
67
|
description: 'Maximum allowed drift in seconds between the Ethereum client and current time.',
|
|
@@ -67,6 +72,13 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
|
67
72
|
description: 'Whether to allow starting the archiver without debug/trace method support on Ethereum hosts',
|
|
68
73
|
...booleanConfigHelper(true),
|
|
69
74
|
},
|
|
75
|
+
archiverSkipHistoricalLogsCheck: {
|
|
76
|
+
env: 'ARCHIVER_SKIP_HISTORICAL_LOGS_CHECK',
|
|
77
|
+
description:
|
|
78
|
+
'Skip the startup check that probes the L1 RPC for historical Rollup contract logs. ' +
|
|
79
|
+
'Set to true to bypass the check when the connected RPC node is known to prune old logs.',
|
|
80
|
+
...booleanConfigHelper(false),
|
|
81
|
+
},
|
|
70
82
|
...chainConfigMappings,
|
|
71
83
|
...l1ReaderConfigMappings,
|
|
72
84
|
viemPollingIntervalMS: {
|
|
@@ -96,7 +108,9 @@ export function mapArchiverConfig(config: Partial<ArchiverConfig>) {
|
|
|
96
108
|
pollingIntervalMs: config.archiverPollingIntervalMS,
|
|
97
109
|
batchSize: config.archiverBatchSize,
|
|
98
110
|
skipValidateCheckpointAttestations: config.skipValidateCheckpointAttestations,
|
|
111
|
+
skipPromoteProposedCheckpointDuringL1Sync: config.skipPromoteProposedCheckpointDuringL1Sync,
|
|
99
112
|
maxAllowedEthClientDriftSeconds: config.maxAllowedEthClientDriftSeconds,
|
|
100
113
|
ethereumAllowNoDebugHosts: config.ethereumAllowNoDebugHosts,
|
|
114
|
+
skipHistoricalLogsCheck: config.archiverSkipHistoricalLogsCheck,
|
|
101
115
|
};
|
|
102
116
|
}
|