@aztec/world-state 0.86.0 → 0.87.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.
- package/dest/native/merkle_trees_facade.d.ts +0 -2
- package/dest/native/merkle_trees_facade.d.ts.map +1 -1
- package/dest/native/message.d.ts +1 -3
- package/dest/native/message.d.ts.map +1 -1
- package/dest/native/native_world_state.d.ts +4 -4
- package/dest/native/native_world_state.d.ts.map +1 -1
- package/dest/native/native_world_state.js +18 -4
- package/dest/native/native_world_state_instance.d.ts +9 -3
- package/dest/native/native_world_state_instance.d.ts.map +1 -1
- package/dest/native/native_world_state_instance.js +21 -3
- package/dest/synchronizer/config.d.ts +10 -0
- package/dest/synchronizer/config.d.ts.map +1 -1
- package/dest/synchronizer/config.js +25 -0
- package/dest/synchronizer/factory.d.ts +8 -1
- package/dest/synchronizer/factory.d.ts.map +1 -1
- package/dest/synchronizer/factory.js +9 -4
- package/dest/synchronizer/server_world_state_synchronizer.d.ts +1 -2
- package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.js +4 -1
- package/dest/world-state-db/merkle_tree_db.d.ts +2 -0
- package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
- package/package.json +13 -13
- package/src/native/native_world_state.ts +21 -5
- package/src/native/native_world_state_instance.ts +30 -7
- package/src/synchronizer/config.ts +45 -0
- package/src/synchronizer/factory.ts +31 -8
- package/src/synchronizer/server_world_state_synchronizer.ts +5 -1
- package/src/world-state-db/merkle_tree_db.ts +3 -0
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
2
|
import { type IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
|
|
5
3
|
import type { BatchInsertionResult, IndexedTreeId, MerkleTreeLeafType, MerkleTreeReadOperations, MerkleTreeWriteOperations, SequentialInsertionResult, TreeInfo } from '@aztec/stdlib/interfaces/server';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle_trees_facade.d.ts","sourceRoot":"","sources":["../../src/native/merkle_trees_facade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle_trees_facade.d.ts","sourceRoot":"","sources":["../../src/native/merkle_trees_facade.ts"],"names":[],"mappings":"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"}
|
package/dest/native/message.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
2
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
5
3
|
import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
@@ -334,7 +332,7 @@ export declare function worldStateRevision(includeUncommitted: boolean, forkId:
|
|
|
334
332
|
type TreeStateReference = readonly [Buffer, number | bigint];
|
|
335
333
|
type BlockStateReference = Map<Exclude<MerkleTreeId, MerkleTreeId.ARCHIVE>, TreeStateReference>;
|
|
336
334
|
export declare function treeStateReferenceToSnapshot([root, size]: TreeStateReference): AppendOnlyTreeSnapshot;
|
|
337
|
-
export declare function treeStateReference(snapshot: AppendOnlyTreeSnapshot): readonly [Buffer
|
|
335
|
+
export declare function treeStateReference(snapshot: AppendOnlyTreeSnapshot): readonly [Buffer<ArrayBufferLike>, bigint];
|
|
338
336
|
export declare function blockStateReference(state: StateReference): BlockStateReference;
|
|
339
337
|
export {};
|
|
340
338
|
//# sourceMappingURL=message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/native/message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/native/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
3
|
import { type Logger } from '@aztec/foundation/log';
|
|
@@ -9,22 +7,24 @@ import type { SnapshotDataKeys } from '@aztec/stdlib/snapshots';
|
|
|
9
7
|
import { type NullifierLeafPreimage, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
10
8
|
import { BlockHeader } from '@aztec/stdlib/tx';
|
|
11
9
|
import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
10
|
+
import type { WorldStateTreeMapSizes } from '../synchronizer/factory.js';
|
|
12
11
|
import type { MerkleTreeAdminDatabase as MerkleTreeDatabase } from '../world-state-db/merkle_tree_db.js';
|
|
13
12
|
import { type WorldStateStatusFull, type WorldStateStatusSummary } from './message.js';
|
|
14
13
|
import { NativeWorldState } from './native_world_state_instance.js';
|
|
15
14
|
export declare const WORLD_STATE_DB_VERSION = 1;
|
|
16
15
|
export declare const WORLD_STATE_DIR = "world_state";
|
|
17
16
|
export declare class NativeWorldStateService implements MerkleTreeDatabase {
|
|
18
|
-
protected
|
|
17
|
+
protected instance: NativeWorldState;
|
|
19
18
|
protected readonly worldStateInstrumentation: WorldStateInstrumentation;
|
|
20
19
|
protected readonly log: Logger;
|
|
21
20
|
private readonly cleanup;
|
|
22
21
|
protected initialHeader: BlockHeader | undefined;
|
|
23
22
|
private cachedStatusSummary;
|
|
24
23
|
protected constructor(instance: NativeWorldState, worldStateInstrumentation: WorldStateInstrumentation, log?: Logger, cleanup?: () => Promise<void>);
|
|
25
|
-
static new(rollupAddress: EthAddress, dataDir: string,
|
|
24
|
+
static new(rollupAddress: EthAddress, dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes, prefilledPublicData?: PublicDataTreeLeaf[], instrumentation?: WorldStateInstrumentation, log?: Logger, cleanup?: () => Promise<void>): Promise<NativeWorldStateService>;
|
|
26
25
|
static tmp(rollupAddress?: EthAddress, cleanupTmpDir?: boolean, prefilledPublicData?: PublicDataTreeLeaf[], instrumentation?: WorldStateInstrumentation): Promise<NativeWorldStateService>;
|
|
27
26
|
protected init(): Promise<void>;
|
|
27
|
+
clear(): Promise<void>;
|
|
28
28
|
getCommitted(): MerkleTreeReadOperations;
|
|
29
29
|
getSnapshot(blockNumber: number): MerkleTreeReadOperations;
|
|
30
30
|
fork(blockNumber?: number): Promise<MerkleTreeWriteOperations>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native_world_state.d.ts","sourceRoot":"","sources":["../../src/native/native_world_state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native_world_state.d.ts","sourceRoot":"","sources":["../../src/native/native_world_state.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NUMBER_OF_L1_L2_MESSAGES
|
|
|
2
2
|
import { fromEntries, padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
+
import { tryRmDir } from '@aztec/foundation/fs';
|
|
5
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
7
|
import { DatabaseVersionManager } from '@aztec/stdlib/database-version';
|
|
7
8
|
import { MerkleTreeId, NullifierLeaf, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
@@ -33,7 +34,7 @@ export class NativeWorldStateService {
|
|
|
33
34
|
this.log = log;
|
|
34
35
|
this.cleanup = cleanup;
|
|
35
36
|
}
|
|
36
|
-
static async new(rollupAddress, dataDir,
|
|
37
|
+
static async new(rollupAddress, dataDir, wsTreeMapSizes, prefilledPublicData = [], instrumentation = new WorldStateInstrumentation(getTelemetryClient()), log = createLogger('world-state:database'), cleanup = ()=>Promise.resolve()) {
|
|
37
38
|
const worldStateDirectory = join(dataDir, WORLD_STATE_DIR);
|
|
38
39
|
// Create a version manager to handle versioning
|
|
39
40
|
const versionManager = new DatabaseVersionManager({
|
|
@@ -41,7 +42,7 @@ export class NativeWorldStateService {
|
|
|
41
42
|
rollupAddress,
|
|
42
43
|
dataDirectory: worldStateDirectory,
|
|
43
44
|
onOpen: (dir)=>{
|
|
44
|
-
return Promise.resolve(new NativeWorldState(dir,
|
|
45
|
+
return Promise.resolve(new NativeWorldState(dir, wsTreeMapSizes, prefilledPublicData, instrumentation));
|
|
45
46
|
}
|
|
46
47
|
});
|
|
47
48
|
const [instance] = await versionManager.open();
|
|
@@ -58,7 +59,14 @@ export class NativeWorldStateService {
|
|
|
58
59
|
const log = createLogger('world-state:database');
|
|
59
60
|
const dataDir = await mkdtemp(join(tmpdir(), 'aztec-world-state-'));
|
|
60
61
|
const dbMapSizeKb = 10 * 1024 * 1024;
|
|
61
|
-
|
|
62
|
+
const worldStateTreeMapSizes = {
|
|
63
|
+
archiveTreeMapSizeKb: dbMapSizeKb,
|
|
64
|
+
nullifierTreeMapSizeKb: dbMapSizeKb,
|
|
65
|
+
noteHashTreeMapSizeKb: dbMapSizeKb,
|
|
66
|
+
messageTreeMapSizeKb: dbMapSizeKb,
|
|
67
|
+
publicDataTreeMapSizeKb: dbMapSizeKb
|
|
68
|
+
};
|
|
69
|
+
log.debug(`Created temporary world state database at: ${dataDir} with tree map size: ${dbMapSizeKb}`);
|
|
62
70
|
// pass a cleanup callback because process.on('beforeExit', cleanup) does not work under Jest
|
|
63
71
|
const cleanup = async ()=>{
|
|
64
72
|
if (cleanupTmpDir) {
|
|
@@ -72,7 +80,7 @@ export class NativeWorldStateService {
|
|
|
72
80
|
log.debug(`Leaving temporary world state database: ${dataDir}`);
|
|
73
81
|
}
|
|
74
82
|
};
|
|
75
|
-
return this.new(rollupAddress, dataDir,
|
|
83
|
+
return this.new(rollupAddress, dataDir, worldStateTreeMapSizes, prefilledPublicData, instrumentation, log, cleanup);
|
|
76
84
|
}
|
|
77
85
|
async init() {
|
|
78
86
|
const status = await this.getStatusSummary();
|
|
@@ -94,6 +102,12 @@ export class NativeWorldStateService {
|
|
|
94
102
|
const initialHeaderIndex = indices[0];
|
|
95
103
|
assert.strictEqual(initialHeaderIndex, 0n, 'Invalid initial archive state');
|
|
96
104
|
}
|
|
105
|
+
async clear() {
|
|
106
|
+
await this.instance.close();
|
|
107
|
+
this.cachedStatusSummary = undefined;
|
|
108
|
+
await tryRmDir(this.instance.getDataDir(), this.log);
|
|
109
|
+
this.instance = this.instance.clone();
|
|
110
|
+
}
|
|
97
111
|
getCommitted() {
|
|
98
112
|
return new MerkleTreesFacade(this.instance, this.initialHeader, worldStateRevision(false, 0, 0));
|
|
99
113
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Logger } from '@aztec/foundation/log';
|
|
2
2
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
3
3
|
import type { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
4
|
+
import type { WorldStateTreeMapSizes } from '../synchronizer/factory.js';
|
|
4
5
|
import { WorldStateMessageType, type WorldStateRequest, type WorldStateRequestCategories, type WorldStateResponse } from './message.js';
|
|
5
6
|
export interface NativeWorldStateInstance {
|
|
6
7
|
call<T extends WorldStateMessageType>(messageType: T, body: WorldStateRequest[T] & WorldStateRequestCategories): Promise<WorldStateResponse[T]>;
|
|
@@ -9,13 +10,18 @@ export interface NativeWorldStateInstance {
|
|
|
9
10
|
* Strongly-typed interface to access the WorldState class in the native world_state_napi module.
|
|
10
11
|
*/
|
|
11
12
|
export declare class NativeWorldState implements NativeWorldStateInstance {
|
|
12
|
-
private
|
|
13
|
-
private
|
|
13
|
+
private readonly dataDir;
|
|
14
|
+
private readonly wsTreeMapSizes;
|
|
15
|
+
private readonly prefilledPublicData;
|
|
16
|
+
private readonly instrumentation;
|
|
17
|
+
private readonly log;
|
|
14
18
|
private open;
|
|
15
19
|
private queues;
|
|
16
20
|
private instance;
|
|
17
21
|
/** Creates a new native WorldState instance */
|
|
18
|
-
constructor(dataDir: string,
|
|
22
|
+
constructor(dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes, prefilledPublicData: PublicDataTreeLeaf[] | undefined, instrumentation: WorldStateInstrumentation, log?: Logger);
|
|
23
|
+
getDataDir(): string;
|
|
24
|
+
clone(): NativeWorldState;
|
|
19
25
|
/**
|
|
20
26
|
* Sends a message to the native instance and returns the response.
|
|
21
27
|
* @param messageType - The type of message to send
|
|
@@ -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,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AACvF,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;CACnC;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,wBAAwB;
|
|
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,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,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;CACnC;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;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAbtB,OAAO,CAAC,IAAI,CAAQ;IAGpB,OAAO,CAAC,MAAM,CAAyC;IAEvD,OAAO,CAAC,QAAQ,CAA+E;IAE/F,+CAA+C;gBAE5B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,sBAAsB,EACtC,mBAAmB,EAAE,kBAAkB,EAAE,YAAK,EAC9C,eAAe,EAAE,yBAAyB,EAC1C,GAAG,GAAE,MAA6C;IAsC9D,UAAU;IAIV,KAAK;IAUZ;;;;;;;OAOG;IACU,IAAI,CAAC,CAAC,SAAS,qBAAqB,EAC/C,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,2BAA2B,EAExD,eAAe,IAAI,UAAU,kBAAkB,CAAC,CAAC,CAAC,KAAG,kBAAkB,CAAC,CAAC,CAAa,EACtF,YAAY,IAAI,GAAG,MAAM,SAAO,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAuDjC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiBrB,YAAY;CA8D3B"}
|
|
@@ -10,19 +10,25 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
|
|
|
10
10
|
/**
|
|
11
11
|
* Strongly-typed interface to access the WorldState class in the native world_state_napi module.
|
|
12
12
|
*/ export class NativeWorldState {
|
|
13
|
+
dataDir;
|
|
14
|
+
wsTreeMapSizes;
|
|
15
|
+
prefilledPublicData;
|
|
13
16
|
instrumentation;
|
|
14
17
|
log;
|
|
15
18
|
open;
|
|
16
19
|
// We maintain a map of queue to fork
|
|
17
20
|
queues;
|
|
18
21
|
instance;
|
|
19
|
-
/** Creates a new native WorldState instance */ constructor(dataDir,
|
|
22
|
+
/** Creates a new native WorldState instance */ constructor(dataDir, wsTreeMapSizes, prefilledPublicData = [], instrumentation, log = createLogger('world-state:database')){
|
|
23
|
+
this.dataDir = dataDir;
|
|
24
|
+
this.wsTreeMapSizes = wsTreeMapSizes;
|
|
25
|
+
this.prefilledPublicData = prefilledPublicData;
|
|
20
26
|
this.instrumentation = instrumentation;
|
|
21
27
|
this.log = log;
|
|
22
28
|
this.open = true;
|
|
23
29
|
this.queues = new Map();
|
|
24
30
|
const threads = Math.min(cpus().length, MAX_WORLD_STATE_THREADS);
|
|
25
|
-
log.info(`Creating world state data store at directory ${dataDir} with map
|
|
31
|
+
log.info(`Creating world state data store at directory ${dataDir} with map sizes ${JSON.stringify(wsTreeMapSizes)} and ${threads} threads.`);
|
|
26
32
|
const prefilledPublicDataBufferArray = prefilledPublicData.map((d)=>[
|
|
27
33
|
d.slot.toBuffer(),
|
|
28
34
|
d.value.toBuffer()
|
|
@@ -36,11 +42,23 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
|
|
|
36
42
|
}, {
|
|
37
43
|
[MerkleTreeId.NULLIFIER_TREE]: 2 * MAX_NULLIFIERS_PER_TX,
|
|
38
44
|
[MerkleTreeId.PUBLIC_DATA_TREE]: 2 * MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
|
|
39
|
-
}, prefilledPublicDataBufferArray, GeneratorIndex.BLOCK_HASH,
|
|
45
|
+
}, prefilledPublicDataBufferArray, GeneratorIndex.BLOCK_HASH, {
|
|
46
|
+
[MerkleTreeId.NULLIFIER_TREE]: wsTreeMapSizes.nullifierTreeMapSizeKb,
|
|
47
|
+
[MerkleTreeId.NOTE_HASH_TREE]: wsTreeMapSizes.noteHashTreeMapSizeKb,
|
|
48
|
+
[MerkleTreeId.PUBLIC_DATA_TREE]: wsTreeMapSizes.publicDataTreeMapSizeKb,
|
|
49
|
+
[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: wsTreeMapSizes.messageTreeMapSizeKb,
|
|
50
|
+
[MerkleTreeId.ARCHIVE]: wsTreeMapSizes.archiveTreeMapSizeKb
|
|
51
|
+
}, threads);
|
|
40
52
|
this.instance = new MsgpackChannel(ws);
|
|
41
53
|
// Manually create the queue for the canonical fork
|
|
42
54
|
this.queues.set(0, new WorldStateOpsQueue());
|
|
43
55
|
}
|
|
56
|
+
getDataDir() {
|
|
57
|
+
return this.dataDir;
|
|
58
|
+
}
|
|
59
|
+
clone() {
|
|
60
|
+
return new NativeWorldState(this.dataDir, this.wsTreeMapSizes, this.prefilledPublicData, this.instrumentation, this.log);
|
|
61
|
+
}
|
|
44
62
|
/**
|
|
45
63
|
* Sends a message to the native instance and returns the response.
|
|
46
64
|
* @param messageType - The type of message to send
|
|
@@ -9,6 +9,16 @@ export interface WorldStateConfig {
|
|
|
9
9
|
worldStateBlockRequestBatchSize?: number;
|
|
10
10
|
/** The map size to be provided to LMDB for each world state tree DB, optional, will inherit from the general dataStoreMapSizeKB if not specified*/
|
|
11
11
|
worldStateDbMapSizeKb?: number;
|
|
12
|
+
/** The map size to be provided to LMDB for each world state archive tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
13
|
+
archiveTreeMapSizeKb?: number;
|
|
14
|
+
/** The map size to be provided to LMDB for each world state nullifier tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
15
|
+
nullifierTreeMapSizeKb?: number;
|
|
16
|
+
/** The map size to be provided to LMDB for each world state note hash tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
17
|
+
noteHashTreeMapSizeKb?: number;
|
|
18
|
+
/** The map size to be provided to LMDB for each world state message tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
19
|
+
messageTreeMapSizeKb?: number;
|
|
20
|
+
/** The map size to be provided to LMDB for each world state public data tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
21
|
+
publicDataTreeMapSizeKb?: number;
|
|
12
22
|
/** Optional directory for the world state DB, if unspecified will default to the general data directory */
|
|
13
23
|
worldStateDataDirectory?: string;
|
|
14
24
|
/** The number of historic blocks to maintain */
|
|
@@ -1 +1 @@
|
|
|
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,+CAA+C;IAC/C,0BAA0B,EAAE,OAAO,CAAC;IAEpC,2FAA2F;IAC3F,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC,mJAAmJ;IACnJ,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,2GAA2G;IAC3G,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,
|
|
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,+CAA+C;IAC/C,0BAA0B,EAAE,OAAO,CAAC;IAEpC,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,CA6DzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D"}
|
|
@@ -21,6 +21,31 @@ export const worldStateConfigMappings = {
|
|
|
21
21
|
parseEnv: (val)=>val ? +val : undefined,
|
|
22
22
|
description: 'The maximum possible size of the world state DB in KB. Overwrites the general dataStoreMapSizeKB.'
|
|
23
23
|
},
|
|
24
|
+
archiveTreeMapSizeKb: {
|
|
25
|
+
env: 'ARCHIVE_TREE_MAP_SIZE_KB',
|
|
26
|
+
parseEnv: (val)=>val ? +val : undefined,
|
|
27
|
+
description: 'The maximum possible size of the world state archive tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
28
|
+
},
|
|
29
|
+
nullifierTreeMapSizeKb: {
|
|
30
|
+
env: 'NULLIFIER_TREE_MAP_SIZE_KB',
|
|
31
|
+
parseEnv: (val)=>val ? +val : undefined,
|
|
32
|
+
description: 'The maximum possible size of the world state nullifier tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
33
|
+
},
|
|
34
|
+
noteHashTreeMapSizeKb: {
|
|
35
|
+
env: 'NOTE_HASH_TREE_MAP_SIZE_KB',
|
|
36
|
+
parseEnv: (val)=>val ? +val : undefined,
|
|
37
|
+
description: 'The maximum possible size of the world state note hash tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
38
|
+
},
|
|
39
|
+
messageTreeMapSizeKb: {
|
|
40
|
+
env: 'MESSAGE_TREE_MAP_SIZE_KB',
|
|
41
|
+
parseEnv: (val)=>val ? +val : undefined,
|
|
42
|
+
description: 'The maximum possible size of the world state message tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
43
|
+
},
|
|
44
|
+
publicDataTreeMapSizeKb: {
|
|
45
|
+
env: 'PUBLIC_DATA_TREE_MAP_SIZE_KB',
|
|
46
|
+
parseEnv: (val)=>val ? +val : undefined,
|
|
47
|
+
description: 'The maximum possible size of the world state public data tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
48
|
+
},
|
|
24
49
|
worldStateDataDirectory: {
|
|
25
50
|
env: 'WS_DATA_DIRECTORY',
|
|
26
51
|
description: 'Optional directory for the world state database'
|
|
@@ -7,6 +7,13 @@ import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js
|
|
|
7
7
|
import { NativeWorldStateService } from '../native/native_world_state.js';
|
|
8
8
|
import type { WorldStateConfig } from './config.js';
|
|
9
9
|
import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js';
|
|
10
|
+
export interface WorldStateTreeMapSizes {
|
|
11
|
+
archiveTreeMapSizeKb: number;
|
|
12
|
+
nullifierTreeMapSizeKb: number;
|
|
13
|
+
noteHashTreeMapSizeKb: number;
|
|
14
|
+
messageTreeMapSizeKb: number;
|
|
15
|
+
publicDataTreeMapSizeKb: number;
|
|
16
|
+
}
|
|
10
17
|
export declare function createWorldStateSynchronizer(config: WorldStateConfig & DataStoreConfig, l2BlockSource: L2BlockSource & L1ToL2MessageSource, prefilledPublicData?: PublicDataTreeLeaf[], client?: TelemetryClient): Promise<ServerWorldStateSynchronizer>;
|
|
11
|
-
export declare function createWorldState(config: WorldStateConfig & DataStoreConfig, prefilledPublicData?: PublicDataTreeLeaf[], instrumentation?: WorldStateInstrumentation): Promise<NativeWorldStateService>;
|
|
18
|
+
export declare function createWorldState(config: Pick<WorldStateConfig, 'worldStateDataDirectory' | 'worldStateDbMapSizeKb' | 'archiveTreeMapSizeKb' | 'nullifierTreeMapSizeKb' | 'noteHashTreeMapSizeKb' | 'messageTreeMapSizeKb' | 'publicDataTreeMapSizeKb'> & Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKB' | 'l1Contracts'>, prefilledPublicData?: PublicDataTreeLeaf[], instrumentation?: WorldStateInstrumentation): Promise<NativeWorldStateService>;
|
|
12
19
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,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,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,aAAa,EAAE,aAAa,GAAG,mBAAmB,EAClD,mBAAmB,GAAE,kBAAkB,EAAO,EAC9C,MAAM,GAAE,eAAsC,yCAK/C;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,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,yCAK/C;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,oCAgCjG"}
|
|
@@ -8,15 +8,20 @@ export async function createWorldStateSynchronizer(config, l2BlockSource, prefil
|
|
|
8
8
|
return new ServerWorldStateSynchronizer(merkleTrees, l2BlockSource, config, instrumentation);
|
|
9
9
|
}
|
|
10
10
|
export async function createWorldState(config, prefilledPublicData = [], instrumentation = new WorldStateInstrumentation(getTelemetryClient())) {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const dataDirectory = config.worldStateDataDirectory ?? config.dataDirectory;
|
|
12
|
+
const dataStoreMapSizeKB = config.worldStateDbMapSizeKb ?? config.dataStoreMapSizeKB;
|
|
13
|
+
const wsTreeMapSizes = {
|
|
14
|
+
archiveTreeMapSizeKb: config.archiveTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
15
|
+
nullifierTreeMapSizeKb: config.nullifierTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
16
|
+
noteHashTreeMapSizeKb: config.noteHashTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
17
|
+
messageTreeMapSizeKb: config.messageTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
18
|
+
publicDataTreeMapSizeKb: config.publicDataTreeMapSizeKb ?? dataStoreMapSizeKB
|
|
14
19
|
};
|
|
15
20
|
if (!config.l1Contracts?.rollupAddress) {
|
|
16
21
|
throw new Error('Rollup address is required to create a world state synchronizer.');
|
|
17
22
|
}
|
|
18
23
|
// If a data directory is provided in config, then create a persistent store.
|
|
19
|
-
const merkleTrees =
|
|
24
|
+
const merkleTrees = dataDirectory ? await NativeWorldStateService.new(config.l1Contracts.rollupAddress, dataDirectory, wsTreeMapSizes, prefilledPublicData, instrumentation) : await NativeWorldStateService.tmp(config.l1Contracts.rollupAddress, ![
|
|
20
25
|
'true',
|
|
21
26
|
'1'
|
|
22
27
|
].includes(process.env.DEBUG_WORLD_STATE), prefilledPublicData);
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import type { Fr } from '@aztec/foundation/fields';
|
|
4
2
|
import { type Logger } from '@aztec/foundation/log';
|
|
5
3
|
import type { L2BlockSource, L2BlockStream, L2BlockStreamEvent, L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider, L2Tips } from '@aztec/stdlib/block';
|
|
@@ -34,6 +32,7 @@ export declare class ServerWorldStateSynchronizer implements WorldStateSynchroni
|
|
|
34
32
|
getSnapshot(blockNumber: number): MerkleTreeReadOperations;
|
|
35
33
|
fork(blockNumber?: number): Promise<MerkleTreeWriteOperations>;
|
|
36
34
|
backupTo(dstPath: string, compact?: boolean): Promise<Record<Exclude<SnapshotDataKeys, 'archiver'>, string>>;
|
|
35
|
+
clear(): Promise<void>;
|
|
37
36
|
start(): Promise<void | import("@aztec/foundation/promise").PromiseWithResolvers<void>>;
|
|
38
37
|
protected createBlockStream(): L2BlockStream;
|
|
39
38
|
stop(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server_world_state_synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/server_world_state_synchronizer.ts"],"names":[],"mappings":"
|
|
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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"}
|
|
@@ -52,6 +52,9 @@ import { WorldStateSynchronizerError } from './errors.js';
|
|
|
52
52
|
backupTo(dstPath, compact) {
|
|
53
53
|
return this.merkleTreeDb.backupTo(dstPath, compact);
|
|
54
54
|
}
|
|
55
|
+
clear() {
|
|
56
|
+
return this.merkleTreeDb.clear();
|
|
57
|
+
}
|
|
55
58
|
async start() {
|
|
56
59
|
if (this.currentState === WorldStateRunningState.STOPPED) {
|
|
57
60
|
throw new Error('Synchronizer already stopped');
|
|
@@ -221,7 +224,7 @@ import { WorldStateSynchronizerError } from './errors.js';
|
|
|
221
224
|
let updateStatus = undefined;
|
|
222
225
|
for(let i = 0; i < l2Blocks.length; i++){
|
|
223
226
|
const [duration, result] = await elapsed(()=>this.handleL2Block(l2Blocks[i], l1ToL2Messages[i]));
|
|
224
|
-
this.log.
|
|
227
|
+
this.log.info(`World state updated with L2 block ${l2Blocks[i].number}`, {
|
|
225
228
|
eventName: 'l2-block-handled',
|
|
226
229
|
duration,
|
|
227
230
|
unfinalisedBlockNumber: result.summary.unfinalisedBlockNumber,
|
|
@@ -64,5 +64,7 @@ export interface MerkleTreeAdminDatabase extends ForkMerkleTreeOperations {
|
|
|
64
64
|
getStatusSummary(): Promise<WorldStateStatusSummary>;
|
|
65
65
|
/** Stops the database */
|
|
66
66
|
close(): Promise<void>;
|
|
67
|
+
/** Deletes the db. */
|
|
68
|
+
clear(): Promise<void>;
|
|
67
69
|
}
|
|
68
70
|
//# sourceMappingURL=merkle_tree_db.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle_tree_db.d.ts","sourceRoot":"","sources":["../../src/world-state-db/merkle_tree_db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE1F;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,QAA4B,CAAC;AAErE,eAAO,MAAM,6BAA6B,QAAmD,CAAC;AAE9F,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACnD,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACrD,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE;;;;OAIG;IACH,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE9F;;OAEG;IACH,YAAY,IAAI,wBAAwB,CAAC;IAEzC;;;;OAIG;IACH,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE7E;;;;OAIG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnE;;;;OAIG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEtE;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAErD,yBAAyB;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"merkle_tree_db.d.ts","sourceRoot":"","sources":["../../src/world-state-db/merkle_tree_db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE1F;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,QAA4B,CAAC;AAErE,eAAO,MAAM,6BAA6B,QAAmD,CAAC;AAE9F,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACnD,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACrD,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE;;;;OAIG;IACH,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE9F;;OAEG;IACH,YAAY,IAAI,wBAAwB,CAAC;IAEzC;;;;OAIG;IACH,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE7E;;;;OAIG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnE;;;;OAIG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEtE;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAErD,yBAAyB;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,sBAAsB;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/world-state",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.87.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -60,26 +60,26 @@
|
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@aztec/constants": "0.
|
|
64
|
-
"@aztec/foundation": "0.
|
|
65
|
-
"@aztec/kv-store": "0.
|
|
66
|
-
"@aztec/merkle-tree": "0.
|
|
67
|
-
"@aztec/native": "0.
|
|
68
|
-
"@aztec/protocol-contracts": "0.
|
|
69
|
-
"@aztec/stdlib": "0.
|
|
70
|
-
"@aztec/telemetry-client": "0.
|
|
63
|
+
"@aztec/constants": "0.87.0",
|
|
64
|
+
"@aztec/foundation": "0.87.0",
|
|
65
|
+
"@aztec/kv-store": "0.87.0",
|
|
66
|
+
"@aztec/merkle-tree": "0.87.0",
|
|
67
|
+
"@aztec/native": "0.87.0",
|
|
68
|
+
"@aztec/protocol-contracts": "0.87.0",
|
|
69
|
+
"@aztec/stdlib": "0.87.0",
|
|
70
|
+
"@aztec/telemetry-client": "0.87.0",
|
|
71
71
|
"tslib": "^2.4.0",
|
|
72
72
|
"zod": "^3.23.8"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@aztec/archiver": "0.
|
|
75
|
+
"@aztec/archiver": "0.87.0",
|
|
76
76
|
"@jest/globals": "^29.5.0",
|
|
77
77
|
"@types/jest": "^29.5.0",
|
|
78
|
-
"@types/node": "^
|
|
78
|
+
"@types/node": "^22.15.17",
|
|
79
79
|
"jest": "^29.5.0",
|
|
80
80
|
"jest-mock-extended": "^3.0.5",
|
|
81
81
|
"ts-node": "^10.9.1",
|
|
82
|
-
"typescript": "^5.
|
|
82
|
+
"typescript": "^5.3.3"
|
|
83
83
|
},
|
|
84
84
|
"files": [
|
|
85
85
|
"dest",
|
|
@@ -88,6 +88,6 @@
|
|
|
88
88
|
],
|
|
89
89
|
"types": "./dest/index.d.ts",
|
|
90
90
|
"engines": {
|
|
91
|
-
"node": ">=
|
|
91
|
+
"node": ">=20.10"
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -2,6 +2,7 @@ import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NUMBER_OF_L1_L2_MESSAGES
|
|
|
2
2
|
import { fromEntries, padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
+
import { tryRmDir } from '@aztec/foundation/fs';
|
|
5
6
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
6
7
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
7
8
|
import { DatabaseVersionManager } from '@aztec/stdlib/database-version';
|
|
@@ -21,6 +22,7 @@ import { tmpdir } from 'os';
|
|
|
21
22
|
import { join } from 'path';
|
|
22
23
|
|
|
23
24
|
import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
25
|
+
import type { WorldStateTreeMapSizes } from '../synchronizer/factory.js';
|
|
24
26
|
import type { MerkleTreeAdminDatabase as MerkleTreeDatabase } from '../world-state-db/merkle_tree_db.js';
|
|
25
27
|
import { MerkleTreesFacade, MerkleTreesForkFacade, serializeLeaf } from './merkle_trees_facade.js';
|
|
26
28
|
import {
|
|
@@ -47,7 +49,7 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
47
49
|
private cachedStatusSummary: WorldStateStatusSummary | undefined;
|
|
48
50
|
|
|
49
51
|
protected constructor(
|
|
50
|
-
protected
|
|
52
|
+
protected instance: NativeWorldState,
|
|
51
53
|
protected readonly worldStateInstrumentation: WorldStateInstrumentation,
|
|
52
54
|
protected readonly log: Logger = createLogger('world-state:database'),
|
|
53
55
|
private readonly cleanup = () => Promise.resolve(),
|
|
@@ -56,7 +58,7 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
56
58
|
static async new(
|
|
57
59
|
rollupAddress: EthAddress,
|
|
58
60
|
dataDir: string,
|
|
59
|
-
|
|
61
|
+
wsTreeMapSizes: WorldStateTreeMapSizes,
|
|
60
62
|
prefilledPublicData: PublicDataTreeLeaf[] = [],
|
|
61
63
|
instrumentation = new WorldStateInstrumentation(getTelemetryClient()),
|
|
62
64
|
log = createLogger('world-state:database'),
|
|
@@ -69,7 +71,7 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
69
71
|
rollupAddress,
|
|
70
72
|
dataDirectory: worldStateDirectory,
|
|
71
73
|
onOpen: (dir: string) => {
|
|
72
|
-
return Promise.resolve(new NativeWorldState(dir,
|
|
74
|
+
return Promise.resolve(new NativeWorldState(dir, wsTreeMapSizes, prefilledPublicData, instrumentation));
|
|
73
75
|
},
|
|
74
76
|
});
|
|
75
77
|
|
|
@@ -94,7 +96,14 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
94
96
|
const log = createLogger('world-state:database');
|
|
95
97
|
const dataDir = await mkdtemp(join(tmpdir(), 'aztec-world-state-'));
|
|
96
98
|
const dbMapSizeKb = 10 * 1024 * 1024;
|
|
97
|
-
|
|
99
|
+
const worldStateTreeMapSizes: WorldStateTreeMapSizes = {
|
|
100
|
+
archiveTreeMapSizeKb: dbMapSizeKb,
|
|
101
|
+
nullifierTreeMapSizeKb: dbMapSizeKb,
|
|
102
|
+
noteHashTreeMapSizeKb: dbMapSizeKb,
|
|
103
|
+
messageTreeMapSizeKb: dbMapSizeKb,
|
|
104
|
+
publicDataTreeMapSizeKb: dbMapSizeKb,
|
|
105
|
+
};
|
|
106
|
+
log.debug(`Created temporary world state database at: ${dataDir} with tree map size: ${dbMapSizeKb}`);
|
|
98
107
|
|
|
99
108
|
// pass a cleanup callback because process.on('beforeExit', cleanup) does not work under Jest
|
|
100
109
|
const cleanup = async () => {
|
|
@@ -106,7 +115,7 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
106
115
|
}
|
|
107
116
|
};
|
|
108
117
|
|
|
109
|
-
return this.new(rollupAddress, dataDir,
|
|
118
|
+
return this.new(rollupAddress, dataDir, worldStateTreeMapSizes, prefilledPublicData, instrumentation, log, cleanup);
|
|
110
119
|
}
|
|
111
120
|
|
|
112
121
|
protected async init() {
|
|
@@ -130,6 +139,13 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
130
139
|
assert.strictEqual(initialHeaderIndex, 0n, 'Invalid initial archive state');
|
|
131
140
|
}
|
|
132
141
|
|
|
142
|
+
public async clear() {
|
|
143
|
+
await this.instance.close();
|
|
144
|
+
this.cachedStatusSummary = undefined;
|
|
145
|
+
await tryRmDir(this.instance.getDataDir(), this.log);
|
|
146
|
+
this.instance = this.instance.clone();
|
|
147
|
+
}
|
|
148
|
+
|
|
133
149
|
public getCommitted(): MerkleTreeReadOperations {
|
|
134
150
|
return new MerkleTreesFacade(this.instance, this.initialHeader!, worldStateRevision(false, 0, 0));
|
|
135
151
|
}
|
|
@@ -17,6 +17,7 @@ import assert from 'assert';
|
|
|
17
17
|
import { cpus } from 'os';
|
|
18
18
|
|
|
19
19
|
import type { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
20
|
+
import type { WorldStateTreeMapSizes } from '../synchronizer/factory.js';
|
|
20
21
|
import {
|
|
21
22
|
WorldStateMessageType,
|
|
22
23
|
type WorldStateRequest,
|
|
@@ -50,15 +51,17 @@ export class NativeWorldState implements NativeWorldStateInstance {
|
|
|
50
51
|
|
|
51
52
|
/** Creates a new native WorldState instance */
|
|
52
53
|
constructor(
|
|
53
|
-
dataDir: string,
|
|
54
|
-
|
|
55
|
-
prefilledPublicData: PublicDataTreeLeaf[] = [],
|
|
56
|
-
private instrumentation: WorldStateInstrumentation,
|
|
57
|
-
private log: Logger = createLogger('world-state:database'),
|
|
54
|
+
private readonly dataDir: string,
|
|
55
|
+
private readonly wsTreeMapSizes: WorldStateTreeMapSizes,
|
|
56
|
+
private readonly prefilledPublicData: PublicDataTreeLeaf[] = [],
|
|
57
|
+
private readonly instrumentation: WorldStateInstrumentation,
|
|
58
|
+
private readonly log: Logger = createLogger('world-state:database'),
|
|
58
59
|
) {
|
|
59
60
|
const threads = Math.min(cpus().length, MAX_WORLD_STATE_THREADS);
|
|
60
61
|
log.info(
|
|
61
|
-
`Creating world state data store at directory ${dataDir} with map
|
|
62
|
+
`Creating world state data store at directory ${dataDir} with map sizes ${JSON.stringify(
|
|
63
|
+
wsTreeMapSizes,
|
|
64
|
+
)} and ${threads} threads.`,
|
|
62
65
|
);
|
|
63
66
|
const prefilledPublicDataBufferArray = prefilledPublicData.map(d => [d.slot.toBuffer(), d.value.toBuffer()]);
|
|
64
67
|
const ws = new BaseNativeWorldState(
|
|
@@ -76,7 +79,13 @@ export class NativeWorldState implements NativeWorldStateInstance {
|
|
|
76
79
|
},
|
|
77
80
|
prefilledPublicDataBufferArray,
|
|
78
81
|
GeneratorIndex.BLOCK_HASH,
|
|
79
|
-
|
|
82
|
+
{
|
|
83
|
+
[MerkleTreeId.NULLIFIER_TREE]: wsTreeMapSizes.nullifierTreeMapSizeKb,
|
|
84
|
+
[MerkleTreeId.NOTE_HASH_TREE]: wsTreeMapSizes.noteHashTreeMapSizeKb,
|
|
85
|
+
[MerkleTreeId.PUBLIC_DATA_TREE]: wsTreeMapSizes.publicDataTreeMapSizeKb,
|
|
86
|
+
[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: wsTreeMapSizes.messageTreeMapSizeKb,
|
|
87
|
+
[MerkleTreeId.ARCHIVE]: wsTreeMapSizes.archiveTreeMapSizeKb,
|
|
88
|
+
},
|
|
80
89
|
threads,
|
|
81
90
|
);
|
|
82
91
|
this.instance = new MsgpackChannel(ws);
|
|
@@ -84,6 +93,20 @@ export class NativeWorldState implements NativeWorldStateInstance {
|
|
|
84
93
|
this.queues.set(0, new WorldStateOpsQueue());
|
|
85
94
|
}
|
|
86
95
|
|
|
96
|
+
public getDataDir() {
|
|
97
|
+
return this.dataDir;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public clone() {
|
|
101
|
+
return new NativeWorldState(
|
|
102
|
+
this.dataDir,
|
|
103
|
+
this.wsTreeMapSizes,
|
|
104
|
+
this.prefilledPublicData,
|
|
105
|
+
this.instrumentation,
|
|
106
|
+
this.log,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
87
110
|
/**
|
|
88
111
|
* Sends a message to the native instance and returns the response.
|
|
89
112
|
* @param messageType - The type of message to send
|
|
@@ -19,6 +19,21 @@ export interface WorldStateConfig {
|
|
|
19
19
|
/** The map size to be provided to LMDB for each world state tree DB, optional, will inherit from the general dataStoreMapSizeKB if not specified*/
|
|
20
20
|
worldStateDbMapSizeKb?: number;
|
|
21
21
|
|
|
22
|
+
/** The map size to be provided to LMDB for each world state archive tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
23
|
+
archiveTreeMapSizeKb?: number;
|
|
24
|
+
|
|
25
|
+
/** The map size to be provided to LMDB for each world state nullifier tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
26
|
+
nullifierTreeMapSizeKb?: number;
|
|
27
|
+
|
|
28
|
+
/** The map size to be provided to LMDB for each world state note hash tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
29
|
+
noteHashTreeMapSizeKb?: number;
|
|
30
|
+
|
|
31
|
+
/** The map size to be provided to LMDB for each world state message tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
32
|
+
messageTreeMapSizeKb?: number;
|
|
33
|
+
|
|
34
|
+
/** The map size to be provided to LMDB for each world state public data tree, optional, will inherit from the general worldStateDbMapSizeKb if not specified*/
|
|
35
|
+
publicDataTreeMapSizeKb?: number;
|
|
36
|
+
|
|
22
37
|
/** Optional directory for the world state DB, if unspecified will default to the general data directory */
|
|
23
38
|
worldStateDataDirectory?: string;
|
|
24
39
|
|
|
@@ -48,6 +63,36 @@ export const worldStateConfigMappings: ConfigMappingsType<WorldStateConfig> = {
|
|
|
48
63
|
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
49
64
|
description: 'The maximum possible size of the world state DB in KB. Overwrites the general dataStoreMapSizeKB.',
|
|
50
65
|
},
|
|
66
|
+
archiveTreeMapSizeKb: {
|
|
67
|
+
env: 'ARCHIVE_TREE_MAP_SIZE_KB',
|
|
68
|
+
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
69
|
+
description:
|
|
70
|
+
'The maximum possible size of the world state archive tree in KB. Overwrites the general worldStateDbMapSizeKb.',
|
|
71
|
+
},
|
|
72
|
+
nullifierTreeMapSizeKb: {
|
|
73
|
+
env: 'NULLIFIER_TREE_MAP_SIZE_KB',
|
|
74
|
+
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
75
|
+
description:
|
|
76
|
+
'The maximum possible size of the world state nullifier tree in KB. Overwrites the general worldStateDbMapSizeKb.',
|
|
77
|
+
},
|
|
78
|
+
noteHashTreeMapSizeKb: {
|
|
79
|
+
env: 'NOTE_HASH_TREE_MAP_SIZE_KB',
|
|
80
|
+
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
81
|
+
description:
|
|
82
|
+
'The maximum possible size of the world state note hash tree in KB. Overwrites the general worldStateDbMapSizeKb.',
|
|
83
|
+
},
|
|
84
|
+
messageTreeMapSizeKb: {
|
|
85
|
+
env: 'MESSAGE_TREE_MAP_SIZE_KB',
|
|
86
|
+
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
87
|
+
description:
|
|
88
|
+
'The maximum possible size of the world state message tree in KB. Overwrites the general worldStateDbMapSizeKb.',
|
|
89
|
+
},
|
|
90
|
+
publicDataTreeMapSizeKb: {
|
|
91
|
+
env: 'PUBLIC_DATA_TREE_MAP_SIZE_KB',
|
|
92
|
+
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
93
|
+
description:
|
|
94
|
+
'The maximum possible size of the world state public data tree in KB. Overwrites the general worldStateDbMapSizeKb.',
|
|
95
|
+
},
|
|
51
96
|
worldStateDataDirectory: {
|
|
52
97
|
env: 'WS_DATA_DIRECTORY',
|
|
53
98
|
description: 'Optional directory for the world state database',
|
|
@@ -9,6 +9,14 @@ import { NativeWorldStateService } from '../native/native_world_state.js';
|
|
|
9
9
|
import type { WorldStateConfig } from './config.js';
|
|
10
10
|
import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js';
|
|
11
11
|
|
|
12
|
+
export interface WorldStateTreeMapSizes {
|
|
13
|
+
archiveTreeMapSizeKb: number;
|
|
14
|
+
nullifierTreeMapSizeKb: number;
|
|
15
|
+
noteHashTreeMapSizeKb: number;
|
|
16
|
+
messageTreeMapSizeKb: number;
|
|
17
|
+
publicDataTreeMapSizeKb: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
12
20
|
export async function createWorldStateSynchronizer(
|
|
13
21
|
config: WorldStateConfig & DataStoreConfig,
|
|
14
22
|
l2BlockSource: L2BlockSource & L1ToL2MessageSource,
|
|
@@ -21,25 +29,40 @@ export async function createWorldStateSynchronizer(
|
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
export async function createWorldState(
|
|
24
|
-
config:
|
|
32
|
+
config: Pick<
|
|
33
|
+
WorldStateConfig,
|
|
34
|
+
| 'worldStateDataDirectory'
|
|
35
|
+
| 'worldStateDbMapSizeKb'
|
|
36
|
+
| 'archiveTreeMapSizeKb'
|
|
37
|
+
| 'nullifierTreeMapSizeKb'
|
|
38
|
+
| 'noteHashTreeMapSizeKb'
|
|
39
|
+
| 'messageTreeMapSizeKb'
|
|
40
|
+
| 'publicDataTreeMapSizeKb'
|
|
41
|
+
> &
|
|
42
|
+
Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKB' | 'l1Contracts'>,
|
|
25
43
|
prefilledPublicData: PublicDataTreeLeaf[] = [],
|
|
26
44
|
instrumentation: WorldStateInstrumentation = new WorldStateInstrumentation(getTelemetryClient()),
|
|
27
45
|
) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
46
|
+
const dataDirectory = config.worldStateDataDirectory ?? config.dataDirectory;
|
|
47
|
+
const dataStoreMapSizeKB = config.worldStateDbMapSizeKb ?? config.dataStoreMapSizeKB;
|
|
48
|
+
const wsTreeMapSizes: WorldStateTreeMapSizes = {
|
|
49
|
+
archiveTreeMapSizeKb: config.archiveTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
50
|
+
nullifierTreeMapSizeKb: config.nullifierTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
51
|
+
noteHashTreeMapSizeKb: config.noteHashTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
52
|
+
messageTreeMapSizeKb: config.messageTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
53
|
+
publicDataTreeMapSizeKb: config.publicDataTreeMapSizeKb ?? dataStoreMapSizeKB,
|
|
54
|
+
};
|
|
32
55
|
|
|
33
56
|
if (!config.l1Contracts?.rollupAddress) {
|
|
34
57
|
throw new Error('Rollup address is required to create a world state synchronizer.');
|
|
35
58
|
}
|
|
36
59
|
|
|
37
60
|
// If a data directory is provided in config, then create a persistent store.
|
|
38
|
-
const merkleTrees =
|
|
61
|
+
const merkleTrees = dataDirectory
|
|
39
62
|
? await NativeWorldStateService.new(
|
|
40
63
|
config.l1Contracts.rollupAddress,
|
|
41
|
-
|
|
42
|
-
|
|
64
|
+
dataDirectory,
|
|
65
|
+
wsTreeMapSizes,
|
|
43
66
|
prefilledPublicData,
|
|
44
67
|
instrumentation,
|
|
45
68
|
)
|
|
@@ -85,6 +85,10 @@ export class ServerWorldStateSynchronizer
|
|
|
85
85
|
return this.merkleTreeDb.backupTo(dstPath, compact);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
public clear(): Promise<void> {
|
|
89
|
+
return this.merkleTreeDb.clear();
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
public async start() {
|
|
89
93
|
if (this.currentState === WorldStateRunningState.STOPPED) {
|
|
90
94
|
throw new Error('Synchronizer already stopped');
|
|
@@ -280,7 +284,7 @@ export class ServerWorldStateSynchronizer
|
|
|
280
284
|
|
|
281
285
|
for (let i = 0; i < l2Blocks.length; i++) {
|
|
282
286
|
const [duration, result] = await elapsed(() => this.handleL2Block(l2Blocks[i], l1ToL2Messages[i]));
|
|
283
|
-
this.log.
|
|
287
|
+
this.log.info(`World state updated with L2 block ${l2Blocks[i].number}`, {
|
|
284
288
|
eventName: 'l2-block-handled',
|
|
285
289
|
duration,
|
|
286
290
|
unfinalisedBlockNumber: result.summary.unfinalisedBlockNumber,
|