@aztec/archiver 0.46.7 → 0.47.1

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.
@@ -125,6 +125,8 @@ export declare class Archiver implements ArchiveSource {
125
125
  */
126
126
  getBlockNumber(): Promise<number>;
127
127
  getProvenBlockNumber(): Promise<number>;
128
+ /** Forcefully updates the last proven block number. Use for testing. */
129
+ setProvenBlockNumber(block: number): Promise<void>;
128
130
  getContractClass(id: Fr): Promise<ContractClassPublic | undefined>;
129
131
  getContract(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
130
132
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,OAAO,EACP,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,SAAS,EAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AASzF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AAI5E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAEhC,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAwC,MAAM,MAAM,CAAC;AAE/G,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,QAAS,YAAW,aAAa;IAoB1C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,GAAG;IA3BtB;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,8BAA8B;IAC9B,OAAO,CAAC,eAAe,CAA0B;IAEjD;;;;;;;;;OASG;gBAEgB,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,EAChD,aAAa,EAAE,UAAU,EACzB,yBAAyB,EAAE,UAAU,EACrC,YAAY,EAAE,UAAU,EACxB,eAAe,EAAE,UAAU,EAC3B,KAAK,EAAE,iBAAiB,EACxB,iBAAiB,QAAS,EAC3C,SAAS,EAAE,eAAe,EACT,GAAG,GAAE,WAAiD;IAKzE;;;;;;OAMG;WACiB,aAAa,CAC/B,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,iBAAiB,EAChC,SAAS,EAAE,eAAe,EAC1B,gBAAgB,UAAO,GACtB,OAAO,CAAC,QAAQ,CAAC;IAsBpB;;;OAGG;IACU,KAAK,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D;;;OAGG;YACW,IAAI;YAwJJ,uBAAuB;IAkBrC;;;OAGG;YACW,8BAA8B;IAU5C;;;OAGG;YACW,8BAA8B;YAQ9B,mCAAmC;IAyCjD;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIhD;;;;;;OAMG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOzF;;;;OAIG;IACU,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAS5D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAI1D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAI1E;;;;;OAKG;IACU,iBAAiB,CAC5B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAYtC;;;;;;OAMG;IACI,OAAO,CAAC,QAAQ,SAAS,OAAO,EACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IAIlD;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAI1E;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAIlE,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAI3F;;;;OAIG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD;;;;;OAKG;IACH,qBAAqB,CAAC,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIzF,mBAAmB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAIpC,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;CAGlF"}
1
+ {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ export class Archiver {
65
65
  throw new Error('Archiver is already running');
66
66
  }
67
67
  if (blockUntilSynced) {
68
- this.log.info(`Performing initial chain sync...`);
68
+ this.log.info(`Performing initial chain sync to rollup contract ${this.rollupAddress.toString()}`);
69
69
  await this.sync(blockUntilSynced);
70
70
  }
71
71
  this.runningPromise = new RunningPromise(() => this.sync(false), this.pollingIntervalMs);
@@ -88,12 +88,12 @@ export class Archiver {
88
88
  *
89
89
  * This code does not handle reorgs.
90
90
  */
91
- const l1SynchPoint = await this.store.getSynchPoint();
91
+ const { blocksSynchedTo, messagesSynchedTo } = await this.store.getSynchPoint();
92
92
  const currentL1BlockNumber = await this.publicClient.getBlockNumber();
93
- if (currentL1BlockNumber <= l1SynchPoint.blocksSynchedTo &&
94
- currentL1BlockNumber <= l1SynchPoint.messagesSynchedTo) {
93
+ if (currentL1BlockNumber <= blocksSynchedTo && currentL1BlockNumber <= messagesSynchedTo) {
95
94
  // chain hasn't moved forward
96
95
  // or it's been rolled back
96
+ this.log.debug(`Nothing to sync`, { currentL1BlockNumber, blocksSynchedTo, messagesSynchedTo });
97
97
  return;
98
98
  }
99
99
  // ********** Ensuring Consistency of data pulled from L1 **********
@@ -115,33 +115,28 @@ export class Archiver {
115
115
  */
116
116
  // ********** Events that are processed per L1 block **********
117
117
  // ********** Events that are processed per L2 block **********
118
- const retrievedL1ToL2Messages = await retrieveL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, l1SynchPoint.messagesSynchedTo + 1n, currentL1BlockNumber);
118
+ const retrievedL1ToL2Messages = await retrieveL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, messagesSynchedTo + 1n, currentL1BlockNumber);
119
119
  if (retrievedL1ToL2Messages.retrievedData.length !== 0) {
120
- this.log.verbose(`Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${l1SynchPoint.messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`);
120
+ this.log.verbose(`Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`);
121
121
  }
122
122
  await this.store.addL1ToL2Messages(retrievedL1ToL2Messages);
123
123
  // Read all data from chain and then write to our stores at the end
124
124
  const nextExpectedL2BlockNum = BigInt((await this.store.getSynchedL2BlockNumber()) + 1);
125
- const retrievedBlockBodies = await retrieveBlockBodiesFromAvailabilityOracle(this.publicClient, this.availabilityOracleAddress, blockUntilSynced, l1SynchPoint.blocksSynchedTo + 1n, currentL1BlockNumber);
125
+ const retrievedBlockBodies = await retrieveBlockBodiesFromAvailabilityOracle(this.publicClient, this.availabilityOracleAddress, blockUntilSynced, blocksSynchedTo + 1n, currentL1BlockNumber);
126
126
  const blockBodies = retrievedBlockBodies.retrievedData.map(([blockBody]) => blockBody);
127
127
  await this.store.addBlockBodies(blockBodies);
128
128
  // Now that we have block bodies we will retrieve block metadata and build L2 blocks from the bodies and
129
129
  // the metadata
130
130
  let retrievedBlocks;
131
131
  {
132
- const retrievedBlockMetadata = await retrieveBlockMetadataFromRollup(this.publicClient, this.rollupAddress, blockUntilSynced, l1SynchPoint.blocksSynchedTo + 1n, currentL1BlockNumber, nextExpectedL2BlockNum);
132
+ const retrievedBlockMetadata = await retrieveBlockMetadataFromRollup(this.publicClient, this.rollupAddress, blockUntilSynced, blocksSynchedTo + 1n, currentL1BlockNumber, nextExpectedL2BlockNum);
133
133
  const retrievedBodyHashes = retrievedBlockMetadata.retrievedData.map(([header]) => header.contentCommitment.txsEffectsHash);
134
134
  const blockBodiesFromStore = await this.store.getBlockBodies(retrievedBodyHashes);
135
135
  if (retrievedBlockMetadata.retrievedData.length !== blockBodiesFromStore.length) {
136
136
  throw new Error('Block headers length does not equal block bodies length');
137
137
  }
138
138
  const blocks = retrievedBlockMetadata.retrievedData.map((blockMetadata, i) => new L2Block(blockMetadata[1], blockMetadata[0], blockBodiesFromStore[i]));
139
- if (blocks.length === 0) {
140
- return;
141
- }
142
- else {
143
- this.log.verbose(`Retrieved ${blocks.length} new L2 blocks between L1 blocks ${l1SynchPoint.blocksSynchedTo + 1n} and ${currentL1BlockNumber}.`);
144
- }
139
+ (blocks.length ? this.log.verbose : this.log.debug)(`Retrieved ${blocks.length || 'no'} new L2 blocks between L1 blocks ${blocksSynchedTo + 1n} and ${currentL1BlockNumber}.`);
145
140
  retrievedBlocks = {
146
141
  lastProcessedL1BlockNumber: retrievedBlockMetadata.lastProcessedL1BlockNumber,
147
142
  retrievedData: blocks,
@@ -162,17 +157,24 @@ export class Archiver {
162
157
  await this.storeDeployedContractInstances(blockLogs, block.number);
163
158
  await this.storeBroadcastedIndividualFunctions(blockLogs, block.number);
164
159
  }));
165
- await this.store.addBlocks(retrievedBlocks);
166
- this.instrumentation.processNewBlocks(retrievedBlocks.retrievedData);
160
+ if (retrievedBlocks.retrievedData.length > 0) {
161
+ await this.store.addBlocks(retrievedBlocks);
162
+ this.instrumentation.processNewBlocks(retrievedBlocks.retrievedData);
163
+ const lastL2BlockNumber = retrievedBlocks.retrievedData[retrievedBlocks.retrievedData.length - 1].number;
164
+ this.log.verbose(`Processed ${retrievedBlocks.retrievedData.length} new L2 blocks up to ${lastL2BlockNumber}`);
165
+ }
167
166
  // Fetch the logs for proven blocks in the block range and update the last proven block number.
168
167
  // Note it's ok to read repeated data here, since we're just using the largest number we see on the logs.
169
- await this.updateLastProvenL2Block(l1SynchPoint.blocksSynchedTo, currentL1BlockNumber);
168
+ await this.updateLastProvenL2Block(blocksSynchedTo, currentL1BlockNumber);
169
+ if (retrievedBlocks.retrievedData.length > 0 || blockUntilSynced) {
170
+ (blockUntilSynced ? this.log.info : this.log.verbose)(`Synced to L1 block ${currentL1BlockNumber}`);
171
+ }
170
172
  }
171
173
  async updateLastProvenL2Block(fromBlock, toBlock) {
172
174
  const logs = await this.publicClient.getLogs({
173
175
  address: this.rollupAddress.toString(),
174
176
  fromBlock,
175
- toBlock,
177
+ toBlock: toBlock + 1n, // toBlock is exclusive
176
178
  strict: true,
177
179
  event: getAbiItem({ abi: RollupAbi, name: 'L2ProofVerified' }),
178
180
  });
@@ -181,7 +183,14 @@ export class Archiver {
181
183
  return;
182
184
  }
183
185
  const provenBlockNumber = lastLog.args.blockNumber;
184
- await this.store.setProvenL2BlockNumber(Number(provenBlockNumber));
186
+ if (!provenBlockNumber) {
187
+ throw new Error(`Missing argument blockNumber from L2ProofVerified event`);
188
+ }
189
+ const currentProvenBlockNumber = await this.store.getProvenL2BlockNumber();
190
+ if (provenBlockNumber > currentProvenBlockNumber) {
191
+ this.log.verbose(`Updated last proven block number from ${currentProvenBlockNumber} to ${provenBlockNumber}`);
192
+ await this.store.setProvenL2BlockNumber(Number(provenBlockNumber));
193
+ }
185
194
  }
186
195
  /**
187
196
  * Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract.
@@ -327,6 +336,10 @@ export class Archiver {
327
336
  getProvenBlockNumber() {
328
337
  return this.store.getProvenL2BlockNumber();
329
338
  }
339
+ /** Forcefully updates the last proven block number. Use for testing. */
340
+ setProvenBlockNumber(block) {
341
+ return this.store.setProvenL2BlockNumber(block);
342
+ }
330
343
  getContractClass(id) {
331
344
  return this.store.getContractClass(id);
332
345
  }
@@ -360,4 +373,4 @@ export class Archiver {
360
373
  return this.store.getContractArtifact(address);
361
374
  }
362
375
  }
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLE9BQU8sR0FVUixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSw0QkFBNEIsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixxQ0FBcUMsRUFDckMscUNBQXFDLEVBQ3JDLDJDQUEyQyxHQUM1QyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVdwRixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQXFELGtCQUFrQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0csT0FBTyxFQUVMLHlDQUF5QyxFQUN6QywrQkFBK0IsRUFDL0Isc0JBQXNCLEdBQ3ZCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPL0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBU25COzs7Ozs7Ozs7T0FTRztJQUNILFlBQ21CLFlBQWdELEVBQ2hELGFBQXlCLEVBQ3pCLHlCQUFxQyxFQUNyQyxZQUF3QixFQUN4QixlQUEy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
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLE9BQU8sR0FVUixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSw0QkFBNEIsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixxQ0FBcUMsRUFDckMscUNBQXFDLEVBQ3JDLDJDQUEyQyxHQUM1QyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVdwRixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQXFELGtCQUFrQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0csT0FBTyxFQUVMLHlDQUF5QyxFQUN6QywrQkFBK0IsRUFDL0Isc0JBQXNCLEdBQ3ZCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPL0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBU25COzs7Ozs7Ozs7T0FTRztJQUNILFlBQ21CLFlBQWdELEVBQ2hELGFBQXlCLEVBQ3pCLHlCQUFxQyxFQUNyQyxZQUF3QixFQUN4QixlQUEy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
@@ -9,6 +9,10 @@ import { type L1ContractAddresses } from '@aztec/ethereum';
9
9
  * The archiver configuration.
10
10
  */
11
11
  export interface ArchiverConfig {
12
+ /**
13
+ * URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.
14
+ */
15
+ archiverUrl?: string;
12
16
  /**
13
17
  * The url of the Ethereum RPC node.
14
18
  */
@@ -36,7 +40,7 @@ export interface ArchiverConfig {
36
40
  /**
37
41
  * Optional dir to store data. If omitted will store in memory.
38
42
  */
39
- dataDirectory?: string;
43
+ dataDirectory: string | undefined;
40
44
  /** The max number of logs that can be obtained in 1 "getUnencryptedLogs" call. */
41
45
  maxLogs?: number;
42
46
  }
@@ -45,5 +49,5 @@ export interface ArchiverConfig {
45
49
  * Note: If an environment variable is not set, the default value is used.
46
50
  * @returns The archiver configuration.
47
51
  */
48
- export declare function getConfigEnvVars(): ArchiverConfig;
52
+ export declare function getArchiverConfigFromEnv(): ArchiverConfig;
49
53
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,WAAW,EAAE,mBAAmB,CAAC;IAEjC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAuCjD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAiC,MAAM,iBAAiB,CAAC;AAE1F;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,WAAW,EAAE,mBAAmB,CAAC;IAEjC;;OAEG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAoBzD"}
@@ -1,33 +1,20 @@
1
- import { EthAddress } from '@aztec/foundation/eth-address';
1
+ import { getL1ContractAddressesFromEnv } from '@aztec/ethereum';
2
2
  /**
3
3
  * Returns the archiver configuration from the environment variables.
4
4
  * Note: If an environment variable is not set, the default value is used.
5
5
  * @returns The archiver configuration.
6
6
  */
7
- export function getConfigEnvVars() {
8
- const { ETHEREUM_HOST, L1_CHAIN_ID, ARCHIVER_POLLING_INTERVAL_MS, ARCHIVER_VIEM_POLLING_INTERVAL_MS, AVAILABILITY_ORACLE_CONTRACT_ADDRESS, ROLLUP_CONTRACT_ADDRESS, API_KEY, INBOX_CONTRACT_ADDRESS, OUTBOX_CONTRACT_ADDRESS, REGISTRY_CONTRACT_ADDRESS, GAS_TOKEN_CONTRACT_ADDRESS, GAS_PORTAL_CONTRACT_ADDRESS, DATA_DIRECTORY, } = process.env;
9
- // Populate the relevant addresses for use by the archiver.
10
- const addresses = {
11
- availabilityOracleAddress: AVAILABILITY_ORACLE_CONTRACT_ADDRESS
12
- ? EthAddress.fromString(AVAILABILITY_ORACLE_CONTRACT_ADDRESS)
13
- : EthAddress.ZERO,
14
- rollupAddress: ROLLUP_CONTRACT_ADDRESS ? EthAddress.fromString(ROLLUP_CONTRACT_ADDRESS) : EthAddress.ZERO,
15
- registryAddress: REGISTRY_CONTRACT_ADDRESS ? EthAddress.fromString(REGISTRY_CONTRACT_ADDRESS) : EthAddress.ZERO,
16
- inboxAddress: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
17
- outboxAddress: OUTBOX_CONTRACT_ADDRESS ? EthAddress.fromString(OUTBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
18
- gasTokenAddress: GAS_TOKEN_CONTRACT_ADDRESS ? EthAddress.fromString(GAS_TOKEN_CONTRACT_ADDRESS) : EthAddress.ZERO,
19
- gasPortalAddress: GAS_PORTAL_CONTRACT_ADDRESS
20
- ? EthAddress.fromString(GAS_PORTAL_CONTRACT_ADDRESS)
21
- : EthAddress.ZERO,
22
- };
7
+ export function getArchiverConfigFromEnv() {
8
+ const { ETHEREUM_HOST, L1_CHAIN_ID, ARCHIVER_POLLING_INTERVAL_MS, ARCHIVER_VIEM_POLLING_INTERVAL_MS, API_KEY, DATA_DIRECTORY, ARCHIVER_URL, } = process.env;
23
9
  return {
24
10
  rpcUrl: ETHEREUM_HOST || '',
25
11
  l1ChainId: L1_CHAIN_ID ? +L1_CHAIN_ID : 31337, // 31337 is the default chain id for anvil
26
12
  archiverPollingIntervalMS: ARCHIVER_POLLING_INTERVAL_MS ? +ARCHIVER_POLLING_INTERVAL_MS : 1000,
27
13
  viemPollingIntervalMS: ARCHIVER_VIEM_POLLING_INTERVAL_MS ? +ARCHIVER_VIEM_POLLING_INTERVAL_MS : 1000,
28
14
  apiKey: API_KEY,
29
- l1Contracts: addresses,
15
+ l1Contracts: getL1ContractAddressesFromEnv(),
30
16
  dataDirectory: DATA_DIRECTORY,
17
+ archiverUrl: ARCHIVER_URL,
31
18
  };
32
19
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FyY2hpdmVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFvRDNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE1BQU0sRUFDSixhQUFhLEVBQ2IsV0FBVyxFQUNYLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsb0NBQW9DLEVBQ3BDLHVCQUF1QixFQUN2QixPQUFPLEVBQ1Asc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQixjQUFjLEdBQ2YsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ2hCLDJEQUEyRDtJQUMzRCxNQUFNLFNBQVMsR0FBd0I7UUFDckMseUJBQXlCLEVBQUUsb0NBQW9DO1lBQzdELENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLG9DQUFvQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtRQUNuQixhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDekcsZUFBZSxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQy9HLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtRQUN0RyxhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDekcsZUFBZSxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQ2pILGdCQUFnQixFQUFFLDJCQUEyQjtZQUMzQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQztZQUNwRCxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7S0FDcEIsQ0FBQztJQUNGLE9BQU87UUFDTCxNQUFNLEVBQUUsYUFBYSxJQUFJLEVBQUU7UUFDM0IsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSwwQ0FBMEM7UUFDekYseUJBQXlCLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUs7UUFDL0YscUJBQXFCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLElBQUs7UUFDckcsTUFBTSxFQUFFLE9BQU87UUFDZixXQUFXLEVBQUUsU0FBUztRQUN0QixhQUFhLEVBQUUsY0FBYztLQUM5QixDQUFDO0FBQ0osQ0FBQyJ9
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FyY2hpdmVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLDZCQUE2QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF5RDFGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE1BQU0sRUFDSixhQUFhLEVBQ2IsV0FBVyxFQUNYLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsT0FBTyxFQUNQLGNBQWMsRUFDZCxZQUFZLEdBQ2IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ2hCLE9BQU87UUFDTCxNQUFNLEVBQUUsYUFBYSxJQUFJLEVBQUU7UUFDM0IsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSwwQ0FBMEM7UUFDekYseUJBQXlCLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUs7UUFDL0YscUJBQXFCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLElBQUs7UUFDckcsTUFBTSxFQUFFLE9BQU87UUFDZixXQUFXLEVBQUUsNkJBQTZCLEVBQUU7UUFDNUMsYUFBYSxFQUFFLGNBQWM7UUFDN0IsV0FBVyxFQUFFLFlBQVk7S0FDMUIsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ import { type AztecKVStore } from '@aztec/kv-store';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ import { Archiver } from './archiver/archiver.js';
4
+ import { type ArchiverConfig } from './archiver/config.js';
5
+ export declare function createArchiver(config: ArchiverConfig, store: AztecKVStore, telemetry?: TelemetryClient, opts?: {
6
+ blockUntilSync: boolean;
7
+ }): import("./archiver/archiver.js").ArchiveSource | Promise<Archiver>;
8
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,YAAY,EACnB,SAAS,GAAE,eAA2C,EACtD,IAAI,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA6B,sEAS7D"}
@@ -0,0 +1,15 @@
1
+ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
2
+ import { Archiver } from './archiver/archiver.js';
3
+ import { KVArchiverDataStore } from './archiver/index.js';
4
+ import { createArchiverClient } from './rpc/archiver_client.js';
5
+ export function createArchiver(config, store, telemetry = new NoopTelemetryClient(), opts = { blockUntilSync: true }) {
6
+ if (!config.archiverUrl) {
7
+ // first create and sync the archiver
8
+ const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
9
+ return Archiver.createAndSync(config, archiverStore, telemetry, opts.blockUntilSync);
10
+ }
11
+ else {
12
+ return createArchiverClient(config.archiverUrl);
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRSxNQUFNLFVBQVUsY0FBYyxDQUM1QixNQUFzQixFQUN0QixLQUFtQixFQUNuQixZQUE2QixJQUFJLG1CQUFtQixFQUFFLEVBQ3RELE9BQW9DLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRTtJQUU1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLHFDQUFxQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxJQUFJLG1CQUFtQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7QUFDSCxDQUFDIn0=
package/dest/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './archiver/index.js';
2
2
  export * from './rpc/index.js';
3
+ export * from './factory.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
package/dest/index.js CHANGED
@@ -3,17 +3,18 @@ import { fileURLToPath } from '@aztec/foundation/url';
3
3
  import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
4
4
  import { createPublicClient, http } from 'viem';
5
5
  import { localhost } from 'viem/chains';
6
- import { Archiver, getConfigEnvVars } from './archiver/index.js';
6
+ import { Archiver, getArchiverConfigFromEnv } from './archiver/index.js';
7
7
  import { MemoryArchiverStore } from './archiver/memory_archiver_store/memory_archiver_store.js';
8
8
  export * from './archiver/index.js';
9
9
  export * from './rpc/index.js';
10
+ export * from './factory.js';
10
11
  const log = createDebugLogger('aztec:archiver');
11
12
  /**
12
13
  * A function which instantiates and starts Archiver.
13
14
  */
14
15
  // eslint-disable-next-line require-await
15
16
  async function main() {
16
- const config = getConfigEnvVars();
17
+ const config = getArchiverConfigFromEnv();
17
18
  const { rpcUrl, l1Contracts } = config;
18
19
  const publicClient = createPublicClient({
19
20
  chain: localhost,
@@ -36,4 +37,4 @@ if (process.argv[1] === fileURLToPath(import.meta.url).replace(/\/index\.js$/, '
36
37
  process.exit(1);
37
38
  });
38
39
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFaEcsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBRS9CLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNsQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUV2QyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxLQUFLLEVBQUUsU0FBUztRQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUMzQixZQUFZLEVBQ1osV0FBVyxDQUFDLGFBQWEsRUFDekIsV0FBVyxDQUFDLHlCQUF5QixFQUNyQyxXQUFXLENBQUMsWUFBWSxFQUN4QixXQUFXLENBQUMsZUFBZSxFQUMzQixhQUFhLEVBQ2IsSUFBSSxFQUNKLElBQUksbUJBQW1CLEVBQUUsQ0FDMUIsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQzFCLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELGlFQUFpRTtBQUNqRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25GLG1FQUFtRTtJQUNuRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFaEcsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBRTdCLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztJQUMxQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUV2QyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxLQUFLLEVBQUUsU0FBUztRQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUMzQixZQUFZLEVBQ1osV0FBVyxDQUFDLGFBQWEsRUFDekIsV0FBVyxDQUFDLHlCQUF5QixFQUNyQyxXQUFXLENBQUMsWUFBWSxFQUN4QixXQUFXLENBQUMsZUFBZSxFQUMzQixhQUFhLEVBQ2IsSUFBSSxFQUNKLElBQUksbUJBQW1CLEVBQUUsQ0FDMUIsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQzFCLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELGlFQUFpRTtBQUNqRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25GLG1FQUFtRTtJQUNuRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/archiver",
3
- "version": "0.46.7",
3
+ "version": "0.47.1",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -58,15 +58,15 @@
58
58
  ]
59
59
  },
60
60
  "dependencies": {
61
- "@aztec/circuit-types": "0.46.7",
62
- "@aztec/circuits.js": "0.46.7",
63
- "@aztec/ethereum": "0.46.7",
64
- "@aztec/foundation": "0.46.7",
65
- "@aztec/kv-store": "0.46.7",
66
- "@aztec/l1-artifacts": "0.46.7",
67
- "@aztec/protocol-contracts": "0.46.7",
68
- "@aztec/telemetry-client": "0.46.7",
69
- "@aztec/types": "0.46.7",
61
+ "@aztec/circuit-types": "0.47.1",
62
+ "@aztec/circuits.js": "0.47.1",
63
+ "@aztec/ethereum": "0.47.1",
64
+ "@aztec/foundation": "0.47.1",
65
+ "@aztec/kv-store": "0.47.1",
66
+ "@aztec/l1-artifacts": "0.47.1",
67
+ "@aztec/protocol-contracts": "0.47.1",
68
+ "@aztec/telemetry-client": "0.47.1",
69
+ "@aztec/types": "0.47.1",
70
70
  "debug": "^4.3.4",
71
71
  "lodash.groupby": "^4.6.0",
72
72
  "lodash.omit": "^4.5.0",
@@ -140,7 +140,7 @@ export class Archiver implements ArchiveSource {
140
140
  }
141
141
 
142
142
  if (blockUntilSynced) {
143
- this.log.info(`Performing initial chain sync...`);
143
+ this.log.info(`Performing initial chain sync to rollup contract ${this.rollupAddress.toString()}`);
144
144
  await this.sync(blockUntilSynced);
145
145
  }
146
146
 
@@ -165,15 +165,13 @@ export class Archiver implements ArchiveSource {
165
165
  *
166
166
  * This code does not handle reorgs.
167
167
  */
168
- const l1SynchPoint = await this.store.getSynchPoint();
168
+ const { blocksSynchedTo, messagesSynchedTo } = await this.store.getSynchPoint();
169
169
  const currentL1BlockNumber = await this.publicClient.getBlockNumber();
170
170
 
171
- if (
172
- currentL1BlockNumber <= l1SynchPoint.blocksSynchedTo &&
173
- currentL1BlockNumber <= l1SynchPoint.messagesSynchedTo
174
- ) {
171
+ if (currentL1BlockNumber <= blocksSynchedTo && currentL1BlockNumber <= messagesSynchedTo) {
175
172
  // chain hasn't moved forward
176
173
  // or it's been rolled back
174
+ this.log.debug(`Nothing to sync`, { currentL1BlockNumber, blocksSynchedTo, messagesSynchedTo });
177
175
  return;
178
176
  }
179
177
 
@@ -204,14 +202,14 @@ export class Archiver implements ArchiveSource {
204
202
  this.publicClient,
205
203
  this.inboxAddress,
206
204
  blockUntilSynced,
207
- l1SynchPoint.messagesSynchedTo + 1n,
205
+ messagesSynchedTo + 1n,
208
206
  currentL1BlockNumber,
209
207
  );
210
208
 
211
209
  if (retrievedL1ToL2Messages.retrievedData.length !== 0) {
212
210
  this.log.verbose(
213
211
  `Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${
214
- l1SynchPoint.messagesSynchedTo + 1n
212
+ messagesSynchedTo + 1n
215
213
  } and ${currentL1BlockNumber}.`,
216
214
  );
217
215
  }
@@ -225,7 +223,7 @@ export class Archiver implements ArchiveSource {
225
223
  this.publicClient,
226
224
  this.availabilityOracleAddress,
227
225
  blockUntilSynced,
228
- l1SynchPoint.blocksSynchedTo + 1n,
226
+ blocksSynchedTo + 1n,
229
227
  currentL1BlockNumber,
230
228
  );
231
229
 
@@ -240,7 +238,7 @@ export class Archiver implements ArchiveSource {
240
238
  this.publicClient,
241
239
  this.rollupAddress,
242
240
  blockUntilSynced,
243
- l1SynchPoint.blocksSynchedTo + 1n,
241
+ blocksSynchedTo + 1n,
244
242
  currentL1BlockNumber,
245
243
  nextExpectedL2BlockNum,
246
244
  );
@@ -259,15 +257,11 @@ export class Archiver implements ArchiveSource {
259
257
  (blockMetadata, i) => new L2Block(blockMetadata[1], blockMetadata[0], blockBodiesFromStore[i]),
260
258
  );
261
259
 
262
- if (blocks.length === 0) {
263
- return;
264
- } else {
265
- this.log.verbose(
266
- `Retrieved ${blocks.length} new L2 blocks between L1 blocks ${
267
- l1SynchPoint.blocksSynchedTo + 1n
268
- } and ${currentL1BlockNumber}.`,
269
- );
270
- }
260
+ (blocks.length ? this.log.verbose : this.log.debug)(
261
+ `Retrieved ${blocks.length || 'no'} new L2 blocks between L1 blocks ${
262
+ blocksSynchedTo + 1n
263
+ } and ${currentL1BlockNumber}.`,
264
+ );
271
265
 
272
266
  retrievedBlocks = {
273
267
  lastProcessedL1BlockNumber: retrievedBlockMetadata.lastProcessedL1BlockNumber,
@@ -296,19 +290,27 @@ export class Archiver implements ArchiveSource {
296
290
  }),
297
291
  );
298
292
 
299
- await this.store.addBlocks(retrievedBlocks);
300
- this.instrumentation.processNewBlocks(retrievedBlocks.retrievedData);
293
+ if (retrievedBlocks.retrievedData.length > 0) {
294
+ await this.store.addBlocks(retrievedBlocks);
295
+ this.instrumentation.processNewBlocks(retrievedBlocks.retrievedData);
296
+ const lastL2BlockNumber = retrievedBlocks.retrievedData[retrievedBlocks.retrievedData.length - 1].number;
297
+ this.log.verbose(`Processed ${retrievedBlocks.retrievedData.length} new L2 blocks up to ${lastL2BlockNumber}`);
298
+ }
301
299
 
302
300
  // Fetch the logs for proven blocks in the block range and update the last proven block number.
303
301
  // Note it's ok to read repeated data here, since we're just using the largest number we see on the logs.
304
- await this.updateLastProvenL2Block(l1SynchPoint.blocksSynchedTo, currentL1BlockNumber);
302
+ await this.updateLastProvenL2Block(blocksSynchedTo, currentL1BlockNumber);
303
+
304
+ if (retrievedBlocks.retrievedData.length > 0 || blockUntilSynced) {
305
+ (blockUntilSynced ? this.log.info : this.log.verbose)(`Synced to L1 block ${currentL1BlockNumber}`);
306
+ }
305
307
  }
306
308
 
307
309
  private async updateLastProvenL2Block(fromBlock: bigint, toBlock: bigint) {
308
310
  const logs = await this.publicClient.getLogs({
309
311
  address: this.rollupAddress.toString(),
310
312
  fromBlock,
311
- toBlock,
313
+ toBlock: toBlock + 1n, // toBlock is exclusive
312
314
  strict: true,
313
315
  event: getAbiItem({ abi: RollupAbi, name: 'L2ProofVerified' }),
314
316
  });
@@ -319,7 +321,15 @@ export class Archiver implements ArchiveSource {
319
321
  }
320
322
 
321
323
  const provenBlockNumber = lastLog.args.blockNumber;
322
- await this.store.setProvenL2BlockNumber(Number(provenBlockNumber));
324
+ if (!provenBlockNumber) {
325
+ throw new Error(`Missing argument blockNumber from L2ProofVerified event`);
326
+ }
327
+
328
+ const currentProvenBlockNumber = await this.store.getProvenL2BlockNumber();
329
+ if (provenBlockNumber > currentProvenBlockNumber) {
330
+ this.log.verbose(`Updated last proven block number from ${currentProvenBlockNumber} to ${provenBlockNumber}`);
331
+ await this.store.setProvenL2BlockNumber(Number(provenBlockNumber));
332
+ }
323
333
  }
324
334
 
325
335
  /**
@@ -502,6 +512,11 @@ export class Archiver implements ArchiveSource {
502
512
  return this.store.getProvenL2BlockNumber();
503
513
  }
504
514
 
515
+ /** Forcefully updates the last proven block number. Use for testing. */
516
+ public setProvenBlockNumber(block: number): Promise<void> {
517
+ return this.store.setProvenL2BlockNumber(block);
518
+ }
519
+
505
520
  public getContractClass(id: Fr): Promise<ContractClassPublic | undefined> {
506
521
  return this.store.getContractClass(id);
507
522
  }
@@ -1,5 +1,4 @@
1
- import { type L1ContractAddresses } from '@aztec/ethereum';
2
- import { EthAddress } from '@aztec/foundation/eth-address';
1
+ import { type L1ContractAddresses, getL1ContractAddressesFromEnv } from '@aztec/ethereum';
3
2
 
4
3
  /**
5
4
  * There are 2 polling intervals used in this configuration. The first is the archiver polling interval, archiverPollingIntervalMS.
@@ -12,6 +11,11 @@ import { EthAddress } from '@aztec/foundation/eth-address';
12
11
  * The archiver configuration.
13
12
  */
14
13
  export interface ArchiverConfig {
14
+ /**
15
+ * URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.
16
+ */
17
+ archiverUrl?: string;
18
+
15
19
  /**
16
20
  * The url of the Ethereum RPC node.
17
21
  */
@@ -45,7 +49,7 @@ export interface ArchiverConfig {
45
49
  /**
46
50
  * Optional dir to store data. If omitted will store in memory.
47
51
  */
48
- dataDirectory?: string;
52
+ dataDirectory: string | undefined;
49
53
 
50
54
  /** The max number of logs that can be obtained in 1 "getUnencryptedLogs" call. */
51
55
  maxLogs?: number;
@@ -56,43 +60,24 @@ export interface ArchiverConfig {
56
60
  * Note: If an environment variable is not set, the default value is used.
57
61
  * @returns The archiver configuration.
58
62
  */
59
- export function getConfigEnvVars(): ArchiverConfig {
63
+ export function getArchiverConfigFromEnv(): ArchiverConfig {
60
64
  const {
61
65
  ETHEREUM_HOST,
62
66
  L1_CHAIN_ID,
63
67
  ARCHIVER_POLLING_INTERVAL_MS,
64
68
  ARCHIVER_VIEM_POLLING_INTERVAL_MS,
65
- AVAILABILITY_ORACLE_CONTRACT_ADDRESS,
66
- ROLLUP_CONTRACT_ADDRESS,
67
69
  API_KEY,
68
- INBOX_CONTRACT_ADDRESS,
69
- OUTBOX_CONTRACT_ADDRESS,
70
- REGISTRY_CONTRACT_ADDRESS,
71
- GAS_TOKEN_CONTRACT_ADDRESS,
72
- GAS_PORTAL_CONTRACT_ADDRESS,
73
70
  DATA_DIRECTORY,
71
+ ARCHIVER_URL,
74
72
  } = process.env;
75
- // Populate the relevant addresses for use by the archiver.
76
- const addresses: L1ContractAddresses = {
77
- availabilityOracleAddress: AVAILABILITY_ORACLE_CONTRACT_ADDRESS
78
- ? EthAddress.fromString(AVAILABILITY_ORACLE_CONTRACT_ADDRESS)
79
- : EthAddress.ZERO,
80
- rollupAddress: ROLLUP_CONTRACT_ADDRESS ? EthAddress.fromString(ROLLUP_CONTRACT_ADDRESS) : EthAddress.ZERO,
81
- registryAddress: REGISTRY_CONTRACT_ADDRESS ? EthAddress.fromString(REGISTRY_CONTRACT_ADDRESS) : EthAddress.ZERO,
82
- inboxAddress: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
83
- outboxAddress: OUTBOX_CONTRACT_ADDRESS ? EthAddress.fromString(OUTBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
84
- gasTokenAddress: GAS_TOKEN_CONTRACT_ADDRESS ? EthAddress.fromString(GAS_TOKEN_CONTRACT_ADDRESS) : EthAddress.ZERO,
85
- gasPortalAddress: GAS_PORTAL_CONTRACT_ADDRESS
86
- ? EthAddress.fromString(GAS_PORTAL_CONTRACT_ADDRESS)
87
- : EthAddress.ZERO,
88
- };
89
73
  return {
90
74
  rpcUrl: ETHEREUM_HOST || '',
91
75
  l1ChainId: L1_CHAIN_ID ? +L1_CHAIN_ID : 31337, // 31337 is the default chain id for anvil
92
76
  archiverPollingIntervalMS: ARCHIVER_POLLING_INTERVAL_MS ? +ARCHIVER_POLLING_INTERVAL_MS : 1_000,
93
77
  viemPollingIntervalMS: ARCHIVER_VIEM_POLLING_INTERVAL_MS ? +ARCHIVER_VIEM_POLLING_INTERVAL_MS : 1_000,
94
78
  apiKey: API_KEY,
95
- l1Contracts: addresses,
79
+ l1Contracts: getL1ContractAddressesFromEnv(),
96
80
  dataDirectory: DATA_DIRECTORY,
81
+ archiverUrl: ARCHIVER_URL,
97
82
  };
98
83
  }
package/src/factory.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { type AztecKVStore } from '@aztec/kv-store';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
4
+
5
+ import { Archiver } from './archiver/archiver.js';
6
+ import { type ArchiverConfig } from './archiver/config.js';
7
+ import { KVArchiverDataStore } from './archiver/index.js';
8
+ import { createArchiverClient } from './rpc/archiver_client.js';
9
+
10
+ export function createArchiver(
11
+ config: ArchiverConfig,
12
+ store: AztecKVStore,
13
+ telemetry: TelemetryClient = new NoopTelemetryClient(),
14
+ opts: { blockUntilSync: boolean } = { blockUntilSync: true },
15
+ ) {
16
+ if (!config.archiverUrl) {
17
+ // first create and sync the archiver
18
+ const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
19
+ return Archiver.createAndSync(config, archiverStore, telemetry, opts.blockUntilSync);
20
+ } else {
21
+ return createArchiverClient(config.archiverUrl);
22
+ }
23
+ }
package/src/index.ts CHANGED
@@ -5,11 +5,12 @@ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
5
5
  import { createPublicClient, http } from 'viem';
6
6
  import { localhost } from 'viem/chains';
7
7
 
8
- import { Archiver, getConfigEnvVars } from './archiver/index.js';
8
+ import { Archiver, getArchiverConfigFromEnv } from './archiver/index.js';
9
9
  import { MemoryArchiverStore } from './archiver/memory_archiver_store/memory_archiver_store.js';
10
10
 
11
11
  export * from './archiver/index.js';
12
12
  export * from './rpc/index.js';
13
+ export * from './factory.js';
13
14
 
14
15
  const log = createDebugLogger('aztec:archiver');
15
16
 
@@ -18,7 +19,7 @@ const log = createDebugLogger('aztec:archiver');
18
19
  */
19
20
  // eslint-disable-next-line require-await
20
21
  async function main() {
21
- const config = getConfigEnvVars();
22
+ const config = getArchiverConfigFromEnv();
22
23
  const { rpcUrl, l1Contracts } = config;
23
24
 
24
25
  const publicClient = createPublicClient({