@aztec/world-state 0.49.2 → 0.51.0

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.
@@ -1,6 +1,7 @@
1
1
  import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types';
2
2
  import { type AztecKVStore } from '@aztec/kv-store';
3
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
4
  import { type WorldStateConfig } from './config.js';
4
5
  import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js';
5
- export declare function createWorldStateSynchronizer(config: WorldStateConfig, store: AztecKVStore, l2BlockSource: L2BlockSource & L1ToL2MessageSource): Promise<ServerWorldStateSynchronizer>;
6
+ export declare function createWorldStateSynchronizer(config: WorldStateConfig, store: AztecKVStore, l2BlockSource: L2BlockSource & L1ToL2MessageSource, client: TelemetryClient): Promise<ServerWorldStateSynchronizer>;
6
7
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,aAAa,GAAG,mBAAmB,yCAInD"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,aAAa,GAAG,mBAAmB,EAClD,MAAM,EAAE,eAAe,yCAIxB"}
@@ -1,7 +1,7 @@
1
1
  import { MerkleTrees } from '../world-state-db/merkle_trees.js';
2
2
  import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js';
3
- export async function createWorldStateSynchronizer(config, store, l2BlockSource) {
4
- const merkleTrees = await MerkleTrees.new(store);
3
+ export async function createWorldStateSynchronizer(config, store, l2BlockSource, client) {
4
+ const merkleTrees = await MerkleTrees.new(store, client);
5
5
  return new ServerWorldStateSynchronizer(store, merkleTrees, l2BlockSource, config);
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jaHJvbml6ZXIvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEYsTUFBTSxDQUFDLEtBQUssVUFBVSw0QkFBNEIsQ0FDaEQsTUFBd0IsRUFDeEIsS0FBbUIsRUFDbkIsYUFBa0Q7SUFFbEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRixDQUFDIn0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jaHJvbml6ZXIvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEYsTUFBTSxDQUFDLEtBQUssVUFBVSw0QkFBNEIsQ0FDaEQsTUFBd0IsRUFDeEIsS0FBbUIsRUFDbkIsYUFBa0QsRUFDbEQsTUFBdUI7SUFFdkIsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxPQUFPLElBQUksNEJBQTRCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckYsQ0FBQyJ9
@@ -4,6 +4,7 @@ import { type BatchInsertionResult, type HandleL2BlockAndMessagesResult, type In
4
4
  import { Fr, Header, StateReference } from '@aztec/circuits.js';
5
5
  import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
6
6
  import { type AztecKVStore } from '@aztec/kv-store';
7
+ import { type TelemetryClient } from '@aztec/telemetry-client';
7
8
  import { type MerkleTreeDb, type TreeSnapshots } from './merkle_tree_db.js';
8
9
  /**
9
10
  * A convenience class for managing multiple merkle trees.
@@ -11,17 +12,19 @@ import { type MerkleTreeDb, type TreeSnapshots } from './merkle_tree_db.js';
11
12
  export declare class MerkleTrees implements MerkleTreeDb {
12
13
  #private;
13
14
  private store;
15
+ private telemetryClient;
14
16
  private log;
15
17
  private trees;
16
18
  private jobQueue;
17
19
  private initialStateReference;
20
+ private metrics;
18
21
  private constructor();
19
22
  /**
20
23
  * Method to asynchronously create and initialize a MerkleTrees instance.
21
24
  * @param store - The db instance to use for data persistance.
22
25
  * @returns - A fully initialized MerkleTrees instance.
23
26
  */
24
- static new(store: AztecKVStore, log?: import("@aztec/foundation/log").Logger): Promise<MerkleTrees>;
27
+ static new(store: AztecKVStore, client: TelemetryClient, log?: import("@aztec/foundation/log").Logger): Promise<MerkleTrees>;
25
28
  fork(): Promise<MerkleTrees>;
26
29
  delete(): Promise<void>;
27
30
  getInitialHeader(): Header;
@@ -1 +1 @@
1
- {"version":3,"file":"merkle_trees.d.ts","sourceRoot":"","sources":["../../src/world-state-db/merkle_trees.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merkle_trees.d.ts","sourceRoot":"","sources":["../../src/world-state-db/merkle_trees.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,YAAY,EAAmB,KAAK,WAAW,EAAY,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAGL,EAAE,EACF,MAAM,EAgBN,cAAc,EACf,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,iBAAiB,CAAC;AAYzE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAuC7B;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;;IAO1B,OAAO,CAAC,KAAK;IAAgB,OAAO,CAAC,eAAe;IAAmB,OAAO,CAAC,GAAG;IALtG,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,OAAO,CAAoB;IAEnC,OAAO;IAKP;;;;OAIG;WACiB,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,yCAA0C;IAwEtG,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAc5B,MAAM;IAIZ,gBAAgB,IAAI,MAAM;IAIjC;;OAEG;IACU,IAAI;IAIjB;;;OAGG;IACI,QAAQ,IAAI,oBAAoB;IAIvC;;;OAGG;IACI,WAAW,IAAI,oBAAoB;IAI1C;;;;OAIG;IACU,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO;IAItE;;;;;OAKG;IACU,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI9F;;;;OAIG;IACI,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB9E;;;;;;OAMG;IACU,YAAY,CACvB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,kBAAkB,CAAC,OAAO,MAAM,CAAC,GAAG,SAAS,CAAC;IAIzD;;;;;;OAMG;IACU,cAAc,CAAC,CAAC,SAAS,MAAM,EAC1C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1B;;;;;OAKG;IACU,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/G;;;OAGG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;;;;;OAMG;IACU,qBAAqB,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CACN;QACE;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,cAAc,EAAE,OAAO,CAAC;KACzB,GACD,SAAS,CACZ;IAMD;;;;;;OAMG;IACU,eAAe,CAC1B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAM/C;;;;;;OAMG;IACU,aAAa,CAAC,EAAE,SAAS,YAAY,EAChD,MAAM,EAAE,EAAE,EACV,KAAK,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC7B,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQ9B;;;;;;OAMG;IACU,kBAAkB,CAAC,EAAE,SAAS,YAAY,EACrD,MAAM,EAAE,EAAE,EACV,KAAK,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQ9B;;;;;;OAMG;IACU,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1F;;;;;OAKG;IACU,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAIpH;;;;;;OAMG;IACU,WAAW,CACtB,UAAU,SAAS,MAAM,EACzB,aAAa,SAAS,MAAM,EAC5B,wBAAwB,SAAS,MAAM,EAEvC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IAQtE;;;;OAIG;YACW,WAAW;IAiGZ,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAuItE"}
@@ -5,9 +5,11 @@ import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, Fr, Header, L1_TO_L2_MSG_TREE_H
5
5
  import { padArrayEnd } from '@aztec/foundation/collection';
6
6
  import { createDebugLogger } from '@aztec/foundation/log';
7
7
  import { SerialQueue } from '@aztec/foundation/queue';
8
+ import { Timer, elapsed } from '@aztec/foundation/timer';
8
9
  import { Poseidon, StandardIndexedTree, StandardTree, getTreeMeta, loadTree, newTree, } from '@aztec/merkle-tree';
9
10
  import { INITIAL_NULLIFIER_TREE_SIZE, INITIAL_PUBLIC_DATA_TREE_SIZE, } from './merkle_tree_db.js';
10
11
  import { MerkleTreeOperationsFacade } from './merkle_tree_operations_facade.js';
12
+ import { WorldStateMetrics } from './metrics.js';
11
13
  /**
12
14
  * The nullifier tree is an indexed tree.
13
15
  */
@@ -28,32 +30,38 @@ class PublicDataTree extends StandardIndexedTree {
28
30
  * A convenience class for managing multiple merkle trees.
29
31
  */
30
32
  export class MerkleTrees {
31
- constructor(store, log) {
33
+ constructor(store, telemetryClient, log) {
32
34
  _MerkleTrees_instances.add(this);
33
35
  this.store = store;
36
+ this.telemetryClient = telemetryClient;
34
37
  this.log = log;
35
38
  // gets initialized in #init
36
39
  this.trees = null;
37
40
  this.jobQueue = new SerialQueue();
38
41
  this.initialStateReference = store.openSingleton('merkle_trees_initial_state_reference');
42
+ this.metrics = new WorldStateMetrics(telemetryClient);
39
43
  }
40
44
  /**
41
45
  * Method to asynchronously create and initialize a MerkleTrees instance.
42
46
  * @param store - The db instance to use for data persistance.
43
47
  * @returns - A fully initialized MerkleTrees instance.
44
48
  */
45
- static async new(store, log = createDebugLogger('aztec:merkle_trees')) {
46
- const merkleTrees = new MerkleTrees(store, log);
49
+ static async new(store, client, log = createDebugLogger('aztec:merkle_trees')) {
50
+ const merkleTrees = new MerkleTrees(store, client, log);
47
51
  await __classPrivateFieldGet(merkleTrees, _MerkleTrees_instances, "m", _MerkleTrees_init).call(merkleTrees);
48
52
  return merkleTrees;
49
53
  }
50
54
  async fork() {
51
- // TODO(palla/prover-node): If the underlying store is being shared with other components, we're unnecessarily
52
- // copying a lot of data unrelated to merkle trees. This may be fine for now, and we may be able to ditch backup-based
53
- // forking in favor of a more elegant proposal. But if we see this operation starts taking a lot of time, we may want
54
- // to open separate stores for merkle trees and other components.
55
- const forked = await this.store.fork();
56
- return MerkleTrees.new(forked, this.log);
55
+ const [ms, db] = await elapsed(async () => {
56
+ // TODO(palla/prover-node): If the underlying store is being shared with other components, we're unnecessarily
57
+ // copying a lot of data unrelated to merkle trees. This may be fine for now, and we may be able to ditch backup-based
58
+ // forking in favor of a more elegant proposal. But if we see this operation starts taking a lot of time, we may want
59
+ // to open separate stores for merkle trees and other components.
60
+ const forked = await this.store.fork();
61
+ return MerkleTrees.new(forked, this.telemetryClient, this.log);
62
+ });
63
+ this.metrics.recordForkDuration(ms);
64
+ return db;
57
65
  }
58
66
  async delete() {
59
67
  await this.store.delete();
@@ -359,6 +367,7 @@ async function _MerkleTrees_rollback() {
359
367
  * @param l1ToL2Messages - The L1 to L2 messages for the block.
360
368
  */
361
369
  async function _MerkleTrees_handleL2BlockAndMessages(l2Block, l1ToL2Messages) {
370
+ const timer = new Timer();
362
371
  const treeRootWithIdPairs = [
363
372
  [l2Block.header.state.partial.nullifierTree.root, MerkleTreeId.NULLIFIER_TREE],
364
373
  [l2Block.header.state.partial.noteHashTree.root, MerkleTreeId.NOTE_HASH_TREE],
@@ -414,9 +423,12 @@ async function _MerkleTrees_handleL2BlockAndMessages(l2Block, l1ToL2Messages) {
414
423
  }
415
424
  else {
416
425
  this.log.debug(`Tree ${treeName} synched with size ${info.size} root ${rootStr}`);
426
+ this.metrics.recordTreeSize(treeName, info.size);
417
427
  }
418
428
  }
419
429
  await __classPrivateFieldGet(this, _MerkleTrees_instances, "m", _MerkleTrees_snapshot).call(this, l2Block.number);
430
+ this.metrics.recordDbSize(this.store.estimateSize().bytes);
431
+ this.metrics.recordSyncDuration(ourBlock ? 'commit' : 'rollback_and_update', timer);
420
432
  return { isBlockOurs: ourBlock };
421
433
  }, _MerkleTrees_isDbPopulated = function _MerkleTrees_isDbPopulated() {
422
434
  try {
@@ -429,4 +441,4 @@ async function _MerkleTrees_handleL2BlockAndMessages(l2Block, l1ToL2Messages) {
429
441
  return false;
430
442
  }
431
443
  };
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmxkLXN0YXRlLWRiL21lcmtsZV90cmVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLGVBQWUsRUFBb0IsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFTL0csT0FBTyxFQUNMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsRUFBRSxFQUNGLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw0Q0FBNEMsRUFDNUMscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsbUNBQW1DLEVBQ25DLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RCxPQUFPLEVBR0wsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixZQUFZLEVBRVosV0FBVyxFQUNYLFFBQVEsRUFDUixPQUFPLEdBQ1IsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDZCQUE2QixHQUc5QixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxhQUFjLFNBQVEsbUJBQW1CO0lBQzdDLFlBQ0UsS0FBbUIsRUFDbkIsTUFBYyxFQUNkLElBQVksRUFDWixLQUFhLEVBQ2Is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
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmxkLXN0YXRlLWRiL21lcmtsZV90cmVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLGVBQWUsRUFBb0IsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFTL0csT0FBTyxFQUNMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsRUFBRSxFQUNGLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw0Q0FBNEMsRUFDNUMscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsbUNBQW1DLEVBQ25DLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFHTCxRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLFlBQVksRUFFWixXQUFXLEVBQ1gsUUFBUSxFQUNSLE9BQU8sR0FDUixNQUFNLG9CQUFvQixDQUFDO0FBSTVCLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsNkJBQTZCLEdBRzlCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxD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
@@ -0,0 +1,14 @@
1
+ import { type Timer } from '@aztec/foundation/timer';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ export declare class WorldStateMetrics {
4
+ private treeSize;
5
+ private dbSize;
6
+ private forkDuration;
7
+ private syncDuration;
8
+ constructor(client: TelemetryClient, name?: string);
9
+ recordTreeSize(treeName: string, treeSize: bigint): void;
10
+ recordDbSize(dbSizeInBytes: number): void;
11
+ recordForkDuration(timerOrMs: Timer | number): void;
12
+ recordSyncDuration(syncType: 'commit' | 'rollback_and_update', timerOrMs: Timer | number): void;
13
+ }
14
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/world-state-db/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,YAAY,CAAY;gBAEpB,MAAM,EAAE,eAAe,EAAE,IAAI,SAAkB;IA0B3D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMjD,YAAY,CAAC,aAAa,EAAE,MAAM;IAIlC,kBAAkB,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM;IAK5C,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,qBAAqB,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM;CAMzF"}
@@ -0,0 +1,44 @@
1
+ import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
2
+ export class WorldStateMetrics {
3
+ constructor(client, name = 'MerkleTreesDb') {
4
+ const meter = client.getMeter(name);
5
+ this.treeSize = meter.createGauge(Metrics.WORLD_STATE_MERKLE_TREE_SIZE, {
6
+ description: 'The size of Merkle trees',
7
+ valueType: ValueType.INT,
8
+ });
9
+ this.dbSize = meter.createGauge(Metrics.WORLD_STATE_DB_SIZE, {
10
+ description: 'The size of the World State DB',
11
+ valueType: ValueType.INT,
12
+ unit: 'By',
13
+ });
14
+ this.forkDuration = meter.createHistogram(Metrics.WORLD_STATE_FORK_DURATION, {
15
+ description: 'The duration of a fork operation',
16
+ unit: 'ms',
17
+ valueType: ValueType.INT,
18
+ });
19
+ this.syncDuration = meter.createHistogram(Metrics.WORLD_STATE_SYNC_DURATION, {
20
+ description: 'The duration of a sync operation',
21
+ unit: 'ms',
22
+ valueType: ValueType.INT,
23
+ });
24
+ }
25
+ recordTreeSize(treeName, treeSize) {
26
+ this.treeSize.record(Number(treeSize), {
27
+ [Attributes.MERKLE_TREE_NAME]: treeName,
28
+ });
29
+ }
30
+ recordDbSize(dbSizeInBytes) {
31
+ this.dbSize.record(dbSizeInBytes);
32
+ }
33
+ recordForkDuration(timerOrMs) {
34
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
35
+ this.forkDuration.record(ms);
36
+ }
37
+ recordSyncDuration(syncType, timerOrMs) {
38
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
39
+ this.syncDuration.record(ms, {
40
+ [Attributes.STATUS]: syncType,
41
+ });
42
+ }
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JsZC1zdGF0ZS1kYi9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxVQUFVLEVBR1YsT0FBTyxFQUVQLFNBQVMsR0FDVixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE1BQU0sT0FBTyxpQkFBaUI7SUFNNUIsWUFBWSxNQUF1QixFQUFFLElBQUksR0FBRyxlQUFlO1FBQ3pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtZQUN0RSxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQzNELFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ3hCLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRTtZQUMzRSxXQUFXLEVBQUUsa0NBQWtDO1lBQy9DLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUU7WUFDM0UsV0FBVyxFQUFFLGtDQUFrQztZQUMvQyxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JDLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUTtTQUN4QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLGFBQXFCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUF5QjtRQUMxQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBMEMsRUFBRSxTQUF5QjtRQUN0RixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDM0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/world-state",
3
- "version": "0.49.2",
3
+ "version": "0.51.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -53,12 +53,13 @@
53
53
  ]
54
54
  },
55
55
  "dependencies": {
56
- "@aztec/circuit-types": "0.49.2",
57
- "@aztec/circuits.js": "0.49.2",
58
- "@aztec/foundation": "0.49.2",
59
- "@aztec/kv-store": "0.49.2",
60
- "@aztec/merkle-tree": "0.49.2",
61
- "@aztec/types": "0.49.2",
56
+ "@aztec/circuit-types": "0.51.0",
57
+ "@aztec/circuits.js": "0.51.0",
58
+ "@aztec/foundation": "0.51.0",
59
+ "@aztec/kv-store": "0.51.0",
60
+ "@aztec/merkle-tree": "0.51.0",
61
+ "@aztec/telemetry-client": "0.51.0",
62
+ "@aztec/types": "0.51.0",
62
63
  "tslib": "^2.4.0"
63
64
  },
64
65
  "devDependencies": {
@@ -1,5 +1,6 @@
1
1
  import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types';
2
2
  import { type AztecKVStore } from '@aztec/kv-store';
3
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
4
 
4
5
  import { MerkleTrees } from '../world-state-db/merkle_trees.js';
5
6
  import { type WorldStateConfig } from './config.js';
@@ -9,7 +10,8 @@ export async function createWorldStateSynchronizer(
9
10
  config: WorldStateConfig,
10
11
  store: AztecKVStore,
11
12
  l2BlockSource: L2BlockSource & L1ToL2MessageSource,
13
+ client: TelemetryClient,
12
14
  ) {
13
- const merkleTrees = await MerkleTrees.new(store);
15
+ const merkleTrees = await MerkleTrees.new(store, client);
14
16
  return new ServerWorldStateSynchronizer(store, merkleTrees, l2BlockSource, config);
15
17
  }
@@ -32,6 +32,7 @@ import {
32
32
  import { padArrayEnd } from '@aztec/foundation/collection';
33
33
  import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
34
34
  import { SerialQueue } from '@aztec/foundation/queue';
35
+ import { Timer, elapsed } from '@aztec/foundation/timer';
35
36
  import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
36
37
  import { type AztecKVStore, type AztecSingleton } from '@aztec/kv-store';
37
38
  import {
@@ -45,6 +46,7 @@ import {
45
46
  loadTree,
46
47
  newTree,
47
48
  } from '@aztec/merkle-tree';
49
+ import { type TelemetryClient } from '@aztec/telemetry-client';
48
50
  import { type Hasher } from '@aztec/types/interfaces';
49
51
 
50
52
  import {
@@ -55,6 +57,7 @@ import {
55
57
  } from './merkle_tree_db.js';
56
58
  import { type MerkleTreeMap } from './merkle_tree_map.js';
57
59
  import { MerkleTreeOperationsFacade } from './merkle_tree_operations_facade.js';
60
+ import { WorldStateMetrics } from './metrics.js';
58
61
 
59
62
  /**
60
63
  * The nullifier tree is an indexed tree.
@@ -98,9 +101,11 @@ export class MerkleTrees implements MerkleTreeDb {
98
101
  private trees: MerkleTreeMap = null as any;
99
102
  private jobQueue = new SerialQueue();
100
103
  private initialStateReference: AztecSingleton<Buffer>;
104
+ private metrics: WorldStateMetrics;
101
105
 
102
- private constructor(private store: AztecKVStore, private log: DebugLogger) {
106
+ private constructor(private store: AztecKVStore, private telemetryClient: TelemetryClient, private log: DebugLogger) {
103
107
  this.initialStateReference = store.openSingleton('merkle_trees_initial_state_reference');
108
+ this.metrics = new WorldStateMetrics(telemetryClient);
104
109
  }
105
110
 
106
111
  /**
@@ -108,8 +113,8 @@ export class MerkleTrees implements MerkleTreeDb {
108
113
  * @param store - The db instance to use for data persistance.
109
114
  * @returns - A fully initialized MerkleTrees instance.
110
115
  */
111
- public static async new(store: AztecKVStore, log = createDebugLogger('aztec:merkle_trees')) {
112
- const merkleTrees = new MerkleTrees(store, log);
116
+ public static async new(store: AztecKVStore, client: TelemetryClient, log = createDebugLogger('aztec:merkle_trees')) {
117
+ const merkleTrees = new MerkleTrees(store, client, log);
113
118
  await merkleTrees.#init();
114
119
  return merkleTrees;
115
120
  }
@@ -181,12 +186,17 @@ export class MerkleTrees implements MerkleTreeDb {
181
186
  }
182
187
 
183
188
  public async fork(): Promise<MerkleTrees> {
184
- // TODO(palla/prover-node): If the underlying store is being shared with other components, we're unnecessarily
185
- // copying a lot of data unrelated to merkle trees. This may be fine for now, and we may be able to ditch backup-based
186
- // forking in favor of a more elegant proposal. But if we see this operation starts taking a lot of time, we may want
187
- // to open separate stores for merkle trees and other components.
188
- const forked = await this.store.fork();
189
- return MerkleTrees.new(forked, this.log);
189
+ const [ms, db] = await elapsed(async () => {
190
+ // TODO(palla/prover-node): If the underlying store is being shared with other components, we're unnecessarily
191
+ // copying a lot of data unrelated to merkle trees. This may be fine for now, and we may be able to ditch backup-based
192
+ // forking in favor of a more elegant proposal. But if we see this operation starts taking a lot of time, we may want
193
+ // to open separate stores for merkle trees and other components.
194
+ const forked = await this.store.fork();
195
+ return MerkleTrees.new(forked, this.telemetryClient, this.log);
196
+ });
197
+
198
+ this.metrics.recordForkDuration(ms);
199
+ return db;
190
200
  }
191
201
 
192
202
  public async delete() {
@@ -581,6 +591,8 @@ export class MerkleTrees implements MerkleTreeDb {
581
591
  * @param l1ToL2Messages - The L1 to L2 messages for the block.
582
592
  */
583
593
  async #handleL2BlockAndMessages(l2Block: L2Block, l1ToL2Messages: Fr[]): Promise<HandleL2BlockAndMessagesResult> {
594
+ const timer = new Timer();
595
+
584
596
  const treeRootWithIdPairs = [
585
597
  [l2Block.header.state.partial.nullifierTree.root, MerkleTreeId.NULLIFIER_TREE],
586
598
  [l2Block.header.state.partial.noteHashTree.root, MerkleTreeId.NOTE_HASH_TREE],
@@ -664,10 +676,13 @@ export class MerkleTrees implements MerkleTreeDb {
664
676
  );
665
677
  } else {
666
678
  this.log.debug(`Tree ${treeName} synched with size ${info.size} root ${rootStr}`);
679
+ this.metrics.recordTreeSize(treeName, info.size);
667
680
  }
668
681
  }
669
682
  await this.#snapshot(l2Block.number);
670
683
 
684
+ this.metrics.recordDbSize(this.store.estimateSize().bytes);
685
+ this.metrics.recordSyncDuration(ourBlock ? 'commit' : 'rollback_and_update', timer);
671
686
  return { isBlockOurs: ourBlock };
672
687
  }
673
688
 
@@ -0,0 +1,64 @@
1
+ import { type Timer } from '@aztec/foundation/timer';
2
+ import {
3
+ Attributes,
4
+ type Gauge,
5
+ type Histogram,
6
+ Metrics,
7
+ type TelemetryClient,
8
+ ValueType,
9
+ } from '@aztec/telemetry-client';
10
+
11
+ export class WorldStateMetrics {
12
+ private treeSize: Gauge;
13
+ private dbSize: Gauge;
14
+ private forkDuration: Histogram;
15
+ private syncDuration: Histogram;
16
+
17
+ constructor(client: TelemetryClient, name = 'MerkleTreesDb') {
18
+ const meter = client.getMeter(name);
19
+ this.treeSize = meter.createGauge(Metrics.WORLD_STATE_MERKLE_TREE_SIZE, {
20
+ description: 'The size of Merkle trees',
21
+ valueType: ValueType.INT,
22
+ });
23
+
24
+ this.dbSize = meter.createGauge(Metrics.WORLD_STATE_DB_SIZE, {
25
+ description: 'The size of the World State DB',
26
+ valueType: ValueType.INT,
27
+ unit: 'By',
28
+ });
29
+
30
+ this.forkDuration = meter.createHistogram(Metrics.WORLD_STATE_FORK_DURATION, {
31
+ description: 'The duration of a fork operation',
32
+ unit: 'ms',
33
+ valueType: ValueType.INT,
34
+ });
35
+
36
+ this.syncDuration = meter.createHistogram(Metrics.WORLD_STATE_SYNC_DURATION, {
37
+ description: 'The duration of a sync operation',
38
+ unit: 'ms',
39
+ valueType: ValueType.INT,
40
+ });
41
+ }
42
+
43
+ recordTreeSize(treeName: string, treeSize: bigint) {
44
+ this.treeSize.record(Number(treeSize), {
45
+ [Attributes.MERKLE_TREE_NAME]: treeName,
46
+ });
47
+ }
48
+
49
+ recordDbSize(dbSizeInBytes: number) {
50
+ this.dbSize.record(dbSizeInBytes);
51
+ }
52
+
53
+ recordForkDuration(timerOrMs: Timer | number) {
54
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
55
+ this.forkDuration.record(ms);
56
+ }
57
+
58
+ recordSyncDuration(syncType: 'commit' | 'rollback_and_update', timerOrMs: Timer | number) {
59
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
60
+ this.syncDuration.record(ms, {
61
+ [Attributes.STATUS]: syncType,
62
+ });
63
+ }
64
+ }