@aztec/archiver 0.66.0 → 0.67.1-devnet

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.
Files changed (51) hide show
  1. package/dest/archiver/archiver.d.ts +7 -10
  2. package/dest/archiver/archiver.d.ts.map +1 -1
  3. package/dest/archiver/archiver.js +566 -559
  4. package/dest/archiver/archiver_store.d.ts +2 -2
  5. package/dest/archiver/archiver_store.d.ts.map +1 -1
  6. package/dest/archiver/config.d.ts +2 -0
  7. package/dest/archiver/config.d.ts.map +1 -1
  8. package/dest/archiver/config.js +6 -1
  9. package/dest/archiver/data_retrieval.d.ts +3 -3
  10. package/dest/archiver/data_retrieval.d.ts.map +1 -1
  11. package/dest/archiver/data_retrieval.js +38 -17
  12. package/dest/archiver/instrumentation.d.ts +5 -2
  13. package/dest/archiver/instrumentation.d.ts.map +1 -1
  14. package/dest/archiver/instrumentation.js +17 -18
  15. package/dest/archiver/kv_archiver_store/block_store.d.ts +2 -2
  16. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  17. package/dest/archiver/kv_archiver_store/block_store.js +6 -6
  18. package/dest/archiver/kv_archiver_store/contract_class_store.js +2 -2
  19. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +2 -2
  20. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  21. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +3 -3
  22. package/dest/archiver/kv_archiver_store/log_store.js +3 -3
  23. package/dest/archiver/kv_archiver_store/message_store.js +3 -3
  24. package/dest/archiver/kv_archiver_store/nullifier_store.js +3 -3
  25. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +2 -2
  26. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
  27. package/dest/archiver/memory_archiver_store/memory_archiver_store.js +4 -4
  28. package/dest/factory.d.ts.map +1 -1
  29. package/dest/factory.js +8 -6
  30. package/dest/index.d.ts +1 -1
  31. package/dest/index.d.ts.map +1 -1
  32. package/dest/index.js +2 -2
  33. package/dest/test/mock_l2_block_source.d.ts +2 -2
  34. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  35. package/dest/test/mock_l2_block_source.js +3 -3
  36. package/package.json +17 -12
  37. package/src/archiver/archiver.ts +19 -24
  38. package/src/archiver/archiver_store.ts +2 -2
  39. package/src/archiver/config.ts +8 -0
  40. package/src/archiver/data_retrieval.ts +58 -25
  41. package/src/archiver/instrumentation.ts +25 -21
  42. package/src/archiver/kv_archiver_store/block_store.ts +6 -6
  43. package/src/archiver/kv_archiver_store/contract_class_store.ts +1 -1
  44. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +4 -4
  45. package/src/archiver/kv_archiver_store/log_store.ts +2 -2
  46. package/src/archiver/kv_archiver_store/message_store.ts +2 -2
  47. package/src/archiver/kv_archiver_store/nullifier_store.ts +2 -2
  48. package/src/archiver/memory_archiver_store/memory_archiver_store.ts +5 -5
  49. package/src/factory.ts +7 -5
  50. package/src/index.ts +1 -4
  51. package/src/test/mock_l2_block_source.ts +4 -4
@@ -2,7 +2,7 @@ import { L2Block, L2BlockHash, TxReceipt, TxStatus, } from '@aztec/circuit-types
2
2
  import { getSlotRangeForEpoch } from '@aztec/circuit-types';
3
3
  import { EthAddress } from '@aztec/circuits.js';
4
4
  import { DefaultL1ContractsConfig } from '@aztec/ethereum';
5
- import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { createLogger } from '@aztec/foundation/log';
6
6
  /**
7
7
  * A mocked implementation of L2BlockSource to be used in tests.
8
8
  */
@@ -11,7 +11,7 @@ export class MockL2BlockSource {
11
11
  this.l2Blocks = [];
12
12
  this.provenEpochNumber = 0;
13
13
  this.provenBlockNumber = 0;
14
- this.log = createDebugLogger('aztec:archiver:mock_l2_block_source');
14
+ this.log = createLogger('archiver:mock_l2_block_source');
15
15
  }
16
16
  createBlocks(numBlocks) {
17
17
  for (let i = 0; i < numBlocks; i++) {
@@ -159,4 +159,4 @@ export class MockL2BlockSource {
159
159
  return Promise.resolve();
160
160
  }
161
161
  }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX2wyX2Jsb2NrX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFdBQVcsRUFJWCxTQUFTLEVBQ1QsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUE5QjtRQUNZLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFFM0Isc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUU5QixRQUFHLEdBQUcsaUJBQWlCLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQXFMekUsQ0FBQztJQW5MUSxZQUFZLENBQUMsU0FBaUI7UUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLFNBQVMscUNBQXFDLENBQUMs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
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX2wyX2Jsb2NrX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFdBQVcsRUFJWCxTQUFTLEVBQ1QsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFvQixVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ1ksYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUUzQixzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFDOUIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLFFBQUcsR0FBRyxZQUFZLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQXFMOUQsQ0FBQztJQW5MUSxZQUFZLENBQUMsU0FBaUI7UUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLFNBQVMscUNBQXFDLENBQUMsQ0FB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
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@aztec/archiver",
3
- "version": "0.66.0",
3
+ "version": "0.67.1-devnet",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
7
  "./data-retrieval": "./dest/archiver/data_retrieval.js",
8
8
  "./epoch": "./dest/archiver/epoch_helpers.js",
9
- "./test": "./dest/test/index.js"
9
+ "./test": "./dest/test/index.js",
10
+ "./config": "./dest/archiver/config.js"
10
11
  },
11
12
  "typedocOptions": {
12
13
  "entryPoints": [
@@ -61,19 +62,23 @@
61
62
  "summaryThreshold": 9999
62
63
  }
63
64
  ]
65
+ ],
66
+ "testTimeout": 30000,
67
+ "setupFiles": [
68
+ "../../foundation/src/jest/setup.mjs"
64
69
  ]
65
70
  },
66
71
  "dependencies": {
67
- "@aztec/circuit-types": "0.66.0",
68
- "@aztec/circuits.js": "0.66.0",
69
- "@aztec/ethereum": "0.66.0",
70
- "@aztec/foundation": "0.66.0",
71
- "@aztec/kv-store": "0.66.0",
72
- "@aztec/l1-artifacts": "0.66.0",
73
- "@aztec/noir-contracts.js": "0.66.0",
74
- "@aztec/protocol-contracts": "0.66.0",
75
- "@aztec/telemetry-client": "0.66.0",
76
- "@aztec/types": "0.66.0",
72
+ "@aztec/circuit-types": "0.67.1-devnet",
73
+ "@aztec/circuits.js": "0.67.1-devnet",
74
+ "@aztec/ethereum": "0.67.1-devnet",
75
+ "@aztec/foundation": "0.67.1-devnet",
76
+ "@aztec/kv-store": "0.67.1-devnet",
77
+ "@aztec/l1-artifacts": "0.67.1-devnet",
78
+ "@aztec/noir-contracts.js": "0.67.1-devnet",
79
+ "@aztec/protocol-contracts": "0.67.1-devnet",
80
+ "@aztec/telemetry-client": "0.67.1-devnet",
81
+ "@aztec/types": "0.67.1-devnet",
77
82
  "debug": "^4.3.4",
78
83
  "lodash.groupby": "^4.6.0",
79
84
  "lodash.omit": "^4.5.0",
@@ -22,12 +22,12 @@ import {
22
22
  getTimestampRangeForEpoch,
23
23
  } from '@aztec/circuit-types';
24
24
  import {
25
+ type BlockHeader,
25
26
  type ContractClassPublic,
26
27
  type ContractDataSource,
27
28
  type ContractInstanceWithAddress,
28
29
  type ExecutablePrivateFunctionWithMembershipProof,
29
30
  type FunctionSelector,
30
- type Header,
31
31
  type PrivateLog,
32
32
  type PublicFunction,
33
33
  type UnconstrainedFunctionWithMembershipProof,
@@ -40,18 +40,18 @@ import { type ContractArtifact } from '@aztec/foundation/abi';
40
40
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
41
41
  import { type EthAddress } from '@aztec/foundation/eth-address';
42
42
  import { Fr } from '@aztec/foundation/fields';
43
- import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
43
+ import { type Logger, createLogger } from '@aztec/foundation/log';
44
44
  import { RunningPromise } from '@aztec/foundation/running-promise';
45
45
  import { count } from '@aztec/foundation/string';
46
46
  import { elapsed } from '@aztec/foundation/timer';
47
47
  import { InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
48
48
  import {
49
49
  ContractClassRegisteredEvent,
50
- ContractInstanceDeployedEvent,
51
50
  PrivateFunctionBroadcastedEvent,
52
51
  UnconstrainedFunctionBroadcastedEvent,
53
- } from '@aztec/protocol-contracts';
54
- import { type TelemetryClient } from '@aztec/telemetry-client';
52
+ } from '@aztec/protocol-contracts/class-registerer';
53
+ import { ContractInstanceDeployedEvent } from '@aztec/protocol-contracts/instance-deployer';
54
+ import { Attributes, type TelemetryClient, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
55
55
 
56
56
  import groupBy from 'lodash.groupby';
57
57
  import {
@@ -85,7 +85,7 @@ export type ArchiveSource = L2BlockSource &
85
85
  * Responsible for handling robust L1 polling so that other components do not need to
86
86
  * concern themselves with it.
87
87
  */
88
- export class Archiver implements ArchiveSource {
88
+ export class Archiver implements ArchiveSource, Traceable {
89
89
  /**
90
90
  * A promise in which we will be continually fetching new L2 blocks.
91
91
  */
@@ -99,6 +99,8 @@ export class Archiver implements ArchiveSource {
99
99
  public l1BlockNumber: bigint | undefined;
100
100
  public l1Timestamp: bigint | undefined;
101
101
 
102
+ public readonly tracer: Tracer;
103
+
102
104
  /**
103
105
  * Creates a new instance of the Archiver.
104
106
  * @param publicClient - A client for interacting with the Ethereum node.
@@ -116,8 +118,9 @@ export class Archiver implements ArchiveSource {
116
118
  private readonly config: { pollingIntervalMs: number; batchSize: number },
117
119
  private readonly instrumentation: ArchiverInstrumentation,
118
120
  private readonly l1constants: L1RollupConstants,
119
- private readonly log: DebugLogger = createDebugLogger('aztec:archiver'),
121
+ private readonly log: Logger = createLogger('archiver'),
120
122
  ) {
123
+ this.tracer = instrumentation.tracer;
121
124
  this.store = new ArchiverStoreHelper(dataStore);
122
125
 
123
126
  this.rollup = getContract({
@@ -174,7 +177,7 @@ export class Archiver implements ArchiveSource {
174
177
  pollingIntervalMs: config.archiverPollingIntervalMS ?? 10_000,
175
178
  batchSize: config.archiverBatchSize ?? 100,
176
179
  },
177
- new ArchiverInstrumentation(telemetry, () => archiverStore.estimateSize()),
180
+ await ArchiverInstrumentation.new(telemetry, () => archiverStore.estimateSize()),
178
181
  { l1StartBlock, l1GenesisTime, epochDuration, slotDuration, ethereumSlotDuration },
179
182
  );
180
183
  await archiver.start(blockUntilSynced);
@@ -194,24 +197,14 @@ export class Archiver implements ArchiveSource {
194
197
  await this.sync(blockUntilSynced);
195
198
  }
196
199
 
197
- this.runningPromise = new RunningPromise(() => this.safeSync(), this.config.pollingIntervalMs);
200
+ this.runningPromise = new RunningPromise(() => this.sync(false), this.log, this.config.pollingIntervalMs);
198
201
  this.runningPromise.start();
199
202
  }
200
203
 
201
- /**
202
- * Syncs and catches exceptions.
203
- */
204
- private async safeSync() {
205
- try {
206
- await this.sync(false);
207
- } catch (error) {
208
- this.log.error('Error syncing archiver', error);
209
- }
210
- }
211
-
212
204
  /**
213
205
  * Fetches logs from L1 contracts and processes them.
214
206
  */
207
+ @trackSpan('Archiver.sync', initialRun => ({ [Attributes.INITIAL_SYNC]: initialRun }))
215
208
  private async sync(initialRun: boolean) {
216
209
  /**
217
210
  * We keep track of three "pointers" to L1 blocks:
@@ -491,6 +484,8 @@ export class Archiver implements ArchiveSource {
491
484
  this.log.info(`Downloaded L2 block ${block.data.number}`, {
492
485
  blockHash: block.data.hash(),
493
486
  blockNumber: block.data.number,
487
+ txCount: block.data.body.txEffects.length,
488
+ globalVariables: block.data.header.globalVariables.toInspect(),
494
489
  });
495
490
  }
496
491
  } while (searchEndBlock < currentL1BlockNumber);
@@ -617,7 +612,7 @@ export class Archiver implements ArchiveSource {
617
612
  return blocks.length === 0 ? undefined : blocks[0].data;
618
613
  }
619
614
 
620
- public async getBlockHeader(number: number | 'latest'): Promise<Header | undefined> {
615
+ public async getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
621
616
  if (number === 'latest') {
622
617
  number = await this.store.getSynchedL2BlockNumber();
623
618
  }
@@ -836,7 +831,7 @@ class ArchiverStoreHelper
836
831
  | 'addFunctions'
837
832
  >
838
833
  {
839
- #log = createDebugLogger('aztec:archiver:block-helper');
834
+ #log = createLogger('archiver:block-helper');
840
835
 
841
836
  constructor(private readonly store: ArchiverDataStore) {}
842
837
 
@@ -919,7 +914,7 @@ class ArchiverStoreHelper
919
914
  for (const [classIdString, classEvents] of Object.entries(
920
915
  groupBy([...privateFnEvents, ...unconstrainedFnEvents], e => e.contractClassId.toString()),
921
916
  )) {
922
- const contractClassId = Fr.fromString(classIdString);
917
+ const contractClassId = Fr.fromHexString(classIdString);
923
918
  const contractClass = await this.getContractClass(contractClassId);
924
919
  if (!contractClass) {
925
920
  this.#log.warn(`Skipping broadcasted functions as contract class ${contractClassId.toString()} was not found`);
@@ -1014,7 +1009,7 @@ class ArchiverStoreHelper
1014
1009
  getBlocks(from: number, limit: number): Promise<L1Published<L2Block>[]> {
1015
1010
  return this.store.getBlocks(from, limit);
1016
1011
  }
1017
- getBlockHeaders(from: number, limit: number): Promise<Header[]> {
1012
+ getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]> {
1018
1013
  return this.store.getBlockHeaders(from, limit);
1019
1014
  }
1020
1015
  getTxEffect(txHash: TxHash): Promise<InBlock<TxEffect> | undefined> {
@@ -10,11 +10,11 @@ import {
10
10
  type TxScopedL2Log,
11
11
  } from '@aztec/circuit-types';
12
12
  import {
13
+ type BlockHeader,
13
14
  type ContractClassPublic,
14
15
  type ContractInstanceWithAddress,
15
16
  type ExecutablePrivateFunctionWithMembershipProof,
16
17
  type Fr,
17
- type Header,
18
18
  type PrivateLog,
19
19
  type UnconstrainedFunctionWithMembershipProof,
20
20
  } from '@aztec/circuits.js';
@@ -71,7 +71,7 @@ export interface ArchiverDataStore {
71
71
  * @param limit - The number of blocks to return.
72
72
  * @returns The requested L2 block headers.
73
73
  */
74
- getBlockHeaders(from: number, limit: number): Promise<Header[]>;
74
+ getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]>;
75
75
 
76
76
  /**
77
77
  * Gets a tx effect.
@@ -21,6 +21,9 @@ export type ArchiverConfig = {
21
21
  /** URL for an archiver service. If set, will return an archiver client as opposed to starting a new one. */
22
22
  archiverUrl?: string;
23
23
 
24
+ /** URL for an L1 consensus client */
25
+ l1ConsensusClientUrl: string;
26
+
24
27
  /** The polling interval in ms for retrieving new L2 blocks and encrypted logs. */
25
28
  archiverPollingIntervalMS?: number;
26
29
 
@@ -44,6 +47,11 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
44
47
  description:
45
48
  'URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.',
46
49
  },
50
+ l1ConsensusClientUrl: {
51
+ env: 'L1_CONSENSUS_CLIENT_URL',
52
+ description: 'URL for an L1 consensus client.',
53
+ parseEnv: (val: string) => (val ? val : 'http://localhost:5052'),
54
+ },
47
55
  archiverPollingIntervalMS: {
48
56
  env: 'ARCHIVER_POLLING_INTERVAL_MS',
49
57
  description: 'The polling interval in ms for retrieving new L2 blocks and encrypted logs.',
@@ -1,9 +1,10 @@
1
1
  import { Body, InboxLeaf, L2Block } from '@aztec/circuit-types';
2
- import { AppendOnlyTreeSnapshot, Fr, Header, Proof } from '@aztec/circuits.js';
2
+ import { AppendOnlyTreeSnapshot, BlockHeader, Fr, Proof } from '@aztec/circuits.js';
3
3
  import { asyncPool } from '@aztec/foundation/async-pool';
4
+ import { Blob } from '@aztec/foundation/blob';
4
5
  import { type EthAddress } from '@aztec/foundation/eth-address';
5
6
  import { type ViemSignature } from '@aztec/foundation/eth-signature';
6
- import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
7
+ import { type Logger, createLogger } from '@aztec/foundation/log';
7
8
  import { numToUInt32BE } from '@aztec/foundation/serialize';
8
9
  import { type InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
9
10
 
@@ -36,20 +37,22 @@ export async function retrieveBlocksFromRollup(
36
37
  publicClient: PublicClient,
37
38
  searchStartBlock: bigint,
38
39
  searchEndBlock: bigint,
39
- logger: DebugLogger = createDebugLogger('aztec:archiver'),
40
+ logger: Logger = createLogger('archiver'),
40
41
  ): Promise<L1Published<L2Block>[]> {
41
42
  const retrievedBlocks: L1Published<L2Block>[] = [];
42
43
  do {
43
44
  if (searchStartBlock > searchEndBlock) {
44
45
  break;
45
46
  }
46
- const l2BlockProposedLogs = await rollup.getEvents.L2BlockProposed(
47
- {},
48
- {
49
- fromBlock: searchStartBlock,
50
- toBlock: searchEndBlock + 1n,
51
- },
52
- );
47
+ const l2BlockProposedLogs = (
48
+ await rollup.getEvents.L2BlockProposed(
49
+ {},
50
+ {
51
+ fromBlock: searchStartBlock,
52
+ toBlock: searchEndBlock,
53
+ },
54
+ )
55
+ ).filter(log => log.blockNumber! >= searchStartBlock && log.blockNumber! <= searchEndBlock);
53
56
 
54
57
  if (l2BlockProposedLogs.length === 0) {
55
58
  break;
@@ -78,7 +81,7 @@ export async function processL2BlockProposedLogs(
78
81
  rollup: GetContractReturnType<typeof RollupAbi, PublicClient<HttpTransport, Chain>>,
79
82
  publicClient: PublicClient,
80
83
  logs: GetContractEventsReturnType<typeof RollupAbi, 'L2BlockProposed'>,
81
- logger: DebugLogger,
84
+ logger: Logger,
82
85
  ): Promise<L1Published<L2Block>[]> {
83
86
  const retrievedBlocks: L1Published<L2Block>[] = [];
84
87
  await asyncPool(10, logs, async log => {
@@ -135,7 +138,8 @@ async function getBlockFromRollupTx(
135
138
  if (!allowedMethods.includes(functionName)) {
136
139
  throw new Error(`Unexpected method called ${functionName}`);
137
140
  }
138
- const [decodedArgs, , bodyHex] = args! as readonly [
141
+ // TODO(#9101): 'bodyHex' will be removed from below
142
+ const [decodedArgs, , bodyHex, blobInputs] = args! as readonly [
139
143
  {
140
144
  header: Hex;
141
145
  archive: Hex;
@@ -148,11 +152,38 @@ async function getBlockFromRollupTx(
148
152
  },
149
153
  ViemSignature[],
150
154
  Hex,
155
+ Hex,
151
156
  ];
152
157
 
153
- const header = Header.fromBuffer(Buffer.from(hexToBytes(decodedArgs.header)));
158
+ const header = BlockHeader.fromBuffer(Buffer.from(hexToBytes(decodedArgs.header)));
159
+ // TODO(#9101): Retreiving the block body from calldata is a temporary soln before we have
160
+ // either a beacon chain client or link to some blob store. Web2 is ok because we will
161
+ // verify the block body vs the blob as below.
154
162
  const blockBody = Body.fromBuffer(Buffer.from(hexToBytes(bodyHex)));
155
163
 
164
+ const blockFields = blockBody.toBlobFields();
165
+ // TODO(#9101): The below reconstruction is currently redundant, but once we extract blobs will be the way to construct blocks.
166
+ // The blob source will give us blockFields, and we must construct the body from them:
167
+ // TODO(#8954): When logs are refactored into fields, we won't need to inject them here.
168
+ const reconstructedBlock = Body.fromBlobFields(blockFields, blockBody.unencryptedLogs, blockBody.contractClassLogs);
169
+
170
+ if (!reconstructedBlock.toBuffer().equals(blockBody.toBuffer())) {
171
+ // TODO(#9101): Remove below check (without calldata there will be nothing to check against)
172
+ throw new Error(`Block reconstructed from blob fields does not match`);
173
+ }
174
+
175
+ // TODO(#9101): Once we stop publishing calldata, we will still need the blobCheck below to ensure that the block we are building does correspond to the blob fields
176
+ const blobCheck = Blob.getBlobs(blockFields);
177
+ if (Blob.getEthBlobEvaluationInputs(blobCheck) !== blobInputs) {
178
+ // NB: We can just check the blobhash here, which is the first 32 bytes of blobInputs
179
+ // A mismatch means that the fields published in the blob in propose() do NOT match those in the extracted block.
180
+ throw new Error(
181
+ `Block body mismatched with blob for block number ${l2BlockNum}. \nExpected: ${Blob.getEthBlobEvaluationInputs(
182
+ blobCheck,
183
+ )} \nGot: ${blobInputs}`,
184
+ );
185
+ }
186
+
156
187
  const blockNumberFromHeader = header.globalVariables.blockNumber.toBigInt();
157
188
 
158
189
  if (blockNumberFromHeader !== l2BlockNum) {
@@ -189,13 +220,15 @@ export async function retrieveL1ToL2Messages(
189
220
  break;
190
221
  }
191
222
 
192
- const messageSentLogs = await inbox.getEvents.MessageSent(
193
- {},
194
- {
195
- fromBlock: searchStartBlock,
196
- toBlock: searchEndBlock + 1n,
197
- },
198
- );
223
+ const messageSentLogs = (
224
+ await inbox.getEvents.MessageSent(
225
+ {},
226
+ {
227
+ fromBlock: searchStartBlock,
228
+ toBlock: searchEndBlock,
229
+ },
230
+ )
231
+ ).filter(log => log.blockNumber! >= searchStartBlock && log.blockNumber! <= searchEndBlock);
199
232
 
200
233
  if (messageSentLogs.length === 0) {
201
234
  break;
@@ -203,7 +236,7 @@ export async function retrieveL1ToL2Messages(
203
236
 
204
237
  for (const log of messageSentLogs) {
205
238
  const { index, hash } = log.args;
206
- retrievedL1ToL2Messages.push(new InboxLeaf(index!, Fr.fromString(hash!)));
239
+ retrievedL1ToL2Messages.push(new InboxLeaf(index!, Fr.fromHexString(hash!)));
207
240
  }
208
241
 
209
242
  // handles the case when there are no new messages:
@@ -222,7 +255,7 @@ export async function retrieveL2ProofVerifiedEvents(
222
255
  const logs = await publicClient.getLogs({
223
256
  address: rollupAddress.toString(),
224
257
  fromBlock: searchStartBlock,
225
- toBlock: searchEndBlock ? searchEndBlock + 1n : undefined,
258
+ toBlock: searchEndBlock ? searchEndBlock : undefined,
226
259
  strict: true,
227
260
  event: getAbiItem({ abi: RollupAbi, name: 'L2ProofVerified' }),
228
261
  });
@@ -230,7 +263,7 @@ export async function retrieveL2ProofVerifiedEvents(
230
263
  return logs.map(log => ({
231
264
  l1BlockNumber: log.blockNumber,
232
265
  l2BlockNumber: log.args.blockNumber,
233
- proverId: Fr.fromString(log.args.proverId),
266
+ proverId: Fr.fromHexString(log.args.proverId),
234
267
  txHash: log.transactionHash,
235
268
  }));
236
269
  }
@@ -297,8 +330,8 @@ export async function getProofFromSubmitProofTx(
297
330
  ];
298
331
 
299
332
  aggregationObject = Buffer.from(hexToBytes(decodedArgs.aggregationObject));
300
- proverId = Fr.fromString(decodedArgs.args[6]);
301
- archiveRoot = Fr.fromString(decodedArgs.args[1]);
333
+ proverId = Fr.fromHexString(decodedArgs.args[6]);
334
+ archiveRoot = Fr.fromHexString(decodedArgs.args[1]);
302
335
  proof = Proof.fromBuffer(Buffer.from(hexToBytes(decodedArgs.proof)));
303
336
  } else {
304
337
  throw new Error(`Unexpected proof method called ${functionName}`);
@@ -1,5 +1,5 @@
1
1
  import { type L2Block } from '@aztec/circuit-types';
2
- import { createDebugLogger } from '@aztec/foundation/log';
2
+ import { createLogger } from '@aztec/foundation/log';
3
3
  import {
4
4
  Attributes,
5
5
  type Gauge,
@@ -8,23 +8,26 @@ import {
8
8
  type LmdbStatsCallback,
9
9
  Metrics,
10
10
  type TelemetryClient,
11
+ type Tracer,
11
12
  type UpDownCounter,
12
13
  ValueType,
13
- exponentialBuckets,
14
- millisecondBuckets,
15
14
  } from '@aztec/telemetry-client';
16
15
 
17
16
  export class ArchiverInstrumentation {
17
+ public readonly tracer: Tracer;
18
+
18
19
  private blockHeight: Gauge;
19
20
  private blockSize: Gauge;
20
21
  private syncDuration: Histogram;
22
+ private l1BlocksSynced: UpDownCounter;
21
23
  private proofsSubmittedDelay: Histogram;
22
24
  private proofsSubmittedCount: UpDownCounter;
23
25
  private dbMetrics: LmdbMetrics;
24
26
 
25
- private log = createDebugLogger('aztec:archiver:instrumentation');
27
+ private log = createLogger('archiver:instrumentation');
26
28
 
27
- constructor(private telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback) {
29
+ private constructor(private telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback) {
30
+ this.tracer = telemetry.getTracer('Archiver');
28
31
  const meter = telemetry.getMeter('Archiver');
29
32
  this.blockHeight = meter.createGauge(Metrics.ARCHIVER_BLOCK_HEIGHT, {
30
33
  description: 'The height of the latest block processed by the archiver',
@@ -40,9 +43,6 @@ export class ArchiverInstrumentation {
40
43
  unit: 'ms',
41
44
  description: 'Duration to sync a block',
42
45
  valueType: ValueType.INT,
43
- advice: {
44
- explicitBucketBoundaries: exponentialBuckets(1, 16),
45
- },
46
46
  });
47
47
 
48
48
  this.proofsSubmittedCount = meter.createUpDownCounter(Metrics.ARCHIVER_ROLLUP_PROOF_COUNT, {
@@ -54,29 +54,32 @@ export class ArchiverInstrumentation {
54
54
  unit: 'ms',
55
55
  description: 'Time after a block is submitted until its proof is published',
56
56
  valueType: ValueType.INT,
57
- advice: {
58
- explicitBucketBoundaries: millisecondBuckets(1, 80), // 10ms -> ~3hs
59
- },
57
+ });
58
+
59
+ this.l1BlocksSynced = meter.createUpDownCounter(Metrics.ARCHIVER_L1_BLOCKS_SYNCED, {
60
+ description: 'Number of blocks synced from L1',
61
+ valueType: ValueType.INT,
60
62
  });
61
63
 
62
64
  this.dbMetrics = new LmdbMetrics(
63
65
  meter,
64
66
  {
65
- name: Metrics.ARCHIVER_DB_MAP_SIZE,
66
- description: 'Database map size for the archiver',
67
- },
68
- {
69
- name: Metrics.ARCHIVER_DB_USED_SIZE,
70
- description: 'Database used size for the archiver',
71
- },
72
- {
73
- name: Metrics.ARCHIVER_DB_NUM_ITEMS,
74
- description: 'Num items in the archiver database',
67
+ [Attributes.DB_DATA_TYPE]: 'archiver',
75
68
  },
76
69
  lmdbStats,
77
70
  );
78
71
  }
79
72
 
73
+ public static async new(telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback) {
74
+ const instance = new ArchiverInstrumentation(telemetry, lmdbStats);
75
+
76
+ instance.l1BlocksSynced.add(0);
77
+
78
+ await instance.telemetry.flush();
79
+
80
+ return instance;
81
+ }
82
+
80
83
  public isEnabled(): boolean {
81
84
  return this.telemetry.isEnabled();
82
85
  }
@@ -84,6 +87,7 @@ export class ArchiverInstrumentation {
84
87
  public processNewBlocks(syncTimePerBlock: number, blocks: L2Block[]) {
85
88
  this.syncDuration.record(Math.ceil(syncTimePerBlock));
86
89
  this.blockHeight.record(Math.max(...blocks.map(b => b.number)));
90
+ this.l1BlocksSynced.add(blocks.length);
87
91
  for (const block of blocks) {
88
92
  this.blockSize.record(block.body.txEffects.length);
89
93
  }
@@ -1,6 +1,6 @@
1
1
  import { Body, type InBlock, L2Block, L2BlockHash, type TxEffect, type TxHash, TxReceipt } from '@aztec/circuit-types';
2
- import { AppendOnlyTreeSnapshot, type AztecAddress, Header, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
3
- import { createDebugLogger } from '@aztec/foundation/log';
2
+ import { AppendOnlyTreeSnapshot, type AztecAddress, BlockHeader, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
3
+ import { createLogger } from '@aztec/foundation/log';
4
4
  import { type AztecKVStore, type AztecMap, type AztecSingleton, type Range } from '@aztec/kv-store';
5
5
 
6
6
  import { type L1Published, type L1PublishedData } from '../structs/published.js';
@@ -38,7 +38,7 @@ export class BlockStore {
38
38
  /** Index mapping a contract's address (as a string) to its location in a block */
39
39
  #contractIndex: AztecMap<string, BlockIndexValue>;
40
40
 
41
- #log = createDebugLogger('aztec:archiver:block_store');
41
+ #log = createLogger('archiver:block_store');
42
42
 
43
43
  constructor(private db: AztecKVStore) {
44
44
  this.#blocks = db.openMap('archiver_blocks');
@@ -147,14 +147,14 @@ export class BlockStore {
147
147
  * @param limit - The number of blocks to return.
148
148
  * @returns The requested L2 block headers
149
149
  */
150
- *getBlockHeaders(start: number, limit: number): IterableIterator<Header> {
150
+ *getBlockHeaders(start: number, limit: number): IterableIterator<BlockHeader> {
151
151
  for (const blockStorage of this.#blocks.values(this.#computeBlockRange(start, limit))) {
152
- yield Header.fromBuffer(blockStorage.header);
152
+ yield BlockHeader.fromBuffer(blockStorage.header);
153
153
  }
154
154
  }
155
155
 
156
156
  private getBlockFromBlockStorage(blockStorage: BlockStorage) {
157
- const header = Header.fromBuffer(blockStorage.header);
157
+ const header = BlockHeader.fromBuffer(blockStorage.header);
158
158
  const archive = AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive);
159
159
  const blockHash = header.hash().toString();
160
160
  const blockBodyBuffer = this.#blockBodies.get(blockHash);
@@ -53,7 +53,7 @@ export class ContractClassStore {
53
53
  }
54
54
 
55
55
  getContractClassIds(): Fr[] {
56
- return Array.from(this.#contractClasses.keys()).map(key => Fr.fromString(key));
56
+ return Array.from(this.#contractClasses.keys()).map(key => Fr.fromHexString(key));
57
57
  }
58
58
 
59
59
  async addFunctions(
@@ -9,17 +9,17 @@ import {
9
9
  type TxScopedL2Log,
10
10
  } from '@aztec/circuit-types';
11
11
  import {
12
+ type BlockHeader,
12
13
  type ContractClassPublic,
13
14
  type ContractInstanceWithAddress,
14
15
  type ExecutablePrivateFunctionWithMembershipProof,
15
16
  type Fr,
16
- type Header,
17
17
  type PrivateLog,
18
18
  type UnconstrainedFunctionWithMembershipProof,
19
19
  } from '@aztec/circuits.js';
20
20
  import { type ContractArtifact, FunctionSelector } from '@aztec/foundation/abi';
21
21
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
22
- import { createDebugLogger } from '@aztec/foundation/log';
22
+ import { createLogger } from '@aztec/foundation/log';
23
23
  import { type AztecKVStore } from '@aztec/kv-store';
24
24
 
25
25
  import { type ArchiverDataStore, type ArchiverL1SynchPoint } from '../archiver_store.js';
@@ -46,7 +46,7 @@ export class KVArchiverDataStore implements ArchiverDataStore {
46
46
  #contractArtifactStore: ContractArtifactsStore;
47
47
  private functionNames = new Map<string, string>();
48
48
 
49
- #log = createDebugLogger('aztec:archiver:data-store');
49
+ #log = createLogger('archiver:data-store');
50
50
 
51
51
  constructor(private db: AztecKVStore, logsMaxPageSize: number = 1000) {
52
52
  this.#blockStore = new BlockStore(db);
@@ -171,7 +171,7 @@ export class KVArchiverDataStore implements ArchiverDataStore {
171
171
  * @param limit - The number of blocks to return.
172
172
  * @returns The requested L2 blocks
173
173
  */
174
- getBlockHeaders(start: number, limit: number): Promise<Header[]> {
174
+ getBlockHeaders(start: number, limit: number): Promise<BlockHeader[]> {
175
175
  try {
176
176
  return Promise.resolve(Array.from(this.#blockStore.getBlockHeaders(start, limit)));
177
177
  } catch (err) {
@@ -11,7 +11,7 @@ import {
11
11
  } from '@aztec/circuit-types';
12
12
  import { Fr, PrivateLog } from '@aztec/circuits.js';
13
13
  import { INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX } from '@aztec/circuits.js/constants';
14
- import { createDebugLogger } from '@aztec/foundation/log';
14
+ import { createLogger } from '@aztec/foundation/log';
15
15
  import { BufferReader } from '@aztec/foundation/serialize';
16
16
  import { type AztecKVStore, type AztecMap } from '@aztec/kv-store';
17
17
 
@@ -27,7 +27,7 @@ export class LogStore {
27
27
  #unencryptedLogsByBlock: AztecMap<number, Buffer>;
28
28
  #contractClassLogsByBlock: AztecMap<number, Buffer>;
29
29
  #logsMaxPageSize: number;
30
- #log = createDebugLogger('aztec:archiver:log_store');
30
+ #log = createLogger('archiver:log_store');
31
31
 
32
32
  constructor(private db: AztecKVStore, private blockStore: BlockStore, logsMaxPageSize: number = 1000) {
33
33
  this.#logsByTag = db.openMap('archiver_tagged_logs_by_tag');