@aztec/world-state 0.54.0 → 0.55.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.
@@ -0,0 +1,2 @@
1
+ export * from './native_world_state.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/native/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './native_world_state.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUMifQ==
@@ -0,0 +1,176 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { MerkleTreeId } from '@aztec/circuit-types';
3
+ import { AppendOnlyTreeSnapshot, Fr, type StateReference, type UInt32 } from '@aztec/circuits.js';
4
+ import { type Tuple } from '@aztec/foundation/serialize';
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
+ export declare class MessageHeader {
12
+ /** An number to identify this message */
13
+ readonly messageId: number;
14
+ /** If this message is a response to a request, the messageId of the request */
15
+ readonly requestId: number;
16
+ constructor({ messageId, requestId }: MessageHeaderInit);
17
+ static fromMessagePack(data: object): MessageHeader;
18
+ }
19
+ interface TypedMessageLike {
20
+ msgType: number;
21
+ header: {
22
+ messageId?: number;
23
+ requestId?: number;
24
+ };
25
+ value: any;
26
+ }
27
+ export declare class TypedMessage<T, B> {
28
+ readonly msgType: T;
29
+ readonly header: MessageHeader;
30
+ readonly value: B;
31
+ constructor(msgType: T, header: MessageHeader, value: B);
32
+ static fromMessagePack<T, B>(data: TypedMessageLike): TypedMessage<T, B>;
33
+ static isTypedMessageLike(obj: any): obj is TypedMessageLike;
34
+ }
35
+ export declare enum WorldStateMessageType {
36
+ GET_TREE_INFO = 100,
37
+ GET_STATE_REFERENCE = 101,
38
+ GET_LEAF_VALUE = 102,
39
+ GET_LEAF_PREIMAGE = 103,
40
+ GET_SIBLING_PATH = 104,
41
+ FIND_LEAF_INDEX = 105,
42
+ FIND_LOW_LEAF = 106,
43
+ APPEND_LEAVES = 107,
44
+ BATCH_INSERT = 108,
45
+ UPDATE_ARCHIVE = 109,
46
+ COMMIT = 110,
47
+ ROLLBACK = 111,
48
+ SYNC_BLOCK = 112
49
+ }
50
+ interface WithTreeId {
51
+ treeId: MerkleTreeId;
52
+ }
53
+ interface WithWorldStateRevision {
54
+ revision: WorldStateRevision;
55
+ }
56
+ interface WithLeafIndex {
57
+ leafIndex: bigint;
58
+ }
59
+ export type SerializedLeafValue = Buffer | {
60
+ value: Buffer;
61
+ } | {
62
+ value: Buffer;
63
+ slot: Buffer;
64
+ };
65
+ export type SerializedIndexedLeaf = {
66
+ value: Exclude<SerializedLeafValue, Buffer>;
67
+ nextIndex: bigint | number;
68
+ nextValue: Buffer;
69
+ };
70
+ interface WithLeafValue {
71
+ leaf: SerializedLeafValue;
72
+ }
73
+ interface WithLeaves {
74
+ leaves: SerializedLeafValue[];
75
+ }
76
+ interface GetTreeInfoRequest extends WithTreeId, WithWorldStateRevision {
77
+ }
78
+ interface GetTreeInfoResponse {
79
+ treeId: MerkleTreeId;
80
+ depth: UInt32;
81
+ size: bigint | number;
82
+ root: Buffer;
83
+ }
84
+ interface GetSiblingPathRequest extends WithTreeId, WithLeafIndex, WithWorldStateRevision {
85
+ }
86
+ type GetSiblingPathResponse = Buffer[];
87
+ interface GetStateReferenceRequest extends WithWorldStateRevision {
88
+ }
89
+ interface GetStateReferenceResponse {
90
+ state: Record<MerkleTreeId, TreeStateReference>;
91
+ }
92
+ interface GetLeafRequest extends WithTreeId, WithWorldStateRevision, WithLeafIndex {
93
+ }
94
+ type GetLeafResponse = SerializedLeafValue | undefined;
95
+ interface GetLeafPreImageRequest extends WithTreeId, WithLeafIndex, WithWorldStateRevision {
96
+ }
97
+ type GetLeafPreImageResponse = SerializedIndexedLeaf | undefined;
98
+ interface FindLeafIndexRequest extends WithTreeId, WithLeafValue, WithWorldStateRevision {
99
+ startIndex: bigint;
100
+ }
101
+ type FindLeafIndexResponse = bigint | null;
102
+ interface FindLowLeafRequest extends WithTreeId, WithWorldStateRevision {
103
+ key: Fr;
104
+ }
105
+ interface FindLowLeafResponse {
106
+ index: bigint | number;
107
+ alreadyPresent: boolean;
108
+ }
109
+ interface AppendLeavesRequest extends WithTreeId, WithLeaves {
110
+ }
111
+ interface BatchInsertRequest extends WithTreeId, WithLeaves {
112
+ subtreeDepth: number;
113
+ }
114
+ interface BatchInsertResponse {
115
+ low_leaf_witness_data: ReadonlyArray<{
116
+ leaf: SerializedIndexedLeaf;
117
+ index: bigint | number;
118
+ path: Tuple<Buffer, number>;
119
+ }>;
120
+ sorted_leaves: ReadonlyArray<[SerializedLeafValue, UInt32]>;
121
+ subtree_path: Tuple<Buffer, number>;
122
+ }
123
+ interface UpdateArchiveRequest {
124
+ blockStateRef: BlockStateReference;
125
+ blockHash: Buffer;
126
+ }
127
+ interface SyncBlockRequest {
128
+ blockStateRef: BlockStateReference;
129
+ blockHash: Fr;
130
+ paddedNoteHashes: readonly SerializedLeafValue[];
131
+ paddedL1ToL2Messages: readonly SerializedLeafValue[];
132
+ paddedNullifiers: readonly SerializedLeafValue[];
133
+ batchesOfPaddedPublicDataWrites: readonly SerializedLeafValue[][];
134
+ }
135
+ interface SyncBlockResponse {
136
+ isBlockOurs: boolean;
137
+ }
138
+ export type WorldStateRequest = {
139
+ [WorldStateMessageType.GET_TREE_INFO]: GetTreeInfoRequest;
140
+ [WorldStateMessageType.GET_STATE_REFERENCE]: GetStateReferenceRequest;
141
+ [WorldStateMessageType.GET_LEAF_VALUE]: GetLeafRequest;
142
+ [WorldStateMessageType.GET_LEAF_PREIMAGE]: GetLeafPreImageRequest;
143
+ [WorldStateMessageType.GET_SIBLING_PATH]: GetSiblingPathRequest;
144
+ [WorldStateMessageType.FIND_LEAF_INDEX]: FindLeafIndexRequest;
145
+ [WorldStateMessageType.FIND_LOW_LEAF]: FindLowLeafRequest;
146
+ [WorldStateMessageType.APPEND_LEAVES]: AppendLeavesRequest;
147
+ [WorldStateMessageType.BATCH_INSERT]: BatchInsertRequest;
148
+ [WorldStateMessageType.UPDATE_ARCHIVE]: UpdateArchiveRequest;
149
+ [WorldStateMessageType.COMMIT]: void;
150
+ [WorldStateMessageType.ROLLBACK]: void;
151
+ [WorldStateMessageType.SYNC_BLOCK]: SyncBlockRequest;
152
+ };
153
+ export type WorldStateResponse = {
154
+ [WorldStateMessageType.GET_TREE_INFO]: GetTreeInfoResponse;
155
+ [WorldStateMessageType.GET_STATE_REFERENCE]: GetStateReferenceResponse;
156
+ [WorldStateMessageType.GET_LEAF_VALUE]: GetLeafResponse;
157
+ [WorldStateMessageType.GET_LEAF_PREIMAGE]: GetLeafPreImageResponse;
158
+ [WorldStateMessageType.GET_SIBLING_PATH]: GetSiblingPathResponse;
159
+ [WorldStateMessageType.FIND_LEAF_INDEX]: FindLeafIndexResponse;
160
+ [WorldStateMessageType.FIND_LOW_LEAF]: FindLowLeafResponse;
161
+ [WorldStateMessageType.APPEND_LEAVES]: void;
162
+ [WorldStateMessageType.BATCH_INSERT]: BatchInsertResponse;
163
+ [WorldStateMessageType.UPDATE_ARCHIVE]: void;
164
+ [WorldStateMessageType.COMMIT]: void;
165
+ [WorldStateMessageType.ROLLBACK]: void;
166
+ [WorldStateMessageType.SYNC_BLOCK]: SyncBlockResponse;
167
+ };
168
+ export type WorldStateRevision = -1 | 0 | UInt32;
169
+ export declare function worldStateRevision(includeUncommittedOrBlock: false | true | number): WorldStateRevision;
170
+ type TreeStateReference = readonly [Buffer, number | bigint];
171
+ type BlockStateReference = Map<Exclude<MerkleTreeId, MerkleTreeId.ARCHIVE>, TreeStateReference>;
172
+ export declare function treeStateReferenceToSnapshot([root, size]: TreeStateReference): AppendOnlyTreeSnapshot;
173
+ export declare function treeStateReference(snapshot: AppendOnlyTreeSnapshot): readonly [Buffer, bigint];
174
+ export declare function blockStateReference(state: StateReference): BlockStateReference;
175
+ export {};
176
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/native/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { MerkleTreeId } from '@aztec/circuit-types';
2
+ import { AppendOnlyTreeSnapshot, Fr, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
3
+ export class MessageHeader {
4
+ constructor({ messageId, requestId }) {
5
+ this.messageId = messageId ?? 0;
6
+ this.requestId = requestId ?? 0;
7
+ }
8
+ static fromMessagePack(data) {
9
+ return new MessageHeader(data);
10
+ }
11
+ }
12
+ export class TypedMessage {
13
+ constructor(msgType, header, value) {
14
+ this.msgType = msgType;
15
+ this.header = header;
16
+ this.value = value;
17
+ }
18
+ static fromMessagePack(data) {
19
+ return new TypedMessage(data['msgType'], MessageHeader.fromMessagePack(data['header']), data['value']);
20
+ }
21
+ static isTypedMessageLike(obj) {
22
+ return typeof obj === 'object' && obj !== null && 'msgType' in obj && 'header' in obj && 'value' in obj;
23
+ }
24
+ }
25
+ export var WorldStateMessageType;
26
+ (function (WorldStateMessageType) {
27
+ WorldStateMessageType[WorldStateMessageType["GET_TREE_INFO"] = 100] = "GET_TREE_INFO";
28
+ WorldStateMessageType[WorldStateMessageType["GET_STATE_REFERENCE"] = 101] = "GET_STATE_REFERENCE";
29
+ WorldStateMessageType[WorldStateMessageType["GET_LEAF_VALUE"] = 102] = "GET_LEAF_VALUE";
30
+ WorldStateMessageType[WorldStateMessageType["GET_LEAF_PREIMAGE"] = 103] = "GET_LEAF_PREIMAGE";
31
+ WorldStateMessageType[WorldStateMessageType["GET_SIBLING_PATH"] = 104] = "GET_SIBLING_PATH";
32
+ WorldStateMessageType[WorldStateMessageType["FIND_LEAF_INDEX"] = 105] = "FIND_LEAF_INDEX";
33
+ WorldStateMessageType[WorldStateMessageType["FIND_LOW_LEAF"] = 106] = "FIND_LOW_LEAF";
34
+ WorldStateMessageType[WorldStateMessageType["APPEND_LEAVES"] = 107] = "APPEND_LEAVES";
35
+ WorldStateMessageType[WorldStateMessageType["BATCH_INSERT"] = 108] = "BATCH_INSERT";
36
+ WorldStateMessageType[WorldStateMessageType["UPDATE_ARCHIVE"] = 109] = "UPDATE_ARCHIVE";
37
+ WorldStateMessageType[WorldStateMessageType["COMMIT"] = 110] = "COMMIT";
38
+ WorldStateMessageType[WorldStateMessageType["ROLLBACK"] = 111] = "ROLLBACK";
39
+ WorldStateMessageType[WorldStateMessageType["SYNC_BLOCK"] = 112] = "SYNC_BLOCK";
40
+ })(WorldStateMessageType || (WorldStateMessageType = {}));
41
+ export function worldStateRevision(includeUncommittedOrBlock) {
42
+ if (typeof includeUncommittedOrBlock === 'number') {
43
+ if (includeUncommittedOrBlock < INITIAL_L2_BLOCK_NUM || !Number.isInteger(includeUncommittedOrBlock)) {
44
+ throw new TypeError('Invalid block number: ' + includeUncommittedOrBlock);
45
+ }
46
+ return includeUncommittedOrBlock;
47
+ }
48
+ else if (includeUncommittedOrBlock) {
49
+ return -1;
50
+ }
51
+ else {
52
+ return 0;
53
+ }
54
+ }
55
+ export function treeStateReferenceToSnapshot([root, size]) {
56
+ return new AppendOnlyTreeSnapshot(Fr.fromBuffer(root), Number(size));
57
+ }
58
+ export function treeStateReference(snapshot) {
59
+ return [snapshot.root.toBuffer(), BigInt(snapshot.nextAvailableLeafIndex)];
60
+ }
61
+ export function blockStateReference(state) {
62
+ return new Map([
63
+ [MerkleTreeId.NULLIFIER_TREE, treeStateReference(state.partial.nullifierTree)],
64
+ [MerkleTreeId.NOTE_HASH_TREE, treeStateReference(state.partial.noteHashTree)],
65
+ [MerkleTreeId.PUBLIC_DATA_TREE, treeStateReference(state.partial.publicDataTree)],
66
+ [MerkleTreeId.L1_TO_L2_MESSAGE_TREE, treeStateReference(state.l1ToL2MessageTree)],
67
+ ]);
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYXRpdmUvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBb0MsTUFBTSxvQkFBb0IsQ0FBQztBQVV4SCxNQUFNLE9BQU8sYUFBYTtJQU14QixZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBcUI7UUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBeUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRjtBQVdELE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQW1DLE9BQVUsRUFBa0IsTUFBcUIsRUFBa0IsS0FBUTtRQUEzRSxZQUFPLEdBQVAsT0FBTyxDQUFHO1FBQWtCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBa0IsVUFBSyxHQUFMLEtBQUssQ0FBRztJQUFHLENBQUM7SUFFbEgsTUFBTSxDQUFDLGVBQWUsQ0FBTyxJQUFzQjtRQUNqRCxPQUFPLElBQUksWUFBWSxDQUFPLElBQUksQ0FBQyxTQUFTLENBQU0sRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBUTtRQUNoQyxPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxDQUFDO0lBQzFHLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBTixJQUFZLHFCQW9CWDtBQXBCRCxXQUFZLHFCQUFxQjtJQUMvQixxRkFBbUIsQ0FBQTtJQUNuQixpR0FBbUIsQ0FBQTtJQUVuQix1RkFBYyxDQUFBO0lBQ2QsNkZBQWlCLENBQUE7SUFDakIsMkZBQWdCLENBQUE7SUFFaEIseUZBQWUsQ0FBQTtJQUNmLHFGQUFhLENBQUE7SUFFYixxRkFBYSxDQUFBO0lBQ2IsbUZBQVksQ0FBQTtJQUVaLHVGQUFjLENBQUE7SUFFZCx1RUFBTSxDQUFBO0lBQ04sMkVBQVEsQ0FBQTtJQUVSLCtFQUFVLENBQUE7QUFDWixDQUFDLEVBcEJXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFvQmhDO0FBa0pELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyx5QkFBZ0Q7SUFDakYsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xELElBQUkseUJBQXlCLEdBQUcsb0JBQW9CLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztZQUNyRyxNQUFNLElBQUksU0FBUyxDQUFDLHdCQUF3QixHQUFHLHlCQUF5QixDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELE9BQU8seUJBQXlCLENBQUM7SUFDbkMsQ0FBQztTQUFNLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDSCxDQUFDO0FBS0QsTUFBTSxVQUFVLDRCQUE0QixDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBcUI7SUFDM0UsT0FBTyxJQUFJLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUFnQztJQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQVUsQ0FBQztBQUN0RixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQXFCO0lBQ3ZELE9BQU8sSUFBSSxHQUFHLENBQUM7UUFDYixDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ2xGLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
@@ -0,0 +1,44 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { type BatchInsertionResult, type HandleL2BlockAndMessagesResult, type IndexedTreeId, type L2Block, type MerkleTreeAdminOperations, MerkleTreeId, type MerkleTreeLeafType, SiblingPath, type TreeInfo } from '@aztec/circuit-types';
3
+ import { Fr, Header, NullifierLeafPreimage, StateReference } from '@aztec/circuits.js';
4
+ import type { IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
5
+ import { type MerkleTreeDb, type TreeSnapshots } from '../world-state-db/merkle_tree_db.js';
6
+ export interface NativeInstance {
7
+ call(msg: Buffer | Uint8Array): Promise<any>;
8
+ }
9
+ export declare class NativeWorldStateService implements MerkleTreeDb {
10
+ private instance;
11
+ private nextMessageId;
12
+ private encoder;
13
+ private decoder;
14
+ private queue;
15
+ protected constructor(instance: NativeInstance);
16
+ static create(dataDir: string, libraryName?: string, className?: string): Promise<NativeWorldStateService>;
17
+ protected init(): Promise<void>;
18
+ asLatest(): MerkleTreeAdminOperations;
19
+ getInitialHeader(): Header;
20
+ appendLeaves<ID extends MerkleTreeId>(treeId: ID, leaves: MerkleTreeLeafType<ID>[]): Promise<void>;
21
+ batchInsert<TreeHeight extends number, SubtreeSiblingPathHeight extends number, ID extends IndexedTreeId>(treeId: ID, rawLeaves: Buffer[], subtreeHeight: number): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>>;
22
+ commit(): Promise<void>;
23
+ findLeafIndex(treeId: MerkleTreeId, value: MerkleTreeLeafType<MerkleTreeId>, includeUncommitted: boolean): Promise<bigint | undefined>;
24
+ findLeafIndexAfter(treeId: MerkleTreeId, leaf: MerkleTreeLeafType<MerkleTreeId>, startIndex: bigint, includeUncommitted: boolean): Promise<bigint | undefined>;
25
+ getLeafPreimage(treeId: IndexedTreeId, leafIndex: bigint, args: boolean): Promise<IndexedTreeLeafPreimage | undefined>;
26
+ getLeafValue(treeId: MerkleTreeId, leafIndex: bigint, includeUncommitted: boolean): Promise<MerkleTreeLeafType<MerkleTreeId> | undefined>;
27
+ getPreviousValueIndex(treeId: IndexedTreeId, value: bigint, includeUncommitted: boolean): Promise<{
28
+ index: bigint;
29
+ alreadyPresent: boolean;
30
+ } | undefined>;
31
+ getSiblingPath(treeId: MerkleTreeId, leafIndex: bigint, includeUncommitted: boolean): Promise<SiblingPath<number>>;
32
+ getSnapshot(_block: number): Promise<TreeSnapshots>;
33
+ getStateReference(includeUncommitted: boolean): Promise<StateReference>;
34
+ getTreeInfo(treeId: MerkleTreeId, includeUncommitted: boolean): Promise<TreeInfo>;
35
+ handleL2BlockAndMessages(l2Block: L2Block, l1ToL2Messages: Fr[]): Promise<HandleL2BlockAndMessagesResult>;
36
+ rollback(): Promise<void>;
37
+ updateArchive(header: Header, _includeUncommitted: boolean): Promise<void>;
38
+ updateLeaf<ID extends IndexedTreeId>(_treeId: ID, _leaf: NullifierLeafPreimage | Buffer, _index: bigint): Promise<void>;
39
+ private call;
40
+ stop(): Promise<void>;
41
+ delete(): Promise<void>;
42
+ fork(): Promise<MerkleTreeDb>;
43
+ }
44
+ //# sourceMappingURL=native_world_state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native_world_state.d.ts","sourceRoot":"","sources":["../../src/native/native_world_state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ import { MerkleTreeId, SiblingPath, TxEffect, } from '@aztec/circuit-types';
2
+ import { Fr, Header, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeaf, NullifierLeafPreimage, PartialStateReference, PublicDataTreeLeaf, PublicDataTreeLeafPreimage, StateReference, } from '@aztec/circuits.js';
3
+ import { padArrayEnd } from '@aztec/foundation/collection';
4
+ import { SerialQueue } from '@aztec/foundation/queue';
5
+ import { serializeToBuffer } from '@aztec/foundation/serialize';
6
+ import bindings from 'bindings';
7
+ import { Decoder, Encoder, addExtension } from 'msgpackr';
8
+ import { isAnyArrayBuffer } from 'util/types';
9
+ import { MerkleTreeAdminOperationsFacade } from '../world-state-db/merkle_tree_operations_facade.js';
10
+ import { MessageHeader, TypedMessage, WorldStateMessageType, blockStateReference, treeStateReferenceToSnapshot, worldStateRevision, } from './message.js';
11
+ // small extension to pack an NodeJS Fr instance to a representation that the C++ code can understand
12
+ // this only works for writes. Unpacking from C++ can't create Fr instances because the data is passed
13
+ // as raw, untagged, buffers. On the NodeJS side we don't know what the buffer represents
14
+ // Adding a tag would be a solution, but it would have to be done on both sides and it's unclear where else
15
+ // C++ fr instances are sent/received/stored.
16
+ addExtension({
17
+ Class: Fr,
18
+ write: fr => fr.toBuffer(),
19
+ });
20
+ export class NativeWorldStateService {
21
+ constructor(instance) {
22
+ this.instance = instance;
23
+ this.nextMessageId = 1;
24
+ this.encoder = new Encoder({
25
+ // always encode JS objects as MessagePack maps
26
+ // this makes it compatible with other MessagePack decoders
27
+ useRecords: false,
28
+ int64AsType: 'bigint',
29
+ });
30
+ this.decoder = new Decoder({
31
+ useRecords: false,
32
+ int64AsType: 'bigint',
33
+ });
34
+ this.queue = new SerialQueue();
35
+ this.queue.start();
36
+ }
37
+ static async create(dataDir, libraryName = 'world_state_napi', className = 'WorldState') {
38
+ const library = bindings(libraryName);
39
+ const instance = new library[className](dataDir);
40
+ const worldState = new NativeWorldStateService(instance);
41
+ await worldState.init();
42
+ return worldState;
43
+ }
44
+ async init() {
45
+ const archive = await this.getTreeInfo(MerkleTreeId.ARCHIVE, false);
46
+ if (archive.size === 0n) {
47
+ // TODO (alexg) move this to the native module
48
+ // const header = await this.buildInitialHeader(true);
49
+ // await this.appendLeaves(MerkleTreeId.ARCHIVE, [header.hash()]);
50
+ // await this.commit();
51
+ }
52
+ }
53
+ asLatest() {
54
+ return new MerkleTreeAdminOperationsFacade(this, true);
55
+ }
56
+ // async buildInitialHeader(ic: boolean = false): Promise<Header> {
57
+ // const state = await this.getStateReference(ic);
58
+ // return new Header(
59
+ // AppendOnlyTreeSnapshot.zero(),
60
+ // ContentCommitment.empty(),
61
+ // state,
62
+ // GlobalVariables.empty(),
63
+ // Fr.ZERO,
64
+ // );
65
+ // }
66
+ getInitialHeader() {
67
+ // TODO (alexg) implement this
68
+ return Header.empty();
69
+ }
70
+ async appendLeaves(treeId, leaves) {
71
+ await this.call(WorldStateMessageType.APPEND_LEAVES, {
72
+ leaves: leaves.map(leaf => leaf),
73
+ treeId,
74
+ });
75
+ }
76
+ async batchInsert(treeId, rawLeaves, subtreeHeight) {
77
+ const leaves = rawLeaves.map((leaf) => hydrateLeaf(treeId, leaf)).map(serializeLeaf);
78
+ const resp = await this.call(WorldStateMessageType.BATCH_INSERT, { leaves, treeId, subtreeDepth: subtreeHeight });
79
+ return {
80
+ newSubtreeSiblingPath: new SiblingPath(resp.subtree_path.length, resp.subtree_path),
81
+ sortedNewLeaves: resp.sorted_leaves
82
+ .map(([leaf]) => leaf)
83
+ .map(deserializeLeafValue)
84
+ .map(serializeToBuffer),
85
+ sortedNewLeavesIndexes: resp.sorted_leaves.map(([, index]) => index),
86
+ lowLeavesWitnessData: resp.low_leaf_witness_data.map(data => ({
87
+ index: BigInt(data.index),
88
+ leafPreimage: deserializeIndexedLeaf(data.leaf),
89
+ siblingPath: new SiblingPath(data.path.length, data.path),
90
+ })),
91
+ };
92
+ }
93
+ async commit() {
94
+ await this.call(WorldStateMessageType.COMMIT, void 0);
95
+ }
96
+ findLeafIndex(treeId, value, includeUncommitted) {
97
+ return this.findLeafIndexAfter(treeId, value, 0n, includeUncommitted);
98
+ }
99
+ async findLeafIndexAfter(treeId, leaf, startIndex, includeUncommitted) {
100
+ const index = await this.call(WorldStateMessageType.FIND_LEAF_INDEX, {
101
+ leaf: serializeLeaf(hydrateLeaf(treeId, leaf)),
102
+ revision: worldStateRevision(includeUncommitted),
103
+ treeId,
104
+ startIndex,
105
+ });
106
+ if (typeof index === 'number' || typeof index === 'bigint') {
107
+ return BigInt(index);
108
+ }
109
+ else {
110
+ return undefined;
111
+ }
112
+ }
113
+ async getLeafPreimage(treeId, leafIndex, args) {
114
+ const resp = await this.call(WorldStateMessageType.GET_LEAF_PREIMAGE, {
115
+ leafIndex,
116
+ revision: worldStateRevision(args),
117
+ treeId,
118
+ });
119
+ return resp ? deserializeIndexedLeaf(resp) : undefined;
120
+ }
121
+ async getLeafValue(treeId, leafIndex, includeUncommitted) {
122
+ const resp = await this.call(WorldStateMessageType.GET_LEAF_VALUE, {
123
+ leafIndex,
124
+ revision: worldStateRevision(includeUncommitted),
125
+ treeId,
126
+ });
127
+ if (!resp) {
128
+ return undefined;
129
+ }
130
+ const leaf = deserializeLeafValue(resp);
131
+ if (leaf instanceof Fr) {
132
+ return leaf;
133
+ }
134
+ else {
135
+ return leaf.toBuffer();
136
+ }
137
+ }
138
+ async getPreviousValueIndex(treeId, value, includeUncommitted) {
139
+ const resp = await this.call(WorldStateMessageType.FIND_LOW_LEAF, {
140
+ key: new Fr(value),
141
+ revision: worldStateRevision(includeUncommitted),
142
+ treeId,
143
+ });
144
+ return {
145
+ alreadyPresent: resp.alreadyPresent,
146
+ index: BigInt(resp.index),
147
+ };
148
+ }
149
+ async getSiblingPath(treeId, leafIndex, includeUncommitted) {
150
+ const siblingPath = await this.call(WorldStateMessageType.GET_SIBLING_PATH, {
151
+ leafIndex,
152
+ revision: worldStateRevision(includeUncommitted),
153
+ treeId,
154
+ });
155
+ return new SiblingPath(siblingPath.length, siblingPath);
156
+ }
157
+ getSnapshot(_block) {
158
+ return Promise.reject(new Error('getSnapshot not implemented'));
159
+ }
160
+ async getStateReference(includeUncommitted) {
161
+ const resp = await this.call(WorldStateMessageType.GET_STATE_REFERENCE, {
162
+ revision: worldStateRevision(includeUncommitted),
163
+ });
164
+ return new StateReference(treeStateReferenceToSnapshot(resp.state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]), new PartialStateReference(treeStateReferenceToSnapshot(resp.state[MerkleTreeId.NOTE_HASH_TREE]), treeStateReferenceToSnapshot(resp.state[MerkleTreeId.NULLIFIER_TREE]), treeStateReferenceToSnapshot(resp.state[MerkleTreeId.PUBLIC_DATA_TREE])));
165
+ }
166
+ async getTreeInfo(treeId, includeUncommitted) {
167
+ const resp = await this.call(WorldStateMessageType.GET_TREE_INFO, {
168
+ treeId: treeId,
169
+ revision: worldStateRevision(includeUncommitted),
170
+ });
171
+ return {
172
+ depth: resp.depth,
173
+ root: resp.root,
174
+ size: BigInt(resp.size),
175
+ treeId,
176
+ };
177
+ }
178
+ async handleL2BlockAndMessages(l2Block, l1ToL2Messages) {
179
+ // We have to pad both the tx effects and the values within tx effects because that's how the trees are built
180
+ // by circuits.
181
+ const paddedTxEffects = padArrayEnd(l2Block.body.txEffects, TxEffect.empty(), l2Block.body.numberOfTxsIncludingPadded);
182
+ const paddedNoteHashes = paddedTxEffects.flatMap(txEffect => padArrayEnd(txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX));
183
+ const paddedL1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
184
+ const paddedNullifiers = paddedTxEffects
185
+ .flatMap(txEffect => padArrayEnd(txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX))
186
+ .map(nullifier => new NullifierLeaf(nullifier));
187
+ // We insert the public data tree leaves with one batch per tx to avoid updating the same key twice
188
+ const batchesOfPaddedPublicDataWrites = [];
189
+ for (const txEffect of paddedTxEffects) {
190
+ const batch = Array(MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX).fill(PublicDataTreeLeaf.empty());
191
+ for (const [i, write] of txEffect.publicDataWrites.entries()) {
192
+ batch[i] = new PublicDataTreeLeaf(write.leafIndex, write.newValue);
193
+ }
194
+ batchesOfPaddedPublicDataWrites.push(batch);
195
+ }
196
+ return await this.call(WorldStateMessageType.SYNC_BLOCK, {
197
+ blockHash: l2Block.hash(),
198
+ paddedL1ToL2Messages: paddedL1ToL2Messages.map(serializeLeaf),
199
+ paddedNoteHashes: paddedNoteHashes.map(serializeLeaf),
200
+ paddedNullifiers: paddedNullifiers.map(serializeLeaf),
201
+ batchesOfPaddedPublicDataWrites: batchesOfPaddedPublicDataWrites.map(batch => batch.map(serializeLeaf)),
202
+ blockStateRef: blockStateReference(l2Block.header.state),
203
+ });
204
+ }
205
+ async rollback() {
206
+ await this.call(WorldStateMessageType.ROLLBACK, void 0);
207
+ }
208
+ async updateArchive(header, _includeUncommitted) {
209
+ await this.call(WorldStateMessageType.UPDATE_ARCHIVE, {
210
+ blockHash: header.hash().toBuffer(),
211
+ blockStateRef: blockStateReference(header.state),
212
+ });
213
+ }
214
+ updateLeaf(_treeId, _leaf, _index) {
215
+ return Promise.reject(new Error('Method not implemented'));
216
+ }
217
+ call(messageType, body) {
218
+ return this.queue.put(async () => {
219
+ const request = new TypedMessage(messageType, new MessageHeader({ messageId: this.nextMessageId++ }), body);
220
+ const encodedRequest = this.encoder.encode(request);
221
+ const encodedResponse = await this.instance.call(encodedRequest);
222
+ const buf = Buffer.isBuffer(encodedResponse)
223
+ ? encodedResponse
224
+ : isAnyArrayBuffer(encodedResponse)
225
+ ? Buffer.from(encodedResponse)
226
+ : encodedResponse;
227
+ if (!Buffer.isBuffer(buf)) {
228
+ throw new TypeError('Invalid encoded response: expected Buffer or ArrayBuffer, got ' +
229
+ (encodedResponse === null ? 'null' : typeof encodedResponse));
230
+ }
231
+ const decodedResponse = this.decoder.unpack(buf);
232
+ if (!TypedMessage.isTypedMessageLike(decodedResponse)) {
233
+ throw new TypeError('Invalid response: expected TypedMessageLike, got ' +
234
+ (decodedResponse === null ? 'null' : typeof decodedResponse));
235
+ }
236
+ const response = TypedMessage.fromMessagePack(decodedResponse);
237
+ if (response.header.requestId !== request.header.messageId) {
238
+ throw new Error('Response ID does not match request: ' + response.header.requestId + ' != ' + request.header.messageId);
239
+ }
240
+ if (response.msgType !== messageType) {
241
+ throw new Error('Invalid response message type: ' + response.msgType + ' != ' + messageType);
242
+ }
243
+ return response.value;
244
+ });
245
+ }
246
+ async stop() {
247
+ await this.queue.end();
248
+ }
249
+ delete() {
250
+ return Promise.reject(new Error('Method not implemented'));
251
+ }
252
+ fork() {
253
+ return Promise.reject(new Error('Method not implemented'));
254
+ }
255
+ }
256
+ function hydrateLeaf(treeId, leaf) {
257
+ if (leaf instanceof Fr) {
258
+ return leaf;
259
+ }
260
+ else if (treeId === MerkleTreeId.NULLIFIER_TREE) {
261
+ return NullifierLeaf.fromBuffer(leaf);
262
+ }
263
+ else if (treeId === MerkleTreeId.PUBLIC_DATA_TREE) {
264
+ return PublicDataTreeLeaf.fromBuffer(leaf);
265
+ }
266
+ else {
267
+ return Fr.fromBuffer(leaf);
268
+ }
269
+ }
270
+ function serializeLeaf(leaf) {
271
+ if (leaf instanceof Fr) {
272
+ return leaf.toBuffer();
273
+ }
274
+ else if (leaf instanceof NullifierLeaf) {
275
+ return { value: leaf.nullifier.toBuffer() };
276
+ }
277
+ else {
278
+ return { value: leaf.value.toBuffer(), slot: leaf.slot.toBuffer() };
279
+ }
280
+ }
281
+ function deserializeLeafValue(leaf) {
282
+ if (Buffer.isBuffer(leaf)) {
283
+ return Fr.fromBuffer(leaf);
284
+ }
285
+ else if ('slot' in leaf) {
286
+ return new PublicDataTreeLeaf(Fr.fromBuffer(leaf.slot), Fr.fromBuffer(leaf.value));
287
+ }
288
+ else {
289
+ return new NullifierLeaf(Fr.fromBuffer(leaf.value));
290
+ }
291
+ }
292
+ function deserializeIndexedLeaf(leaf) {
293
+ if ('slot' in leaf.value) {
294
+ return new PublicDataTreeLeafPreimage(Fr.fromBuffer(leaf.value.slot), Fr.fromBuffer(leaf.value.value), Fr.fromBuffer(leaf.nextValue), BigInt(leaf.nextIndex));
295
+ }
296
+ else if ('value' in leaf.value) {
297
+ return new NullifierLeafPreimage(Fr.fromBuffer(leaf.value.value), Fr.fromBuffer(leaf.nextValue), BigInt(leaf.nextIndex));
298
+ }
299
+ else {
300
+ throw new Error('Invalid leaf type');
301
+ }
302
+ }
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3dvcmxkX3N0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9uYXRpdmVfd29ybGRfc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU1MLFlBQVksRUFFWixXQUFXLEVBRVgsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLEVBQUUsRUFDRixNQUFNLEVBQ04sc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw0Q0FBNEMsRUFDNUMsbUNBQW1DLEVBQ25DLGFBQWEsRUFDYixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQiwwQkFBMEIsRUFDMUIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdoRSxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUc5QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRyxPQUFPLEVBQ0wsYUFBYSxFQUdiLFlBQVksRUFDWixxQkFBcUIsRUFHckIsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixrQkFBa0IsR0FDbkIsTUFBTSxjQUFjLENBQUM7QUFFdEIscUdBQXFHO0FBQ3JHLHNHQUFzRztBQUN0Ryx5RkFBeUY7QUFDekYsMkdBQTJHO0FBQzNHLDZDQUE2QztBQUM3QyxZQUFZLENBQUM7SUFDWCxLQUFLLEVBQUUsRUFBRTtJQUNULEtBQUss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