@aztec/aztec-node 0.1.0-alpha43 → 0.1.0-alpha44
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/.tsbuildinfo +1 -1
- package/dest/aztec-node/server.d.ts +12 -3
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +66 -29
- package/package.json +10 -10
- package/src/aztec-node/server.ts +72 -38
|
@@ -4,7 +4,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
|
4
4
|
import { P2P } from '@aztec/p2p';
|
|
5
5
|
import { SequencerClient } from '@aztec/sequencer-client';
|
|
6
6
|
import { AztecNode, ContractData, ContractDataAndBytecode, ContractDataSource, L1ToL2MessageAndIndex, L1ToL2MessageSource, L2Block, L2BlockL2Logs, L2BlockSource, L2LogsSource, LogType, MerkleTreeId, SiblingPath, Tx, TxHash } from '@aztec/types';
|
|
7
|
-
import {
|
|
7
|
+
import { WorldStateSynchroniser } from '@aztec/world-state';
|
|
8
8
|
import { MemDown } from 'memdown';
|
|
9
9
|
import { AztecNodeConfig } from './config.js';
|
|
10
10
|
export declare const createMemDown: () => MemDown<any, any>;
|
|
@@ -18,13 +18,12 @@ export declare class AztecNodeService implements AztecNode {
|
|
|
18
18
|
protected unencryptedLogsSource: L2LogsSource;
|
|
19
19
|
protected contractDataSource: ContractDataSource;
|
|
20
20
|
protected l1ToL2MessageSource: L1ToL2MessageSource;
|
|
21
|
-
protected merkleTreeDB: MerkleTrees;
|
|
22
21
|
protected worldStateSynchroniser: WorldStateSynchroniser;
|
|
23
22
|
protected sequencer: SequencerClient;
|
|
24
23
|
protected chainId: number;
|
|
25
24
|
protected version: number;
|
|
26
25
|
private log;
|
|
27
|
-
constructor(p2pClient: P2P, blockSource: L2BlockSource, encryptedLogsSource: L2LogsSource, unencryptedLogsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource,
|
|
26
|
+
constructor(p2pClient: P2P, blockSource: L2BlockSource, encryptedLogsSource: L2LogsSource, unencryptedLogsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource, worldStateSynchroniser: WorldStateSynchroniser, sequencer: SequencerClient, chainId: number, version: number, log?: import("@aztec/foundation/log").DebugLogger);
|
|
28
27
|
/**
|
|
29
28
|
* Initialises the Aztec Node, wait for component to sync.
|
|
30
29
|
* @param config - The configuration to be used by the aztec node.
|
|
@@ -166,5 +165,15 @@ export declare class AztecNodeService implements AztecNode {
|
|
|
166
165
|
* @returns The current committed block data.
|
|
167
166
|
*/
|
|
168
167
|
getHistoricBlockData(): Promise<HistoricBlockData>;
|
|
168
|
+
/**
|
|
169
|
+
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
170
|
+
* @returns An instance of a committed MerkleTreeOperations
|
|
171
|
+
*/
|
|
172
|
+
private getWorldState;
|
|
173
|
+
/**
|
|
174
|
+
* Ensure we fully sync the world state
|
|
175
|
+
* @returns A promise that fulfils once the world state is synced
|
|
176
|
+
*/
|
|
177
|
+
private syncWorldState;
|
|
169
178
|
}
|
|
170
179
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":";AACA,OAAO,EACL,oBAAoB,EAEpB,UAAU,EACV,EAAE,EACF,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAkB,GAAG,EAAmB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,aAAa,EACb,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,EAAE,EACF,MAAM,EACP,MAAM,cAAc,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { createDebugLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { InMemoryTxPool, createP2PClient } from '@aztec/p2p';
|
|
5
5
|
import { SequencerClient } from '@aztec/sequencer-client';
|
|
6
6
|
import { LogType, MerkleTreeId, } from '@aztec/types';
|
|
7
|
-
import { MerkleTrees, ServerWorldStateSynchroniser, computePublicDataTreeLeafIndex, } from '@aztec/world-state';
|
|
7
|
+
import { MerkleTrees, ServerWorldStateSynchroniser, computePublicDataTreeLeafIndex, getConfigEnvVars as getWorldStateConfig, } from '@aztec/world-state';
|
|
8
8
|
import { default as levelup } from 'levelup';
|
|
9
9
|
import { default as memdown } from 'memdown';
|
|
10
10
|
export const createMemDown = () => memdown();
|
|
@@ -12,14 +12,13 @@ export const createMemDown = () => memdown();
|
|
|
12
12
|
* The aztec node.
|
|
13
13
|
*/
|
|
14
14
|
export class AztecNodeService {
|
|
15
|
-
constructor(p2pClient, blockSource, encryptedLogsSource, unencryptedLogsSource, contractDataSource, l1ToL2MessageSource,
|
|
15
|
+
constructor(p2pClient, blockSource, encryptedLogsSource, unencryptedLogsSource, contractDataSource, l1ToL2MessageSource, worldStateSynchroniser, sequencer, chainId, version, log = createDebugLogger('aztec:node')) {
|
|
16
16
|
this.p2pClient = p2pClient;
|
|
17
17
|
this.blockSource = blockSource;
|
|
18
18
|
this.encryptedLogsSource = encryptedLogsSource;
|
|
19
19
|
this.unencryptedLogsSource = unencryptedLogsSource;
|
|
20
20
|
this.contractDataSource = contractDataSource;
|
|
21
21
|
this.l1ToL2MessageSource = l1ToL2MessageSource;
|
|
22
|
-
this.merkleTreeDB = merkleTreeDB;
|
|
23
22
|
this.worldStateSynchroniser = worldStateSynchroniser;
|
|
24
23
|
this.sequencer = sequencer;
|
|
25
24
|
this.chainId = chainId;
|
|
@@ -41,12 +40,13 @@ export class AztecNodeService {
|
|
|
41
40
|
const p2pClient = await createP2PClient(config, new InMemoryTxPool(), archiver);
|
|
42
41
|
// now create the merkle trees and the world state syncher
|
|
43
42
|
const merkleTreeDB = await MerkleTrees.new(levelup(createMemDown()), await CircuitsWasm.get());
|
|
44
|
-
const
|
|
43
|
+
const worldStateConfig = getWorldStateConfig();
|
|
44
|
+
const worldStateSynchroniser = new ServerWorldStateSynchroniser(merkleTreeDB, archiver, worldStateConfig);
|
|
45
45
|
// start both and wait for them to sync from the block source
|
|
46
46
|
await Promise.all([p2pClient.start(), worldStateSynchroniser.start()]);
|
|
47
47
|
// now create the sequencer
|
|
48
48
|
const sequencer = await SequencerClient.new(config, p2pClient, worldStateSynchroniser, archiver, archiver, archiver);
|
|
49
|
-
return new AztecNodeService(p2pClient, archiver, archiver, archiver, archiver, archiver,
|
|
49
|
+
return new AztecNodeService(p2pClient, archiver, archiver, archiver, archiver, archiver, worldStateSynchroniser, sequencer, config.chainId, config.version);
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* Method to determine if the node is ready to accept transactions.
|
|
@@ -144,7 +144,6 @@ export class AztecNodeService {
|
|
|
144
144
|
await this.sequencer.stop();
|
|
145
145
|
await this.p2pClient.stop();
|
|
146
146
|
await this.worldStateSynchroniser.stop();
|
|
147
|
-
await this.merkleTreeDB.stop();
|
|
148
147
|
await this.blockSource.stop();
|
|
149
148
|
this.log.info(`Stopped`);
|
|
150
149
|
}
|
|
@@ -168,32 +167,36 @@ export class AztecNodeService {
|
|
|
168
167
|
* @param leafValue - The value to search for.
|
|
169
168
|
* @returns The index of the given leaf in the contracts tree or undefined if not found.
|
|
170
169
|
*/
|
|
171
|
-
findContractIndex(leafValue) {
|
|
172
|
-
|
|
170
|
+
async findContractIndex(leafValue) {
|
|
171
|
+
const committedDb = await this.getWorldState();
|
|
172
|
+
return committedDb.findLeafIndex(MerkleTreeId.CONTRACT_TREE, leafValue);
|
|
173
173
|
}
|
|
174
174
|
/**
|
|
175
175
|
* Returns the sibling path for the given index in the contract tree.
|
|
176
176
|
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
177
177
|
* @returns The sibling path for the leaf index.
|
|
178
178
|
*/
|
|
179
|
-
getContractPath(leafIndex) {
|
|
180
|
-
|
|
179
|
+
async getContractPath(leafIndex) {
|
|
180
|
+
const committedDb = await this.getWorldState();
|
|
181
|
+
return committedDb.getSiblingPath(MerkleTreeId.CONTRACT_TREE, leafIndex);
|
|
181
182
|
}
|
|
182
183
|
/**
|
|
183
184
|
* Find the index of the given commitment.
|
|
184
185
|
* @param leafValue - The value to search for.
|
|
185
186
|
* @returns The index of the given leaf in the private data tree or undefined if not found.
|
|
186
187
|
*/
|
|
187
|
-
findCommitmentIndex(leafValue) {
|
|
188
|
-
|
|
188
|
+
async findCommitmentIndex(leafValue) {
|
|
189
|
+
const committedDb = await this.getWorldState();
|
|
190
|
+
return committedDb.findLeafIndex(MerkleTreeId.PRIVATE_DATA_TREE, leafValue);
|
|
189
191
|
}
|
|
190
192
|
/**
|
|
191
193
|
* Returns the sibling path for the given index in the data tree.
|
|
192
194
|
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
193
195
|
* @returns The sibling path for the leaf index.
|
|
194
196
|
*/
|
|
195
|
-
getDataTreePath(leafIndex) {
|
|
196
|
-
|
|
197
|
+
async getDataTreePath(leafIndex) {
|
|
198
|
+
const committedDb = await this.getWorldState();
|
|
199
|
+
return committedDb.getSiblingPath(MerkleTreeId.PRIVATE_DATA_TREE, leafIndex);
|
|
197
200
|
}
|
|
198
201
|
/**
|
|
199
202
|
* Gets a confirmed/consumed L1 to L2 message for the given message key
|
|
@@ -203,8 +206,9 @@ export class AztecNodeService {
|
|
|
203
206
|
*/
|
|
204
207
|
async getL1ToL2MessageAndIndex(messageKey) {
|
|
205
208
|
// todo: #697 - make this one lookup.
|
|
209
|
+
const committedDb = await this.getWorldState();
|
|
206
210
|
const message = await this.l1ToL2MessageSource.getConfirmedL1ToL2Message(messageKey);
|
|
207
|
-
const index = (await
|
|
211
|
+
const index = (await committedDb.findLeafIndex(MerkleTreeId.L1_TO_L2_MESSAGES_TREE, messageKey.toBuffer()));
|
|
208
212
|
return Promise.resolve({ message, index });
|
|
209
213
|
}
|
|
210
214
|
/**
|
|
@@ -212,8 +216,9 @@ export class AztecNodeService {
|
|
|
212
216
|
* @param leafIndex - Index of the leaf in the tree.
|
|
213
217
|
* @returns The sibling path.
|
|
214
218
|
*/
|
|
215
|
-
getL1ToL2MessagesTreePath(leafIndex) {
|
|
216
|
-
|
|
219
|
+
async getL1ToL2MessagesTreePath(leafIndex) {
|
|
220
|
+
const committedDb = await this.getWorldState();
|
|
221
|
+
return committedDb.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGES_TREE, leafIndex);
|
|
217
222
|
}
|
|
218
223
|
/**
|
|
219
224
|
* Gets the storage value at the given contract slot.
|
|
@@ -223,22 +228,32 @@ export class AztecNodeService {
|
|
|
223
228
|
* Note: Aztec's version of `eth_getStorageAt`.
|
|
224
229
|
*/
|
|
225
230
|
async getPublicStorageAt(contract, slot) {
|
|
231
|
+
const committedDb = await this.getWorldState();
|
|
226
232
|
const leafIndex = computePublicDataTreeLeafIndex(contract, new Fr(slot), await CircuitsWasm.get());
|
|
227
|
-
return
|
|
233
|
+
return committedDb.getLeafValue(MerkleTreeId.PUBLIC_DATA_TREE, leafIndex);
|
|
228
234
|
}
|
|
229
235
|
/**
|
|
230
236
|
* Returns the current committed roots for the data trees.
|
|
231
237
|
* @returns The current committed roots for the data trees.
|
|
232
238
|
*/
|
|
233
239
|
async getTreeRoots() {
|
|
234
|
-
const
|
|
240
|
+
const committedDb = await this.getWorldState();
|
|
241
|
+
const getTreeRoot = async (id) => Fr.fromBuffer((await committedDb.getTreeInfo(id)).root);
|
|
242
|
+
const [privateDataTree, nullifierTree, contractTree, l1ToL2MessagesTree, blocksTree, publicDataTree] = await Promise.all([
|
|
243
|
+
getTreeRoot(MerkleTreeId.PRIVATE_DATA_TREE),
|
|
244
|
+
getTreeRoot(MerkleTreeId.NULLIFIER_TREE),
|
|
245
|
+
getTreeRoot(MerkleTreeId.CONTRACT_TREE),
|
|
246
|
+
getTreeRoot(MerkleTreeId.L1_TO_L2_MESSAGES_TREE),
|
|
247
|
+
getTreeRoot(MerkleTreeId.BLOCKS_TREE),
|
|
248
|
+
getTreeRoot(MerkleTreeId.PUBLIC_DATA_TREE),
|
|
249
|
+
]);
|
|
235
250
|
return {
|
|
236
|
-
[MerkleTreeId.CONTRACT_TREE]:
|
|
237
|
-
[MerkleTreeId.PRIVATE_DATA_TREE]:
|
|
238
|
-
[MerkleTreeId.NULLIFIER_TREE]:
|
|
239
|
-
[MerkleTreeId.PUBLIC_DATA_TREE]:
|
|
240
|
-
[MerkleTreeId.L1_TO_L2_MESSAGES_TREE]:
|
|
241
|
-
[MerkleTreeId.BLOCKS_TREE]:
|
|
251
|
+
[MerkleTreeId.CONTRACT_TREE]: contractTree,
|
|
252
|
+
[MerkleTreeId.PRIVATE_DATA_TREE]: privateDataTree,
|
|
253
|
+
[MerkleTreeId.NULLIFIER_TREE]: nullifierTree,
|
|
254
|
+
[MerkleTreeId.PUBLIC_DATA_TREE]: publicDataTree,
|
|
255
|
+
[MerkleTreeId.L1_TO_L2_MESSAGES_TREE]: l1ToL2MessagesTree,
|
|
256
|
+
[MerkleTreeId.BLOCKS_TREE]: blocksTree,
|
|
242
257
|
};
|
|
243
258
|
}
|
|
244
259
|
/**
|
|
@@ -246,9 +261,31 @@ export class AztecNodeService {
|
|
|
246
261
|
* @returns The current committed block data.
|
|
247
262
|
*/
|
|
248
263
|
async getHistoricBlockData() {
|
|
249
|
-
const
|
|
250
|
-
const globalsHash = this.
|
|
251
|
-
return new HistoricBlockData(
|
|
264
|
+
const committedDb = await this.getWorldState();
|
|
265
|
+
const [roots, globalsHash] = await Promise.all([this.getTreeRoots(), committedDb.getLatestGlobalVariablesHash()]);
|
|
266
|
+
return new HistoricBlockData(roots[MerkleTreeId.PRIVATE_DATA_TREE], roots[MerkleTreeId.NULLIFIER_TREE], roots[MerkleTreeId.CONTRACT_TREE], roots[MerkleTreeId.L1_TO_L2_MESSAGES_TREE], roots[MerkleTreeId.BLOCKS_TREE], Fr.ZERO, roots[MerkleTreeId.PUBLIC_DATA_TREE], globalsHash);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
270
|
+
* @returns An instance of a committed MerkleTreeOperations
|
|
271
|
+
*/
|
|
272
|
+
async getWorldState() {
|
|
273
|
+
try {
|
|
274
|
+
// Attempt to sync the world state if necessary
|
|
275
|
+
await this.syncWorldState();
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
this.log.error(`Error getting world state: ${err}`);
|
|
279
|
+
}
|
|
280
|
+
return this.worldStateSynchroniser.getCommitted();
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Ensure we fully sync the world state
|
|
284
|
+
* @returns A promise that fulfils once the world state is synced
|
|
285
|
+
*/
|
|
286
|
+
async syncWorldState() {
|
|
287
|
+
const blockSourceHeight = await this.blockSource.getBlockHeight();
|
|
288
|
+
await this.worldStateSynchroniser.syncImmediate(blockSourceHeight);
|
|
252
289
|
}
|
|
253
290
|
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F6dGVjLW5vZGUvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsWUFBWSxFQUVaLEVBQUUsRUFDRixpQkFBaUIsR0FHbEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFPLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQVdMLE9BQU8sRUFDUCxZQUFZLEdBSWIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNMLFdBQVcsRUFDWCw0QkFBNEIsRUFHNUIsOEJBQThCLEVBQzlCLGdCQUFnQixJQUFJLG1CQUFtQixHQUN4QyxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBVyxPQUFPLElBQUksT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXRELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBRSxPQUFlLEVBQXVCLENBQUM7QUFFM0U7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQ1ksU0FBYyxFQUNkLFdBQTBCLEVBQzFCLG1CQUFpQyxFQUNqQyxxQkFBbUMsRUFDbkMsa0JBQXNDLEVBQ3RDLG1CQUF3QyxFQUN4QyxzQkFBOEMsRUFDOUMsU0FBMEIsRUFDMUIsT0FBZSxFQUNmLE9BQWUsRUFDakIsTUFBTSxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7UUFWbkMsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNkLGdCQUFX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
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec-node",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-alpha44",
|
|
4
4
|
"exports": "./dest/index.js",
|
|
5
5
|
"main": "dest/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@aztec/archiver": "0.1.0-
|
|
9
|
-
"@aztec/circuits.js": "0.1.0-
|
|
10
|
-
"@aztec/foundation": "0.1.0-
|
|
11
|
-
"@aztec/l1-artifacts": "0.1.0-
|
|
12
|
-
"@aztec/merkle-tree": "0.1.0-
|
|
13
|
-
"@aztec/p2p": "0.1.0-
|
|
14
|
-
"@aztec/sequencer-client": "0.1.0-
|
|
15
|
-
"@aztec/types": "0.1.0-
|
|
16
|
-
"@aztec/world-state": "0.1.0-
|
|
8
|
+
"@aztec/archiver": "0.1.0-alpha44",
|
|
9
|
+
"@aztec/circuits.js": "0.1.0-alpha44",
|
|
10
|
+
"@aztec/foundation": "0.1.0-alpha44",
|
|
11
|
+
"@aztec/l1-artifacts": "0.1.0-alpha44",
|
|
12
|
+
"@aztec/merkle-tree": "0.1.0-alpha44",
|
|
13
|
+
"@aztec/p2p": "0.1.0-alpha44",
|
|
14
|
+
"@aztec/sequencer-client": "0.1.0-alpha44",
|
|
15
|
+
"@aztec/types": "0.1.0-alpha44",
|
|
16
|
+
"@aztec/world-state": "0.1.0-alpha44",
|
|
17
17
|
"tslib": "^2.4.0"
|
|
18
18
|
}
|
|
19
19
|
}
|
package/src/aztec-node/server.ts
CHANGED
|
@@ -32,8 +32,10 @@ import {
|
|
|
32
32
|
import {
|
|
33
33
|
MerkleTrees,
|
|
34
34
|
ServerWorldStateSynchroniser,
|
|
35
|
+
WorldStateConfig,
|
|
35
36
|
WorldStateSynchroniser,
|
|
36
37
|
computePublicDataTreeLeafIndex,
|
|
38
|
+
getConfigEnvVars as getWorldStateConfig,
|
|
37
39
|
} from '@aztec/world-state';
|
|
38
40
|
|
|
39
41
|
import { default as levelup } from 'levelup';
|
|
@@ -54,7 +56,6 @@ export class AztecNodeService implements AztecNode {
|
|
|
54
56
|
protected unencryptedLogsSource: L2LogsSource,
|
|
55
57
|
protected contractDataSource: ContractDataSource,
|
|
56
58
|
protected l1ToL2MessageSource: L1ToL2MessageSource,
|
|
57
|
-
protected merkleTreeDB: MerkleTrees,
|
|
58
59
|
protected worldStateSynchroniser: WorldStateSynchroniser,
|
|
59
60
|
protected sequencer: SequencerClient,
|
|
60
61
|
protected chainId: number,
|
|
@@ -80,7 +81,8 @@ export class AztecNodeService implements AztecNode {
|
|
|
80
81
|
|
|
81
82
|
// now create the merkle trees and the world state syncher
|
|
82
83
|
const merkleTreeDB = await MerkleTrees.new(levelup(createMemDown()), await CircuitsWasm.get());
|
|
83
|
-
const
|
|
84
|
+
const worldStateConfig: WorldStateConfig = getWorldStateConfig();
|
|
85
|
+
const worldStateSynchroniser = new ServerWorldStateSynchroniser(merkleTreeDB, archiver, worldStateConfig);
|
|
84
86
|
|
|
85
87
|
// start both and wait for them to sync from the block source
|
|
86
88
|
await Promise.all([p2pClient.start(), worldStateSynchroniser.start()]);
|
|
@@ -101,7 +103,6 @@ export class AztecNodeService implements AztecNode {
|
|
|
101
103
|
archiver,
|
|
102
104
|
archiver,
|
|
103
105
|
archiver,
|
|
104
|
-
merkleTreeDB,
|
|
105
106
|
worldStateSynchroniser,
|
|
106
107
|
sequencer,
|
|
107
108
|
config.chainId,
|
|
@@ -216,7 +217,6 @@ export class AztecNodeService implements AztecNode {
|
|
|
216
217
|
await this.sequencer.stop();
|
|
217
218
|
await this.p2pClient.stop();
|
|
218
219
|
await this.worldStateSynchroniser.stop();
|
|
219
|
-
await this.merkleTreeDB.stop();
|
|
220
220
|
await this.blockSource.stop();
|
|
221
221
|
this.log.info(`Stopped`);
|
|
222
222
|
}
|
|
@@ -243,8 +243,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
243
243
|
* @param leafValue - The value to search for.
|
|
244
244
|
* @returns The index of the given leaf in the contracts tree or undefined if not found.
|
|
245
245
|
*/
|
|
246
|
-
public findContractIndex(leafValue: Buffer): Promise<bigint | undefined> {
|
|
247
|
-
|
|
246
|
+
public async findContractIndex(leafValue: Buffer): Promise<bigint | undefined> {
|
|
247
|
+
const committedDb = await this.getWorldState();
|
|
248
|
+
return committedDb.findLeafIndex(MerkleTreeId.CONTRACT_TREE, leafValue);
|
|
248
249
|
}
|
|
249
250
|
|
|
250
251
|
/**
|
|
@@ -252,8 +253,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
252
253
|
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
253
254
|
* @returns The sibling path for the leaf index.
|
|
254
255
|
*/
|
|
255
|
-
public getContractPath(leafIndex: bigint): Promise<SiblingPath<typeof CONTRACT_TREE_HEIGHT>> {
|
|
256
|
-
|
|
256
|
+
public async getContractPath(leafIndex: bigint): Promise<SiblingPath<typeof CONTRACT_TREE_HEIGHT>> {
|
|
257
|
+
const committedDb = await this.getWorldState();
|
|
258
|
+
return committedDb.getSiblingPath(MerkleTreeId.CONTRACT_TREE, leafIndex);
|
|
257
259
|
}
|
|
258
260
|
|
|
259
261
|
/**
|
|
@@ -261,8 +263,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
261
263
|
* @param leafValue - The value to search for.
|
|
262
264
|
* @returns The index of the given leaf in the private data tree or undefined if not found.
|
|
263
265
|
*/
|
|
264
|
-
public findCommitmentIndex(leafValue: Buffer): Promise<bigint | undefined> {
|
|
265
|
-
|
|
266
|
+
public async findCommitmentIndex(leafValue: Buffer): Promise<bigint | undefined> {
|
|
267
|
+
const committedDb = await this.getWorldState();
|
|
268
|
+
return committedDb.findLeafIndex(MerkleTreeId.PRIVATE_DATA_TREE, leafValue);
|
|
266
269
|
}
|
|
267
270
|
|
|
268
271
|
/**
|
|
@@ -270,8 +273,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
270
273
|
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
271
274
|
* @returns The sibling path for the leaf index.
|
|
272
275
|
*/
|
|
273
|
-
public getDataTreePath(leafIndex: bigint): Promise<SiblingPath<typeof PRIVATE_DATA_TREE_HEIGHT>> {
|
|
274
|
-
|
|
276
|
+
public async getDataTreePath(leafIndex: bigint): Promise<SiblingPath<typeof PRIVATE_DATA_TREE_HEIGHT>> {
|
|
277
|
+
const committedDb = await this.getWorldState();
|
|
278
|
+
return committedDb.getSiblingPath(MerkleTreeId.PRIVATE_DATA_TREE, leafIndex);
|
|
275
279
|
}
|
|
276
280
|
|
|
277
281
|
/**
|
|
@@ -282,12 +286,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
282
286
|
*/
|
|
283
287
|
public async getL1ToL2MessageAndIndex(messageKey: Fr): Promise<L1ToL2MessageAndIndex> {
|
|
284
288
|
// todo: #697 - make this one lookup.
|
|
289
|
+
const committedDb = await this.getWorldState();
|
|
285
290
|
const message = await this.l1ToL2MessageSource.getConfirmedL1ToL2Message(messageKey);
|
|
286
|
-
const index = (await
|
|
287
|
-
MerkleTreeId.L1_TO_L2_MESSAGES_TREE,
|
|
288
|
-
messageKey.toBuffer(),
|
|
289
|
-
false,
|
|
290
|
-
))!;
|
|
291
|
+
const index = (await committedDb.findLeafIndex(MerkleTreeId.L1_TO_L2_MESSAGES_TREE, messageKey.toBuffer()))!;
|
|
291
292
|
return Promise.resolve({ message, index });
|
|
292
293
|
}
|
|
293
294
|
|
|
@@ -296,8 +297,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
296
297
|
* @param leafIndex - Index of the leaf in the tree.
|
|
297
298
|
* @returns The sibling path.
|
|
298
299
|
*/
|
|
299
|
-
public getL1ToL2MessagesTreePath(leafIndex: bigint): Promise<SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>> {
|
|
300
|
-
|
|
300
|
+
public async getL1ToL2MessagesTreePath(leafIndex: bigint): Promise<SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>> {
|
|
301
|
+
const committedDb = await this.getWorldState();
|
|
302
|
+
return committedDb.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGES_TREE, leafIndex);
|
|
301
303
|
}
|
|
302
304
|
|
|
303
305
|
/**
|
|
@@ -308,8 +310,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
308
310
|
* Note: Aztec's version of `eth_getStorageAt`.
|
|
309
311
|
*/
|
|
310
312
|
public async getPublicStorageAt(contract: AztecAddress, slot: bigint): Promise<Buffer | undefined> {
|
|
313
|
+
const committedDb = await this.getWorldState();
|
|
311
314
|
const leafIndex = computePublicDataTreeLeafIndex(contract, new Fr(slot), await CircuitsWasm.get());
|
|
312
|
-
return
|
|
315
|
+
return committedDb.getLeafValue(MerkleTreeId.PUBLIC_DATA_TREE, leafIndex);
|
|
313
316
|
}
|
|
314
317
|
|
|
315
318
|
/**
|
|
@@ -317,16 +320,26 @@ export class AztecNodeService implements AztecNode {
|
|
|
317
320
|
* @returns The current committed roots for the data trees.
|
|
318
321
|
*/
|
|
319
322
|
public async getTreeRoots(): Promise<Record<MerkleTreeId, Fr>> {
|
|
320
|
-
const
|
|
321
|
-
|
|
323
|
+
const committedDb = await this.getWorldState();
|
|
324
|
+
const getTreeRoot = async (id: MerkleTreeId) => Fr.fromBuffer((await committedDb.getTreeInfo(id)).root);
|
|
325
|
+
|
|
326
|
+
const [privateDataTree, nullifierTree, contractTree, l1ToL2MessagesTree, blocksTree, publicDataTree] =
|
|
327
|
+
await Promise.all([
|
|
328
|
+
getTreeRoot(MerkleTreeId.PRIVATE_DATA_TREE),
|
|
329
|
+
getTreeRoot(MerkleTreeId.NULLIFIER_TREE),
|
|
330
|
+
getTreeRoot(MerkleTreeId.CONTRACT_TREE),
|
|
331
|
+
getTreeRoot(MerkleTreeId.L1_TO_L2_MESSAGES_TREE),
|
|
332
|
+
getTreeRoot(MerkleTreeId.BLOCKS_TREE),
|
|
333
|
+
getTreeRoot(MerkleTreeId.PUBLIC_DATA_TREE),
|
|
334
|
+
]);
|
|
322
335
|
|
|
323
336
|
return {
|
|
324
|
-
[MerkleTreeId.CONTRACT_TREE]:
|
|
325
|
-
[MerkleTreeId.PRIVATE_DATA_TREE]:
|
|
326
|
-
[MerkleTreeId.NULLIFIER_TREE]:
|
|
327
|
-
[MerkleTreeId.PUBLIC_DATA_TREE]:
|
|
328
|
-
[MerkleTreeId.L1_TO_L2_MESSAGES_TREE]:
|
|
329
|
-
[MerkleTreeId.BLOCKS_TREE]:
|
|
337
|
+
[MerkleTreeId.CONTRACT_TREE]: contractTree,
|
|
338
|
+
[MerkleTreeId.PRIVATE_DATA_TREE]: privateDataTree,
|
|
339
|
+
[MerkleTreeId.NULLIFIER_TREE]: nullifierTree,
|
|
340
|
+
[MerkleTreeId.PUBLIC_DATA_TREE]: publicDataTree,
|
|
341
|
+
[MerkleTreeId.L1_TO_L2_MESSAGES_TREE]: l1ToL2MessagesTree,
|
|
342
|
+
[MerkleTreeId.BLOCKS_TREE]: blocksTree,
|
|
330
343
|
};
|
|
331
344
|
}
|
|
332
345
|
|
|
@@ -335,20 +348,41 @@ export class AztecNodeService implements AztecNode {
|
|
|
335
348
|
* @returns The current committed block data.
|
|
336
349
|
*/
|
|
337
350
|
public async getHistoricBlockData(): Promise<HistoricBlockData> {
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
const globalsHash = this.worldStateSynchroniser.latestGlobalVariablesHash;
|
|
351
|
+
const committedDb = await this.getWorldState();
|
|
352
|
+
const [roots, globalsHash] = await Promise.all([this.getTreeRoots(), committedDb.getLatestGlobalVariablesHash()]);
|
|
342
353
|
|
|
343
354
|
return new HistoricBlockData(
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
355
|
+
roots[MerkleTreeId.PRIVATE_DATA_TREE],
|
|
356
|
+
roots[MerkleTreeId.NULLIFIER_TREE],
|
|
357
|
+
roots[MerkleTreeId.CONTRACT_TREE],
|
|
358
|
+
roots[MerkleTreeId.L1_TO_L2_MESSAGES_TREE],
|
|
359
|
+
roots[MerkleTreeId.BLOCKS_TREE],
|
|
349
360
|
Fr.ZERO,
|
|
350
|
-
|
|
361
|
+
roots[MerkleTreeId.PUBLIC_DATA_TREE],
|
|
351
362
|
globalsHash,
|
|
352
363
|
);
|
|
353
364
|
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
368
|
+
* @returns An instance of a committed MerkleTreeOperations
|
|
369
|
+
*/
|
|
370
|
+
private async getWorldState() {
|
|
371
|
+
try {
|
|
372
|
+
// Attempt to sync the world state if necessary
|
|
373
|
+
await this.syncWorldState();
|
|
374
|
+
} catch (err) {
|
|
375
|
+
this.log.error(`Error getting world state: ${err}`);
|
|
376
|
+
}
|
|
377
|
+
return this.worldStateSynchroniser.getCommitted();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Ensure we fully sync the world state
|
|
382
|
+
* @returns A promise that fulfils once the world state is synced
|
|
383
|
+
*/
|
|
384
|
+
private async syncWorldState() {
|
|
385
|
+
const blockSourceHeight = await this.blockSource.getBlockHeight();
|
|
386
|
+
await this.worldStateSynchroniser.syncImmediate(blockSourceHeight);
|
|
387
|
+
}
|
|
354
388
|
}
|