@aztec/archiver 0.82.2 → 0.82.3-nightly.20250403
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/archiver.d.ts +6 -0
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +28 -2
- package/dest/archiver/archiver_store.d.ts +4 -0
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +14 -0
- package/dest/archiver/config.d.ts +2 -2
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +4 -4
- package/dest/archiver/index.d.ts +1 -1
- package/dest/archiver/index.d.ts.map +1 -1
- package/dest/archiver/index.js +1 -1
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +9 -2
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +3 -0
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +10 -1
- package/dest/archiver/kv_archiver_store/log_store.js +4 -4
- package/dest/factory.d.ts +5 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +12 -8
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +2 -0
- package/package.json +12 -12
- package/src/archiver/archiver.ts +34 -1
- package/src/archiver/archiver_store.ts +6 -0
- package/src/archiver/archiver_store_test_suite.ts +15 -0
- package/src/archiver/config.ts +6 -6
- package/src/archiver/index.ts +1 -1
- package/src/archiver/kv_archiver_store/block_store.ts +11 -5
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +14 -1
- package/src/archiver/kv_archiver_store/log_store.ts +4 -4
- package/src/factory.ts +17 -10
- package/src/test/mock_l2_block_source.ts +2 -0
|
@@ -47,6 +47,7 @@ export declare class Archiver extends EventEmitter implements ArchiveSource, Tra
|
|
|
47
47
|
private store;
|
|
48
48
|
private l1BlockNumber;
|
|
49
49
|
private l1Timestamp;
|
|
50
|
+
private initialSyncComplete;
|
|
50
51
|
readonly tracer: Tracer;
|
|
51
52
|
/**
|
|
52
53
|
* Creates a new instance of the Archiver.
|
|
@@ -94,11 +95,14 @@ export declare class Archiver extends EventEmitter implements ArchiveSource, Tra
|
|
|
94
95
|
private nextRange;
|
|
95
96
|
private handleL1ToL2Messages;
|
|
96
97
|
private handleL2blocks;
|
|
98
|
+
/** Resumes the archiver after a stop. */
|
|
99
|
+
resume(): void;
|
|
97
100
|
/**
|
|
98
101
|
* Stops the archiver.
|
|
99
102
|
* @returns A promise signalling completion of the stop process.
|
|
100
103
|
*/
|
|
101
104
|
stop(): Promise<void>;
|
|
105
|
+
backupTo(destPath: string): Promise<string>;
|
|
102
106
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
103
107
|
getRollupAddress(): Promise<EthAddress>;
|
|
104
108
|
getRegistryAddress(): Promise<EthAddress>;
|
|
@@ -109,6 +113,8 @@ export declare class Archiver extends EventEmitter implements ArchiveSource, Tra
|
|
|
109
113
|
getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]>;
|
|
110
114
|
getBlockHeadersForEpoch(epochNumber: bigint): Promise<BlockHeader[]>;
|
|
111
115
|
isEpochComplete(epochNumber: bigint): Promise<boolean>;
|
|
116
|
+
/** Returns whether the archiver has completed an initial sync run successfully. */
|
|
117
|
+
isInitialSyncComplete(): boolean;
|
|
112
118
|
/**
|
|
113
119
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
114
120
|
* @param from - Number of the first block to return (inclusive).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAkB,KAAK,gBAAgB,EAAuB,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAclE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,OAAO,EAEZ,KAAK,aAAa,EAElB,KAAK,MAAM,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAMjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,iBAAiB,EAMvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,UAAU,EAAkB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,KAAK,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAEnH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,YAAa,YAAW,aAAa,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,7 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
44
44
|
store;
|
|
45
45
|
l1BlockNumber;
|
|
46
46
|
l1Timestamp;
|
|
47
|
+
initialSyncComplete;
|
|
47
48
|
tracer;
|
|
48
49
|
/**
|
|
49
50
|
* Creates a new instance of the Archiver.
|
|
@@ -55,7 +56,7 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
55
56
|
* @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
56
57
|
* @param log - A logger.
|
|
57
58
|
*/ constructor(publicClient, l1Addresses, dataStore, config, blobSinkClient, instrumentation, l1constants, log = createLogger('archiver')){
|
|
58
|
-
super(), this.publicClient = publicClient, this.l1Addresses = l1Addresses, this.dataStore = dataStore, this.config = config, this.blobSinkClient = blobSinkClient, this.instrumentation = instrumentation, this.l1constants = l1constants, this.log = log;
|
|
59
|
+
super(), this.publicClient = publicClient, this.l1Addresses = l1Addresses, this.dataStore = dataStore, this.config = config, this.blobSinkClient = blobSinkClient, this.instrumentation = instrumentation, this.l1constants = l1constants, this.log = log, this.initialSyncComplete = false;
|
|
59
60
|
this.tracer = instrumentation.tracer;
|
|
60
61
|
this.store = new ArchiverStoreHelper(dataStore);
|
|
61
62
|
this.rollup = new RollupContract(publicClient, l1Addresses.rollupAddress);
|
|
@@ -180,6 +181,7 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
180
181
|
// but the corresponding blocks have not been processed (see #12631).
|
|
181
182
|
this.l1Timestamp = currentL1Timestamp;
|
|
182
183
|
this.l1BlockNumber = currentL1BlockNumber;
|
|
184
|
+
this.initialSyncComplete = true;
|
|
183
185
|
if (initialRun) {
|
|
184
186
|
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete.`, {
|
|
185
187
|
l1BlockNumber: currentL1BlockNumber,
|
|
@@ -190,9 +192,17 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
190
192
|
}
|
|
191
193
|
/** Queries the rollup contract on whether a prune can be executed on the immediatenext L1 block. */ async canPrune(currentL1BlockNumber, currentL1Timestamp) {
|
|
192
194
|
const time = (currentL1Timestamp ?? 0n) + BigInt(this.l1constants.ethereumSlotDuration);
|
|
193
|
-
|
|
195
|
+
const result = await this.rollup.canPruneAtTime(time, {
|
|
194
196
|
blockNumber: currentL1BlockNumber
|
|
195
197
|
});
|
|
198
|
+
if (result) {
|
|
199
|
+
this.log.debug(`Rollup contract allows pruning at L1 block ${currentL1BlockNumber} time ${time}`, {
|
|
200
|
+
currentL1Timestamp,
|
|
201
|
+
pruneTime: time,
|
|
202
|
+
currentL1BlockNumber
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
196
206
|
}
|
|
197
207
|
/** Checks if there'd be a reorg for the next block submission and start pruning now. */ async handleEpochPrune(provenBlockNumber, currentL1BlockNumber, currentL1Timestamp) {
|
|
198
208
|
const localPendingBlockNumber = BigInt(await this.getBlockNumber());
|
|
@@ -384,6 +394,16 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
384
394
|
provenBlockNumber
|
|
385
395
|
};
|
|
386
396
|
}
|
|
397
|
+
/** Resumes the archiver after a stop. */ resume() {
|
|
398
|
+
if (!this.runningPromise) {
|
|
399
|
+
throw new Error(`Archiver was never started`);
|
|
400
|
+
}
|
|
401
|
+
if (this.runningPromise.isRunning()) {
|
|
402
|
+
this.log.warn(`Archiver already running`);
|
|
403
|
+
}
|
|
404
|
+
this.log.info(`Restarting archiver`);
|
|
405
|
+
this.runningPromise.start();
|
|
406
|
+
}
|
|
387
407
|
/**
|
|
388
408
|
* Stops the archiver.
|
|
389
409
|
* @returns A promise signalling completion of the stop process.
|
|
@@ -393,6 +413,9 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
393
413
|
this.log.info('Stopped.');
|
|
394
414
|
return Promise.resolve();
|
|
395
415
|
}
|
|
416
|
+
backupTo(destPath) {
|
|
417
|
+
return this.dataStore.backupTo(destPath);
|
|
418
|
+
}
|
|
396
419
|
getL1Constants() {
|
|
397
420
|
return Promise.resolve(this.l1constants);
|
|
398
421
|
}
|
|
@@ -477,6 +500,9 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
477
500
|
const leeway = 1n;
|
|
478
501
|
return l1Timestamp + leeway >= endTimestamp;
|
|
479
502
|
}
|
|
503
|
+
/** Returns whether the archiver has completed an initial sync run successfully. */ isInitialSyncComplete() {
|
|
504
|
+
return this.initialSyncComplete;
|
|
505
|
+
}
|
|
480
506
|
/**
|
|
481
507
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
482
508
|
* @param from - Number of the first block to return (inclusive).
|
|
@@ -202,5 +202,9 @@ export interface ArchiverDataStore {
|
|
|
202
202
|
actualSize: number;
|
|
203
203
|
numItems: number;
|
|
204
204
|
}>;
|
|
205
|
+
/** Backups the archiver db to the target folder. Returns the path to the db file. */
|
|
206
|
+
backupTo(path: string): Promise<string>;
|
|
207
|
+
/** Closes the underlying data store. */
|
|
208
|
+
close(): Promise<void>;
|
|
205
209
|
}
|
|
206
210
|
//# sourceMappingURL=archiver_store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AA0BA,OAAO,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AAGnF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAmvB/D"}
|
|
@@ -3,6 +3,7 @@ import { times, timesParallel } from '@aztec/foundation/collection';
|
|
|
3
3
|
import { randomInt } from '@aztec/foundation/crypto';
|
|
4
4
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
6
7
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
8
|
import { L2Block, wrapInBlock } from '@aztec/stdlib/block';
|
|
8
9
|
import { SerializableContractInstance, computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
@@ -240,6 +241,19 @@ import { TxEffect, TxHash } from '@aztec/stdlib/tx';
|
|
|
240
241
|
it('returns undefined if tx is not found', async ()=>{
|
|
241
242
|
await expect(store.getTxEffect(TxHash.random())).resolves.toBeUndefined();
|
|
242
243
|
});
|
|
244
|
+
it('does not fail if the block is unwound while requesting a tx', async ()=>{
|
|
245
|
+
const expectedTx = await wrapInBlock(blocks[1].block.body.txEffects[0], blocks[1].block);
|
|
246
|
+
let done = false;
|
|
247
|
+
void (async ()=>{
|
|
248
|
+
while(!done){
|
|
249
|
+
void store.getTxEffect(expectedTx.data.txHash);
|
|
250
|
+
await sleep(1);
|
|
251
|
+
}
|
|
252
|
+
})();
|
|
253
|
+
await store.unwindBlocks(blocks.length, blocks.length);
|
|
254
|
+
done = true;
|
|
255
|
+
expect(await store.getTxEffect(expectedTx.data.txHash)).toEqual(undefined);
|
|
256
|
+
});
|
|
243
257
|
});
|
|
244
258
|
describe('L1 to L2 Messages', ()=>{
|
|
245
259
|
const l2BlockNumber = 13n;
|
|
@@ -14,8 +14,8 @@ import { type ChainConfig } from '@aztec/stdlib/config';
|
|
|
14
14
|
export type ArchiverConfig = {
|
|
15
15
|
/** URL for an archiver service. If set, will return an archiver client as opposed to starting a new one. */
|
|
16
16
|
archiverUrl?: string;
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/** List of URLS for L1 consensus clients */
|
|
18
|
+
l1ConsensusHostUrls?: string[];
|
|
19
19
|
/** The polling interval in ms for retrieving new L2 blocks and encrypted logs. */
|
|
20
20
|
archiverPollingIntervalMS?: number;
|
|
21
21
|
/** The number of L2 blocks the archiver will attempt to download at a time. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAE7E;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAE7E;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,kFAAkF;IAClF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,yCAAyC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IAEjC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qGAAqG;IACrG,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,GAAG,cAAc,GAChB,iBAAiB,GACjB,cAAc,GACd,WAAW,CAAC;AAEd,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CAwCrE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
|
package/dest/archiver/config.js
CHANGED
|
@@ -8,10 +8,10 @@ export const archiverConfigMappings = {
|
|
|
8
8
|
env: 'ARCHIVER_URL',
|
|
9
9
|
description: 'URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.'
|
|
10
10
|
},
|
|
11
|
-
|
|
12
|
-
env: '
|
|
13
|
-
description: '
|
|
14
|
-
parseEnv: (val)=>val
|
|
11
|
+
l1ConsensusHostUrls: {
|
|
12
|
+
env: 'L1_CONSENSUS_HOST_URLS',
|
|
13
|
+
description: 'List of URLS for L1 consensus clients.',
|
|
14
|
+
parseEnv: (val)=>val.split(',').map((url)=>url.trim().replace(/\/$/, ''))
|
|
15
15
|
},
|
|
16
16
|
archiverPollingIntervalMS: {
|
|
17
17
|
env: 'ARCHIVER_POLLING_INTERVAL_MS',
|
package/dest/archiver/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ export * from './archiver.js';
|
|
|
2
2
|
export * from './config.js';
|
|
3
3
|
export { type PublishedL2Block, type L1PublishedData } from './structs/published.js';
|
|
4
4
|
export type { ArchiverDataStore } from './archiver_store.js';
|
|
5
|
-
export { KVArchiverDataStore } from './kv_archiver_store/kv_archiver_store.js';
|
|
5
|
+
export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './kv_archiver_store/kv_archiver_store.js';
|
|
6
6
|
export { ContractInstanceStore } from './kv_archiver_store/contract_instance_store.js';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/archiver/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrF,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/archiver/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrF,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC"}
|
package/dest/archiver/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './archiver.js';
|
|
2
2
|
export * from './config.js';
|
|
3
|
-
export { KVArchiverDataStore } from './kv_archiver_store/kv_archiver_store.js';
|
|
3
|
+
export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './kv_archiver_store/kv_archiver_store.js';
|
|
4
4
|
export { ContractInstanceStore } from './kv_archiver_store/contract_instance_store.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAQ,KAAK,OAAO,EAAwB,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWzE;;GAEG;AACH,qBAAa,UAAU;;IAwBT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAUzC;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B7D;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IA0BvD;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAQ,KAAK,OAAO,EAAwB,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWzE;;GAEG;AACH,qBAAa,UAAU;;IAwBT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAUzC;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B7D;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IA0BvD;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;IASvF;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQ1E;;;;;OAKG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC;YAM1E,wBAAwB;IAetC;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAkBzE;;;;OAIG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAuBzE;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI1F;;;;OAIG;IACH,mBAAmB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI7G;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKhD;;;OAGG;IACH,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItD,uBAAuB,CAAC,aAAa,EAAE,MAAM;IAIvC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/C,sBAAsB,CAAC,WAAW,EAAE,MAAM;CAe3C"}
|
|
@@ -93,7 +93,10 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
93
93
|
* @returns The requested L2 blocks
|
|
94
94
|
*/ async *getBlocks(start, limit) {
|
|
95
95
|
for await (const blockStorage of this.#blocks.valuesAsync(this.#computeBlockRange(start, limit))){
|
|
96
|
-
|
|
96
|
+
const block = await this.getBlockFromBlockStorage(blockStorage);
|
|
97
|
+
if (block) {
|
|
98
|
+
yield block;
|
|
99
|
+
}
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
/**
|
|
@@ -123,7 +126,8 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
123
126
|
const blockHash = (await header.hash()).toString();
|
|
124
127
|
const blockBodyBuffer = await this.#blockBodies.getAsync(blockHash);
|
|
125
128
|
if (blockBodyBuffer === undefined) {
|
|
126
|
-
|
|
129
|
+
this.#log.warn(`Could not find body for block ${header.globalVariables.blockNumber.toNumber()} ${blockHash}`);
|
|
130
|
+
return undefined;
|
|
127
131
|
}
|
|
128
132
|
const body = Body.fromBuffer(blockBodyBuffer);
|
|
129
133
|
const block = new L2Block(archive, header, body);
|
|
@@ -163,6 +167,9 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
163
167
|
return undefined;
|
|
164
168
|
}
|
|
165
169
|
const block = await this.getBlock(blockNumber);
|
|
170
|
+
if (!block) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
166
173
|
const tx = block.block.body.txEffects[txIndex];
|
|
167
174
|
return new TxReceipt(txHash, TxReceipt.statusFromRevertCode(tx.revertCode), '', tx.transactionFee.toBigInt(), L2BlockHash.fromField(await block.block.hash()), block.block.number);
|
|
168
175
|
}
|
|
@@ -11,6 +11,7 @@ import type { BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
|
11
11
|
import type { ArchiverDataStore, ArchiverL1SynchPoint } from '../archiver_store.js';
|
|
12
12
|
import type { DataRetrieval } from '../structs/data_retrieval.js';
|
|
13
13
|
import type { PublishedL2Block } from '../structs/published.js';
|
|
14
|
+
export declare const ARCHIVER_DB_VERSION = 1;
|
|
14
15
|
/**
|
|
15
16
|
* LMDB implementation of the ArchiverDataStore interface.
|
|
16
17
|
*/
|
|
@@ -20,6 +21,8 @@ export declare class KVArchiverDataStore implements ArchiverDataStore {
|
|
|
20
21
|
static readonly SCHEMA_VERSION = 1;
|
|
21
22
|
private functionNames;
|
|
22
23
|
constructor(db: AztecAsyncKVStore, logsMaxPageSize?: number);
|
|
24
|
+
backupTo(path: string, compress?: boolean): Promise<string>;
|
|
25
|
+
close(): Promise<void>;
|
|
23
26
|
getDebugFunctionName(_address: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
|
|
24
27
|
registerContractFunctionSignatures(_address: AztecAddress, signatures: string[]): Promise<void>;
|
|
25
28
|
getContractClass(id: Fr): Promise<ContractClassPublic | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv_archiver_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/kv_archiver_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EACV,mBAAmB,EACnB,iCAAiC,EACjC,2BAA2B,EAC3B,4CAA4C,EAC5C,wCAAwC,EACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"kv_archiver_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/kv_archiver_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { toArray } from '@aztec/foundation/iterable';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
|
+
import { join } from 'path';
|
|
4
5
|
import { BlockStore } from './block_store.js';
|
|
5
6
|
import { ContractClassStore } from './contract_class_store.js';
|
|
6
7
|
import { ContractInstanceStore } from './contract_instance_store.js';
|
|
7
8
|
import { LogStore } from './log_store.js';
|
|
8
9
|
import { MessageStore } from './message_store.js';
|
|
10
|
+
export const ARCHIVER_DB_VERSION = 1;
|
|
9
11
|
/**
|
|
10
12
|
* LMDB implementation of the ArchiverDataStore interface.
|
|
11
13
|
*/ export class KVArchiverDataStore {
|
|
12
14
|
db;
|
|
13
|
-
static SCHEMA_VERSION =
|
|
15
|
+
static SCHEMA_VERSION = ARCHIVER_DB_VERSION;
|
|
14
16
|
#blockStore;
|
|
15
17
|
#logStore;
|
|
16
18
|
#messageStore;
|
|
@@ -28,6 +30,13 @@ import { MessageStore } from './message_store.js';
|
|
|
28
30
|
this.#contractClassStore = new ContractClassStore(db);
|
|
29
31
|
this.#contractInstanceStore = new ContractInstanceStore(db);
|
|
30
32
|
}
|
|
33
|
+
async backupTo(path, compress = true) {
|
|
34
|
+
await this.db.backupTo(path, compress);
|
|
35
|
+
return join(path, 'data.mdb');
|
|
36
|
+
}
|
|
37
|
+
close() {
|
|
38
|
+
return this.db.close();
|
|
39
|
+
}
|
|
31
40
|
// TODO: These function names are in memory only as they are for development/debugging. They require the full contract
|
|
32
41
|
// artifact supplied to the node out of band. This should be reviewed and potentially removed as part of
|
|
33
42
|
// the node api cleanup process.
|
|
@@ -31,18 +31,18 @@ import { ContractClassLog, ExtendedContractClassLog, ExtendedPublicLog, LogId, P
|
|
|
31
31
|
block.body.txEffects.forEach((txEffect, txIndex)=>{
|
|
32
32
|
const txHash = txEffect.txHash;
|
|
33
33
|
const dataStartIndexForTx = dataStartIndexForBlock + txIndex * MAX_NOTE_HASHES_PER_TX;
|
|
34
|
-
txEffect.privateLogs.forEach((log)=>{
|
|
34
|
+
txEffect.privateLogs.forEach((log, logIndex)=>{
|
|
35
35
|
const tag = log.fields[0];
|
|
36
36
|
this.#log.debug(`Found private log with tag ${tag.toString()} in block ${block.number}`);
|
|
37
37
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
38
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
38
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
39
39
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
40
40
|
});
|
|
41
|
-
txEffect.publicLogs.forEach((log)=>{
|
|
41
|
+
txEffect.publicLogs.forEach((log, logIndex)=>{
|
|
42
42
|
const tag = log.log[0];
|
|
43
43
|
this.#log.debug(`Found public log with tag ${tag.toString()} in block ${block.number}`);
|
|
44
44
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
45
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
45
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
46
46
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
47
47
|
});
|
|
48
48
|
});
|
package/dest/factory.d.ts
CHANGED
|
@@ -4,6 +4,10 @@ import type { L2BlockSourceEventEmitter } from '@aztec/stdlib/block';
|
|
|
4
4
|
import type { ArchiverApi, Service } from '@aztec/stdlib/interfaces/server';
|
|
5
5
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
6
|
import type { ArchiverConfig } from './archiver/config.js';
|
|
7
|
+
import { KVArchiverDataStore } from './archiver/kv_archiver_store/kv_archiver_store.js';
|
|
8
|
+
export declare const ARCHIVER_STORE_NAME = "archiver";
|
|
9
|
+
/** Creates an archiver store. */
|
|
10
|
+
export declare function createArchiverStore(userConfig: Pick<ArchiverConfig, 'archiverStoreMapSizeKb' | 'maxLogs'> & DataStoreConfig): Promise<KVArchiverDataStore>;
|
|
7
11
|
/**
|
|
8
12
|
* Creates a local archiver.
|
|
9
13
|
* @param config - The archiver configuration.
|
|
@@ -12,7 +16,7 @@ import type { ArchiverConfig } from './archiver/config.js';
|
|
|
12
16
|
* @param telemetry - The telemetry client.
|
|
13
17
|
* @returns The local archiver.
|
|
14
18
|
*/
|
|
15
|
-
export declare function createArchiver(
|
|
19
|
+
export declare function createArchiver(config: ArchiverConfig & DataStoreConfig, blobSinkClient: BlobSinkClientInterface, opts?: {
|
|
16
20
|
blockUntilSync: boolean;
|
|
17
21
|
}, telemetry?: TelemetryClient): Promise<ArchiverApi & Service & L2BlockSourceEventEmitter>;
|
|
18
22
|
/**
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE5E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE5E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAG7G,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,iCAAiC;AACjC,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC,GAAG,eAAe,gCAQzF;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,cAAc,EAAE,uBAAuB,EACvC,IAAI,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA6B,EAC5D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,WAAW,GAAG,OAAO,GAAG,yBAAyB,CAAC,CAI5D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CASxE"}
|
package/dest/factory.js
CHANGED
|
@@ -8,8 +8,17 @@ import { computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
|
8
8
|
import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
9
9
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
10
10
|
import { Archiver } from './archiver/archiver.js';
|
|
11
|
-
import { KVArchiverDataStore } from './archiver/
|
|
11
|
+
import { ARCHIVER_DB_VERSION, KVArchiverDataStore } from './archiver/kv_archiver_store/kv_archiver_store.js';
|
|
12
12
|
import { createArchiverClient } from './rpc/index.js';
|
|
13
|
+
export const ARCHIVER_STORE_NAME = 'archiver';
|
|
14
|
+
/** Creates an archiver store. */ export async function createArchiverStore(userConfig) {
|
|
15
|
+
const config = {
|
|
16
|
+
...userConfig,
|
|
17
|
+
dataStoreMapSizeKB: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKB
|
|
18
|
+
};
|
|
19
|
+
const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config, createLogger('archiver:lmdb'));
|
|
20
|
+
return new KVArchiverDataStore(store, config.maxLogs);
|
|
21
|
+
}
|
|
13
22
|
/**
|
|
14
23
|
* Creates a local archiver.
|
|
15
24
|
* @param config - The archiver configuration.
|
|
@@ -17,15 +26,10 @@ import { createArchiverClient } from './rpc/index.js';
|
|
|
17
26
|
* @param opts - The options.
|
|
18
27
|
* @param telemetry - The telemetry client.
|
|
19
28
|
* @returns The local archiver.
|
|
20
|
-
*/ export async function createArchiver(
|
|
29
|
+
*/ export async function createArchiver(config, blobSinkClient, opts = {
|
|
21
30
|
blockUntilSync: true
|
|
22
31
|
}, telemetry = getTelemetryClient()) {
|
|
23
|
-
const
|
|
24
|
-
..._config,
|
|
25
|
-
dataStoreMapSizeKB: _config.archiverStoreMapSizeKb ?? _config.dataStoreMapSizeKB
|
|
26
|
-
};
|
|
27
|
-
const store = await createStore('archiver', KVArchiverDataStore.SCHEMA_VERSION, config, createLogger('archiver:lmdb'));
|
|
28
|
-
const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
|
|
32
|
+
const archiverStore = await createArchiverStore(config);
|
|
29
33
|
await registerProtocolContracts(archiverStore);
|
|
30
34
|
return Archiver.createAndSync(config, archiverStore, {
|
|
31
35
|
telemetry,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAEjF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IAEnC,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,GAAG,CAAiD;IAE/C,YAAY,CAAC,SAAS,EAAE,MAAM;IAUpC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;IAK3B,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAIrD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAId,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQjD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;;;;;;;;;IAa7E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI3E,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU1D,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIpE;;;;OAIG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM;;;;;IAWvC;;;;OAIG;IACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAkB1E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BlC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAEjF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IAEnC,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,GAAG,CAAiD;IAE/C,YAAY,CAAC,SAAS,EAAE,MAAM;IAUpC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;IAK3B,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAIrD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAId,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQjD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;;;;;;;;;IAa7E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI3E,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU1D,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIpE;;;;OAIG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM;;;;;IAWvC;;;;OAIG;IACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAkB1E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BlC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -168,12 +168,14 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
168
168
|
* Starts the block source. In this mock implementation, this is a noop.
|
|
169
169
|
* @returns A promise that signals the initialization of the l2 block source on completion.
|
|
170
170
|
*/ start() {
|
|
171
|
+
this.log.verbose('Starting mock L2 block source');
|
|
171
172
|
return Promise.resolve();
|
|
172
173
|
}
|
|
173
174
|
/**
|
|
174
175
|
* Stops the block source. In this mock implementation, this is a noop.
|
|
175
176
|
* @returns A promise that signals the l2 block source is now stopped.
|
|
176
177
|
*/ stop() {
|
|
178
|
+
this.log.verbose('Stopping mock L2 block source');
|
|
177
179
|
return Promise.resolve();
|
|
178
180
|
}
|
|
179
181
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.82.
|
|
3
|
+
"version": "0.82.3-nightly.20250403",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-lib": "0.82.
|
|
68
|
-
"@aztec/blob-sink": "0.82.
|
|
69
|
-
"@aztec/constants": "0.82.
|
|
70
|
-
"@aztec/ethereum": "0.82.
|
|
71
|
-
"@aztec/foundation": "0.82.
|
|
72
|
-
"@aztec/kv-store": "0.82.
|
|
73
|
-
"@aztec/l1-artifacts": "0.82.
|
|
74
|
-
"@aztec/noir-protocol-circuits-types": "0.82.
|
|
75
|
-
"@aztec/protocol-contracts": "0.82.
|
|
76
|
-
"@aztec/stdlib": "0.82.
|
|
77
|
-
"@aztec/telemetry-client": "0.82.
|
|
67
|
+
"@aztec/blob-lib": "0.82.3-nightly.20250403",
|
|
68
|
+
"@aztec/blob-sink": "0.82.3-nightly.20250403",
|
|
69
|
+
"@aztec/constants": "0.82.3-nightly.20250403",
|
|
70
|
+
"@aztec/ethereum": "0.82.3-nightly.20250403",
|
|
71
|
+
"@aztec/foundation": "0.82.3-nightly.20250403",
|
|
72
|
+
"@aztec/kv-store": "0.82.3-nightly.20250403",
|
|
73
|
+
"@aztec/l1-artifacts": "0.82.3-nightly.20250403",
|
|
74
|
+
"@aztec/noir-protocol-circuits-types": "0.82.3-nightly.20250403",
|
|
75
|
+
"@aztec/protocol-contracts": "0.82.3-nightly.20250403",
|
|
76
|
+
"@aztec/stdlib": "0.82.3-nightly.20250403",
|
|
77
|
+
"@aztec/telemetry-client": "0.82.3-nightly.20250403",
|
|
78
78
|
"debug": "^4.3.4",
|
|
79
79
|
"lodash.groupby": "^4.6.0",
|
|
80
80
|
"lodash.omit": "^4.5.0",
|
package/src/archiver/archiver.ts
CHANGED
|
@@ -86,6 +86,7 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
86
86
|
|
|
87
87
|
private l1BlockNumber: bigint | undefined;
|
|
88
88
|
private l1Timestamp: bigint | undefined;
|
|
89
|
+
private initialSyncComplete: boolean = false;
|
|
89
90
|
|
|
90
91
|
public readonly tracer: Tracer;
|
|
91
92
|
|
|
@@ -280,6 +281,7 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
280
281
|
// but the corresponding blocks have not been processed (see #12631).
|
|
281
282
|
this.l1Timestamp = currentL1Timestamp;
|
|
282
283
|
this.l1BlockNumber = currentL1BlockNumber;
|
|
284
|
+
this.initialSyncComplete = true;
|
|
283
285
|
|
|
284
286
|
if (initialRun) {
|
|
285
287
|
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete.`, {
|
|
@@ -293,7 +295,15 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
293
295
|
/** Queries the rollup contract on whether a prune can be executed on the immediatenext L1 block. */
|
|
294
296
|
private async canPrune(currentL1BlockNumber: bigint, currentL1Timestamp: bigint) {
|
|
295
297
|
const time = (currentL1Timestamp ?? 0n) + BigInt(this.l1constants.ethereumSlotDuration);
|
|
296
|
-
|
|
298
|
+
const result = await this.rollup.canPruneAtTime(time, { blockNumber: currentL1BlockNumber });
|
|
299
|
+
if (result) {
|
|
300
|
+
this.log.debug(`Rollup contract allows pruning at L1 block ${currentL1BlockNumber} time ${time}`, {
|
|
301
|
+
currentL1Timestamp,
|
|
302
|
+
pruneTime: time,
|
|
303
|
+
currentL1BlockNumber,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
return result;
|
|
297
307
|
}
|
|
298
308
|
|
|
299
309
|
/** Checks if there'd be a reorg for the next block submission and start pruning now. */
|
|
@@ -542,6 +552,18 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
542
552
|
return { provenBlockNumber };
|
|
543
553
|
}
|
|
544
554
|
|
|
555
|
+
/** Resumes the archiver after a stop. */
|
|
556
|
+
public resume() {
|
|
557
|
+
if (!this.runningPromise) {
|
|
558
|
+
throw new Error(`Archiver was never started`);
|
|
559
|
+
}
|
|
560
|
+
if (this.runningPromise.isRunning()) {
|
|
561
|
+
this.log.warn(`Archiver already running`);
|
|
562
|
+
}
|
|
563
|
+
this.log.info(`Restarting archiver`);
|
|
564
|
+
this.runningPromise.start();
|
|
565
|
+
}
|
|
566
|
+
|
|
545
567
|
/**
|
|
546
568
|
* Stops the archiver.
|
|
547
569
|
* @returns A promise signalling completion of the stop process.
|
|
@@ -554,6 +576,10 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
554
576
|
return Promise.resolve();
|
|
555
577
|
}
|
|
556
578
|
|
|
579
|
+
public backupTo(destPath: string): Promise<string> {
|
|
580
|
+
return this.dataStore.backupTo(destPath);
|
|
581
|
+
}
|
|
582
|
+
|
|
557
583
|
public getL1Constants(): Promise<L1RollupConstants> {
|
|
558
584
|
return Promise.resolve(this.l1constants);
|
|
559
585
|
}
|
|
@@ -654,6 +680,11 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
654
680
|
return l1Timestamp + leeway >= endTimestamp;
|
|
655
681
|
}
|
|
656
682
|
|
|
683
|
+
/** Returns whether the archiver has completed an initial sync run successfully. */
|
|
684
|
+
public isInitialSyncComplete(): boolean {
|
|
685
|
+
return this.initialSyncComplete;
|
|
686
|
+
}
|
|
687
|
+
|
|
657
688
|
/**
|
|
658
689
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
659
690
|
* @param from - Number of the first block to return (inclusive).
|
|
@@ -874,6 +905,8 @@ class ArchiverStoreHelper
|
|
|
874
905
|
| 'addContractInstanceUpdates'
|
|
875
906
|
| 'deleteContractInstanceUpdates'
|
|
876
907
|
| 'addFunctions'
|
|
908
|
+
| 'backupTo'
|
|
909
|
+
| 'close'
|
|
877
910
|
>
|
|
878
911
|
{
|
|
879
912
|
#log = createLogger('archiver:block-helper');
|
|
@@ -244,4 +244,10 @@ export interface ArchiverDataStore {
|
|
|
244
244
|
* Estimates the size of the store in bytes.
|
|
245
245
|
*/
|
|
246
246
|
estimateSize(): Promise<{ mappingSize: number; actualSize: number; numItems: number }>;
|
|
247
|
+
|
|
248
|
+
/** Backups the archiver db to the target folder. Returns the path to the db file. */
|
|
249
|
+
backupTo(path: string): Promise<string>;
|
|
250
|
+
|
|
251
|
+
/** Closes the underlying data store. */
|
|
252
|
+
close(): Promise<void>;
|
|
247
253
|
}
|
|
@@ -8,6 +8,7 @@ import { times, timesParallel } from '@aztec/foundation/collection';
|
|
|
8
8
|
import { randomInt } from '@aztec/foundation/crypto';
|
|
9
9
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
10
10
|
import { Fr } from '@aztec/foundation/fields';
|
|
11
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
11
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
13
|
import { L2Block, wrapInBlock } from '@aztec/stdlib/block';
|
|
13
14
|
import {
|
|
@@ -254,6 +255,20 @@ export function describeArchiverDataStore(
|
|
|
254
255
|
it('returns undefined if tx is not found', async () => {
|
|
255
256
|
await expect(store.getTxEffect(TxHash.random())).resolves.toBeUndefined();
|
|
256
257
|
});
|
|
258
|
+
|
|
259
|
+
it('does not fail if the block is unwound while requesting a tx', async () => {
|
|
260
|
+
const expectedTx = await wrapInBlock(blocks[1].block.body.txEffects[0], blocks[1].block);
|
|
261
|
+
let done = false;
|
|
262
|
+
void (async () => {
|
|
263
|
+
while (!done) {
|
|
264
|
+
void store.getTxEffect(expectedTx.data.txHash);
|
|
265
|
+
await sleep(1);
|
|
266
|
+
}
|
|
267
|
+
})();
|
|
268
|
+
await store.unwindBlocks(blocks.length, blocks.length);
|
|
269
|
+
done = true;
|
|
270
|
+
expect(await store.getTxEffect(expectedTx.data.txHash)).toEqual(undefined);
|
|
271
|
+
});
|
|
257
272
|
});
|
|
258
273
|
|
|
259
274
|
describe('L1 to L2 Messages', () => {
|
package/src/archiver/config.ts
CHANGED
|
@@ -23,8 +23,8 @@ export type ArchiverConfig = {
|
|
|
23
23
|
/** URL for an archiver service. If set, will return an archiver client as opposed to starting a new one. */
|
|
24
24
|
archiverUrl?: string;
|
|
25
25
|
|
|
26
|
-
/**
|
|
27
|
-
|
|
26
|
+
/** List of URLS for L1 consensus clients */
|
|
27
|
+
l1ConsensusHostUrls?: string[];
|
|
28
28
|
|
|
29
29
|
/** The polling interval in ms for retrieving new L2 blocks and encrypted logs. */
|
|
30
30
|
archiverPollingIntervalMS?: number;
|
|
@@ -55,10 +55,10 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
|
55
55
|
description:
|
|
56
56
|
'URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.',
|
|
57
57
|
},
|
|
58
|
-
|
|
59
|
-
env: '
|
|
60
|
-
description: '
|
|
61
|
-
parseEnv: (val: string) => val,
|
|
58
|
+
l1ConsensusHostUrls: {
|
|
59
|
+
env: 'L1_CONSENSUS_HOST_URLS',
|
|
60
|
+
description: 'List of URLS for L1 consensus clients.',
|
|
61
|
+
parseEnv: (val: string) => val.split(',').map(url => url.trim().replace(/\/$/, '')),
|
|
62
62
|
},
|
|
63
63
|
archiverPollingIntervalMS: {
|
|
64
64
|
env: 'ARCHIVER_POLLING_INTERVAL_MS',
|
package/src/archiver/index.ts
CHANGED
|
@@ -2,5 +2,5 @@ export * from './archiver.js';
|
|
|
2
2
|
export * from './config.js';
|
|
3
3
|
export { type PublishedL2Block, type L1PublishedData } from './structs/published.js';
|
|
4
4
|
export type { ArchiverDataStore } from './archiver_store.js';
|
|
5
|
-
export { KVArchiverDataStore } from './kv_archiver_store/kv_archiver_store.js';
|
|
5
|
+
export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './kv_archiver_store/kv_archiver_store.js';
|
|
6
6
|
export { ContractInstanceStore } from './kv_archiver_store/contract_instance_store.js';
|
|
@@ -131,7 +131,10 @@ export class BlockStore {
|
|
|
131
131
|
*/
|
|
132
132
|
async *getBlocks(start: number, limit: number): AsyncIterableIterator<PublishedL2Block> {
|
|
133
133
|
for await (const blockStorage of this.#blocks.valuesAsync(this.#computeBlockRange(start, limit))) {
|
|
134
|
-
|
|
134
|
+
const block = await this.getBlockFromBlockStorage(blockStorage);
|
|
135
|
+
if (block) {
|
|
136
|
+
yield block;
|
|
137
|
+
}
|
|
135
138
|
}
|
|
136
139
|
}
|
|
137
140
|
|
|
@@ -166,9 +169,8 @@ export class BlockStore {
|
|
|
166
169
|
const blockHash = (await header.hash()).toString();
|
|
167
170
|
const blockBodyBuffer = await this.#blockBodies.getAsync(blockHash);
|
|
168
171
|
if (blockBodyBuffer === undefined) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
);
|
|
172
|
+
this.#log.warn(`Could not find body for block ${header.globalVariables.blockNumber.toNumber()} ${blockHash}`);
|
|
173
|
+
return undefined;
|
|
172
174
|
}
|
|
173
175
|
const body = Body.fromBuffer(blockBodyBuffer);
|
|
174
176
|
const block = new L2Block(archive, header, body);
|
|
@@ -210,7 +212,11 @@ export class BlockStore {
|
|
|
210
212
|
return undefined;
|
|
211
213
|
}
|
|
212
214
|
|
|
213
|
-
const block =
|
|
215
|
+
const block = await this.getBlock(blockNumber);
|
|
216
|
+
if (!block) {
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
|
|
214
220
|
const tx = block.block.body.txEffects[txIndex];
|
|
215
221
|
|
|
216
222
|
return new TxReceipt(
|
|
@@ -17,6 +17,8 @@ import { type LogFilter, PrivateLog, type TxScopedL2Log } from '@aztec/stdlib/lo
|
|
|
17
17
|
import type { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
18
18
|
import type { BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
19
19
|
|
|
20
|
+
import { join } from 'path';
|
|
21
|
+
|
|
20
22
|
import type { ArchiverDataStore, ArchiverL1SynchPoint } from '../archiver_store.js';
|
|
21
23
|
import type { DataRetrieval } from '../structs/data_retrieval.js';
|
|
22
24
|
import type { PublishedL2Block } from '../structs/published.js';
|
|
@@ -26,11 +28,13 @@ import { ContractInstanceStore } from './contract_instance_store.js';
|
|
|
26
28
|
import { LogStore } from './log_store.js';
|
|
27
29
|
import { MessageStore } from './message_store.js';
|
|
28
30
|
|
|
31
|
+
export const ARCHIVER_DB_VERSION = 1;
|
|
32
|
+
|
|
29
33
|
/**
|
|
30
34
|
* LMDB implementation of the ArchiverDataStore interface.
|
|
31
35
|
*/
|
|
32
36
|
export class KVArchiverDataStore implements ArchiverDataStore {
|
|
33
|
-
public static readonly SCHEMA_VERSION =
|
|
37
|
+
public static readonly SCHEMA_VERSION = ARCHIVER_DB_VERSION;
|
|
34
38
|
|
|
35
39
|
#blockStore: BlockStore;
|
|
36
40
|
#logStore: LogStore;
|
|
@@ -49,6 +53,15 @@ export class KVArchiverDataStore implements ArchiverDataStore {
|
|
|
49
53
|
this.#contractInstanceStore = new ContractInstanceStore(db);
|
|
50
54
|
}
|
|
51
55
|
|
|
56
|
+
public async backupTo(path: string, compress = true): Promise<string> {
|
|
57
|
+
await this.db.backupTo(path, compress);
|
|
58
|
+
return join(path, 'data.mdb');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public close() {
|
|
62
|
+
return this.db.close();
|
|
63
|
+
}
|
|
64
|
+
|
|
52
65
|
// TODO: These function names are in memory only as they are for development/debugging. They require the full contract
|
|
53
66
|
// artifact supplied to the node out of band. This should be reviewed and potentially removed as part of
|
|
54
67
|
// the node api cleanup process.
|
|
@@ -49,21 +49,21 @@ export class LogStore {
|
|
|
49
49
|
const txHash = txEffect.txHash;
|
|
50
50
|
const dataStartIndexForTx = dataStartIndexForBlock + txIndex * MAX_NOTE_HASHES_PER_TX;
|
|
51
51
|
|
|
52
|
-
txEffect.privateLogs.forEach(log => {
|
|
52
|
+
txEffect.privateLogs.forEach((log, logIndex) => {
|
|
53
53
|
const tag = log.fields[0];
|
|
54
54
|
this.#log.debug(`Found private log with tag ${tag.toString()} in block ${block.number}`);
|
|
55
55
|
|
|
56
56
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
57
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
57
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
58
58
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
-
txEffect.publicLogs.forEach(log => {
|
|
61
|
+
txEffect.publicLogs.forEach((log, logIndex) => {
|
|
62
62
|
const tag = log.log[0];
|
|
63
63
|
this.#log.debug(`Found public log with tag ${tag.toString()} in block ${block.number}`);
|
|
64
64
|
|
|
65
65
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
66
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
66
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
67
67
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
68
68
|
});
|
|
69
69
|
});
|
package/src/factory.ts
CHANGED
|
@@ -14,9 +14,23 @@ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-clien
|
|
|
14
14
|
|
|
15
15
|
import { Archiver } from './archiver/archiver.js';
|
|
16
16
|
import type { ArchiverConfig } from './archiver/config.js';
|
|
17
|
-
import { KVArchiverDataStore } from './archiver/
|
|
17
|
+
import { ARCHIVER_DB_VERSION, KVArchiverDataStore } from './archiver/kv_archiver_store/kv_archiver_store.js';
|
|
18
18
|
import { createArchiverClient } from './rpc/index.js';
|
|
19
19
|
|
|
20
|
+
export const ARCHIVER_STORE_NAME = 'archiver';
|
|
21
|
+
|
|
22
|
+
/** Creates an archiver store. */
|
|
23
|
+
export async function createArchiverStore(
|
|
24
|
+
userConfig: Pick<ArchiverConfig, 'archiverStoreMapSizeKb' | 'maxLogs'> & DataStoreConfig,
|
|
25
|
+
) {
|
|
26
|
+
const config = {
|
|
27
|
+
...userConfig,
|
|
28
|
+
dataStoreMapSizeKB: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKB,
|
|
29
|
+
};
|
|
30
|
+
const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config, createLogger('archiver:lmdb'));
|
|
31
|
+
return new KVArchiverDataStore(store, config.maxLogs);
|
|
32
|
+
}
|
|
33
|
+
|
|
20
34
|
/**
|
|
21
35
|
* Creates a local archiver.
|
|
22
36
|
* @param config - The archiver configuration.
|
|
@@ -26,19 +40,12 @@ import { createArchiverClient } from './rpc/index.js';
|
|
|
26
40
|
* @returns The local archiver.
|
|
27
41
|
*/
|
|
28
42
|
export async function createArchiver(
|
|
29
|
-
|
|
43
|
+
config: ArchiverConfig & DataStoreConfig,
|
|
30
44
|
blobSinkClient: BlobSinkClientInterface,
|
|
31
45
|
opts: { blockUntilSync: boolean } = { blockUntilSync: true },
|
|
32
46
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
33
47
|
): Promise<ArchiverApi & Service & L2BlockSourceEventEmitter> {
|
|
34
|
-
const
|
|
35
|
-
const store = await createStore(
|
|
36
|
-
'archiver',
|
|
37
|
-
KVArchiverDataStore.SCHEMA_VERSION,
|
|
38
|
-
config,
|
|
39
|
-
createLogger('archiver:lmdb'),
|
|
40
|
-
);
|
|
41
|
-
const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
|
|
48
|
+
const archiverStore = await createArchiverStore(config);
|
|
42
49
|
await registerProtocolContracts(archiverStore);
|
|
43
50
|
return Archiver.createAndSync(config, archiverStore, { telemetry, blobSinkClient }, opts.blockUntilSync);
|
|
44
51
|
}
|
|
@@ -209,6 +209,7 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
209
209
|
* @returns A promise that signals the initialization of the l2 block source on completion.
|
|
210
210
|
*/
|
|
211
211
|
public start(): Promise<void> {
|
|
212
|
+
this.log.verbose('Starting mock L2 block source');
|
|
212
213
|
return Promise.resolve();
|
|
213
214
|
}
|
|
214
215
|
|
|
@@ -217,6 +218,7 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
217
218
|
* @returns A promise that signals the l2 block source is now stopped.
|
|
218
219
|
*/
|
|
219
220
|
public stop(): Promise<void> {
|
|
221
|
+
this.log.verbose('Stopping mock L2 block source');
|
|
220
222
|
return Promise.resolve();
|
|
221
223
|
}
|
|
222
224
|
}
|