@aztec/world-state 0.0.1-commit.e558bd1c → 0.0.1-commit.e57c76e

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 (41) hide show
  1. package/dest/native/fork_checkpoint.d.ts +7 -1
  2. package/dest/native/fork_checkpoint.d.ts.map +1 -1
  3. package/dest/native/fork_checkpoint.js +15 -3
  4. package/dest/native/merkle_trees_facade.d.ts +9 -6
  5. package/dest/native/merkle_trees_facade.d.ts.map +1 -1
  6. package/dest/native/merkle_trees_facade.js +33 -13
  7. package/dest/native/message.d.ts +13 -6
  8. package/dest/native/message.d.ts.map +1 -1
  9. package/dest/native/native_world_state.d.ts +31 -5
  10. package/dest/native/native_world_state.d.ts.map +1 -1
  11. package/dest/native/native_world_state.js +80 -27
  12. package/dest/native/native_world_state_instance.d.ts +5 -4
  13. package/dest/native/native_world_state_instance.d.ts.map +1 -1
  14. package/dest/native/native_world_state_instance.js +33 -26
  15. package/dest/native/world_state_ops_queue.js +5 -5
  16. package/dest/synchronizer/config.d.ts +3 -3
  17. package/dest/synchronizer/config.d.ts.map +1 -1
  18. package/dest/synchronizer/config.js +15 -13
  19. package/dest/synchronizer/factory.d.ts +5 -5
  20. package/dest/synchronizer/factory.d.ts.map +1 -1
  21. package/dest/synchronizer/factory.js +7 -6
  22. package/dest/synchronizer/server_world_state_synchronizer.d.ts +4 -4
  23. package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
  24. package/dest/synchronizer/server_world_state_synchronizer.js +90 -18
  25. package/dest/testing.d.ts +4 -3
  26. package/dest/testing.d.ts.map +1 -1
  27. package/dest/testing.js +10 -6
  28. package/dest/world-state-db/merkle_tree_db.d.ts +1 -10
  29. package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
  30. package/package.json +12 -11
  31. package/src/native/fork_checkpoint.ts +19 -3
  32. package/src/native/merkle_trees_facade.ts +41 -16
  33. package/src/native/message.ts +14 -5
  34. package/src/native/native_world_state.ts +98 -34
  35. package/src/native/native_world_state_instance.ts +40 -30
  36. package/src/native/world_state_ops_queue.ts +5 -5
  37. package/src/synchronizer/config.ts +21 -15
  38. package/src/synchronizer/factory.ts +13 -11
  39. package/src/synchronizer/server_world_state_synchronizer.ts +95 -20
  40. package/src/testing.ts +8 -9
  41. package/src/world-state-db/merkle_tree_db.ts +0 -10
@@ -7,8 +7,8 @@ import { tryRmDir } from '@aztec/foundation/fs';
7
7
  import { createLogger } from '@aztec/foundation/log';
8
8
  import { DatabaseVersionManager } from '@aztec/stdlib/database-version/manager';
9
9
  import { MerkleTreeId, NullifierLeaf, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
10
- import { BlockHeader, PartialStateReference, StateReference } from '@aztec/stdlib/tx';
11
- import { WorldStateRevision } from '@aztec/stdlib/world-state';
10
+ import { BlockHeader, GlobalVariables, PartialStateReference, StateReference } from '@aztec/stdlib/tx';
11
+ import { EMPTY_GENESIS_DATA, WorldStateRevision } from '@aztec/stdlib/world-state';
12
12
  import { getTelemetryClient } from '@aztec/telemetry-client';
13
13
  import assert from 'assert/strict';
14
14
  import { mkdtemp, rm } from 'fs/promises';
@@ -22,34 +22,59 @@ import { NativeWorldState } from './native_world_state_instance.js';
22
22
  // Increment this when making incompatible changes to the database schema
23
23
  export const WORLD_STATE_DB_VERSION = 2; // The initial version
24
24
  export const WORLD_STATE_DIR = 'world_state';
25
+ const DEFAULT_TMP_TREE_MAP_SIZE_KB = 10 * 1024 * 1024;
26
+ /**
27
+ * Sets up a fresh `mkdtemp` directory + default `WorldStateTreeMapSizes` shared by both
28
+ * the `.tmp` (fsync-on) and `.ephemeral` (fsync-off) factories. Returns the raw tmpdir,
29
+ * the tree map sizes, and the package logger.
30
+ */ async function createTmpWorldStateDir(bindings) {
31
+ const log = createLogger('world-state:database', bindings);
32
+ const dataDir = await mkdtemp(join(tmpdir(), 'aztec-world-state-'));
33
+ const wsTreeMapSizes = {
34
+ archiveTreeMapSizeKb: DEFAULT_TMP_TREE_MAP_SIZE_KB,
35
+ nullifierTreeMapSizeKb: DEFAULT_TMP_TREE_MAP_SIZE_KB,
36
+ noteHashTreeMapSizeKb: DEFAULT_TMP_TREE_MAP_SIZE_KB,
37
+ messageTreeMapSizeKb: DEFAULT_TMP_TREE_MAP_SIZE_KB,
38
+ publicDataTreeMapSizeKb: DEFAULT_TMP_TREE_MAP_SIZE_KB
39
+ };
40
+ log.debug(`Created temporary world state database at: ${dataDir} (map size ${DEFAULT_TMP_TREE_MAP_SIZE_KB} KB)`);
41
+ return {
42
+ dataDir,
43
+ wsTreeMapSizes,
44
+ log
45
+ };
46
+ }
25
47
  export class NativeWorldStateService {
26
48
  instance;
27
49
  worldStateInstrumentation;
28
50
  log;
51
+ genesis;
29
52
  cleanup;
30
53
  initialHeader;
31
54
  // This is read heavily and only changes when data is persisted, so we cache it
32
55
  cachedStatusSummary;
33
- constructor(instance, worldStateInstrumentation, log, cleanup = ()=>Promise.resolve()){
56
+ constructor(instance, worldStateInstrumentation, log, genesis = EMPTY_GENESIS_DATA, cleanup = ()=>Promise.resolve()){
34
57
  this.instance = instance;
35
58
  this.worldStateInstrumentation = worldStateInstrumentation;
36
59
  this.log = log;
60
+ this.genesis = genesis;
37
61
  this.cleanup = cleanup;
38
62
  }
39
- static async new(rollupAddress, dataDir, wsTreeMapSizes, prefilledPublicData = [], instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings, cleanup = ()=>Promise.resolve()) {
63
+ /**
64
+ * Opens a persistent world state at `dataDir`. Goes through `DatabaseVersionManager` so the
65
+ * caller's rollup address is bound to the on-disk schema and incompatible versions surface
66
+ * loudly. The LMDB envs commit with full fsync.
67
+ */ static async new(rollupAddress, dataDir, wsTreeMapSizes, genesis = EMPTY_GENESIS_DATA, instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings, cleanup = ()=>Promise.resolve()) {
40
68
  const log = createLogger('world-state:database', bindings);
41
69
  const worldStateDirectory = join(dataDir, WORLD_STATE_DIR);
42
- // Create a version manager to handle versioning
43
70
  const versionManager = new DatabaseVersionManager({
44
71
  schemaVersion: WORLD_STATE_DB_VERSION,
45
72
  rollupAddress,
46
73
  dataDirectory: worldStateDirectory,
47
- onOpen: (dir)=>{
48
- return Promise.resolve(new NativeWorldState(dir, wsTreeMapSizes, prefilledPublicData, instrumentation, bindings));
49
- }
74
+ onOpen: (dir)=>Promise.resolve(new NativeWorldState(dir, wsTreeMapSizes, genesis, instrumentation, bindings, undefined, /*ephemeral=*/ false))
50
75
  });
51
76
  const [instance] = await versionManager.open();
52
- const worldState = new this(instance, instrumentation, log, cleanup);
77
+ const worldState = new this(instance, instrumentation, log, genesis, cleanup);
53
78
  try {
54
79
  await worldState.init();
55
80
  } catch (e) {
@@ -58,19 +83,16 @@ export class NativeWorldStateService {
58
83
  }
59
84
  return worldState;
60
85
  }
61
- static async tmp(rollupAddress = EthAddress.ZERO, cleanupTmpDir = true, prefilledPublicData = [], instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings) {
62
- const log = createLogger('world-state:database', bindings);
63
- const dataDir = await mkdtemp(join(tmpdir(), 'aztec-world-state-'));
64
- const dbMapSizeKb = 10 * 1024 * 1024;
65
- const worldStateTreeMapSizes = {
66
- archiveTreeMapSizeKb: dbMapSizeKb,
67
- nullifierTreeMapSizeKb: dbMapSizeKb,
68
- noteHashTreeMapSizeKb: dbMapSizeKb,
69
- messageTreeMapSizeKb: dbMapSizeKb,
70
- publicDataTreeMapSizeKb: dbMapSizeKb
71
- };
72
- log.debug(`Created temporary world state database at: ${dataDir} with tree map size: ${dbMapSizeKb}`);
73
- // pass a cleanup callback because process.on('beforeExit', cleanup) does not work under Jest
86
+ /**
87
+ * Opens a world state in a fresh tmpdir with full fsync semantics. Use when you need the
88
+ * on-disk file to remain crash-recoverable (e.g. for snapshot/backup tests) but don't
89
+ * want a persistent dataDir. Pass `cleanupTmpDir=false` to keep the directory after
90
+ * close for inspection.
91
+ *
92
+ * If you don't care about crash-recoverability — i.e. you just want a fast scratch
93
+ * database for tests — use {@link ephemeral} instead.
94
+ */ static async tmp(rollupAddress = EthAddress.ZERO, cleanupTmpDir = true, genesis = EMPTY_GENESIS_DATA, instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings) {
95
+ const { dataDir, wsTreeMapSizes, log } = await createTmpWorldStateDir(bindings);
74
96
  const cleanup = async ()=>{
75
97
  if (cleanupTmpDir) {
76
98
  await rm(dataDir, {
@@ -83,7 +105,35 @@ export class NativeWorldStateService {
83
105
  log.debug(`Leaving temporary world state database: ${dataDir}`);
84
106
  }
85
107
  };
86
- return this.new(rollupAddress, dataDir, worldStateTreeMapSizes, prefilledPublicData, instrumentation, bindings, cleanup);
108
+ return this.new(rollupAddress, dataDir, wsTreeMapSizes, genesis, instrumentation, bindings, cleanup);
109
+ }
110
+ /**
111
+ * Opens a fully-ephemeral world state. The directory is created in `os.tmpdir()`, the LMDB
112
+ * envs open with `MDB_NOSYNC | MDB_NOMETASYNC` so commits never block on fsync, and the
113
+ * directory is removed on dispose. A crash mid-write leaves the env unrecoverable.
114
+ *
115
+ * For unit tests and other isolated runs. Use {@link tmp} when you need fsync semantics in a
116
+ * tmp dir, and {@link new} for a persistent store. Skips {@link DatabaseVersionManager} —
117
+ * there is no on-disk schema to bind to and no rollup address is taken.
118
+ */ static async ephemeral(genesis = EMPTY_GENESIS_DATA, instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings) {
119
+ const { dataDir, wsTreeMapSizes, log } = await createTmpWorldStateDir(bindings);
120
+ const cleanup = async ()=>{
121
+ await rm(dataDir, {
122
+ recursive: true,
123
+ force: true,
124
+ maxRetries: 3
125
+ });
126
+ log.debug(`Deleted ephemeral world state database: ${dataDir}`);
127
+ };
128
+ const instance = new NativeWorldState(join(dataDir, WORLD_STATE_DIR), wsTreeMapSizes, genesis, instrumentation, bindings, undefined, /*ephemeral=*/ true);
129
+ const worldState = new this(instance, instrumentation, log, genesis, cleanup);
130
+ try {
131
+ await worldState.init();
132
+ } catch (e) {
133
+ log.error(`Error initializing ephemeral world state: ${e}`);
134
+ throw e;
135
+ }
136
+ return worldState;
87
137
  }
88
138
  async init() {
89
139
  const status = await this.getStatusSummary();
@@ -100,7 +150,7 @@ export class NativeWorldStateService {
100
150
  // the initial header _must_ be the first element in the archive tree
101
151
  // if this assertion fails, check that the hashing done in Header in yarn-project matches the initial header hash done in world_state.cpp
102
152
  const indices = await committed.findLeafIndices(MerkleTreeId.ARCHIVE, [
103
- (await this.initialHeader.hash()).toFr()
153
+ await this.initialHeader.hash()
104
154
  ]);
105
155
  const initialHeaderIndex = indices[0];
106
156
  assert.strictEqual(initialHeaderIndex, 0n, 'Invalid initial archive state');
@@ -123,7 +173,7 @@ export class NativeWorldStateService {
123
173
  blockNumber: blockNumber ?? BlockNumber.ZERO,
124
174
  canonical: true
125
175
  });
126
- return new MerkleTreesForkFacade(this.instance, this.initialHeader, new WorldStateRevision(/*forkId=*/ resp.forkId, /* blockNumber=*/ BlockNumber.ZERO, /* includeUncommitted=*/ true), opts);
176
+ return new MerkleTreesForkFacade(this.instance, this.initialHeader, new WorldStateRevision(/*forkId=*/ resp.forkId, /* blockNumber=*/ WorldStateRevision.LATEST, /* includeUncommitted=*/ true), opts);
127
177
  }
128
178
  getInitialHeader() {
129
179
  return this.initialHeader;
@@ -149,7 +199,7 @@ export class NativeWorldStateService {
149
199
  try {
150
200
  return await this.instance.call(WorldStateMessageType.SYNC_BLOCK, {
151
201
  blockNumber: l2Block.number,
152
- blockHeaderHash: await l2Block.hash(),
202
+ blockHeaderHash: (await l2Block.hash()).toBuffer(),
153
203
  paddedL1ToL2Messages: paddedL1ToL2Messages.map(serializeLeaf),
154
204
  paddedNoteHashes: paddedNoteHashes.map(serializeLeaf),
155
205
  paddedNullifiers: paddedNullifiers.map(serializeLeaf),
@@ -169,7 +219,10 @@ export class NativeWorldStateService {
169
219
  async buildInitialHeader() {
170
220
  const state = await this.getInitialStateReference();
171
221
  return BlockHeader.empty({
172
- state
222
+ state,
223
+ globalVariables: GlobalVariables.empty({
224
+ timestamp: this.genesis.genesisTimestamp
225
+ })
173
226
  });
174
227
  }
175
228
  sanitizeAndCacheSummaryFromFull(response) {
@@ -1,5 +1,5 @@
1
1
  import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
2
- import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
2
+ import { type GenesisData } from '@aztec/stdlib/world-state';
3
3
  import type { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
4
4
  import type { WorldStateTreeMapSizes } from '../synchronizer/factory.js';
5
5
  import { WorldStateMessageType, type WorldStateRequest, type WorldStateRequestCategories, type WorldStateResponse } from './message.js';
@@ -13,14 +13,15 @@ export interface NativeWorldStateInstance {
13
13
  export declare class NativeWorldState implements NativeWorldStateInstance {
14
14
  private readonly dataDir;
15
15
  private readonly wsTreeMapSizes;
16
- private readonly prefilledPublicData;
16
+ private readonly genesis;
17
17
  private readonly instrumentation;
18
18
  private readonly log;
19
+ private readonly ephemeral;
19
20
  private open;
20
21
  private queues;
21
22
  private instance;
22
23
  /** Creates a new native WorldState instance */
23
- constructor(dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes, prefilledPublicData: PublicDataTreeLeaf[] | undefined, instrumentation: WorldStateInstrumentation, bindings?: LoggerBindings, log?: Logger);
24
+ constructor(dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes, genesis: GenesisData | undefined, instrumentation: WorldStateInstrumentation, bindings?: LoggerBindings, log?: Logger, ephemeral?: boolean);
24
25
  getDataDir(): string;
25
26
  clone(): NativeWorldState;
26
27
  /**
@@ -46,4 +47,4 @@ export declare class NativeWorldState implements NativeWorldStateInstance {
46
47
  close(): Promise<void>;
47
48
  private _sendMessage;
48
49
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3dvcmxkX3N0YXRlX2luc3RhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlL25hdGl2ZV93b3JsZF9zdGF0ZV9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHdkYsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUs5RCxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixLQUFLLGlCQUFpQixFQUN0QixLQUFLLDJCQUEyQixFQUNoQyxLQUFLLGtCQUFrQixFQUl4QixNQUFNLGNBQWMsQ0FBQztBQUt0QixNQUFNLFdBQVcsd0JBQXdCO0lBQ3ZDLElBQUksQ0FBQyxDQUFDLFNBQVMscUJBQXFCLEVBQ2xDLFdBQVcsRUFBRSxDQUFDLEVBQ2QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLDJCQUEyQixHQUN2RCxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsQyxTQUFTLElBQUksR0FBRyxDQUFDO0NBQ2xCO0FBRUQ7O0dBRUc7QUFDSCxxQkFBYSxnQkFBaUIsWUFBVyx3QkFBd0I7SUFVN0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0lBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYztJQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtJQUNwQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFFaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBZHRCLE9BQU8sQ0FBQyxJQUFJLENBQVE7SUFHcEIsT0FBTyxDQUFDLE1BQU0sQ0FBeUM7SUFFdkQsT0FBTyxDQUFDLFFBQVEsQ0FBK0U7SUFFL0YsK0NBQStDO0lBQy9DLFlBQ21CLE9BQU8sRUFBRSxNQUFNLEVBQ2YsY0FBYyxFQUFFLHNCQUFzQixFQUN0QyxtQkFBbUIsa0NBQTJCLEVBQzlDLGVBQWUsRUFBRSx5QkFBeUIsRUFDM0QsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUNSLEdBQUcsR0FBRSxNQUF1RCxFQW9DOUU7SUFFTSxVQUFVLFdBRWhCO0lBRU0sS0FBSyxxQkFTWDtJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsSUFBSSxHQUFHLENBaUJ0QjtJQUVEOzs7Ozs7O09BT0c7SUFDVSxJQUFJLENBQUMsQ0FBQyxTQUFTLHFCQUFxQixFQUMvQyxXQUFXLEVBQUUsQ0FBQyxFQUNkLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRywyQkFBMkIsRUFFeEQsZUFBZSw2REFBdUUsRUFDdEYsWUFBWSxzQkFBb0IsR0FDL0IsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBcURoQztJQUVEOztPQUVHO0lBQ1UsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FlbEM7WUFFYSxZQUFZO0NBOEQzQiJ9
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3dvcmxkX3N0YXRlX2luc3RhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlL25hdGl2ZV93b3JsZF9zdGF0ZV9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHdkYsT0FBTyxFQUFzQixLQUFLLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBS2pGLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLEtBQUssaUJBQWlCLEVBQ3RCLEtBQUssMkJBQTJCLEVBQ2hDLEtBQUssa0JBQWtCLEVBSXhCLE1BQU0sY0FBYyxDQUFDO0FBS3RCLE1BQU0sV0FBVyx3QkFBd0I7SUFDdkMsSUFBSSxDQUFDLENBQUMsU0FBUyxxQkFBcUIsRUFDbEMsV0FBVyxFQUFFLENBQUMsRUFDZCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsMkJBQTJCLEdBQ3ZELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLFNBQVMsSUFBSSxHQUFHLENBQUM7Q0FDbEI7QUFFRDs7R0FFRztBQUNILHFCQUFhLGdCQUFpQixZQUFXLHdCQUF3QjtJQVU3RCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU87SUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjO0lBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztJQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFFaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQWY1QixPQUFPLENBQUMsSUFBSSxDQUFRO0lBR3BCLE9BQU8sQ0FBQyxNQUFNLENBQXlDO0lBRXZELE9BQU8sQ0FBQyxRQUFRLENBQStFO0lBRS9GLCtDQUErQztJQUMvQyxZQUNtQixPQUFPLEVBQUUsTUFBTSxFQUNmLGNBQWMsRUFBRSxzQkFBc0IsRUFDdEMsT0FBTyx5QkFBa0MsRUFDekMsZUFBZSxFQUFFLHlCQUF5QixFQUMzRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQ1IsR0FBRyxHQUFFLE1BQXVELEVBQzVELFNBQVMsR0FBRSxPQUFlLEVBeUM1QztJQUVNLFVBQVUsV0FFaEI7SUFFTSxLQUFLLHFCQVVYO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksU0FBUyxJQUFJLEdBQUcsQ0FpQnRCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNVLElBQUksQ0FBQyxDQUFDLFNBQVMscUJBQXFCLEVBQy9DLFdBQVcsRUFBRSxDQUFDLEVBQ2QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLDJCQUEyQixFQUV4RCxlQUFlLDZEQUF1RSxFQUN0RixZQUFZLHNCQUFvQixHQUMvQixPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0F3RGhDO0lBRUQ7O09BRUc7SUFDVSxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQWVsQztZQUVhLFlBQVk7Q0E4RDNCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"native_world_state_instance.d.ts","sourceRoot":"","sources":["../../src/native/native_world_state_instance.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EAIxB,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,CAAC,SAAS,qBAAqB,EAClC,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,2BAA2B,GACvD,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAElC,SAAS,IAAI,GAAG,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,wBAAwB;IAU7D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAdtB,OAAO,CAAC,IAAI,CAAQ;IAGpB,OAAO,CAAC,MAAM,CAAyC;IAEvD,OAAO,CAAC,QAAQ,CAA+E;IAE/F,+CAA+C;IAC/C,YACmB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,sBAAsB,EACtC,mBAAmB,kCAA2B,EAC9C,eAAe,EAAE,yBAAyB,EAC3D,QAAQ,CAAC,EAAE,cAAc,EACR,GAAG,GAAE,MAAuD,EAoC9E;IAEM,UAAU,WAEhB;IAEM,KAAK,qBASX;IAED;;;;;;OAMG;IACI,SAAS,IAAI,GAAG,CAiBtB;IAED;;;;;;;OAOG;IACU,IAAI,CAAC,CAAC,SAAS,qBAAqB,EAC/C,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,2BAA2B,EAExD,eAAe,6DAAuE,EACtF,YAAY,sBAAoB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAqDhC;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAelC;YAEa,YAAY;CA8D3B"}
1
+ {"version":3,"file":"native_world_state_instance.d.ts","sourceRoot":"","sources":["../../src/native/native_world_state_instance.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKjF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EAIxB,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,CAAC,SAAS,qBAAqB,EAClC,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,2BAA2B,GACvD,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAElC,SAAS,IAAI,GAAG,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,wBAAwB;IAU7D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAf5B,OAAO,CAAC,IAAI,CAAQ;IAGpB,OAAO,CAAC,MAAM,CAAyC;IAEvD,OAAO,CAAC,QAAQ,CAA+E;IAE/F,+CAA+C;IAC/C,YACmB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,sBAAsB,EACtC,OAAO,yBAAkC,EACzC,eAAe,EAAE,yBAAyB,EAC3D,QAAQ,CAAC,EAAE,cAAc,EACR,GAAG,GAAE,MAAuD,EAC5D,SAAS,GAAE,OAAe,EAyC5C;IAEM,UAAU,WAEhB;IAEM,KAAK,qBAUX;IAED;;;;;;OAMG;IACI,SAAS,IAAI,GAAG,CAiBtB;IAED;;;;;;;OAOG;IACU,IAAI,CAAC,CAAC,SAAS,qBAAqB,EAC/C,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,2BAA2B,EAExD,eAAe,6DAAuE,EACtF,YAAY,sBAAoB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAwDhC;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAelC;YAEa,YAAY;CA8D3B"}
@@ -1,7 +1,8 @@
1
- import { ARCHIVE_HEIGHT, GeneratorIndex, L1_TO_L2_MSG_TREE_HEIGHT, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
1
+ import { ARCHIVE_HEIGHT, DomainSeparator, L1_TO_L2_MSG_TREE_HEIGHT, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { NativeWorldState as BaseNativeWorldState, MsgpackChannel } from '@aztec/native';
4
4
  import { MerkleTreeId } from '@aztec/stdlib/trees';
5
+ import { EMPTY_GENESIS_DATA } from '@aztec/stdlib/world-state';
5
6
  import assert from 'assert';
6
7
  import { cpus } from 'os';
7
8
  import { WorldStateMessageType, isWithCanonical, isWithForkId, isWithRevision } from './message.js';
@@ -12,24 +13,26 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
12
13
  */ export class NativeWorldState {
13
14
  dataDir;
14
15
  wsTreeMapSizes;
15
- prefilledPublicData;
16
+ genesis;
16
17
  instrumentation;
17
18
  log;
19
+ ephemeral;
18
20
  open;
19
21
  // We maintain a map of queue to fork
20
22
  queues;
21
23
  instance;
22
- /** Creates a new native WorldState instance */ constructor(dataDir, wsTreeMapSizes, prefilledPublicData = [], instrumentation, bindings, log = createLogger('world-state:database', bindings)){
24
+ /** Creates a new native WorldState instance */ constructor(dataDir, wsTreeMapSizes, genesis = EMPTY_GENESIS_DATA, instrumentation, bindings, log = createLogger('world-state:database', bindings), ephemeral = false){
23
25
  this.dataDir = dataDir;
24
26
  this.wsTreeMapSizes = wsTreeMapSizes;
25
- this.prefilledPublicData = prefilledPublicData;
27
+ this.genesis = genesis;
26
28
  this.instrumentation = instrumentation;
27
29
  this.log = log;
30
+ this.ephemeral = ephemeral;
28
31
  this.open = true;
29
32
  this.queues = new Map();
30
33
  const threads = Math.min(cpus().length, MAX_WORLD_STATE_THREADS);
31
- log.info(`Creating world state data store at directory ${dataDir} with map sizes ${JSON.stringify(wsTreeMapSizes)} and ${threads} threads.`);
32
- const prefilledPublicDataBufferArray = prefilledPublicData.map((d)=>[
34
+ log.info(`Creating world state data store at directory ${dataDir} with map sizes ${JSON.stringify(wsTreeMapSizes)} and ${threads} threads (ephemeral=${ephemeral}).`);
35
+ const prefilledPublicDataBufferArray = genesis.prefilledPublicData.map((d)=>[
33
36
  d.slot.toBuffer(),
34
37
  d.value.toBuffer()
35
38
  ]);
@@ -42,13 +45,13 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
42
45
  }, {
43
46
  [MerkleTreeId.NULLIFIER_TREE]: 2 * MAX_NULLIFIERS_PER_TX,
44
47
  [MerkleTreeId.PUBLIC_DATA_TREE]: 2 * MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
45
- }, prefilledPublicDataBufferArray, GeneratorIndex.BLOCK_HEADER_HASH, {
48
+ }, prefilledPublicDataBufferArray, DomainSeparator.BLOCK_HEADER_HASH, Number(genesis.genesisTimestamp), {
46
49
  [MerkleTreeId.NULLIFIER_TREE]: wsTreeMapSizes.nullifierTreeMapSizeKb,
47
50
  [MerkleTreeId.NOTE_HASH_TREE]: wsTreeMapSizes.noteHashTreeMapSizeKb,
48
51
  [MerkleTreeId.PUBLIC_DATA_TREE]: wsTreeMapSizes.publicDataTreeMapSizeKb,
49
52
  [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: wsTreeMapSizes.messageTreeMapSizeKb,
50
53
  [MerkleTreeId.ARCHIVE]: wsTreeMapSizes.archiveTreeMapSizeKb
51
- }, threads);
54
+ }, threads, ephemeral);
52
55
  this.instance = new MsgpackChannel(ws);
53
56
  // Manually create the queue for the canonical fork
54
57
  this.queues.set(0, new WorldStateOpsQueue());
@@ -57,7 +60,7 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
57
60
  return this.dataDir;
58
61
  }
59
62
  clone() {
60
- return new NativeWorldState(this.dataDir, this.wsTreeMapSizes, this.prefilledPublicData, this.instrumentation, this.log.getBindings(), this.log);
63
+ return new NativeWorldState(this.dataDir, this.wsTreeMapSizes, this.genesis, this.instrumentation, this.log.getBindings(), this.log, this.ephemeral);
61
64
  }
62
65
  /**
63
66
  * Gets the native WorldState handle from the underlying native instance.
@@ -114,25 +117,29 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
114
117
  requestQueue = new WorldStateOpsQueue();
115
118
  this.queues.set(forkId, requestQueue);
116
119
  }
117
- // Enqueue the request and wait for the response
118
- const response = await requestQueue.execute(async ()=>{
119
- assert.notEqual(messageType, WorldStateMessageType.CLOSE, 'Use close() to close the native instance');
120
- assert.equal(this.open, true, 'Native instance is closed');
121
- let response;
122
- try {
123
- response = await this._sendMessage(messageType, body);
124
- } catch (error) {
125
- errorHandler(error.message);
126
- throw error;
120
+ // Enqueue the request and wait for the response. The per-fork queue is cleaned up in `finally` even on
121
+ // error, so the JS-side queues map cannot outlive the native fork (e.g. when the native fork was already
122
+ // destroyed by an unwind/historical-prune and DELETE_FORK rejects with "Fork not found").
123
+ try {
124
+ const response = await requestQueue.execute(async ()=>{
125
+ assert.notEqual(messageType, WorldStateMessageType.CLOSE, 'Use close() to close the native instance');
126
+ assert.equal(this.open, true, 'Native instance is closed');
127
+ let response;
128
+ try {
129
+ response = await this._sendMessage(messageType, body);
130
+ } catch (error) {
131
+ errorHandler(error.message);
132
+ throw error;
133
+ }
134
+ return responseHandler(response);
135
+ }, messageType, committedOnly);
136
+ return response;
137
+ } finally{
138
+ if (messageType === WorldStateMessageType.DELETE_FORK) {
139
+ await requestQueue.stop();
140
+ this.queues.delete(forkId);
127
141
  }
128
- return responseHandler(response);
129
- }, messageType, committedOnly);
130
- // If the request was to delete the fork then we clean it up here
131
- if (messageType === WorldStateMessageType.DELETE_FORK) {
132
- await requestQueue.stop();
133
- this.queues.delete(forkId);
134
142
  }
135
- return response;
136
143
  }
137
144
  /**
138
145
  * Stops the native instance.
@@ -67,7 +67,7 @@ export class WorldStateOpsQueue {
67
67
  // then send the request immediately
68
68
  // If a mutating request is in flight then we must wait
69
69
  // If a mutating request is not in flight but something is queued then it must be a mutating request
70
- if (this.inFlightMutatingCount == 0 && this.requests.length == 0) {
70
+ if (this.inFlightMutatingCount === 0 && this.requests.length === 0) {
71
71
  this.sendEnqueuedRequest(op);
72
72
  } else {
73
73
  this.requests.push(op);
@@ -88,7 +88,7 @@ export class WorldStateOpsQueue {
88
88
  }
89
89
  --this.inFlightCount;
90
90
  // If there are still requests in flight then do nothing further
91
- if (this.inFlightCount != 0) {
91
+ if (this.inFlightCount !== 0) {
92
92
  return;
93
93
  }
94
94
  // No requests in flight, send next queued requests
@@ -99,7 +99,7 @@ export class WorldStateOpsQueue {
99
99
  while(this.requests.length > 0){
100
100
  const next = this.requests[0];
101
101
  if (next.mutating) {
102
- if (this.inFlightCount == 0) {
102
+ if (this.inFlightCount === 0) {
103
103
  // send the mutating request
104
104
  this.requests.shift();
105
105
  this.sendEnqueuedRequest(next);
@@ -112,7 +112,7 @@ export class WorldStateOpsQueue {
112
112
  }
113
113
  }
114
114
  // If the queue is empty, there is nothing in flight and we have been told to stop, then resolve the stop promise
115
- if (this.inFlightCount == 0 && this.stopResolve !== undefined) {
115
+ if (this.inFlightCount === 0 && this.stopResolve !== undefined) {
116
116
  this.stopResolve();
117
117
  }
118
118
  }
@@ -138,7 +138,7 @@ export class WorldStateOpsQueue {
138
138
  this.stopResolve = resolve;
139
139
  });
140
140
  // If no outstanding requests then immediately resolve the promise
141
- if (this.requests.length == 0 && this.inFlightCount == 0 && this.stopResolve !== undefined) {
141
+ if (this.requests.length === 0 && this.inFlightCount === 0 && this.stopResolve !== undefined) {
142
142
  this.stopResolve();
143
143
  }
144
144
  return this.stopPromise;
@@ -19,8 +19,8 @@ export interface WorldStateConfig {
19
19
  publicDataTreeMapSizeKb?: number;
20
20
  /** Optional directory for the world state DB, if unspecified will default to the general data directory */
21
21
  worldStateDataDirectory?: string;
22
- /** The number of historic blocks to maintain */
23
- worldStateBlockHistory: number;
22
+ /** The number of historic checkpoints worth of blocks to maintain */
23
+ worldStateCheckpointHistory: number;
24
24
  }
25
25
  export declare const worldStateConfigMappings: ConfigMappingsType<WorldStateConfig>;
26
26
  /**
@@ -28,4 +28,4 @@ export declare const worldStateConfigMappings: ConfigMappingsType<WorldStateConf
28
28
  * @returns The configuration values for the world state synchronizer.
29
29
  */
30
30
  export declare function getWorldStateConfigFromEnv(): WorldStateConfig;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2hyb25pemVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBNkMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RyxxREFBcUQ7QUFDckQsTUFBTSxXQUFXLGdCQUFnQjtJQUMvQix1Q0FBdUM7SUFDdkMsOEJBQThCLEVBQUUsTUFBTSxDQUFDO0lBRXZDLDJGQUEyRjtJQUMzRiwrQkFBK0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUV6QyxtSkFBbUo7SUFDbkoscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0IsMkpBQTJKO0lBQzNKLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTlCLDZKQUE2SjtJQUM3SixzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVoQyw2SkFBNko7SUFDN0oscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0IsMkpBQTJKO0lBQzNKLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTlCLCtKQUErSjtJQUMvSix1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVqQywyR0FBMkc7SUFDM0csdUJBQXVCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFakMsZ0RBQWdEO0lBQ2hELHNCQUFzQixFQUFFLE1BQU0sQ0FBQztDQUNoQztBQUVELGVBQU8sTUFBTSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0F3RHpFLENBQUM7QUFFRjs7O0dBR0c7QUFDSCx3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEIn0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2hyb25pemVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFJeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxxREFBcUQ7QUFDckQsTUFBTSxXQUFXLGdCQUFnQjtJQUMvQix1Q0FBdUM7SUFDdkMsOEJBQThCLEVBQUUsTUFBTSxDQUFDO0lBRXZDLDJGQUEyRjtJQUMzRiwrQkFBK0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUV6QyxtSkFBbUo7SUFDbkoscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0IsMkpBQTJKO0lBQzNKLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTlCLDZKQUE2SjtJQUM3SixzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVoQyw2SkFBNko7SUFDN0oscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0IsMkpBQTJKO0lBQzNKLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTlCLCtKQUErSjtJQUMvSix1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVqQywyR0FBMkc7SUFDM0csdUJBQXVCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFakMscUVBQXFFO0lBQ3JFLDJCQUEyQixFQUFFLE1BQU0sQ0FBQztDQUNyQztBQUVELGVBQU8sTUFBTSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0F5RHpFLENBQUM7QUFFRjs7O0dBR0c7QUFDSCx3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/synchronizer/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IAEvC,2FAA2F;IAC3F,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC,mJAAmJ;IACnJ,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,2JAA2J;IAC3J,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,6JAA6J;IAC7J,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,6JAA6J;IAC7J,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,2JAA2J;IAC3J,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,+JAA+J;IAC/J,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,2GAA2G;IAC3G,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAwDzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/synchronizer/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IAEvC,2FAA2F;IAC3F,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC,mJAAmJ;IACnJ,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,2JAA2J;IAC3J,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,6JAA6J;IAC7J,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,6JAA6J;IAC7J,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,2JAA2J;IAC3J,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,+JAA+J;IAC/J,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,2GAA2G;IAC3G,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,qEAAqE;IACrE,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAyDzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D"}
@@ -1,53 +1,55 @@
1
- import { getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
1
+ import { getConfigFromMappings, numberConfigHelper, optionalNumberConfigHelper } from '@aztec/foundation/config';
2
2
  export const worldStateConfigMappings = {
3
3
  worldStateBlockCheckIntervalMS: {
4
4
  env: 'WS_BLOCK_CHECK_INTERVAL_MS',
5
- parseEnv: (val)=>+val,
6
- defaultValue: 100,
5
+ ...numberConfigHelper(100),
7
6
  description: 'The frequency in which to check.'
8
7
  },
9
8
  worldStateBlockRequestBatchSize: {
10
9
  env: 'WS_BLOCK_REQUEST_BATCH_SIZE',
11
- parseEnv: (val)=>val ? +val : undefined,
10
+ ...optionalNumberConfigHelper(),
12
11
  description: 'Size of the batch for each get-blocks request from the synchronizer to the archiver.'
13
12
  },
14
13
  worldStateDbMapSizeKb: {
15
14
  env: 'WS_DB_MAP_SIZE_KB',
16
- parseEnv: (val)=>val ? +val : undefined,
15
+ ...optionalNumberConfigHelper(),
17
16
  description: 'The maximum possible size of the world state DB in KB. Overwrites the general dataStoreMapSizeKb.'
18
17
  },
19
18
  archiveTreeMapSizeKb: {
20
19
  env: 'ARCHIVE_TREE_MAP_SIZE_KB',
21
- parseEnv: (val)=>val ? +val : undefined,
20
+ ...optionalNumberConfigHelper(),
22
21
  description: 'The maximum possible size of the world state archive tree in KB. Overwrites the general worldStateDbMapSizeKb.'
23
22
  },
24
23
  nullifierTreeMapSizeKb: {
25
24
  env: 'NULLIFIER_TREE_MAP_SIZE_KB',
26
- parseEnv: (val)=>val ? +val : undefined,
25
+ ...optionalNumberConfigHelper(),
27
26
  description: 'The maximum possible size of the world state nullifier tree in KB. Overwrites the general worldStateDbMapSizeKb.'
28
27
  },
29
28
  noteHashTreeMapSizeKb: {
30
29
  env: 'NOTE_HASH_TREE_MAP_SIZE_KB',
31
- parseEnv: (val)=>val ? +val : undefined,
30
+ ...optionalNumberConfigHelper(),
32
31
  description: 'The maximum possible size of the world state note hash tree in KB. Overwrites the general worldStateDbMapSizeKb.'
33
32
  },
34
33
  messageTreeMapSizeKb: {
35
34
  env: 'MESSAGE_TREE_MAP_SIZE_KB',
36
- parseEnv: (val)=>val ? +val : undefined,
35
+ ...optionalNumberConfigHelper(),
37
36
  description: 'The maximum possible size of the world state message tree in KB. Overwrites the general worldStateDbMapSizeKb.'
38
37
  },
39
38
  publicDataTreeMapSizeKb: {
40
39
  env: 'PUBLIC_DATA_TREE_MAP_SIZE_KB',
41
- parseEnv: (val)=>val ? +val : undefined,
40
+ ...optionalNumberConfigHelper(),
42
41
  description: 'The maximum possible size of the world state public data tree in KB. Overwrites the general worldStateDbMapSizeKb.'
43
42
  },
44
43
  worldStateDataDirectory: {
45
44
  env: 'WS_DATA_DIRECTORY',
46
45
  description: 'Optional directory for the world state database'
47
46
  },
48
- worldStateBlockHistory: {
49
- env: 'WS_NUM_HISTORIC_BLOCKS',
50
- description: 'The number of historic blocks to maintain. Values less than 1 mean all history is maintained',
47
+ worldStateCheckpointHistory: {
48
+ env: 'WS_NUM_HISTORIC_CHECKPOINTS',
49
+ description: 'The number of historic checkpoints worth of blocks to maintain. Values less than 1 mean all history is maintained',
50
+ fallback: [
51
+ 'WS_NUM_HISTORIC_BLOCKS'
52
+ ],
51
53
  ...numberConfigHelper(64)
52
54
  }
53
55
  };
@@ -1,8 +1,8 @@
1
1
  import type { LoggerBindings } from '@aztec/foundation/log';
2
- import type { DataStoreConfig } from '@aztec/kv-store/config';
3
2
  import type { L2BlockSource } from '@aztec/stdlib/block';
3
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
4
4
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
5
- import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
5
+ import { type GenesisData } from '@aztec/stdlib/world-state';
6
6
  import { type TelemetryClient } from '@aztec/telemetry-client';
7
7
  import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
8
8
  import { NativeWorldStateService } from '../native/native_world_state.js';
@@ -15,6 +15,6 @@ export interface WorldStateTreeMapSizes {
15
15
  messageTreeMapSizeKb: number;
16
16
  publicDataTreeMapSizeKb: number;
17
17
  }
18
- export declare function createWorldStateSynchronizer(config: WorldStateConfig & DataStoreConfig, l2BlockSource: L2BlockSource & L1ToL2MessageSource, prefilledPublicData?: PublicDataTreeLeaf[], client?: TelemetryClient, bindings?: LoggerBindings): Promise<ServerWorldStateSynchronizer>;
19
- export declare function createWorldState(config: Pick<WorldStateConfig, 'worldStateDataDirectory' | 'worldStateDbMapSizeKb' | 'archiveTreeMapSizeKb' | 'nullifierTreeMapSizeKb' | 'noteHashTreeMapSizeKb' | 'messageTreeMapSizeKb' | 'publicDataTreeMapSizeKb'> & Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb' | 'l1Contracts'>, prefilledPublicData?: PublicDataTreeLeaf[], instrumentation?: WorldStateInstrumentation, bindings?: LoggerBindings): Promise<NativeWorldStateService>;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEYsTUFBTSxXQUFXLHNCQUFzQjtJQUNyQyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0Isc0JBQXNCLEVBQUUsTUFBTSxDQUFDO0lBQy9CLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUM5QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsdUJBQXVCLEVBQUUsTUFBTSxDQUFDO0NBQ2pDO0FBRUQsd0JBQXNCLDRCQUE0QixDQUNoRCxNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsZUFBZSxFQUMxQyxhQUFhLEVBQUUsYUFBYSxHQUFHLG1CQUFtQixFQUNsRCxtQkFBbUIsR0FBRSxrQkFBa0IsRUFBTyxFQUM5QyxNQUFNLEdBQUUsZUFBc0MsRUFDOUMsUUFBUSxDQUFDLEVBQUUsY0FBYyx5Q0FLMUI7QUFFRCx3QkFBc0IsZ0JBQWdCLENBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQ1YsZ0JBQWdCLEVBQ2QseUJBQXlCLEdBQ3pCLHVCQUF1QixHQUN2QixzQkFBc0IsR0FDdEIsd0JBQXdCLEdBQ3hCLHVCQUF1QixHQUN2QixzQkFBc0IsR0FDdEIseUJBQXlCLENBQzVCLEdBQ0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxlQUFlLEdBQUcsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLEVBQy9FLG1CQUFtQixHQUFFLGtCQUFrQixFQUFPLEVBQzlDLGVBQWUsR0FBRSx5QkFBK0UsRUFDaEcsUUFBUSxDQUFDLEVBQUUsY0FBYyxvQ0FtQzFCIn0=
18
+ export declare function createWorldStateSynchronizer(config: WorldStateConfig & DataStoreConfig, l2BlockSource: L2BlockSource & L1ToL2MessageSource, genesisOrNativeWorldState: GenesisData | NativeWorldStateService, client?: TelemetryClient, bindings?: LoggerBindings): Promise<ServerWorldStateSynchronizer>;
19
+ export declare function createWorldState(config: Pick<WorldStateConfig, 'worldStateDataDirectory' | 'worldStateDbMapSizeKb' | 'archiveTreeMapSizeKb' | 'nullifierTreeMapSizeKb' | 'noteHashTreeMapSizeKb' | 'messageTreeMapSizeKb' | 'publicDataTreeMapSizeKb'> & Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb' | 'rollupAddress'>, genesis?: GenesisData, instrumentation?: WorldStateInstrumentation, bindings?: LoggerBindings): Promise<NativeWorldStateService>;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFzQixLQUFLLFdBQVcsRUFBaUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEYsTUFBTSxXQUFXLHNCQUFzQjtJQUNyQyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0Isc0JBQXNCLEVBQUUsTUFBTSxDQUFDO0lBQy9CLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUM5QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsdUJBQXVCLEVBQUUsTUFBTSxDQUFDO0NBQ2pDO0FBRUQsd0JBQXNCLDRCQUE0QixDQUNoRCxNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsZUFBZSxFQUMxQyxhQUFhLEVBQUUsYUFBYSxHQUFHLG1CQUFtQixFQUNsRCx5QkFBeUIsRUFBRSxXQUFXLEdBQUcsdUJBQXVCLEVBQ2hFLE1BQU0sR0FBRSxlQUFzQyxFQUM5QyxRQUFRLENBQUMsRUFBRSxjQUFjLHlDQU8xQjtBQUVELHdCQUFzQixnQkFBZ0IsQ0FDcEMsTUFBTSxFQUFFLElBQUksQ0FDVixnQkFBZ0IsRUFDZCx5QkFBeUIsR0FDekIsdUJBQXVCLEdBQ3ZCLHNCQUFzQixHQUN0Qix3QkFBd0IsR0FDeEIsdUJBQXVCLEdBQ3ZCLHNCQUFzQixHQUN0Qix5QkFBeUIsQ0FDNUIsR0FDQyxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsRUFDakYsT0FBTyxHQUFFLFdBQWdDLEVBQ3pDLGVBQWUsR0FBRSx5QkFBK0UsRUFDaEcsUUFBUSxDQUFDLEVBQUUsY0FBYyxvQ0FtQzFCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,aAAa,EAAE,aAAa,GAAG,mBAAmB,EAClD,mBAAmB,GAAE,kBAAkB,EAAO,EAC9C,MAAM,GAAE,eAAsC,EAC9C,QAAQ,CAAC,EAAE,cAAc,yCAK1B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,IAAI,CACV,gBAAgB,EACd,yBAAyB,GACzB,uBAAuB,GACvB,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,yBAAyB,CAC5B,GACC,IAAI,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB,GAAG,aAAa,CAAC,EAC/E,mBAAmB,GAAE,kBAAkB,EAAO,EAC9C,eAAe,GAAE,yBAA+E,EAChG,QAAQ,CAAC,EAAE,cAAc,oCAmC1B"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAsB,KAAK,WAAW,EAAiB,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,aAAa,EAAE,aAAa,GAAG,mBAAmB,EAClD,yBAAyB,EAAE,WAAW,GAAG,uBAAuB,EAChE,MAAM,GAAE,eAAsC,EAC9C,QAAQ,CAAC,EAAE,cAAc,yCAO1B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,IAAI,CACV,gBAAgB,EACd,yBAAyB,GACzB,uBAAuB,GACvB,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,yBAAyB,CAC5B,GACC,IAAI,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB,GAAG,eAAe,CAAC,EACjF,OAAO,GAAE,WAAgC,EACzC,eAAe,GAAE,yBAA+E,EAChG,QAAQ,CAAC,EAAE,cAAc,oCAmC1B"}
@@ -1,13 +1,14 @@
1
+ import { EMPTY_GENESIS_DATA, isGenesisData } from '@aztec/stdlib/world-state';
1
2
  import { getTelemetryClient } from '@aztec/telemetry-client';
2
3
  import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
3
4
  import { NativeWorldStateService } from '../native/native_world_state.js';
4
5
  import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js';
5
- export async function createWorldStateSynchronizer(config, l2BlockSource, prefilledPublicData = [], client = getTelemetryClient(), bindings) {
6
+ export async function createWorldStateSynchronizer(config, l2BlockSource, genesisOrNativeWorldState, client = getTelemetryClient(), bindings) {
6
7
  const instrumentation = new WorldStateInstrumentation(client);
7
- const merkleTrees = await createWorldState(config, prefilledPublicData, instrumentation, bindings);
8
+ const merkleTrees = isGenesisData(genesisOrNativeWorldState) ? await createWorldState(config, genesisOrNativeWorldState, instrumentation, bindings) : genesisOrNativeWorldState;
8
9
  return new ServerWorldStateSynchronizer(merkleTrees, l2BlockSource, config, instrumentation);
9
10
  }
10
- export async function createWorldState(config, prefilledPublicData = [], instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings) {
11
+ export async function createWorldState(config, genesis = EMPTY_GENESIS_DATA, instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings) {
11
12
  const dataDirectory = config.worldStateDataDirectory ?? config.dataDirectory;
12
13
  const dataStoreMapSizeKb = config.worldStateDbMapSizeKb ?? config.dataStoreMapSizeKb;
13
14
  const wsTreeMapSizes = {
@@ -17,13 +18,13 @@ export async function createWorldState(config, prefilledPublicData = [], instrum
17
18
  messageTreeMapSizeKb: config.messageTreeMapSizeKb ?? dataStoreMapSizeKb,
18
19
  publicDataTreeMapSizeKb: config.publicDataTreeMapSizeKb ?? dataStoreMapSizeKb
19
20
  };
20
- if (!config.l1Contracts?.rollupAddress) {
21
+ if (!config.rollupAddress) {
21
22
  throw new Error('Rollup address is required to create a world state synchronizer.');
22
23
  }
23
24
  // If a data directory is provided in config, then create a persistent store.
24
- const merkleTrees = dataDirectory ? await NativeWorldStateService.new(config.l1Contracts.rollupAddress, dataDirectory, wsTreeMapSizes, prefilledPublicData, instrumentation, bindings) : await NativeWorldStateService.tmp(config.l1Contracts.rollupAddress, ![
25
+ const merkleTrees = dataDirectory ? await NativeWorldStateService.new(config.rollupAddress, dataDirectory, wsTreeMapSizes, genesis, instrumentation, bindings) : await NativeWorldStateService.tmp(config.rollupAddress, ![
25
26
  'true',
26
27
  '1'
27
- ].includes(process.env.DEBUG_WORLD_STATE), prefilledPublicData, instrumentation, bindings);
28
+ ].includes(process.env.DEBUG_WORLD_STATE), genesis, instrumentation, bindings);
28
29
  return merkleTrees;
29
30
  }
@@ -1,6 +1,6 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import { type Logger } from '@aztec/foundation/log';
3
- import { type L2BlockSource, L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler, type L2BlockStreamLocalDataProvider, type L2Tips } from '@aztec/stdlib/block';
3
+ import { type BlockHash, type L2BlockSource, L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler, type L2BlockStreamLocalDataProvider, type L2Tips } from '@aztec/stdlib/block';
4
4
  import { type WorldStateSynchronizer, type WorldStateSynchronizerStatus } from '@aztec/stdlib/interfaces/server';
5
5
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
6
6
  import type { SnapshotDataKeys } from '@aztec/stdlib/snapshots';
@@ -45,10 +45,10 @@ export declare class ServerWorldStateSynchronizer implements WorldStateSynchroni
45
45
  /**
46
46
  * Forces an immediate sync.
47
47
  * @param targetBlockNumber - The target block number that we must sync to. Will download unproven blocks if needed to reach it.
48
- * @param skipThrowIfTargetNotReached - Whether to skip throwing if the target block number is not reached.
48
+ * @param blockHash - If provided, verifies the block at targetBlockNumber matches this hash. On mismatch, triggers a resync (reorg detection).
49
49
  * @returns A promise that resolves with the block number the world state was synced to
50
50
  */
51
- syncImmediate(targetBlockNumber?: BlockNumber, skipThrowIfTargetNotReached?: boolean): Promise<BlockNumber>;
51
+ syncImmediate(targetBlockNumber?: BlockNumber, blockHash?: BlockHash): Promise<BlockNumber>;
52
52
  /** Returns the L2 block hash for a given number. Used by the L2BlockStream for detecting reorgs. */
53
53
  getL2BlockHash(number: BlockNumber): Promise<string | undefined>;
54
54
  /** Returns the latest L2 block number for each tip of the chain (latest, proven, finalized). */
@@ -66,4 +66,4 @@ export declare class ServerWorldStateSynchronizer implements WorldStateSynchroni
66
66
  */
67
67
  private setCurrentState;
68
68
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyX3dvcmxkX3N0YXRlX3N5bmNocm9uaXplci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zZXJ2ZXJfd29ybGRfc3RhdGVfc3luY2hyb25pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUlMLEtBQUssYUFBYSxFQUNsQixhQUFhLEVBQ2IsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSyw4QkFBOEIsRUFDbkMsS0FBSyxNQUFNLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBR0wsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyw0QkFBNEIsRUFDbEMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFnQixLQUFLLHdCQUF3QixFQUFFLEtBQUsseUJBQXlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdsSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRixPQUFPLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25GLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3BELFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBRWpDOzs7O0dBSUc7QUFDSCxxQkFBYSw0QkFDWCxZQUFXLHNCQUFzQixFQUFFLDhCQUE4QixFQUFFLHlCQUF5QjtJQWdCMUYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYTtJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLGVBQWU7SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBbEJ0QixPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUEyQjtJQUUvRCxPQUFPLENBQUMsd0JBQXdCLENBQW9CO0lBQ3BELE9BQU8sQ0FBQyxhQUFhLENBQXFCO0lBQzFDLE9BQU8sQ0FBQyxZQUFZLENBQXVEO0lBRTNFLE9BQU8sQ0FBQyxXQUFXLENBQWdDO0lBQ25ELFNBQVMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUlqRCxPQUFPLENBQUMsaUJBQWlCLENBQTBCO0lBRW5ELFlBQ21CLFlBQVksRUFBRSx1QkFBdUIsRUFDckMsYUFBYSxFQUFFLGFBQWEsR0FBRyxtQkFBbUIsRUFDbEQsTUFBTSxFQUFFLGdCQUFnQixFQUNqQyxlQUFlLDRCQUFzRCxFQUM1RCxHQUFHLEdBQUUsTUFBb0MsRUFTM0Q7SUFFTSxZQUFZLElBQUksd0JBQXdCLENBRTlDO0lBRU0sV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsd0JBQXdCLENBRXJFO0lBRU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUFFLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBRTNHO0lBRU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBRWxIO0lBRU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUI7SUFFWSxLQUFLLG1GQTRCakI7SUFFRCxTQUFTLENBQUMsaUJBQWlCLElBQUksYUFBYSxDQU8zQztJQUVZLElBQUksa0JBT2hCO0lBRVksTUFBTSxJQUFJLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQWEzRDtJQUVZLG9CQUFvQix5QkFFaEM7SUFFWSxRQUFRLGtCQUlwQjtJQUVNLFVBQVUsU0FPaEI7SUFFRDs7Ozs7T0FLRztJQUNVLGFBQWEsQ0FDeEIsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQy9CLDJCQUEyQixDQUFDLEVBQUUsT0FBTyxHQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBNkN0QjtJQUVELG9HQUFvRztJQUN2RixjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUs1RTtJQUVELGdHQUFnRztJQUNuRixTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQW1DeEM7SUFFRCxvREFBb0Q7SUFDdkMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FlNUU7WUFPYSxjQUFjO1lBeUNkLGFBQWE7WUFrQmIsb0JBQW9CO0lBZWxDLE9BQU8sQ0FBQyxpQkFBaUI7WUFNWCxpQkFBaUI7SUFPL0I7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGVBQWU7Q0FJeEIifQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyX3dvcmxkX3N0YXRlX3N5bmNocm9uaXplci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zZXJ2ZXJfd29ybGRfc3RhdGVfc3luY2hyb25pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQW9CLE1BQU0saUNBQWlDLENBQUM7QUFFaEYsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFDTCxLQUFLLFNBQVMsRUFJZCxLQUFLLGFBQWEsRUFDbEIsYUFBYSxFQUNiLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUsseUJBQXlCLEVBQzlCLEtBQUssOEJBQThCLEVBQ25DLEtBQUssTUFBTSxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUdMLEtBQUssc0JBQXNCLEVBQzNCLEtBQUssNEJBQTRCLEVBQ2xDLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBZ0IsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbEgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEYsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdwRCxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUVqQzs7OztHQUlHO0FBQ0gscUJBQWEsNEJBQ1gsWUFBVyxzQkFBc0IsRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUI7SUFnQjFGLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWE7SUFDOUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3ZCLE9BQU8sQ0FBQyxlQUFlO0lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztJQWxCdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBMkI7SUFFL0QsT0FBTyxDQUFDLHdCQUF3QixDQUFvQjtJQUNwRCxPQUFPLENBQUMsYUFBYSxDQUFxQjtJQUMxQyxPQUFPLENBQUMsWUFBWSxDQUF1RDtJQUUzRSxPQUFPLENBQUMsV0FBVyxDQUFnQztJQUNuRCxTQUFTLENBQUMsV0FBVyxFQUFFLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFJakQsT0FBTyxDQUFDLGlCQUFpQixDQUEwQjtJQUVuRCxZQUNtQixZQUFZLEVBQUUsdUJBQXVCLEVBQ3JDLGFBQWEsRUFBRSxhQUFhLEdBQUcsbUJBQW1CLEVBQ2xELE1BQU0sRUFBRSxnQkFBZ0IsRUFDakMsZUFBZSw0QkFBc0QsRUFDNUQsR0FBRyxHQUFFLE1BQW9DLEVBUzNEO0lBRU0sWUFBWSxJQUFJLHdCQUF3QixDQUU5QztJQUVNLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLHdCQUF3QixDQUVyRTtJQUVNLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFBRSxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUUzRztJQUVNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUVsSDtJQUVNLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRTVCO0lBRVksS0FBSyxtRkE0QmpCO0lBRUQsU0FBUyxDQUFDLGlCQUFpQixJQUFJLGFBQWEsQ0FPM0M7SUFFWSxJQUFJLGtCQU9oQjtJQUVZLE1BQU0sSUFBSSxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FhM0Q7SUFFWSxvQkFBb0IseUJBRWhDO0lBRVksUUFBUSxrQkFJcEI7SUFFTSxVQUFVLFNBT2hCO0lBRUQ7Ozs7O09BS0c7SUFDVSxhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0EyRXZHO0lBRUQsb0dBQW9HO0lBQ3ZGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBSzVFO0lBRUQsZ0dBQWdHO0lBQ25GLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBd0N4QztJQUVELG9EQUFvRDtJQUN2QyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWU1RTtZQU9hLGNBQWM7WUF5Q2QsYUFBYTtZQWtCYixvQkFBb0I7SUF1RGxDLE9BQU8sQ0FBQyxpQkFBaUI7WUFNWCxpQkFBaUI7SUFTL0I7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGVBQWU7Q0FJeEIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"server_world_state_synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/server_world_state_synchronizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server_world_state_synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/server_world_state_synchronizer.ts"],"names":[],"mappings":"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"}