@aztec/world-state 0.47.1 → 0.49.2

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 (40) hide show
  1. package/dest/synchronizer/config.d.ts +2 -0
  2. package/dest/synchronizer/config.d.ts.map +1 -1
  3. package/dest/synchronizer/config.js +22 -8
  4. package/dest/synchronizer/server_world_state_synchronizer.d.ts +10 -3
  5. package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
  6. package/dest/synchronizer/server_world_state_synchronizer.js +50 -17
  7. package/dest/synchronizer/world_state_synchronizer.d.ts +7 -0
  8. package/dest/synchronizer/world_state_synchronizer.d.ts.map +1 -1
  9. package/dest/world-state-db/index.d.ts +1 -1
  10. package/dest/world-state-db/index.d.ts.map +1 -1
  11. package/dest/world-state-db/index.js +1 -2
  12. package/dest/world-state-db/merkle_tree_db.d.ts +7 -1
  13. package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
  14. package/dest/world-state-db/merkle_tree_db.js +1 -1
  15. package/dest/world-state-db/merkle_tree_map.d.ts +11 -0
  16. package/dest/world-state-db/merkle_tree_map.d.ts.map +1 -0
  17. package/dest/world-state-db/merkle_tree_map.js +2 -0
  18. package/dest/world-state-db/merkle_tree_operations_facade.d.ts +3 -3
  19. package/dest/world-state-db/merkle_tree_operations_facade.d.ts.map +1 -1
  20. package/dest/world-state-db/merkle_tree_operations_facade.js +4 -1
  21. package/dest/world-state-db/merkle_tree_snapshot_operations_facade.d.ts +2 -2
  22. package/dest/world-state-db/merkle_tree_snapshot_operations_facade.d.ts.map +1 -1
  23. package/dest/world-state-db/merkle_tree_snapshot_operations_facade.js +4 -1
  24. package/dest/world-state-db/merkle_trees.d.ts +3 -2
  25. package/dest/world-state-db/merkle_trees.d.ts.map +1 -1
  26. package/dest/world-state-db/merkle_trees.js +15 -4
  27. package/package.json +7 -7
  28. package/src/synchronizer/config.ts +23 -7
  29. package/src/synchronizer/server_world_state_synchronizer.ts +65 -21
  30. package/src/synchronizer/world_state_synchronizer.ts +8 -0
  31. package/src/world-state-db/index.ts +2 -1
  32. package/src/world-state-db/merkle_tree_db.ts +9 -2
  33. package/src/world-state-db/merkle_tree_map.ts +11 -0
  34. package/src/world-state-db/merkle_tree_operations_facade.ts +10 -7
  35. package/src/world-state-db/merkle_tree_snapshot_operations_facade.ts +11 -6
  36. package/src/world-state-db/merkle_trees.ts +25 -12
  37. package/dest/world-state-db/merkle_tree_operations.d.ts +0 -160
  38. package/dest/world-state-db/merkle_tree_operations.d.ts.map +0 -1
  39. package/dest/world-state-db/merkle_tree_operations.js +0 -13
  40. package/src/world-state-db/merkle_tree_operations.ts +0 -212
@@ -3,9 +3,9 @@ import { __classPrivateFieldGet } from "tslib";
3
3
  import { MerkleTreeId, PublicDataWrite, TxEffect } from '@aztec/circuit-types';
4
4
  import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, Fr, Header, L1_TO_L2_MSG_TREE_HEIGHT, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_TREE_HEIGHT, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeaf, NullifierLeafPreimage, PUBLIC_DATA_SUBTREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, PartialStateReference, PublicDataTreeLeaf, PublicDataTreeLeafPreimage, StateReference, } from '@aztec/circuits.js';
5
5
  import { padArrayEnd } from '@aztec/foundation/collection';
6
- import { SerialQueue } from '@aztec/foundation/fifo';
7
6
  import { createDebugLogger } from '@aztec/foundation/log';
8
- import { Pedersen, StandardIndexedTree, StandardTree, getTreeMeta, loadTree, newTree, } from '@aztec/merkle-tree';
7
+ import { SerialQueue } from '@aztec/foundation/queue';
8
+ import { Poseidon, StandardIndexedTree, StandardTree, getTreeMeta, loadTree, newTree, } from '@aztec/merkle-tree';
9
9
  import { INITIAL_NULLIFIER_TREE_SIZE, INITIAL_PUBLIC_DATA_TREE_SIZE, } from './merkle_tree_db.js';
10
10
  import { MerkleTreeOperationsFacade } from './merkle_tree_operations_facade.js';
11
11
  /**
@@ -47,6 +47,17 @@ export class MerkleTrees {
47
47
  await __classPrivateFieldGet(merkleTrees, _MerkleTrees_instances, "m", _MerkleTrees_init).call(merkleTrees);
48
48
  return merkleTrees;
49
49
  }
50
+ 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);
57
+ }
58
+ async delete() {
59
+ await this.store.delete();
60
+ }
50
61
  getInitialHeader() {
51
62
  return Header.empty({ state: __classPrivateFieldGet(this, _MerkleTrees_instances, "m", _MerkleTrees_loadInitialStateReference).call(this) });
52
63
  }
@@ -256,7 +267,7 @@ _MerkleTrees_instances = new WeakSet(), _MerkleTrees_init =
256
267
  async function _MerkleTrees_init() {
257
268
  const fromDb = __classPrivateFieldGet(this, _MerkleTrees_instances, "m", _MerkleTrees_isDbPopulated).call(this);
258
269
  const initializeTree = fromDb ? loadTree : newTree;
259
- const hasher = new Pedersen();
270
+ const hasher = new Poseidon();
260
271
  const nullifierTree = await initializeTree(NullifierTree, this.store, hasher, `${MerkleTreeId[MerkleTreeId.NULLIFIER_TREE]}`, {}, NULLIFIER_TREE_HEIGHT, INITIAL_NULLIFIER_TREE_SIZE);
261
272
  const noteHashTree = await initializeTree(StandardTree, this.store, hasher, `${MerkleTreeId[MerkleTreeId.NOTE_HASH_TREE]}`, Fr, NOTE_HASH_TREE_HEIGHT);
262
273
  const publicDataTree = await initializeTree(PublicDataTree, this.store, hasher, `${MerkleTreeId[MerkleTreeId.PUBLIC_DATA_TREE]}`, {}, PUBLIC_DATA_TREE_HEIGHT, INITIAL_PUBLIC_DATA_TREE_SIZE);
@@ -418,4 +429,4 @@ async function _MerkleTrees_handleL2BlockAndMessages(l2Block, l1ToL2Messages) {
418
429
  return false;
419
430
  }
420
431
  };
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmxkLXN0YXRlLWRiL21lcmtsZV90cmVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLGVBQWUsRUFBb0IsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0csT0FBTyxFQUNMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsRUFBRSxFQUNGLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw0Q0FBNEMsRUFDNUMscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsbUNBQW1DLEVBQ25DLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RSxPQUFPLEVBSUwsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixZQUFZLEVBRVosV0FBVyxFQUNYLFFBQVEsRUFDUixPQUFPLEdBQ1IsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDZCQUE2QixHQUc5QixNQUFNLHFCQUFxQixDQUFDO0FBUzdCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxhQUFjLFNBQVEsbUJBQW1CO0lBQzdDLFlBQ0UsS0FBbUIsRUFDbkIsTUFBYyxFQUNkLElBQVksRUFDWixLQUFhLEVBQ2Is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
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmxkLXN0YXRlLWRiL21lcmtsZV90cmVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLGVBQWUsRUFBb0IsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFTL0csT0FBTyxFQUNMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsRUFBRSxFQUNGLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw0Q0FBNEMsRUFDNUMscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsbUNBQW1DLEVBQ25DLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RCxPQUFPLEVBR0wsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixZQUFZLEVBRVosV0FBVyxFQUNYLFFBQVEsRUFDUixPQUFPLEdBQ1IsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDZCQUE2QixHQUc5QixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxhQUFjLFNBQVEsbUJBQW1CO0lBQzdDLFlBQ0UsS0FBbUIsRUFDbkIsTUFBYyxFQUNkLElBQVksRUFDWixLQUFhLEVBQ2Is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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/world-state",
3
- "version": "0.47.1",
3
+ "version": "0.49.2",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -53,12 +53,12 @@
53
53
  ]
54
54
  },
55
55
  "dependencies": {
56
- "@aztec/circuit-types": "0.47.1",
57
- "@aztec/circuits.js": "0.47.1",
58
- "@aztec/foundation": "0.47.1",
59
- "@aztec/kv-store": "0.47.1",
60
- "@aztec/merkle-tree": "0.47.1",
61
- "@aztec/types": "0.47.1",
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",
62
62
  "tslib": "^2.4.0"
63
63
  },
64
64
  "devDependencies": {
@@ -1,3 +1,5 @@
1
+ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
2
+
1
3
  /** World State synchronizer configuration values. */
2
4
  export interface WorldStateConfig {
3
5
  /** The frequency in which to check. */
@@ -10,16 +12,30 @@ export interface WorldStateConfig {
10
12
  worldStateProvenBlocksOnly: boolean;
11
13
  }
12
14
 
15
+ export const worldStateConfigMappings: ConfigMappingsType<WorldStateConfig> = {
16
+ worldStateBlockCheckIntervalMS: {
17
+ env: 'WS_BLOCK_CHECK_INTERVAL_MS',
18
+ parseEnv: (val: string) => +val,
19
+ defaultValue: 100,
20
+ description: 'The frequency in which to check.',
21
+ },
22
+ l2QueueSize: {
23
+ env: 'WS_L2_BLOCK_QUEUE_SIZE',
24
+ parseEnv: (val: string) => +val,
25
+ defaultValue: 1000,
26
+ description: 'Size of queue of L2 blocks to store.',
27
+ },
28
+ worldStateProvenBlocksOnly: {
29
+ env: 'WS_PROVEN_BLOCKS_ONLY',
30
+ description: 'Whether to follow only the proven chain.',
31
+ ...booleanConfigHelper(),
32
+ },
33
+ };
34
+
13
35
  /**
14
36
  * Returns the configuration values for the world state synchronizer.
15
37
  * @returns The configuration values for the world state synchronizer.
16
38
  */
17
39
  export function getWorldStateConfigFromEnv(): WorldStateConfig {
18
- const { WS_BLOCK_CHECK_INTERVAL_MS, WS_L2_BLOCK_QUEUE_SIZE, WS_PROVEN_BLOCKS_ONLY } = process.env;
19
- const envVars: WorldStateConfig = {
20
- worldStateBlockCheckIntervalMS: WS_BLOCK_CHECK_INTERVAL_MS ? +WS_BLOCK_CHECK_INTERVAL_MS : 100,
21
- l2QueueSize: WS_L2_BLOCK_QUEUE_SIZE ? +WS_L2_BLOCK_QUEUE_SIZE : 1000,
22
- worldStateProvenBlocksOnly: ['1', 'true'].includes(WS_PROVEN_BLOCKS_ONLY!),
23
- };
24
- return envVars;
40
+ return getConfigFromMappings<WorldStateConfig>(worldStateConfigMappings);
25
41
  }
@@ -1,19 +1,22 @@
1
- import { type L1ToL2MessageSource, type L2Block, L2BlockDownloader, type L2BlockSource } from '@aztec/circuit-types';
1
+ import {
2
+ type HandleL2BlockAndMessagesResult,
3
+ type L1ToL2MessageSource,
4
+ type L2Block,
5
+ L2BlockDownloader,
6
+ type L2BlockSource,
7
+ } from '@aztec/circuit-types';
2
8
  import { type L2BlockHandledStats } from '@aztec/circuit-types/stats';
3
9
  import { L1_TO_L2_MSG_SUBTREE_HEIGHT } from '@aztec/circuits.js/constants';
4
10
  import { Fr } from '@aztec/foundation/fields';
5
- import { SerialQueue } from '@aztec/foundation/fifo';
6
11
  import { createDebugLogger } from '@aztec/foundation/log';
12
+ import { promiseWithResolvers } from '@aztec/foundation/promise';
13
+ import { SerialQueue } from '@aztec/foundation/queue';
7
14
  import { elapsed } from '@aztec/foundation/timer';
8
15
  import { type AztecKVStore, type AztecSingleton } from '@aztec/kv-store';
9
16
  import { openTmpStore } from '@aztec/kv-store/utils';
10
17
  import { SHA256Trunc, StandardTree } from '@aztec/merkle-tree';
11
18
 
12
- import {
13
- type HandleL2BlockAndMessagesResult,
14
- type MerkleTreeOperations,
15
- type MerkleTrees,
16
- } from '../world-state-db/index.js';
19
+ import { type MerkleTreeOperations, type MerkleTrees } from '../world-state-db/index.js';
17
20
  import { MerkleTreeOperationsFacade } from '../world-state-db/merkle_tree_operations_facade.js';
18
21
  import { MerkleTreeSnapshotOperationsFacade } from '../world-state-db/merkle_tree_snapshot_operations_facade.js';
19
22
  import { type WorldStateConfig } from './config.js';
@@ -31,12 +34,16 @@ import {
31
34
  export class ServerWorldStateSynchronizer implements WorldStateSynchronizer {
32
35
  private latestBlockNumberAtStart = 0;
33
36
 
37
+ // TODO(palla/prover-node): JobQueue, stopping, runningPromise, pausedPromise, pausedResolve
38
+ // should all be hidden under a single abstraction. Also, check if we actually need the jobqueue.
34
39
  private l2BlockDownloader: L2BlockDownloader;
35
40
  private syncPromise: Promise<void> = Promise.resolve();
36
41
  private syncResolve?: () => void = undefined;
37
42
  private jobQueue = new SerialQueue();
38
43
  private stopping = false;
39
44
  private runningPromise: Promise<void> = Promise.resolve();
45
+ private pausedPromise?: Promise<void> = undefined;
46
+ private pausedResolve?: () => void = undefined;
40
47
  private currentState: WorldStateRunningState = WorldStateRunningState.IDLE;
41
48
  private blockNumber: AztecSingleton<number>;
42
49
 
@@ -67,6 +74,11 @@ export class ServerWorldStateSynchronizer implements WorldStateSynchronizer {
67
74
  return new MerkleTreeSnapshotOperationsFacade(this.merkleTreeDb, blockNumber);
68
75
  }
69
76
 
77
+ private async getFork(includeUncommitted: boolean): Promise<MerkleTreeOperationsFacade> {
78
+ this.log.verbose(`Forking world state at ${this.blockNumber.get()}`);
79
+ return new MerkleTreeOperationsFacade(await this.merkleTreeDb.fork(), includeUncommitted);
80
+ }
81
+
70
82
  public async start() {
71
83
  if (this.currentState === WorldStateRunningState.STOPPED) {
72
84
  throw new Error('Synchronizer already stopped');
@@ -102,6 +114,9 @@ export class ServerWorldStateSynchronizer implements WorldStateSynchronizer {
102
114
  const blockProcess = async () => {
103
115
  while (!this.stopping) {
104
116
  await this.jobQueue.put(() => this.collectAndProcessBlocks());
117
+ if (this.pausedPromise) {
118
+ await this.pausedPromise;
119
+ }
105
120
  }
106
121
  };
107
122
  this.jobQueue.start();
@@ -129,6 +144,23 @@ export class ServerWorldStateSynchronizer implements WorldStateSynchronizer {
129
144
  return this.blockNumber.get() ?? 0;
130
145
  }
131
146
 
147
+ private async pause() {
148
+ this.log.debug('Pausing world state synchronizer');
149
+ ({ promise: this.pausedPromise, resolve: this.pausedResolve } = promiseWithResolvers());
150
+ await this.jobQueue.syncPoint();
151
+ this.log.debug('Paused world state synchronizer');
152
+ }
153
+
154
+ private resume() {
155
+ if (this.pausedResolve) {
156
+ this.log.debug('Resuming world state synchronizer');
157
+ this.pausedResolve();
158
+ this.pausedResolve = undefined;
159
+ this.pausedPromise = undefined;
160
+ this.log.debug('Resumed world state synchronizer');
161
+ }
162
+ }
163
+
132
164
  public status(): Promise<WorldStateStatus> {
133
165
  const status = {
134
166
  syncedToL2Block: this.currentL2BlockNum,
@@ -138,30 +170,29 @@ export class ServerWorldStateSynchronizer implements WorldStateSynchronizer {
138
170
  }
139
171
 
140
172
  /**
141
- * Forces an immediate sync
142
- * @param minBlockNumber - The minimum block number that we must sync to
173
+ * Forces an immediate sync.
174
+ * @param targetBlockNumber - The target block number that we must sync to. Will download unproven blocks if needed to reach it. Throws if cannot be reached.
143
175
  * @returns A promise that resolves with the block number the world state was synced to
144
176
  */
145
- public async syncImmediate(minBlockNumber?: number): Promise<number> {
177
+ public async syncImmediate(targetBlockNumber?: number): Promise<number> {
146
178
  if (this.currentState !== WorldStateRunningState.RUNNING) {
147
179
  throw new Error(`World State is not running, unable to perform sync`);
148
180
  }
149
- // If we have been given a block number to sync to and we have reached that number
150
- // then return.
151
- if (minBlockNumber !== undefined && minBlockNumber <= this.currentL2BlockNum) {
181
+ // If we have been given a block number to sync to and we have reached that number then return.
182
+ if (targetBlockNumber !== undefined && targetBlockNumber <= this.currentL2BlockNum) {
152
183
  return this.currentL2BlockNum;
153
184
  }
154
- const blockToSyncTo = minBlockNumber === undefined ? 'latest' : `${minBlockNumber}`;
155
- this.log.debug(`World State at block ${this.currentL2BlockNum}, told to sync to block ${blockToSyncTo}...`);
156
- // ensure any outstanding block updates are completed first.
185
+ this.log.debug(`World State at ${this.currentL2BlockNum} told to sync to ${targetBlockNumber ?? 'latest'}`);
186
+ // ensure any outstanding block updates are completed first
157
187
  await this.jobQueue.syncPoint();
188
+
158
189
  while (true) {
159
190
  // Check the block number again
160
- if (minBlockNumber !== undefined && minBlockNumber <= this.currentL2BlockNum) {
191
+ if (targetBlockNumber !== undefined && targetBlockNumber <= this.currentL2BlockNum) {
161
192
  return this.currentL2BlockNum;
162
193
  }
163
- // Poll for more blocks
164
- const numBlocks = await this.l2BlockDownloader.pollImmediate();
194
+ // Poll for more blocks, requesting even unproven blocks.
195
+ const numBlocks = await this.l2BlockDownloader.pollImmediate(targetBlockNumber, false);
165
196
  this.log.debug(`Block download immediate poll yielded ${numBlocks} blocks`);
166
197
  if (numBlocks) {
167
198
  // More blocks were received, process them and go round again
@@ -169,15 +200,28 @@ export class ServerWorldStateSynchronizer implements WorldStateSynchronizer {
169
200
  continue;
170
201
  }
171
202
  // No blocks are available, if we have been given a block number then we can't achieve it
172
- if (minBlockNumber !== undefined) {
203
+ if (targetBlockNumber !== undefined) {
173
204
  throw new Error(
174
- `Unable to sync to block number ${minBlockNumber}, currently synced to block ${this.currentL2BlockNum}`,
205
+ `Unable to sync to block number ${targetBlockNumber}, currently synced to block ${this.currentL2BlockNum}`,
175
206
  );
176
207
  }
177
208
  return this.currentL2BlockNum;
178
209
  }
179
210
  }
180
211
 
212
+ public async syncImmediateAndFork(
213
+ targetBlockNumber: number,
214
+ forkIncludeUncommitted: boolean,
215
+ ): Promise<MerkleTreeOperationsFacade> {
216
+ try {
217
+ await this.pause();
218
+ await this.syncImmediate(targetBlockNumber);
219
+ return await this.getFork(forkIncludeUncommitted);
220
+ } finally {
221
+ this.resume();
222
+ }
223
+ }
224
+
181
225
  /**
182
226
  * Checks for the availability of new blocks and processes them.
183
227
  */
@@ -52,6 +52,14 @@ export interface WorldStateSynchronizer {
52
52
  */
53
53
  syncImmediate(minBlockNumber?: number): Promise<number>;
54
54
 
55
+ /**
56
+ * Pauses the synchronizer, syncs to the target block number, forks world state, and resumes.
57
+ * @param targetBlockNumber - The block number to sync to.
58
+ * @param forkIncludeUncommitted - Whether to include uncommitted data in the fork.
59
+ * @returns The db forked at the requested target block number.
60
+ */
61
+ syncImmediateAndFork(targetBlockNumber: number, forkIncludeUncommitted: boolean): Promise<MerkleTreeOperations>;
62
+
55
63
  /**
56
64
  * Returns an instance of MerkleTreeOperations that will include uncommitted data.
57
65
  * @returns An instance of MerkleTreeOperations that will include uncommitted data.
@@ -1,5 +1,6 @@
1
1
  export * from './merkle_trees.js';
2
2
  export * from './merkle_tree_db.js';
3
- export * from './merkle_tree_operations.js';
4
3
  export * from './merkle_tree_operations_facade.js';
5
4
  export * from './merkle_tree_snapshot_operations_facade.js';
5
+
6
+ export { MerkleTreeOperations } from '@aztec/circuit-types/interfaces';
@@ -1,9 +1,8 @@
1
1
  import { type MerkleTreeId } from '@aztec/circuit-types';
2
+ import { type MerkleTreeOperations } from '@aztec/circuit-types/interfaces';
2
3
  import { type Fr, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX } from '@aztec/circuits.js';
3
4
  import { type IndexedTreeSnapshot, type TreeSnapshot } from '@aztec/merkle-tree';
4
5
 
5
- import { type MerkleTreeOperations } from './merkle_tree_operations.js';
6
-
7
6
  /**
8
7
  *
9
8
  * @remarks Short explanation:
@@ -62,4 +61,12 @@ export type MerkleTreeDb = {
62
61
  * @param block - The block number to take the snapshot at.
63
62
  */
64
63
  getSnapshot(block: number): Promise<TreeSnapshots>;
64
+
65
+ /**
66
+ * Forks the database at its current state.
67
+ */
68
+ fork(): Promise<MerkleTreeDb>;
69
+
70
+ /** Deletes this database. */
71
+ delete(): Promise<void>;
65
72
  };
@@ -0,0 +1,11 @@
1
+ import { type MerkleTreeId } from '@aztec/circuit-types';
2
+ import { type Fr } from '@aztec/circuits.js';
3
+ import { type AppendOnlyTree, type IndexedTree } from '@aztec/merkle-tree';
4
+
5
+ export type MerkleTreeMap = {
6
+ [MerkleTreeId.NULLIFIER_TREE]: IndexedTree;
7
+ [MerkleTreeId.NOTE_HASH_TREE]: AppendOnlyTree<Fr>;
8
+ [MerkleTreeId.PUBLIC_DATA_TREE]: IndexedTree;
9
+ [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: AppendOnlyTree<Fr>;
10
+ [MerkleTreeId.ARCHIVE]: AppendOnlyTree<Fr>;
11
+ };
@@ -1,16 +1,15 @@
1
- import { type L2Block, type MerkleTreeId, type SiblingPath } from '@aztec/circuit-types';
2
- import { type Fr, type Header, type NullifierLeafPreimage, type StateReference } from '@aztec/circuits.js';
3
- import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
4
- import { type BatchInsertionResult } from '@aztec/merkle-tree';
5
-
6
- import { type MerkleTreeDb } from './merkle_tree_db.js';
1
+ import { type BatchInsertionResult, type L2Block, type MerkleTreeId, type SiblingPath } from '@aztec/circuit-types';
7
2
  import {
8
3
  type HandleL2BlockAndMessagesResult,
9
4
  type IndexedTreeId,
10
5
  type MerkleTreeLeafType,
11
6
  type MerkleTreeOperations,
12
7
  type TreeInfo,
13
- } from './merkle_tree_operations.js';
8
+ } from '@aztec/circuit-types/interfaces';
9
+ import { type Fr, type Header, type NullifierLeafPreimage, type StateReference } from '@aztec/circuits.js';
10
+ import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
11
+
12
+ import { type MerkleTreeDb } from './merkle_tree_db.js';
14
13
 
15
14
  /**
16
15
  * Wraps a MerkleTreeDbOperations to call all functions with a preset includeUncommitted flag.
@@ -205,4 +204,8 @@ export class MerkleTreeOperationsFacade implements MerkleTreeOperations {
205
204
  ): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>> {
206
205
  return this.trees.batchInsert(treeId, leaves, subtreeHeight);
207
206
  }
207
+
208
+ public delete(): Promise<void> {
209
+ return this.trees.delete();
210
+ }
208
211
  }
@@ -1,16 +1,17 @@
1
1
  import { MerkleTreeId, type SiblingPath } from '@aztec/circuit-types';
2
- import { AppendOnlyTreeSnapshot, Fr, type Header, PartialStateReference, StateReference } from '@aztec/circuits.js';
3
- import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
4
- import { type BatchInsertionResult, type IndexedTreeSnapshot } from '@aztec/merkle-tree';
5
-
6
- import { type MerkleTreeDb, type TreeSnapshots } from './merkle_tree_db.js';
7
2
  import {
3
+ type BatchInsertionResult,
8
4
  type HandleL2BlockAndMessagesResult,
9
5
  type IndexedTreeId,
10
6
  type MerkleTreeLeafType,
11
7
  type MerkleTreeOperations,
12
8
  type TreeInfo,
13
- } from './merkle_tree_operations.js';
9
+ } from '@aztec/circuit-types/interfaces';
10
+ import { AppendOnlyTreeSnapshot, Fr, type Header, PartialStateReference, StateReference } from '@aztec/circuits.js';
11
+ import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
12
+ import { type IndexedTreeSnapshot } from '@aztec/merkle-tree';
13
+
14
+ import { type MerkleTreeDb, type TreeSnapshots } from './merkle_tree_db.js';
14
15
 
15
16
  /**
16
17
  * Merkle tree operations on readonly tree snapshots.
@@ -158,6 +159,10 @@ export class MerkleTreeSnapshotOperationsFacade implements MerkleTreeOperations
158
159
  return Promise.reject(new Error('Tree snapshot operations are read-only'));
159
160
  }
160
161
 
162
+ delete(): Promise<void> {
163
+ return Promise.reject(new Error('Tree snapshot operations are read-only'));
164
+ }
165
+
161
166
  updateHistoricArchive(): Promise<void> {
162
167
  return Promise.reject(new Error('Tree snapshot operations are read-only'));
163
168
  }
@@ -1,4 +1,12 @@
1
1
  import { type L2Block, MerkleTreeId, PublicDataWrite, type SiblingPath, TxEffect } from '@aztec/circuit-types';
2
+ import {
3
+ type BatchInsertionResult,
4
+ type HandleL2BlockAndMessagesResult,
5
+ type IndexedTreeId,
6
+ type MerkleTreeLeafType,
7
+ type MerkleTreeOperations,
8
+ type TreeInfo,
9
+ } from '@aztec/circuit-types/interfaces';
2
10
  import {
3
11
  ARCHIVE_HEIGHT,
4
12
  AppendOnlyTreeSnapshot,
@@ -22,15 +30,14 @@ import {
22
30
  StateReference,
23
31
  } from '@aztec/circuits.js';
24
32
  import { padArrayEnd } from '@aztec/foundation/collection';
25
- import { SerialQueue } from '@aztec/foundation/fifo';
26
33
  import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
34
+ import { SerialQueue } from '@aztec/foundation/queue';
27
35
  import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
28
36
  import { type AztecKVStore, type AztecSingleton } from '@aztec/kv-store';
29
37
  import {
30
38
  type AppendOnlyTree,
31
- type BatchInsertionResult,
32
39
  type IndexedTree,
33
- Pedersen,
40
+ Poseidon,
34
41
  StandardIndexedTree,
35
42
  StandardTree,
36
43
  type UpdateOnlyTree,
@@ -46,14 +53,7 @@ import {
46
53
  type MerkleTreeDb,
47
54
  type TreeSnapshots,
48
55
  } from './merkle_tree_db.js';
49
- import {
50
- type HandleL2BlockAndMessagesResult,
51
- type IndexedTreeId,
52
- type MerkleTreeLeafType,
53
- type MerkleTreeMap,
54
- type MerkleTreeOperations,
55
- type TreeInfo,
56
- } from './merkle_tree_operations.js';
56
+ import { type MerkleTreeMap } from './merkle_tree_map.js';
57
57
  import { MerkleTreeOperationsFacade } from './merkle_tree_operations_facade.js';
58
58
 
59
59
  /**
@@ -121,7 +121,7 @@ export class MerkleTrees implements MerkleTreeDb {
121
121
  const fromDb = this.#isDbPopulated();
122
122
  const initializeTree = fromDb ? loadTree : newTree;
123
123
 
124
- const hasher = new Pedersen();
124
+ const hasher = new Poseidon();
125
125
 
126
126
  const nullifierTree = await initializeTree(
127
127
  NullifierTree,
@@ -180,6 +180,19 @@ export class MerkleTrees implements MerkleTreeDb {
180
180
  await this.#commit();
181
181
  }
182
182
 
183
+ 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);
190
+ }
191
+
192
+ public async delete() {
193
+ await this.store.delete();
194
+ }
195
+
183
196
  public getInitialHeader(): Header {
184
197
  return Header.empty({ state: this.#loadInitialStateReference() });
185
198
  }