@aztec/world-state 0.0.1-commit.9b94fc1 → 0.0.1-commit.9badcec54
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/instrumentation/instrumentation.d.ts +1 -1
- package/dest/instrumentation/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation/instrumentation.js +17 -41
- package/dest/native/fork_checkpoint.d.ts +7 -1
- package/dest/native/fork_checkpoint.d.ts.map +1 -1
- package/dest/native/fork_checkpoint.js +15 -3
- package/dest/native/merkle_trees_facade.d.ts +15 -8
- package/dest/native/merkle_trees_facade.d.ts.map +1 -1
- package/dest/native/merkle_trees_facade.js +53 -15
- package/dest/native/message.d.ts +24 -15
- package/dest/native/message.d.ts.map +1 -1
- package/dest/native/message.js +14 -13
- package/dest/native/native_world_state.d.ts +19 -14
- package/dest/native/native_world_state.d.ts.map +1 -1
- package/dest/native/native_world_state.js +31 -21
- package/dest/native/native_world_state_instance.d.ts +5 -5
- package/dest/native/native_world_state_instance.d.ts.map +1 -1
- package/dest/native/native_world_state_instance.js +8 -7
- package/dest/native/world_state_ops_queue.js +5 -5
- package/dest/synchronizer/config.d.ts +3 -5
- package/dest/synchronizer/config.d.ts.map +1 -1
- package/dest/synchronizer/config.js +14 -16
- package/dest/synchronizer/factory.d.ts +6 -5
- package/dest/synchronizer/factory.d.ts.map +1 -1
- package/dest/synchronizer/factory.js +6 -5
- package/dest/synchronizer/server_world_state_synchronizer.d.ts +11 -17
- package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.js +162 -81
- package/dest/test/utils.d.ts +12 -5
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +54 -50
- package/dest/testing.d.ts +5 -4
- package/dest/testing.d.ts.map +1 -1
- package/dest/testing.js +11 -7
- package/dest/world-state-db/merkle_tree_db.d.ts +10 -20
- package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
- package/package.json +12 -13
- package/src/instrumentation/instrumentation.ts +17 -41
- package/src/native/fork_checkpoint.ts +19 -3
- package/src/native/merkle_trees_facade.ts +62 -16
- package/src/native/message.ts +37 -26
- package/src/native/native_world_state.ts +52 -34
- package/src/native/native_world_state_instance.ts +14 -8
- package/src/native/world_state_ops_queue.ts +5 -5
- package/src/synchronizer/config.ts +15 -26
- package/src/synchronizer/factory.ts +13 -7
- package/src/synchronizer/server_world_state_synchronizer.ts +184 -106
- package/src/test/utils.ts +86 -91
- package/src/testing.ts +9 -10
- package/src/world-state-db/merkle_tree_db.ts +13 -24
package/dest/native/message.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
3
4
|
export var WorldStateMessageType = /*#__PURE__*/ function(WorldStateMessageType) {
|
|
4
5
|
WorldStateMessageType[WorldStateMessageType["GET_TREE_INFO"] = 100] = "GET_TREE_INFO";
|
|
@@ -58,9 +59,9 @@ export function buildEmptyTreeMeta() {
|
|
|
58
59
|
depth: 0,
|
|
59
60
|
size: 0n,
|
|
60
61
|
committedSize: 0n,
|
|
61
|
-
unfinalizedBlockHeight:
|
|
62
|
-
finalizedBlockHeight:
|
|
63
|
-
oldestHistoricBlock:
|
|
62
|
+
unfinalizedBlockHeight: BlockNumber.ZERO,
|
|
63
|
+
finalizedBlockHeight: BlockNumber.ZERO,
|
|
64
|
+
oldestHistoricBlock: BlockNumber.ZERO,
|
|
64
65
|
root: Fr.ZERO,
|
|
65
66
|
initialRoot: Fr.ZERO,
|
|
66
67
|
initialSize: 0n
|
|
@@ -86,9 +87,9 @@ export function buildEmptyWorldStateDBStats() {
|
|
|
86
87
|
}
|
|
87
88
|
export function buildEmptyWorldStateSummary() {
|
|
88
89
|
return {
|
|
89
|
-
unfinalizedBlockNumber:
|
|
90
|
-
finalizedBlockNumber:
|
|
91
|
-
oldestHistoricalBlock:
|
|
90
|
+
unfinalizedBlockNumber: BlockNumber.ZERO,
|
|
91
|
+
finalizedBlockNumber: BlockNumber.ZERO,
|
|
92
|
+
oldestHistoricalBlock: BlockNumber.ZERO,
|
|
92
93
|
treesAreSynched: true
|
|
93
94
|
};
|
|
94
95
|
}
|
|
@@ -100,9 +101,9 @@ export function buildEmptyWorldStateStatusFull() {
|
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
103
|
export function sanitizeSummary(summary) {
|
|
103
|
-
summary.finalizedBlockNumber = BigInt(summary.finalizedBlockNumber);
|
|
104
|
-
summary.unfinalizedBlockNumber = BigInt(summary.unfinalizedBlockNumber);
|
|
105
|
-
summary.oldestHistoricalBlock = BigInt(summary.oldestHistoricalBlock);
|
|
104
|
+
summary.finalizedBlockNumber = BlockNumber.fromBigInt(BigInt(summary.finalizedBlockNumber));
|
|
105
|
+
summary.unfinalizedBlockNumber = BlockNumber.fromBigInt(BigInt(summary.unfinalizedBlockNumber));
|
|
106
|
+
summary.oldestHistoricalBlock = BlockNumber.fromBigInt(BigInt(summary.oldestHistoricalBlock));
|
|
106
107
|
return summary;
|
|
107
108
|
}
|
|
108
109
|
export function sanitizeDBStats(stats) {
|
|
@@ -112,11 +113,11 @@ export function sanitizeDBStats(stats) {
|
|
|
112
113
|
}
|
|
113
114
|
export function sanitizeMeta(meta) {
|
|
114
115
|
meta.committedSize = BigInt(meta.committedSize);
|
|
115
|
-
meta.finalizedBlockHeight = BigInt(meta.finalizedBlockHeight);
|
|
116
|
+
meta.finalizedBlockHeight = BlockNumber.fromBigInt(BigInt(meta.finalizedBlockHeight));
|
|
116
117
|
meta.initialSize = BigInt(meta.initialSize);
|
|
117
|
-
meta.oldestHistoricBlock = BigInt(meta.oldestHistoricBlock);
|
|
118
|
+
meta.oldestHistoricBlock = BlockNumber.fromBigInt(BigInt(meta.oldestHistoricBlock));
|
|
118
119
|
meta.size = BigInt(meta.size);
|
|
119
|
-
meta.unfinalizedBlockHeight = BigInt(meta.unfinalizedBlockHeight);
|
|
120
|
+
meta.unfinalizedBlockHeight = BlockNumber.fromBigInt(BigInt(meta.unfinalizedBlockHeight));
|
|
120
121
|
return meta;
|
|
121
122
|
}
|
|
122
123
|
export function sanitizeTreeDBStats(stats) {
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
1
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import type { L2Block, L2BlockNew } from '@aztec/stdlib/block';
|
|
4
|
+
import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
|
|
5
|
+
import type { L2Block } from '@aztec/stdlib/block';
|
|
5
6
|
import type { IndexedTreeId, MerkleTreeReadOperations, MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
6
7
|
import type { SnapshotDataKeys } from '@aztec/stdlib/snapshots';
|
|
7
|
-
import { type NullifierLeafPreimage
|
|
8
|
+
import { type NullifierLeafPreimage } from '@aztec/stdlib/trees';
|
|
8
9
|
import { BlockHeader } from '@aztec/stdlib/tx';
|
|
10
|
+
import { type GenesisData } from '@aztec/stdlib/world-state';
|
|
9
11
|
import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
10
12
|
import type { WorldStateTreeMapSizes } from '../synchronizer/factory.js';
|
|
11
13
|
import type { MerkleTreeAdminDatabase as MerkleTreeDatabase } from '../world-state-db/merkle_tree_db.js';
|
|
@@ -17,19 +19,22 @@ export declare class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
17
19
|
protected instance: NativeWorldState;
|
|
18
20
|
protected readonly worldStateInstrumentation: WorldStateInstrumentation;
|
|
19
21
|
protected readonly log: Logger;
|
|
22
|
+
private readonly genesis;
|
|
20
23
|
private readonly cleanup;
|
|
21
24
|
protected initialHeader: BlockHeader | undefined;
|
|
22
25
|
private cachedStatusSummary;
|
|
23
|
-
protected constructor(instance: NativeWorldState, worldStateInstrumentation: WorldStateInstrumentation, log
|
|
24
|
-
static new(rollupAddress: EthAddress, dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes,
|
|
25
|
-
static tmp(rollupAddress?: EthAddress, cleanupTmpDir?: boolean,
|
|
26
|
+
protected constructor(instance: NativeWorldState, worldStateInstrumentation: WorldStateInstrumentation, log: Logger, genesis?: GenesisData, cleanup?: () => Promise<void>);
|
|
27
|
+
static new(rollupAddress: EthAddress, dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes, genesis?: GenesisData, instrumentation?: WorldStateInstrumentation, bindings?: LoggerBindings, cleanup?: () => Promise<void>): Promise<NativeWorldStateService>;
|
|
28
|
+
static tmp(rollupAddress?: EthAddress, cleanupTmpDir?: boolean, genesis?: GenesisData, instrumentation?: WorldStateInstrumentation, bindings?: LoggerBindings): Promise<NativeWorldStateService>;
|
|
26
29
|
protected init(): Promise<void>;
|
|
27
30
|
clear(): Promise<void>;
|
|
28
31
|
getCommitted(): MerkleTreeReadOperations;
|
|
29
|
-
getSnapshot(blockNumber:
|
|
30
|
-
fork(blockNumber?:
|
|
32
|
+
getSnapshot(blockNumber: BlockNumber): MerkleTreeReadOperations;
|
|
33
|
+
fork(blockNumber?: BlockNumber, opts?: {
|
|
34
|
+
closeDelayMs?: number;
|
|
35
|
+
}): Promise<MerkleTreeWriteOperations>;
|
|
31
36
|
getInitialHeader(): BlockHeader;
|
|
32
|
-
handleL2BlockAndMessages(l2Block: L2Block
|
|
37
|
+
handleL2BlockAndMessages(l2Block: L2Block, l1ToL2Messages: Fr[]): Promise<WorldStateStatusFull>;
|
|
33
38
|
close(): Promise<void>;
|
|
34
39
|
private buildInitialHeader;
|
|
35
40
|
private sanitizeAndCacheSummaryFromFull;
|
|
@@ -40,23 +45,23 @@ export declare class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
40
45
|
* @param toBlockNumber The block number that is now the tip of the finalized chain
|
|
41
46
|
* @returns The new WorldStateStatus
|
|
42
47
|
*/
|
|
43
|
-
setFinalized(toBlockNumber:
|
|
48
|
+
setFinalized(toBlockNumber: BlockNumber): Promise<WorldStateStatusSummary>;
|
|
44
49
|
/**
|
|
45
50
|
* Removes all historical snapshots up to but not including the given block number
|
|
46
51
|
* @param toBlockNumber The block number of the new oldest historical block
|
|
47
52
|
* @returns The new WorldStateStatus
|
|
48
53
|
*/
|
|
49
|
-
removeHistoricalBlocks(toBlockNumber:
|
|
54
|
+
removeHistoricalBlocks(toBlockNumber: BlockNumber): Promise<WorldStateStatusFull>;
|
|
50
55
|
/**
|
|
51
56
|
* Removes all pending blocks down to but not including the given block number
|
|
52
57
|
* @param toBlockNumber The block number of the new tip of the pending chain,
|
|
53
58
|
* @returns The new WorldStateStatus
|
|
54
59
|
*/
|
|
55
|
-
unwindBlocks(toBlockNumber:
|
|
60
|
+
unwindBlocks(toBlockNumber: BlockNumber): Promise<WorldStateStatusFull>;
|
|
56
61
|
getStatusSummary(): Promise<WorldStateStatusSummary>;
|
|
57
62
|
updateLeaf<ID extends IndexedTreeId>(_treeId: ID, _leaf: NullifierLeafPreimage | Buffer, _index: bigint): Promise<void>;
|
|
58
63
|
private getInitialStateReference;
|
|
59
64
|
backupTo(dstPath: string, compact?: boolean): Promise<Record<Exclude<SnapshotDataKeys, 'archiver'>, string>>;
|
|
60
65
|
}
|
|
61
66
|
export declare const NATIVE_WORLD_STATE_DBS: readonly [readonly ["l1-to-l2-message-tree", "L1ToL2MessageTree"], readonly ["archive-tree", "ArchiveTree"], readonly ["public-data-tree", "PublicDataTree"], readonly ["note-hash-tree", "NoteHashTree"], readonly ["nullifier-tree", "NullifierTree"]];
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3dvcmxkX3N0YXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlL25hdGl2ZV93b3JsZF9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxLQUFLLEVBQ1YsYUFBYSxFQUNiLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDMUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBK0IsS0FBSyxxQkFBcUIsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsV0FBVyxFQUEwRCxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZHLE9BQU8sRUFBc0IsS0FBSyxXQUFXLEVBQXNCLE1BQU0sMkJBQTJCLENBQUM7QUFRckcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSx1QkFBdUIsSUFBSSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpHLE9BQU8sRUFFTCxLQUFLLG9CQUFvQixFQUN6QixLQUFLLHVCQUF1QixFQUs3QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUs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
|
|
@@ -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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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { fromEntries, padArrayEnd } from '@aztec/foundation/collection';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
5
6
|
import { tryRmDir } from '@aztec/foundation/fs';
|
|
6
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
-
import { DatabaseVersionManager } from '@aztec/stdlib/database-version';
|
|
8
|
+
import { DatabaseVersionManager } from '@aztec/stdlib/database-version/manager';
|
|
8
9
|
import { MerkleTreeId, NullifierLeaf, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
9
|
-
import { BlockHeader, PartialStateReference, StateReference } from '@aztec/stdlib/tx';
|
|
10
|
-
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';
|
|
11
12
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
12
13
|
import assert from 'assert/strict';
|
|
13
14
|
import { mkdtemp, rm } from 'fs/promises';
|
|
@@ -25,17 +26,20 @@ export class NativeWorldStateService {
|
|
|
25
26
|
instance;
|
|
26
27
|
worldStateInstrumentation;
|
|
27
28
|
log;
|
|
29
|
+
genesis;
|
|
28
30
|
cleanup;
|
|
29
31
|
initialHeader;
|
|
30
32
|
// This is read heavily and only changes when data is persisted, so we cache it
|
|
31
33
|
cachedStatusSummary;
|
|
32
|
-
constructor(instance, worldStateInstrumentation, log =
|
|
34
|
+
constructor(instance, worldStateInstrumentation, log, genesis = EMPTY_GENESIS_DATA, cleanup = ()=>Promise.resolve()){
|
|
33
35
|
this.instance = instance;
|
|
34
36
|
this.worldStateInstrumentation = worldStateInstrumentation;
|
|
35
37
|
this.log = log;
|
|
38
|
+
this.genesis = genesis;
|
|
36
39
|
this.cleanup = cleanup;
|
|
37
40
|
}
|
|
38
|
-
static async new(rollupAddress, dataDir, wsTreeMapSizes,
|
|
41
|
+
static async new(rollupAddress, dataDir, wsTreeMapSizes, genesis = EMPTY_GENESIS_DATA, instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings, cleanup = ()=>Promise.resolve()) {
|
|
42
|
+
const log = createLogger('world-state:database', bindings);
|
|
39
43
|
const worldStateDirectory = join(dataDir, WORLD_STATE_DIR);
|
|
40
44
|
// Create a version manager to handle versioning
|
|
41
45
|
const versionManager = new DatabaseVersionManager({
|
|
@@ -43,11 +47,11 @@ export class NativeWorldStateService {
|
|
|
43
47
|
rollupAddress,
|
|
44
48
|
dataDirectory: worldStateDirectory,
|
|
45
49
|
onOpen: (dir)=>{
|
|
46
|
-
return Promise.resolve(new NativeWorldState(dir, wsTreeMapSizes,
|
|
50
|
+
return Promise.resolve(new NativeWorldState(dir, wsTreeMapSizes, genesis, instrumentation, bindings));
|
|
47
51
|
}
|
|
48
52
|
});
|
|
49
53
|
const [instance] = await versionManager.open();
|
|
50
|
-
const worldState = new this(instance, instrumentation, log, cleanup);
|
|
54
|
+
const worldState = new this(instance, instrumentation, log, genesis, cleanup);
|
|
51
55
|
try {
|
|
52
56
|
await worldState.init();
|
|
53
57
|
} catch (e) {
|
|
@@ -56,8 +60,8 @@ export class NativeWorldStateService {
|
|
|
56
60
|
}
|
|
57
61
|
return worldState;
|
|
58
62
|
}
|
|
59
|
-
static async tmp(rollupAddress = EthAddress.ZERO, cleanupTmpDir = true,
|
|
60
|
-
const log = createLogger('world-state:database');
|
|
63
|
+
static async tmp(rollupAddress = EthAddress.ZERO, cleanupTmpDir = true, genesis = EMPTY_GENESIS_DATA, instrumentation = new WorldStateInstrumentation(getTelemetryClient()), bindings) {
|
|
64
|
+
const log = createLogger('world-state:database', bindings);
|
|
61
65
|
const dataDir = await mkdtemp(join(tmpdir(), 'aztec-world-state-'));
|
|
62
66
|
const dbMapSizeKb = 10 * 1024 * 1024;
|
|
63
67
|
const worldStateTreeMapSizes = {
|
|
@@ -81,7 +85,7 @@ export class NativeWorldStateService {
|
|
|
81
85
|
log.debug(`Leaving temporary world state database: ${dataDir}`);
|
|
82
86
|
}
|
|
83
87
|
};
|
|
84
|
-
return this.new(rollupAddress, dataDir, worldStateTreeMapSizes,
|
|
88
|
+
return this.new(rollupAddress, dataDir, worldStateTreeMapSizes, genesis, instrumentation, bindings, cleanup);
|
|
85
89
|
}
|
|
86
90
|
async init() {
|
|
87
91
|
const status = await this.getStatusSummary();
|
|
@@ -115,23 +119,26 @@ export class NativeWorldStateService {
|
|
|
115
119
|
getSnapshot(blockNumber) {
|
|
116
120
|
return new MerkleTreesFacade(this.instance, this.initialHeader, new WorldStateRevision(/*forkId=*/ 0, /* blockNumber=*/ blockNumber, /* includeUncommitted=*/ false));
|
|
117
121
|
}
|
|
118
|
-
async fork(blockNumber) {
|
|
122
|
+
async fork(blockNumber, opts = {}) {
|
|
119
123
|
const resp = await this.instance.call(WorldStateMessageType.CREATE_FORK, {
|
|
120
124
|
latest: blockNumber === undefined,
|
|
121
|
-
blockNumber: blockNumber ??
|
|
125
|
+
blockNumber: blockNumber ?? BlockNumber.ZERO,
|
|
122
126
|
canonical: true
|
|
123
127
|
});
|
|
124
|
-
return new MerkleTreesForkFacade(this.instance, this.initialHeader, new WorldStateRevision(/*forkId=*/ resp.forkId, /* blockNumber=*/
|
|
128
|
+
return new MerkleTreesForkFacade(this.instance, this.initialHeader, new WorldStateRevision(/*forkId=*/ resp.forkId, /* blockNumber=*/ BlockNumber.ZERO, /* includeUncommitted=*/ true), opts);
|
|
125
129
|
}
|
|
126
130
|
getInitialHeader() {
|
|
127
131
|
return this.initialHeader;
|
|
128
132
|
}
|
|
129
|
-
async handleL2BlockAndMessages(l2Block, l1ToL2Messages
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
async handleL2BlockAndMessages(l2Block, l1ToL2Messages) {
|
|
134
|
+
const isFirstBlock = l2Block.indexWithinCheckpoint === 0;
|
|
135
|
+
if (!isFirstBlock && l1ToL2Messages.length > 0) {
|
|
136
|
+
throw new Error(`L1 to L2 messages must be empty for non-first blocks, but got ${l1ToL2Messages.length} messages for block ${l2Block.number}.`);
|
|
137
|
+
}
|
|
138
|
+
// We have to pad the given l1 to l2 messages, and the note hashes and nullifiers within tx effects, because that's
|
|
139
|
+
// how the trees are built by circuits.
|
|
134
140
|
const paddedL1ToL2Messages = isFirstBlock ? padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP) : [];
|
|
141
|
+
const paddedNoteHashes = l2Block.body.txEffects.flatMap((txEffect)=>padArrayEnd(txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX));
|
|
135
142
|
const paddedNullifiers = l2Block.body.txEffects.flatMap((txEffect)=>padArrayEnd(txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX)).map((nullifier)=>new NullifierLeaf(nullifier));
|
|
136
143
|
const publicDataWrites = l2Block.body.txEffects.flatMap((txEffect)=>{
|
|
137
144
|
return txEffect.publicDataWrites.map((write)=>{
|
|
@@ -144,7 +151,7 @@ export class NativeWorldStateService {
|
|
|
144
151
|
try {
|
|
145
152
|
return await this.instance.call(WorldStateMessageType.SYNC_BLOCK, {
|
|
146
153
|
blockNumber: l2Block.number,
|
|
147
|
-
blockHeaderHash: await l2Block.hash(),
|
|
154
|
+
blockHeaderHash: (await l2Block.hash()).toBuffer(),
|
|
148
155
|
paddedL1ToL2Messages: paddedL1ToL2Messages.map(serializeLeaf),
|
|
149
156
|
paddedNoteHashes: paddedNoteHashes.map(serializeLeaf),
|
|
150
157
|
paddedNullifiers: paddedNullifiers.map(serializeLeaf),
|
|
@@ -164,7 +171,10 @@ export class NativeWorldStateService {
|
|
|
164
171
|
async buildInitialHeader() {
|
|
165
172
|
const state = await this.getInitialStateReference();
|
|
166
173
|
return BlockHeader.empty({
|
|
167
|
-
state
|
|
174
|
+
state,
|
|
175
|
+
globalVariables: GlobalVariables.empty({
|
|
176
|
+
timestamp: this.genesis.genesisTimestamp
|
|
177
|
+
})
|
|
168
178
|
});
|
|
169
179
|
}
|
|
170
180
|
sanitizeAndCacheSummaryFromFull(response) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
-
import type
|
|
1
|
+
import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
|
|
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,14 @@ export interface NativeWorldStateInstance {
|
|
|
13
13
|
export declare class NativeWorldState implements NativeWorldStateInstance {
|
|
14
14
|
private readonly dataDir;
|
|
15
15
|
private readonly wsTreeMapSizes;
|
|
16
|
-
private readonly
|
|
16
|
+
private readonly genesis;
|
|
17
17
|
private readonly instrumentation;
|
|
18
18
|
private readonly log;
|
|
19
19
|
private open;
|
|
20
20
|
private queues;
|
|
21
21
|
private instance;
|
|
22
22
|
/** Creates a new native WorldState instance */
|
|
23
|
-
constructor(dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes,
|
|
23
|
+
constructor(dataDir: string, wsTreeMapSizes: WorldStateTreeMapSizes, genesis: GenesisData | undefined, instrumentation: WorldStateInstrumentation, bindings?: LoggerBindings, log?: Logger);
|
|
24
24
|
getDataDir(): string;
|
|
25
25
|
clone(): NativeWorldState;
|
|
26
26
|
/**
|
|
@@ -46,4 +46,4 @@ export declare class NativeWorldState implements NativeWorldStateInstance {
|
|
|
46
46
|
close(): Promise<void>;
|
|
47
47
|
private _sendMessage;
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3dvcmxkX3N0YXRlX2luc3RhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlL25hdGl2ZV93b3JsZF9zdGF0ZV9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHdkYsT0FBTyxFQUFzQixLQUFLLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBS2pGLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLEtBQUssaUJBQWlCLEVBQ3RCLEtBQUssMkJBQTJCLEVBQ2hDLEtBQUssa0JBQWtCLEVBSXhCLE1BQU0sY0FBYyxDQUFDO0FBS3RCLE1BQU0sV0FBVyx3QkFBd0I7SUFDdkMsSUFBSSxDQUFDLENBQUMsU0FBUyxxQkFBcUIsRUFDbEMsV0FBVyxFQUFFLENBQUMsRUFDZCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsMkJBQTJCLEdBQ3ZELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLFNBQVMsSUFBSSxHQUFHLENBQUM7Q0FDbEI7QUFFRDs7R0FFRztBQUNILHFCQUFhLGdCQUFpQixZQUFXLHdCQUF3QjtJQVU3RCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU87SUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjO0lBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztJQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFFaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBZHRCLE9BQU8sQ0FBQyxJQUFJLENBQVE7SUFHcEIsT0FBTyxDQUFDLE1BQU0sQ0FBeUM7SUFFdkQsT0FBTyxDQUFDLFFBQVEsQ0FBK0U7SUFFL0YsK0NBQStDO0lBQy9DLFlBQ21CLE9BQU8sRUFBRSxNQUFNLEVBQ2YsY0FBYyxFQUFFLHNCQUFzQixFQUN0QyxPQUFPLHlCQUFrQyxFQUN6QyxlQUFlLEVBQUUseUJBQXlCLEVBQzNELFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFDUixHQUFHLEdBQUUsTUFBdUQsRUF3QzlFO0lBRU0sVUFBVSxXQUVoQjtJQUVNLEtBQUsscUJBU1g7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTLElBQUksR0FBRyxDQWlCdEI7SUFFRDs7Ozs7OztPQU9HO0lBQ1UsSUFBSSxDQUFDLENBQUMsU0FBUyxxQkFBcUIsRUFDL0MsV0FBVyxFQUFFLENBQUMsRUFDZCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsMkJBQTJCLEVBRXhELGVBQWUsNkRBQXVFLEVBQ3RGLFlBQVksc0JBQW9CLEdBQy9CLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQXFEaEM7SUFFRDs7T0FFRztJQUNVLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBZWxDO1lBRWEsWUFBWTtDQThEM0IifQ==
|
|
@@ -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;
|
|
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;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,OAAO,yBAAkC,EACzC,eAAe,EAAE,yBAAyB,EAC3D,QAAQ,CAAC,EAAE,cAAc,EACR,GAAG,GAAE,MAAuD,EAwC9E;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,7 +1,8 @@
|
|
|
1
|
-
import { ARCHIVE_HEIGHT,
|
|
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,24 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
|
|
|
12
13
|
*/ export class NativeWorldState {
|
|
13
14
|
dataDir;
|
|
14
15
|
wsTreeMapSizes;
|
|
15
|
-
|
|
16
|
+
genesis;
|
|
16
17
|
instrumentation;
|
|
17
18
|
log;
|
|
18
19
|
open;
|
|
19
20
|
// We maintain a map of queue to fork
|
|
20
21
|
queues;
|
|
21
22
|
instance;
|
|
22
|
-
/** Creates a new native WorldState instance */ constructor(dataDir, wsTreeMapSizes,
|
|
23
|
+
/** Creates a new native WorldState instance */ constructor(dataDir, wsTreeMapSizes, genesis = EMPTY_GENESIS_DATA, instrumentation, bindings, log = createLogger('world-state:database', bindings)){
|
|
23
24
|
this.dataDir = dataDir;
|
|
24
25
|
this.wsTreeMapSizes = wsTreeMapSizes;
|
|
25
|
-
this.
|
|
26
|
+
this.genesis = genesis;
|
|
26
27
|
this.instrumentation = instrumentation;
|
|
27
28
|
this.log = log;
|
|
28
29
|
this.open = true;
|
|
29
30
|
this.queues = new Map();
|
|
30
31
|
const threads = Math.min(cpus().length, MAX_WORLD_STATE_THREADS);
|
|
31
32
|
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)=>[
|
|
33
|
+
const prefilledPublicDataBufferArray = genesis.prefilledPublicData.map((d)=>[
|
|
33
34
|
d.slot.toBuffer(),
|
|
34
35
|
d.value.toBuffer()
|
|
35
36
|
]);
|
|
@@ -42,7 +43,7 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
|
|
|
42
43
|
}, {
|
|
43
44
|
[MerkleTreeId.NULLIFIER_TREE]: 2 * MAX_NULLIFIERS_PER_TX,
|
|
44
45
|
[MerkleTreeId.PUBLIC_DATA_TREE]: 2 * MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
|
|
45
|
-
}, prefilledPublicDataBufferArray,
|
|
46
|
+
}, prefilledPublicDataBufferArray, DomainSeparator.BLOCK_HEADER_HASH, Number(genesis.genesisTimestamp), {
|
|
46
47
|
[MerkleTreeId.NULLIFIER_TREE]: wsTreeMapSizes.nullifierTreeMapSizeKb,
|
|
47
48
|
[MerkleTreeId.NOTE_HASH_TREE]: wsTreeMapSizes.noteHashTreeMapSizeKb,
|
|
48
49
|
[MerkleTreeId.PUBLIC_DATA_TREE]: wsTreeMapSizes.publicDataTreeMapSizeKb,
|
|
@@ -57,7 +58,7 @@ const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
|
|
|
57
58
|
return this.dataDir;
|
|
58
59
|
}
|
|
59
60
|
clone() {
|
|
60
|
-
return new NativeWorldState(this.dataDir, this.wsTreeMapSizes, this.
|
|
61
|
+
return new NativeWorldState(this.dataDir, this.wsTreeMapSizes, this.genesis, this.instrumentation, this.log.getBindings(), this.log);
|
|
61
62
|
}
|
|
62
63
|
/**
|
|
63
64
|
* Gets the native WorldState handle from the underlying 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
141
|
+
if (this.requests.length === 0 && this.inFlightCount === 0 && this.stopResolve !== undefined) {
|
|
142
142
|
this.stopResolve();
|
|
143
143
|
}
|
|
144
144
|
return this.stopPromise;
|
|
@@ -3,8 +3,6 @@ import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
|
3
3
|
export interface WorldStateConfig {
|
|
4
4
|
/** The frequency in which to check. */
|
|
5
5
|
worldStateBlockCheckIntervalMS: number;
|
|
6
|
-
/** Whether to follow only the proven chain. */
|
|
7
|
-
worldStateProvenBlocksOnly: boolean;
|
|
8
6
|
/** Size of the batch for each get-blocks request from the synchronizer to the archiver. */
|
|
9
7
|
worldStateBlockRequestBatchSize?: number;
|
|
10
8
|
/** The map size to be provided to LMDB for each world state tree DB, optional, will inherit from the general dataStoreMapSizeKb if not specified*/
|
|
@@ -21,8 +19,8 @@ export interface WorldStateConfig {
|
|
|
21
19
|
publicDataTreeMapSizeKb?: number;
|
|
22
20
|
/** Optional directory for the world state DB, if unspecified will default to the general data directory */
|
|
23
21
|
worldStateDataDirectory?: string;
|
|
24
|
-
/** The number of historic blocks to maintain */
|
|
25
|
-
|
|
22
|
+
/** The number of historic checkpoints worth of blocks to maintain */
|
|
23
|
+
worldStateCheckpointHistory: number;
|
|
26
24
|
}
|
|
27
25
|
export declare const worldStateConfigMappings: ConfigMappingsType<WorldStateConfig>;
|
|
28
26
|
/**
|
|
@@ -30,4 +28,4 @@ export declare const worldStateConfigMappings: ConfigMappingsType<WorldStateConf
|
|
|
30
28
|
* @returns The configuration values for the world state synchronizer.
|
|
31
29
|
*/
|
|
32
30
|
export declare function getWorldStateConfigFromEnv(): WorldStateConfig;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2hyb25pemVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBNkMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RyxxREFBcUQ7QUFDckQsTUFBTSxXQUFXLGdCQUFnQjtJQUMvQix1Q0FBdUM7SUFDdkMsOEJBQThCLEVBQUUsTUFBTSxDQUFDO0lBRXZDLDJGQUEyRjtJQUMzRiwrQkFBK0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUV6QyxtSkFBbUo7SUFDbkoscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0IsMkpBQTJKO0lBQzNKLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTlCLDZKQUE2SjtJQUM3SixzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVoQyw2SkFBNko7SUFDN0oscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0IsMkpBQTJKO0lBQzNKLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTlCLCtKQUErSjtJQUMvSix1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVqQywyR0FBMkc7SUFDM0csdUJBQXVCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFakMscUVBQXFFO0lBQ3JFLDJCQUEyQixFQUFFLE1BQU0sQ0FBQztDQUNyQztBQUVELGVBQU8sTUFBTSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0EwRHpFLENBQUM7QUFFRjs7O0dBR0c7QUFDSCx3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/synchronizer/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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,qEAAqE;IACrE,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CA0DzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
2
|
export const worldStateConfigMappings = {
|
|
3
3
|
worldStateBlockCheckIntervalMS: {
|
|
4
4
|
env: 'WS_BLOCK_CHECK_INTERVAL_MS',
|
|
@@ -6,53 +6,51 @@ export const worldStateConfigMappings = {
|
|
|
6
6
|
defaultValue: 100,
|
|
7
7
|
description: 'The frequency in which to check.'
|
|
8
8
|
},
|
|
9
|
-
worldStateProvenBlocksOnly: {
|
|
10
|
-
env: 'WS_PROVEN_BLOCKS_ONLY',
|
|
11
|
-
description: 'Whether to follow only the proven chain.',
|
|
12
|
-
...booleanConfigHelper()
|
|
13
|
-
},
|
|
14
9
|
worldStateBlockRequestBatchSize: {
|
|
15
10
|
env: 'WS_BLOCK_REQUEST_BATCH_SIZE',
|
|
16
|
-
parseEnv: (val)
|
|
11
|
+
parseEnv: (val)=>+val,
|
|
17
12
|
description: 'Size of the batch for each get-blocks request from the synchronizer to the archiver.'
|
|
18
13
|
},
|
|
19
14
|
worldStateDbMapSizeKb: {
|
|
20
15
|
env: 'WS_DB_MAP_SIZE_KB',
|
|
21
|
-
parseEnv: (val)
|
|
16
|
+
parseEnv: (val)=>+val,
|
|
22
17
|
description: 'The maximum possible size of the world state DB in KB. Overwrites the general dataStoreMapSizeKb.'
|
|
23
18
|
},
|
|
24
19
|
archiveTreeMapSizeKb: {
|
|
25
20
|
env: 'ARCHIVE_TREE_MAP_SIZE_KB',
|
|
26
|
-
parseEnv: (val)
|
|
21
|
+
parseEnv: (val)=>+val,
|
|
27
22
|
description: 'The maximum possible size of the world state archive tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
28
23
|
},
|
|
29
24
|
nullifierTreeMapSizeKb: {
|
|
30
25
|
env: 'NULLIFIER_TREE_MAP_SIZE_KB',
|
|
31
|
-
parseEnv: (val)
|
|
26
|
+
parseEnv: (val)=>+val,
|
|
32
27
|
description: 'The maximum possible size of the world state nullifier tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
33
28
|
},
|
|
34
29
|
noteHashTreeMapSizeKb: {
|
|
35
30
|
env: 'NOTE_HASH_TREE_MAP_SIZE_KB',
|
|
36
|
-
parseEnv: (val)
|
|
31
|
+
parseEnv: (val)=>+val,
|
|
37
32
|
description: 'The maximum possible size of the world state note hash tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
38
33
|
},
|
|
39
34
|
messageTreeMapSizeKb: {
|
|
40
35
|
env: 'MESSAGE_TREE_MAP_SIZE_KB',
|
|
41
|
-
parseEnv: (val)
|
|
36
|
+
parseEnv: (val)=>+val,
|
|
42
37
|
description: 'The maximum possible size of the world state message tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
43
38
|
},
|
|
44
39
|
publicDataTreeMapSizeKb: {
|
|
45
40
|
env: 'PUBLIC_DATA_TREE_MAP_SIZE_KB',
|
|
46
|
-
parseEnv: (val)
|
|
41
|
+
parseEnv: (val)=>+val,
|
|
47
42
|
description: 'The maximum possible size of the world state public data tree in KB. Overwrites the general worldStateDbMapSizeKb.'
|
|
48
43
|
},
|
|
49
44
|
worldStateDataDirectory: {
|
|
50
45
|
env: 'WS_DATA_DIRECTORY',
|
|
51
46
|
description: 'Optional directory for the world state database'
|
|
52
47
|
},
|
|
53
|
-
|
|
54
|
-
env: '
|
|
55
|
-
description: 'The number of historic blocks to maintain. Values less than 1 mean all history is maintained',
|
|
48
|
+
worldStateCheckpointHistory: {
|
|
49
|
+
env: 'WS_NUM_HISTORIC_CHECKPOINTS',
|
|
50
|
+
description: 'The number of historic checkpoints worth of blocks to maintain. Values less than 1 mean all history is maintained',
|
|
51
|
+
fallback: [
|
|
52
|
+
'WS_NUM_HISTORIC_BLOCKS'
|
|
53
|
+
],
|
|
56
54
|
...numberConfigHelper(64)
|
|
57
55
|
}
|
|
58
56
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
2
2
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
3
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
3
4
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
4
|
-
import type
|
|
5
|
+
import { type GenesisData } from '@aztec/stdlib/world-state';
|
|
5
6
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
7
|
import { WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
7
8
|
import { NativeWorldStateService } from '../native/native_world_state.js';
|
|
@@ -14,6 +15,6 @@ export interface WorldStateTreeMapSizes {
|
|
|
14
15
|
messageTreeMapSizeKb: number;
|
|
15
16
|
publicDataTreeMapSizeKb: number;
|
|
16
17
|
}
|
|
17
|
-
export declare function createWorldStateSynchronizer(config: WorldStateConfig & DataStoreConfig, l2BlockSource: L2BlockSource & L1ToL2MessageSource,
|
|
18
|
-
export declare function createWorldState(config: Pick<WorldStateConfig, 'worldStateDataDirectory' | 'worldStateDbMapSizeKb' | 'archiveTreeMapSizeKb' | 'nullifierTreeMapSizeKb' | 'noteHashTreeMapSizeKb' | 'messageTreeMapSizeKb' | 'publicDataTreeMapSizeKb'> & Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb' | 'l1Contracts'>,
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
export declare function createWorldStateSynchronizer(config: WorldStateConfig & DataStoreConfig, l2BlockSource: L2BlockSource & L1ToL2MessageSource, genesis?: GenesisData, 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'>, genesis?: GenesisData, instrumentation?: WorldStateInstrumentation, bindings?: LoggerBindings): Promise<NativeWorldStateService>;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFzQixLQUFLLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVwRixNQUFNLFdBQVcsc0JBQXNCO0lBQ3JDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3QixzQkFBc0IsRUFBRSxNQUFNLENBQUM7SUFDL0IscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBQzlCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3Qix1QkFBdUIsRUFBRSxNQUFNLENBQUM7Q0FDakM7QUFFRCx3QkFBc0IsNEJBQTRCLENBQ2hELE1BQU0sRUFBRSxnQkFBZ0IsR0FBRyxlQUFlLEVBQzFDLGFBQWEsRUFBRSxhQUFhLEdBQUcsbUJBQW1CLEVBQ2xELE9BQU8sR0FBRSxXQUFnQyxFQUN6QyxNQUFNLEdBQUUsZUFBc0MsRUFDOUMsUUFBUSxDQUFDLEVBQUUsY0FBYyx5Q0FLMUI7QUFFRCx3QkFBc0IsZ0JBQWdCLENBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQ1YsZ0JBQWdCLEVBQ2QseUJBQXlCLEdBQ3pCLHVCQUF1QixHQUN2QixzQkFBc0IsR0FDdEIsd0JBQXdCLEdBQ3hCLHVCQUF1QixHQUN2QixzQkFBc0IsR0FDdEIseUJBQXlCLENBQzVCLEdBQ0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxlQUFlLEdBQUcsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLEVBQy9FLE9BQU8sR0FBRSxXQUFnQyxFQUN6QyxlQUFlLEdBQUUseUJBQStFLEVBQ2hHLFFBQVEsQ0FBQyxFQUFFLGNBQWMsb0NBbUMxQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/synchronizer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
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,EAAE,MAAM,2BAA2B,CAAC;AACjF,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,OAAO,GAAE,WAAgC,EACzC,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,OAAO,GAAE,WAAgC,EACzC,eAAe,GAAE,yBAA+E,EAChG,QAAQ,CAAC,EAAE,cAAc,oCAmC1B"}
|