@aztec/world-state 0.72.1 → 0.74.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.js +2 -2
- package/dest/native/message.d.ts +0 -30
- package/dest/native/message.d.ts.map +1 -1
- package/dest/native/message.js +1 -23
- package/dest/native/native_world_state.js +3 -3
- package/dest/native/native_world_state_instance.d.ts +1 -13
- package/dest/native/native_world_state_instance.d.ts.map +1 -1
- package/dest/native/native_world_state_instance.js +27 -94
- package/dest/native/world_state_version.js +2 -2
- package/dest/synchronizer/server_world_state_synchronizer.d.ts +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.js +6 -6
- package/dest/test/index.d.ts +2 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +2 -0
- package/dest/world-state-db/index.d.ts +0 -3
- package/dest/world-state-db/index.d.ts.map +1 -1
- package/dest/world-state-db/index.js +1 -4
- package/package.json +13 -17
- package/src/native/merkle_trees_facade.ts +1 -1
- package/src/native/message.ts +0 -44
- package/src/native/native_world_state.ts +2 -2
- package/src/native/native_world_state_instance.ts +28 -124
- package/src/native/world_state_version.ts +1 -1
- package/src/synchronizer/server_world_state_synchronizer.ts +6 -6
- package/src/test/index.ts +1 -0
- package/src/world-state-db/index.ts +0 -3
- package/dest/world-state-db/merkle_tree_map.d.ts +0 -11
- package/dest/world-state-db/merkle_tree_map.d.ts.map +0 -1
- package/dest/world-state-db/merkle_tree_map.js +0 -2
- package/dest/world-state-db/merkle_tree_operations_facade.d.ts +0 -116
- package/dest/world-state-db/merkle_tree_operations_facade.d.ts.map +0 -1
- package/dest/world-state-db/merkle_tree_operations_facade.js +0 -133
- package/dest/world-state-db/merkle_tree_snapshot_operations_facade.d.ts +0 -32
- package/dest/world-state-db/merkle_tree_snapshot_operations_facade.d.ts.map +0 -1
- package/dest/world-state-db/merkle_tree_snapshot_operations_facade.js +0 -76
- package/dest/world-state-db/merkle_trees.d.ts +0 -174
- package/dest/world-state-db/merkle_trees.d.ts.map +0 -1
- package/dest/world-state-db/merkle_trees.js +0 -461
- package/dest/world-state-db/metrics.d.ts +0 -14
- package/dest/world-state-db/metrics.d.ts.map +0 -1
- package/dest/world-state-db/metrics.js +0 -44
- package/src/world-state-db/merkle_tree_map.ts +0 -11
- package/src/world-state-db/merkle_tree_operations_facade.ts +0 -199
- package/src/world-state-db/merkle_tree_snapshot_operations_facade.ts +0 -151
- package/src/world-state-db/merkle_trees.ts +0 -727
- package/src/world-state-db/metrics.ts +0 -64
|
@@ -117,7 +117,7 @@ export class ServerWorldStateSynchronizer {
|
|
|
117
117
|
/** Returns the L2 block hash for a given number. Used by the L2BlockStream for detecting reorgs. */
|
|
118
118
|
async getL2BlockHash(number) {
|
|
119
119
|
if (number === 0) {
|
|
120
|
-
return
|
|
120
|
+
return (await this.merkleTreeCommitted.getInitialHeader().hash()).toString();
|
|
121
121
|
}
|
|
122
122
|
if (this.latestBlockHashQuery?.hash === undefined || number !== this.latestBlockHashQuery.blockNumber) {
|
|
123
123
|
this.latestBlockHashQuery = {
|
|
@@ -199,7 +199,7 @@ export class ServerWorldStateSynchronizer {
|
|
|
199
199
|
// Note that we cannot optimize this check by checking the root of the subtree after inserting the messages
|
|
200
200
|
// to the real L1_TO_L2_MESSAGE_TREE (like we do in merkleTreeDb.handleL2BlockAndMessages(...)) because that
|
|
201
201
|
// tree uses pedersen and we don't have access to the converted root.
|
|
202
|
-
this.verifyMessagesHashToInHash(l1ToL2Messages, l2Block.header.contentCommitment.inHash);
|
|
202
|
+
await this.verifyMessagesHashToInHash(l1ToL2Messages, l2Block.header.contentCommitment.inHash);
|
|
203
203
|
// If the above check succeeds, we can proceed to handle the block.
|
|
204
204
|
const result = await this.merkleTreeDb.handleL2BlockAndMessages(l2Block, l1ToL2Messages);
|
|
205
205
|
if (this.currentState === WorldStateRunningState.SYNCHING && l2Block.number >= this.latestBlockNumberAtStart) {
|
|
@@ -245,12 +245,12 @@ export class ServerWorldStateSynchronizer {
|
|
|
245
245
|
* @param inHash - The inHash of the block.
|
|
246
246
|
* @throws If the L1 to L2 messages do not hash to the block inHash.
|
|
247
247
|
*/
|
|
248
|
-
verifyMessagesHashToInHash(l1ToL2Messages, inHash) {
|
|
249
|
-
const treeCalculator =
|
|
250
|
-
const root = treeCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer()));
|
|
248
|
+
async verifyMessagesHashToInHash(l1ToL2Messages, inHash) {
|
|
249
|
+
const treeCalculator = await MerkleTreeCalculator.create(L1_TO_L2_MSG_SUBTREE_HEIGHT, Buffer.alloc(32), (lhs, rhs) => Promise.resolve(new SHA256Trunc().hash(lhs, rhs)));
|
|
250
|
+
const root = await treeCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer()));
|
|
251
251
|
if (!root.equals(inHash)) {
|
|
252
252
|
throw new Error('Obtained L1 to L2 messages failed to be hashed to the block inHash');
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyX3dvcmxkX3N0YXRlX3N5bmNocm9uaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jaHJvbml6ZXIvc2VydmVyX3dvcmxkX3N0YXRlX3N5bmNocm9uaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBVUwsWUFBWSxFQUdaLHNCQUFzQixHQUd2QixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBS2xGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sNEJBQTRCO0lBYXZDLFlBQ21CLFlBQXFDLEVBQ3JDLGFBQWtELEVBQ2xELE1BQXdCLEVBQ2pDLGtCQUFrQixJQUFJLHlCQUF5QixDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFDNUQsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDO1FBSmpDLGlCQUFZLEdBQVosWUFBWSxDQUF5QjtRQUNyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUM7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDakMsb0JBQWUsR0FBZixlQUFlLENBQXNEO1FBQzVELFFBQUcsR0FBSCxHQUFHLENBQThCO1FBYjVDLDZCQUF3QixHQUFH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
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyX3dvcmxkX3N0YXRlX3N5bmNocm9uaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jaHJvbml6ZXIvc2VydmVyX3dvcmxkX3N0YXRlX3N5bmNocm9uaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBVUwsWUFBWSxFQUdaLHNCQUFzQixHQUd2QixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBS2xGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sNEJBQTRCO0lBYXZDLFlBQ21CLFlBQXFDLEVBQ3JDLGFBQWtELEVBQ2xELE1BQXdCLEVBQ2pDLGtCQUFrQixJQUFJLHlCQUF5QixDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFDNUQsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDO1FBSmpDLGlCQUFZLEdBQVosWUFBWSxDQUF5QjtRQUNyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUM7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDakMsb0JBQWUsR0FBZixlQUFlLENBQXNEO1FBQzVELFFBQUcsR0FBSCxHQUFHLENBQThCO1FBYjVDLDZCQUF3QixHQUFH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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
export * from './merkle_trees.js';
|
|
2
1
|
export * from './merkle_tree_db.js';
|
|
3
|
-
export * from './merkle_tree_operations_facade.js';
|
|
4
|
-
export * from './merkle_tree_snapshot_operations_facade.js';
|
|
5
2
|
export { MerkleTreeReadOperations } from '@aztec/circuit-types/interfaces';
|
|
6
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/world-state-db/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/world-state-db/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
export * from './merkle_trees.js';
|
|
2
1
|
export * from './merkle_tree_db.js';
|
|
3
|
-
|
|
4
|
-
export * from './merkle_tree_snapshot_operations_facade.js';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ybGQtc3RhdGUtZGIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyw2Q0FBNkMsQ0FBQyJ9
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ybGQtc3RhdGUtZGIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/world-state",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.74.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
7
|
"./native": "./dest/native/index.js",
|
|
8
|
+
"./test": "./dest/test/index.js",
|
|
8
9
|
"./config": "./dest/synchronizer/config.js"
|
|
9
10
|
},
|
|
10
11
|
"typedocOptions": {
|
|
@@ -15,18 +16,15 @@
|
|
|
15
16
|
"tsconfig": "./tsconfig.json"
|
|
16
17
|
},
|
|
17
18
|
"scripts": {
|
|
18
|
-
"build": "yarn clean &&
|
|
19
|
-
"build:cpp": "./scripts/build.sh cpp",
|
|
19
|
+
"build": "yarn clean && tsc -b",
|
|
20
20
|
"build:dev": "tsc -b --watch",
|
|
21
|
-
"clean": "rm -rf ./dest
|
|
21
|
+
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
22
22
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
23
23
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
24
|
-
"generate": "mkdir -p build && cp -v ../../barretenberg/cpp/build-pic/lib/world_state_napi.node build",
|
|
25
24
|
"test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
26
25
|
},
|
|
27
26
|
"inherits": [
|
|
28
|
-
"../package.common.json"
|
|
29
|
-
"./package.local.json"
|
|
27
|
+
"../package.common.json"
|
|
30
28
|
],
|
|
31
29
|
"jest": {
|
|
32
30
|
"moduleNameMapper": {
|
|
@@ -62,22 +60,20 @@
|
|
|
62
60
|
]
|
|
63
61
|
},
|
|
64
62
|
"dependencies": {
|
|
65
|
-
"@aztec/circuit-types": "0.
|
|
66
|
-
"@aztec/circuits.js": "0.
|
|
67
|
-
"@aztec/foundation": "0.
|
|
68
|
-
"@aztec/kv-store": "0.
|
|
69
|
-
"@aztec/merkle-tree": "0.
|
|
70
|
-
"@aztec/
|
|
71
|
-
"@aztec/
|
|
72
|
-
"
|
|
73
|
-
"msgpackr": "^1.10.2",
|
|
63
|
+
"@aztec/circuit-types": "0.74.0",
|
|
64
|
+
"@aztec/circuits.js": "0.74.0",
|
|
65
|
+
"@aztec/foundation": "0.74.0",
|
|
66
|
+
"@aztec/kv-store": "0.74.0",
|
|
67
|
+
"@aztec/merkle-tree": "0.74.0",
|
|
68
|
+
"@aztec/native": "0.74.0",
|
|
69
|
+
"@aztec/telemetry-client": "0.74.0",
|
|
70
|
+
"@aztec/types": "0.74.0",
|
|
74
71
|
"tslib": "^2.4.0",
|
|
75
72
|
"zod": "^3.23.8"
|
|
76
73
|
},
|
|
77
74
|
"devDependencies": {
|
|
78
75
|
"@aztec/archiver": "workspace:^",
|
|
79
76
|
"@jest/globals": "^29.5.0",
|
|
80
|
-
"@types/bindings": "^1.5.5",
|
|
81
77
|
"@types/jest": "^29.5.0",
|
|
82
78
|
"@types/levelup": "^5.1.2",
|
|
83
79
|
"@types/memdown": "^3.0.0",
|
|
@@ -193,7 +193,7 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade implements MerkleTr
|
|
|
193
193
|
async updateArchive(header: BlockHeader): Promise<void> {
|
|
194
194
|
await this.instance.call(WorldStateMessageType.UPDATE_ARCHIVE, {
|
|
195
195
|
forkId: this.revision.forkId,
|
|
196
|
-
blockHeaderHash: header.hash().toBuffer(),
|
|
196
|
+
blockHeaderHash: (await header.hash()).toBuffer(),
|
|
197
197
|
blockStateRef: blockStateReference(header.state),
|
|
198
198
|
});
|
|
199
199
|
}
|
package/src/native/message.ts
CHANGED
|
@@ -2,50 +2,6 @@ import { MerkleTreeId } from '@aztec/circuit-types';
|
|
|
2
2
|
import { AppendOnlyTreeSnapshot, Fr, type StateReference, type UInt32 } from '@aztec/circuits.js';
|
|
3
3
|
import { type Tuple } from '@aztec/foundation/serialize';
|
|
4
4
|
|
|
5
|
-
export type MessageHeaderInit = {
|
|
6
|
-
/** The message ID. Optional, if not set defaults to 0 */
|
|
7
|
-
messageId?: number;
|
|
8
|
-
/** Identifies the original request. Optional */
|
|
9
|
-
requestId?: number;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export class MessageHeader {
|
|
13
|
-
/** An number to identify this message */
|
|
14
|
-
public readonly messageId: number;
|
|
15
|
-
/** If this message is a response to a request, the messageId of the request */
|
|
16
|
-
public readonly requestId: number;
|
|
17
|
-
|
|
18
|
-
constructor({ messageId, requestId }: MessageHeaderInit) {
|
|
19
|
-
this.messageId = messageId ?? 0;
|
|
20
|
-
this.requestId = requestId ?? 0;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static fromMessagePack(data: object): MessageHeader {
|
|
24
|
-
return new MessageHeader(data as MessageHeaderInit);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
interface TypedMessageLike {
|
|
29
|
-
msgType: number;
|
|
30
|
-
header: {
|
|
31
|
-
messageId?: number;
|
|
32
|
-
requestId?: number;
|
|
33
|
-
};
|
|
34
|
-
value: any;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export class TypedMessage<T, B> {
|
|
38
|
-
public constructor(public readonly msgType: T, public readonly header: MessageHeader, public readonly value: B) {}
|
|
39
|
-
|
|
40
|
-
static fromMessagePack<T, B>(data: TypedMessageLike): TypedMessage<T, B> {
|
|
41
|
-
return new TypedMessage<T, B>(data['msgType'] as T, MessageHeader.fromMessagePack(data['header']), data['value']);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
static isTypedMessageLike(obj: any): obj is TypedMessageLike {
|
|
45
|
-
return typeof obj === 'object' && obj !== null && 'msgType' in obj && 'header' in obj && 'value' in obj;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
5
|
export enum WorldStateMessageType {
|
|
50
6
|
GET_TREE_INFO = 100,
|
|
51
7
|
GET_STATE_REFERENCE,
|
|
@@ -143,7 +143,7 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
143
143
|
|
|
144
144
|
// the initial header _must_ be the first element in the archive tree
|
|
145
145
|
// if this assertion fails, check that the hashing done in Header in yarn-project matches the initial header hash done in world_state.cpp
|
|
146
|
-
const indices = await committed.findLeafIndices(MerkleTreeId.ARCHIVE, [this.initialHeader.hash()]);
|
|
146
|
+
const indices = await committed.findLeafIndices(MerkleTreeId.ARCHIVE, [await this.initialHeader.hash()]);
|
|
147
147
|
const initialHeaderIndex = indices[0];
|
|
148
148
|
assert.strictEqual(initialHeaderIndex, 0n, 'Invalid initial archive state');
|
|
149
149
|
}
|
|
@@ -193,7 +193,7 @@ export class NativeWorldStateService implements MerkleTreeDatabase {
|
|
|
193
193
|
WorldStateMessageType.SYNC_BLOCK,
|
|
194
194
|
{
|
|
195
195
|
blockNumber: l2Block.number,
|
|
196
|
-
blockHeaderHash: l2Block.header.hash(),
|
|
196
|
+
blockHeaderHash: await l2Block.header.hash(),
|
|
197
197
|
paddedL1ToL2Messages: paddedL1ToL2Messages.map(serializeLeaf),
|
|
198
198
|
paddedNoteHashes: paddedNoteHashes.map(serializeLeaf),
|
|
199
199
|
paddedNullifiers: paddedNullifiers.map(serializeLeaf),
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { MerkleTreeId } from '@aztec/circuit-types';
|
|
2
2
|
import {
|
|
3
3
|
ARCHIVE_HEIGHT,
|
|
4
|
-
Fr,
|
|
5
4
|
GeneratorIndex,
|
|
6
5
|
L1_TO_L2_MSG_TREE_HEIGHT,
|
|
7
6
|
MAX_NULLIFIERS_PER_TX,
|
|
@@ -11,17 +10,13 @@ import {
|
|
|
11
10
|
PUBLIC_DATA_TREE_HEIGHT,
|
|
12
11
|
} from '@aztec/circuits.js';
|
|
13
12
|
import { createLogger } from '@aztec/foundation/log';
|
|
13
|
+
import { NativeWorldState as BaseNativeWorldState, MsgpackChannel } from '@aztec/native';
|
|
14
14
|
|
|
15
15
|
import assert from 'assert';
|
|
16
|
-
import bindings from 'bindings';
|
|
17
|
-
import { Decoder, Encoder, addExtension } from 'msgpackr';
|
|
18
16
|
import { cpus } from 'os';
|
|
19
|
-
import { isAnyArrayBuffer } from 'util/types';
|
|
20
17
|
|
|
21
18
|
import { type WorldStateInstrumentation } from '../instrumentation/instrumentation.js';
|
|
22
19
|
import {
|
|
23
|
-
MessageHeader,
|
|
24
|
-
TypedMessage,
|
|
25
20
|
WorldStateMessageType,
|
|
26
21
|
type WorldStateRequest,
|
|
27
22
|
type WorldStateRequestCategories,
|
|
@@ -32,24 +27,6 @@ import {
|
|
|
32
27
|
} from './message.js';
|
|
33
28
|
import { WorldStateOpsQueue } from './world_state_ops_queue.js';
|
|
34
29
|
|
|
35
|
-
// small extension to pack an NodeJS Fr instance to a representation that the C++ code can understand
|
|
36
|
-
// this only works for writes. Unpacking from C++ can't create Fr instances because the data is passed
|
|
37
|
-
// as raw, untagged, buffers. On the NodeJS side we don't know what the buffer represents
|
|
38
|
-
// Adding a tag would be a solution, but it would have to be done on both sides and it's unclear where else
|
|
39
|
-
// C++ fr instances are sent/received/stored.
|
|
40
|
-
addExtension({
|
|
41
|
-
Class: Fr,
|
|
42
|
-
write: fr => fr.toBuffer(),
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
export interface NativeInstance {
|
|
46
|
-
call(msg: Buffer | Uint8Array): Promise<any>;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const NATIVE_LIBRARY_NAME = 'world_state_napi';
|
|
50
|
-
const NATIVE_CLASS_NAME = 'WorldState';
|
|
51
|
-
|
|
52
|
-
const NATIVE_MODULE = bindings(NATIVE_LIBRARY_NAME);
|
|
53
30
|
const MAX_WORLD_STATE_THREADS = +(process.env.HARDWARE_CONCURRENCY || '16');
|
|
54
31
|
|
|
55
32
|
export interface NativeWorldStateInstance {
|
|
@@ -65,29 +42,11 @@ export interface NativeWorldStateInstance {
|
|
|
65
42
|
export class NativeWorldState implements NativeWorldStateInstance {
|
|
66
43
|
private open = true;
|
|
67
44
|
|
|
68
|
-
/** Each message needs a unique ID */
|
|
69
|
-
private nextMessageId = 0;
|
|
70
|
-
|
|
71
|
-
/** A long-lived msgpack encoder */
|
|
72
|
-
private encoder = new Encoder({
|
|
73
|
-
// always encode JS objects as MessagePack maps
|
|
74
|
-
// this makes it compatible with other MessagePack decoders
|
|
75
|
-
useRecords: false,
|
|
76
|
-
int64AsType: 'bigint',
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
/** A long-lived msgpack decoder */
|
|
80
|
-
private decoder = new Decoder({
|
|
81
|
-
useRecords: false,
|
|
82
|
-
int64AsType: 'bigint',
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
/** The actual native instance */
|
|
86
|
-
private instance: any;
|
|
87
|
-
|
|
88
45
|
// We maintain a map of queue to fork
|
|
89
46
|
private queues = new Map<number, WorldStateOpsQueue>();
|
|
90
47
|
|
|
48
|
+
private instance: MsgpackChannel<WorldStateMessageType, WorldStateRequest, WorldStateResponse>;
|
|
49
|
+
|
|
91
50
|
/** Creates a new native WorldState instance */
|
|
92
51
|
constructor(
|
|
93
52
|
dataDir: string,
|
|
@@ -99,7 +58,7 @@ export class NativeWorldState implements NativeWorldStateInstance {
|
|
|
99
58
|
log.info(
|
|
100
59
|
`Creating world state data store at directory ${dataDir} with map size ${dbMapSizeKb} KB and ${threads} threads.`,
|
|
101
60
|
);
|
|
102
|
-
|
|
61
|
+
const ws = new BaseNativeWorldState(
|
|
103
62
|
dataDir,
|
|
104
63
|
{
|
|
105
64
|
[MerkleTreeId.NULLIFIER_TREE]: NULLIFIER_TREE_HEIGHT,
|
|
@@ -116,6 +75,7 @@ export class NativeWorldState implements NativeWorldStateInstance {
|
|
|
116
75
|
dbMapSizeKb,
|
|
117
76
|
threads,
|
|
118
77
|
);
|
|
78
|
+
this.instance = new MsgpackChannel(ws);
|
|
119
79
|
// Manually create the queue for the canonical fork
|
|
120
80
|
this.queues.set(0, new WorldStateOpsQueue());
|
|
121
81
|
}
|
|
@@ -213,118 +173,62 @@ export class NativeWorldState implements NativeWorldStateInstance {
|
|
|
213
173
|
messageType: T,
|
|
214
174
|
body: WorldStateRequest[T] & WorldStateRequestCategories,
|
|
215
175
|
): Promise<WorldStateResponse[T]> {
|
|
216
|
-
|
|
176
|
+
let logMetadata: Record<string, any> = {};
|
|
177
|
+
|
|
217
178
|
if (body) {
|
|
218
|
-
let data: Record<string, any> = {};
|
|
219
179
|
if ('treeId' in body) {
|
|
220
|
-
|
|
180
|
+
logMetadata['treeId'] = MerkleTreeId[body.treeId];
|
|
221
181
|
}
|
|
222
182
|
|
|
223
183
|
if ('revision' in body) {
|
|
224
|
-
|
|
184
|
+
logMetadata = { ...logMetadata, ...body.revision };
|
|
225
185
|
}
|
|
226
186
|
|
|
227
187
|
if ('forkId' in body) {
|
|
228
|
-
|
|
188
|
+
logMetadata['forkId'] = body.forkId;
|
|
229
189
|
}
|
|
230
190
|
|
|
231
191
|
if ('blockNumber' in body) {
|
|
232
|
-
|
|
192
|
+
logMetadata['blockNumber'] = body.blockNumber;
|
|
233
193
|
}
|
|
234
194
|
|
|
235
195
|
if ('toBlockNumber' in body) {
|
|
236
|
-
|
|
196
|
+
logMetadata['toBlockNumber'] = body.toBlockNumber;
|
|
237
197
|
}
|
|
238
198
|
|
|
239
199
|
if ('leafIndex' in body) {
|
|
240
|
-
|
|
200
|
+
logMetadata['leafIndex'] = body.leafIndex;
|
|
241
201
|
}
|
|
242
202
|
|
|
243
203
|
if ('blockHeaderHash' in body) {
|
|
244
|
-
|
|
204
|
+
logMetadata['blockHeaderHash'] = '0x' + body.blockHeaderHash.toString('hex');
|
|
245
205
|
}
|
|
246
206
|
|
|
247
207
|
if ('leaves' in body) {
|
|
248
|
-
|
|
208
|
+
logMetadata['leavesCount'] = body.leaves.length;
|
|
249
209
|
}
|
|
250
210
|
|
|
251
211
|
// sync operation
|
|
252
212
|
if ('paddedNoteHashes' in body) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
213
|
+
logMetadata['notesCount'] = body.paddedNoteHashes.length;
|
|
214
|
+
logMetadata['nullifiersCount'] = body.paddedNullifiers.length;
|
|
215
|
+
logMetadata['l1ToL2MessagesCount'] = body.paddedL1ToL2Messages.length;
|
|
216
|
+
logMetadata['publicDataWritesCount'] = body.publicDataWrites.length;
|
|
257
217
|
}
|
|
258
|
-
|
|
259
|
-
this.log.trace(`Calling messageId=${messageId} ${WorldStateMessageType[messageType]}`, data);
|
|
260
|
-
} else {
|
|
261
|
-
this.log.trace(`Calling messageId=${messageId} ${WorldStateMessageType[messageType]}`);
|
|
262
218
|
}
|
|
263
219
|
|
|
264
|
-
const start = process.hrtime.bigint();
|
|
265
|
-
|
|
266
|
-
const request = new TypedMessage(messageType, new MessageHeader({ messageId }), body);
|
|
267
|
-
const encodedRequest = this.encoder.encode(request);
|
|
268
|
-
const encodingEnd = process.hrtime.bigint();
|
|
269
|
-
const encodingDuration = Number(encodingEnd - start) / 1_000_000;
|
|
270
|
-
|
|
271
|
-
let encodedResponse: any;
|
|
272
220
|
try {
|
|
273
|
-
|
|
221
|
+
const { duration, response } = await this.instance.sendMessage(messageType, body);
|
|
222
|
+
this.log.trace(`Call ${WorldStateMessageType[messageType]} took (ms)`, {
|
|
223
|
+
duration,
|
|
224
|
+
...logMetadata,
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
this.instrumentation.recordRoundTrip(duration.totalUs, messageType);
|
|
228
|
+
return response;
|
|
274
229
|
} catch (error) {
|
|
275
|
-
this.log.error(`Call
|
|
230
|
+
this.log.error(`Call ${WorldStateMessageType[messageType]} failed: ${error}`, error, logMetadata);
|
|
276
231
|
throw error;
|
|
277
232
|
}
|
|
278
|
-
|
|
279
|
-
const callEnd = process.hrtime.bigint();
|
|
280
|
-
|
|
281
|
-
const callDuration = Number(callEnd - encodingEnd) / 1_000_000;
|
|
282
|
-
|
|
283
|
-
const buf = Buffer.isBuffer(encodedResponse)
|
|
284
|
-
? encodedResponse
|
|
285
|
-
: isAnyArrayBuffer(encodedResponse)
|
|
286
|
-
? Buffer.from(encodedResponse)
|
|
287
|
-
: encodedResponse;
|
|
288
|
-
|
|
289
|
-
if (!Buffer.isBuffer(buf)) {
|
|
290
|
-
throw new TypeError(
|
|
291
|
-
'Invalid encoded response: expected Buffer or ArrayBuffer, got ' +
|
|
292
|
-
(encodedResponse === null ? 'null' : typeof encodedResponse),
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
const decodedResponse = this.decoder.unpack(buf);
|
|
297
|
-
if (!TypedMessage.isTypedMessageLike(decodedResponse)) {
|
|
298
|
-
throw new TypeError(
|
|
299
|
-
'Invalid response: expected TypedMessageLike, got ' +
|
|
300
|
-
(decodedResponse === null ? 'null' : typeof decodedResponse),
|
|
301
|
-
);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
const response = TypedMessage.fromMessagePack<T, WorldStateResponse[T]>(decodedResponse);
|
|
305
|
-
const decodingEnd = process.hrtime.bigint();
|
|
306
|
-
const decodingDuration = Number(decodingEnd - callEnd) / 1_000_000;
|
|
307
|
-
const totalDuration = Number(decodingEnd - start) / 1_000_000;
|
|
308
|
-
this.log.trace(`Call messageId=${messageId} ${WorldStateMessageType[messageType]} took (ms)`, {
|
|
309
|
-
totalDuration,
|
|
310
|
-
encodingDuration,
|
|
311
|
-
callDuration,
|
|
312
|
-
decodingDuration,
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
if (response.header.requestId !== request.header.messageId) {
|
|
316
|
-
throw new Error(
|
|
317
|
-
'Response ID does not match request: ' + response.header.requestId + ' != ' + request.header.messageId,
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
if (response.msgType !== messageType) {
|
|
322
|
-
throw new Error('Invalid response message type: ' + response.msgType + ' != ' + messageType);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
const callDurationUs = Number(callEnd - encodingEnd) / 1000;
|
|
326
|
-
this.instrumentation.recordRoundTrip(callDurationUs, messageType);
|
|
327
|
-
|
|
328
|
-
return response.value;
|
|
329
233
|
}
|
|
330
234
|
}
|
|
@@ -9,7 +9,7 @@ export class WorldStateVersion {
|
|
|
9
9
|
|
|
10
10
|
static async readVersion(filename: string) {
|
|
11
11
|
const versionData = await readFile(filename, 'utf-8').catch(() => undefined);
|
|
12
|
-
return versionData === undefined ? undefined : jsonParseWithSchema(versionData, WorldStateVersion.schema);
|
|
12
|
+
return versionData === undefined ? undefined : await jsonParseWithSchema(versionData, WorldStateVersion.schema);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
public async writeVersionFile(filename: string) {
|
|
@@ -170,7 +170,7 @@ export class ServerWorldStateSynchronizer
|
|
|
170
170
|
/** Returns the L2 block hash for a given number. Used by the L2BlockStream for detecting reorgs. */
|
|
171
171
|
public async getL2BlockHash(number: number): Promise<string | undefined> {
|
|
172
172
|
if (number === 0) {
|
|
173
|
-
return
|
|
173
|
+
return (await this.merkleTreeCommitted.getInitialHeader().hash()).toString();
|
|
174
174
|
}
|
|
175
175
|
if (this.latestBlockHashQuery?.hash === undefined || number !== this.latestBlockHashQuery.blockNumber) {
|
|
176
176
|
this.latestBlockHashQuery = {
|
|
@@ -257,7 +257,7 @@ export class ServerWorldStateSynchronizer
|
|
|
257
257
|
// Note that we cannot optimize this check by checking the root of the subtree after inserting the messages
|
|
258
258
|
// to the real L1_TO_L2_MESSAGE_TREE (like we do in merkleTreeDb.handleL2BlockAndMessages(...)) because that
|
|
259
259
|
// tree uses pedersen and we don't have access to the converted root.
|
|
260
|
-
this.verifyMessagesHashToInHash(l1ToL2Messages, l2Block.header.contentCommitment.inHash);
|
|
260
|
+
await this.verifyMessagesHashToInHash(l1ToL2Messages, l2Block.header.contentCommitment.inHash);
|
|
261
261
|
|
|
262
262
|
// If the above check succeeds, we can proceed to handle the block.
|
|
263
263
|
const result = await this.merkleTreeDb.handleL2BlockAndMessages(l2Block, l1ToL2Messages);
|
|
@@ -311,14 +311,14 @@ export class ServerWorldStateSynchronizer
|
|
|
311
311
|
* @param inHash - The inHash of the block.
|
|
312
312
|
* @throws If the L1 to L2 messages do not hash to the block inHash.
|
|
313
313
|
*/
|
|
314
|
-
protected verifyMessagesHashToInHash(l1ToL2Messages: Fr[], inHash: Buffer) {
|
|
315
|
-
const treeCalculator =
|
|
314
|
+
protected async verifyMessagesHashToInHash(l1ToL2Messages: Fr[], inHash: Buffer) {
|
|
315
|
+
const treeCalculator = await MerkleTreeCalculator.create(
|
|
316
316
|
L1_TO_L2_MSG_SUBTREE_HEIGHT,
|
|
317
317
|
Buffer.alloc(32),
|
|
318
|
-
new SHA256Trunc().hash,
|
|
318
|
+
(lhs, rhs) => Promise.resolve(new SHA256Trunc().hash(lhs, rhs)),
|
|
319
319
|
);
|
|
320
320
|
|
|
321
|
-
const root = treeCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer()));
|
|
321
|
+
const root = await treeCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer()));
|
|
322
322
|
|
|
323
323
|
if (!root.equals(inHash)) {
|
|
324
324
|
throw new Error('Obtained L1 to L2 messages failed to be hashed to the block inHash');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './utils.js';
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
export * from './merkle_trees.js';
|
|
2
1
|
export * from './merkle_tree_db.js';
|
|
3
|
-
export * from './merkle_tree_operations_facade.js';
|
|
4
|
-
export * from './merkle_tree_snapshot_operations_facade.js';
|
|
5
2
|
|
|
6
3
|
export { MerkleTreeReadOperations } from '@aztec/circuit-types/interfaces';
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { type Fr } from '@aztec/circuits.js';
|
|
3
|
-
import { type AppendOnlyTree, type IndexedTree } from '@aztec/merkle-tree';
|
|
4
|
-
export type MerkleTreeMap = {
|
|
5
|
-
[MerkleTreeId.NULLIFIER_TREE]: IndexedTree;
|
|
6
|
-
[MerkleTreeId.NOTE_HASH_TREE]: AppendOnlyTree<Fr>;
|
|
7
|
-
[MerkleTreeId.PUBLIC_DATA_TREE]: IndexedTree;
|
|
8
|
-
[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: AppendOnlyTree<Fr>;
|
|
9
|
-
[MerkleTreeId.ARCHIVE]: AppendOnlyTree<Fr>;
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=merkle_tree_map.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merkle_tree_map.d.ts","sourceRoot":"","sources":["../../src/world-state-db/merkle_tree_map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC;IAC3C,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC7C,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;CAC5C,CAAC"}
|